Hallo!
Ich möchte gerne Messdaten von einem Massflowmeter(MTC) die ich über den Seriellen Port ziehe in einer Form darstellen und dann später auch mal in einer Datei abspeichern um sie in Excel etc. weiter zu verarbeiten!
Laut Handbuch kommen die Daten per stream und in Ascii. Ein COM Port Prog hat folgendes ausgegeben!(siehe Dateianhänge!)
Die Daten sollten wohl so kommen: Druck, Temp(Kelvin), Volumenstrom l/min., Massenstrom Standartliter/min., Sollwerte(unwichtig), eingestellte Gasart(Air,Methan,etc.).
Anhand der Angaben und meiner niederen VB Kenntnisse habe mir auch schon ein Programm zusammen gezimmert das allerdings auch nur gut die Hälfte von dem tut was ich will.
Ich hab's wohl hinbekommen das mir Volumendurchfluss und Massenstrom angezeigt wird aber die anderen bekomm ich aus dem Datenstrom nicht herausgefischt!
Die COM Verbindung tut aber ich hab das Gefühl das was fehlt!
Ich hoffe es hat einer von Euch genügend Nerven und Zeit mir zu helfen den richtigen Weg zu finden!
Den Code hab ich unten reingepackt!
Danke für die Hilfe und meine Aufnahme in die Gemeinschaft!
Andreas
Ich möchte gerne Messdaten von einem Massflowmeter(MTC) die ich über den Seriellen Port ziehe in einer Form darstellen und dann später auch mal in einer Datei abspeichern um sie in Excel etc. weiter zu verarbeiten!
Laut Handbuch kommen die Daten per stream und in Ascii. Ein COM Port Prog hat folgendes ausgegeben!(siehe Dateianhänge!)
Die Daten sollten wohl so kommen: Druck, Temp(Kelvin), Volumenstrom l/min., Massenstrom Standartliter/min., Sollwerte(unwichtig), eingestellte Gasart(Air,Methan,etc.).
Anhand der Angaben und meiner niederen VB Kenntnisse habe mir auch schon ein Programm zusammen gezimmert das allerdings auch nur gut die Hälfte von dem tut was ich will.
Ich hab's wohl hinbekommen das mir Volumendurchfluss und Massenstrom angezeigt wird aber die anderen bekomm ich aus dem Datenstrom nicht herausgefischt!
Die COM Verbindung tut aber ich hab das Gefühl das was fehlt!
Ich hoffe es hat einer von Euch genügend Nerven und Zeit mir zu helfen den richtigen Weg zu finden!
Den Code hab ich unten reingepackt!
Danke für die Hilfe und meine Aufnahme in die Gemeinschaft!
Andreas
Quellcode
- Imports System.IO.Ports
- Imports System.Threading
- Public Class Form1
- Public Sub New()
- InitializeComponent()
- enableControls()
- 'VOREINSTELLUNGEN DER FORM UND AUSSEHEN
- ComboBoxCOM.Text = "COM3"
- ComboBoxBAUDRATE.Text = "19200"
- ComboBoxDATABITS.Text = 8
- CheckBoxSTOPBITS2.CheckState = CheckState.Checked
- ' ZEIGE ALLE VERFÜGBAREN PORTS IN COMBOBOX
- For Each sp As String In My.Computer.Ports.SerialPortNames
- ComboBoxCOM.Items.Add(sp)
- Next
- End Sub
- Private Sub enableControls()
- If Not SerialPort1.IsOpen Then 'Wenn Port geschlossen dann
- ComboBoxCOM.Enabled = True
- btnCOMopen.BackColor = Color.AliceBlue
- btnCOMopen.Enabled = True
- Else 'ELSE heißt in diesem Fall Port1 offen dann
- ComboBoxCOM.Enabled = False
- btnCOMopen.BackColor = Color.Green
- btnCOMopen.Enabled = False
- End If
- End Sub
- Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles btnPROGRAMMSCHLIESSEN.Click
- If SerialPort1.IsOpen Then SerialPort1.Close() ' Wenn Port tatsächlich offen dann darfste auch beenden
- enableControls() ' UI umschalten
- Me.Close() ' Das Programm schließen
- End Sub
- Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles btnCOMclose.Click
- If SerialPort1.IsOpen Then SerialPort1.Close()
- enableControls()
- Debug.WriteLine("Port Open: " & SerialPort1.IsOpen)
- End Sub
- Private Sub Form1_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
- If SerialPort1.IsOpen Then SerialPort1.Close() ' PORT Schließen bevor das Programm beendet wird
- enableControls()
- End Sub
- Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- End Sub
- Private Sub GroupBox1_Enter(sender As System.Object, e As System.EventArgs)
- End Sub
- Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles btnCOMopen.Click
- Try
- With SerialPort1
- .PortName = ComboBoxCOM.Text ' Mit den Ausgewählten einstellungen den COM Port versuchen zu öffnen
- .BaudRate = ComboBoxBAUDRATE.Text
- .DataBits = ComboBoxDATABITS.Text
- .Open()
- .Parity = IO.Ports.Parity.None
- .StopBits = IO.Ports.StopBits.None
- Debug.WriteLine("Port Open: " & SerialPort1.IsOpen)
- 'If CheckBox1.CheckState = CheckState.Checked Then
- ' .StopBits = StopBits.One
- ' If CheckBox2.CheckState = CheckState.Checked Then
- ' .StopBits = StopBits.Two
- ' End If
- 'End If
- End With
- enableControls()
- Catch ex As Exception
- End Try
- End Sub
- Private Sub Label7_Click(sender As System.Object, e As System.EventArgs) Handles lblTEMP.Click
- End Sub
- Private Sub Label11_Click(sender As System.Object, e As System.EventArgs) Handles lblGASART.Click
- End Sub
- Private Sub GroupBox4_Enter(sender As System.Object, e As System.EventArgs)
- End Sub
- Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
- Try
- Dim count As Double = SerialPort1.BytesToRead ' Empfangene Daten verarbeiten
- Dim data() As Byte
- ReDim data(count - 1)
- SerialPort1.Read(data, 0, count)
- Dim data1 As String = System.Text.Encoding.Default.GetString(data, 1, 6)
- Dim data2 As String = System.Text.Encoding.Default.GetString(data, 7, 13)
- 'Dim data3 As String = System.Text.Encoding.Default.GetString(data, 15, 22)
- lblVOLUMENFLUSS.Invoke(displayDataPtr, data1, data2) ' Keine Plan was und warum und wieso INVOKE Was'n das?
- Catch ex As Exception
- End Try
- End Sub
- Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
- Try
- Dim data As String = TextBox1.Text
- SerialPort1.WriteLine(data)
- TextBox1.AppendText(data & Environment.NewLine) ' Anzeige
- TextBox1.ScrollToCaret()
- TextBox1.SelectAll()
- Catch ex As Exception
- End Try
- End Sub
- Private Delegate Sub displayDataDlg(ByVal dat1 As String, ByVal dat2 As String)
- Private displayDataPtr As displayDataDlg = AddressOf displayData
- Private Sub displayData(ByVal d1 As Double, ByVal d2 As Double)
- Dim f As Double = Decimal.Parse(d1) 'sollte Standartliter Pro/Min. sein
- Dim p As Double = Decimal.Parse(d2) 'sollte Standartliter Total sein
- 'Dim DA As Double = Decimal.Parse(d3) 'sollte Umgebungsdruck sein
- lblVOLUMENFLUSS.Text = f 'Den Rest der Empfangenen Daten kann ich noch nicht richtig entschlüsseln!!!
- lblSTANDARTLITER.Text = p
- 'lblDRUCK.Text = DA
- End Sub
- Private Sub NumericUpDown1_ValueChanged(sender As System.Object, e As System.EventArgs)
- End Sub
- Private Sub CheckBox1_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBoxSTOPBITS1.CheckedChanged
- If CheckBoxSTOPBITS1.CheckState = CheckState.Checked Then
- CheckBoxSTOPBITS2.CheckState = CheckState.Unchecked
- End If
- End Sub
- Private Sub CheckBox2_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles CheckBoxSTOPBITS2.CheckedChanged
- If CheckBoxSTOPBITS2.CheckState = CheckState.Checked Then
- CheckBoxSTOPBITS1.CheckState = CheckState.Unchecked
- End If
- End Sub
- Private Sub GroupBox1_Enter_1(sender As System.Object, e As System.EventArgs) Handles grboxCOMEINSTELLUNGEN.Enter
- End Sub
- End Class
"Why the heck is this peace of shit not work'in?" ......."Oh...i see! ..cause I'm not work'in!!"