Public Function Anfrage_senden(Funktion_Nummer_senden As Integer) On Error GoTo Fehler Dim i As Integer Byte_Array(0) = 200 ' Anfrage 200=Anfrage Select Case LCD Case 0 Byte_Array(1) = ComboBox_Modulnummer_Einstellungen.Value 'Ziel Meldemodul Case 1 Byte_Array(1) = 254 'Ziel LCD End Select Byte_Array(2) = 255 'Ursprung 255=PC Byte_Array(3) = 6 'Länge, Anfrage immer 6 Byte_Array(4) = Funktion_Nummer_senden 'Befehl Nr. Byte_Array(5) = Funktion_Nummer_senden 'Befehl Nr. wiederholung Prüfsumme_berechnen (6) 'Prüfsumme berechnen Byte_Array(6) = Prüfsumme 'Prüfsumme dem Byte_Array(6) zuordnen TextBox_Log.Text = TextBox_Log.Text & "Anfrage: " & Byte_Array(0) For i = 1 To 6 TextBox_Log.Text = TextBox_Log.Text & "_" & Byte_Array(i) Next TextBox_Log.Text = TextBox_Log.Text & vbCrLf For i = 0 To 6 MSComm1.Output = Chr$(Byte_Array(i)) Next '________________________________________________________________________ Exit Function Fehler: MsgBox "Fehlernummer: " & err.Number & _ vbCrLf & "Fehlerbeschreibung: " & err.Description End Function Private Sub MSComm1_OnComm() If Timer > Timeout_UART_Empfang Then step = 0 End If '_______________________________________ Do While step = 0 Dim a As String a = Chr$(201) ' Antwort Start-Char If MSComm1.InBufferCount > 0 Then If MSComm1.Input = a Then Rx_Data(0) = a ' Rx_Data = Start-Char step = 1 ' Step 1 aktivieren ' Timeout auf eine Sekunde stellen Timeout_UART_Empfang = Timer + 1 End If Else Exit Sub End If Loop '_______________________________________ Do While step = 1 If Timer > Timeout_UART_Empfang Then step = 0 End If If MSComm1.InBufferCount >= 3 Then ' wenn Bufferzähler>=3 Rx_Data(1) = MSComm1.Input 'aus dem Buffer 3 Chars auslesen Rx_Data(2) = MSComm1.Input Rx_Data(3) = MSComm1.Input step = 2 Select Case Byte_Array(4) Case 8 To 23: Nachricht_Länge_erwartet = 45 Case 24: Nachricht_Länge_erwartet = 10 Case 26: Nachricht_Länge_erwartet = 7 Case 28: If LCD = 1 Then Nachricht_Länge_erwartet = 17 Else Nachricht_Länge_erwartet = 16 End If Case Else: Nachricht_Länge_erwartet = 6 End Select If AscB(Rx_Data(3)) = Nachricht_Länge_erwartet Then Nachricht_Länge = AscB(Rx_Data(3)) Else step = 0 Exit Sub End If Else Exit Sub End If Loop '_______________________________________ Do While step = 2 If Timer > Timeout_UART_Empfang Then step = 0 End If If MSComm1.InBufferCount >= (Nachricht_Länge - 4) Then 'wenn Bufferzähler >= Länge der Nachricht Dim i As Integer For i = 4 To Nachricht_Länge ' Buffer auslesen Rx_Data(i) = MSComm1.Input Next '__________________________ Dim Byte_Char As String Byte_Char = "Antwort: " & AscB(Rx_Data(0)) ' ersten Byte in String formatieren TextBox_Log.Text = TextBox_Log.Text & Byte_Char ' In die Textbox schreiben For i = 1 To (Nachricht_Länge - 1) Byte_Char = AscB(Rx_Data(i)) 'formatieren in String TextBox_Log.Text = TextBox_Log.Text & "_" & Byte_Char 'in die Textbox schreiben Next TextBox_Log.Text = TextBox_Log.Text & vbNewLine ' neue Zeile anfangen step = 0 ' Step auf 0 setzen '__________________________ ' Rx_Data (4) zu integer formatieren Dim nummer As Integer nummer = AscB(Rx_Data(4)) ' Aufruf der Funktion mit "Nummer" als Funktionnummer Antwort_gelesen (nummer) Else Exit Sub End If Loop End Sub Private Sub ToggleButton_Verbinden_Change() If ToggleButton_Verbinden.Value = True Then 'Set MSComm1 = New MSComm On Error GoTo Fehler MSComm1.CommPort = ComboBox_COM_Anschluss.Value 'Com Nummer MSComm1.Settings = ComboBox_Baudrate_aktuel.Value + ",N,8,1" 'Baudrate MSComm1.RThreshold = 1 MSComm1.InputLen = 1 MSComm1.InputMode = comInputModeText MSComm1.PortOpen = True ToggleButton_Verbinden.Caption = "Verbunden" ToggleButton_Verbinden.BackColor = &HC000& '&H80000002 CommandButton_Einstellungen_lesen.Enabled = True CommandButton_Textmeldung_auslesen.Enabled = True CommandButton_Datum_Auslesen.Enabled = True CommandButton_Temperatur_lesen.Enabled = True ComboBox_Baudrate_aktuel.Enabled = False ComboBox_COM_Anschluss.Enabled = False CommandButton1.Enabled = True CommandButton5.Enabled = True CommandButton4.Enabled = True ToggleButton1.Enabled = True '___________________________________________ '_______________________________________________________ Else: On Error GoTo Fehler MSComm1.PortOpen = False Modul1.TimerStoppen ToggleButton_Verbinden.Caption = "Verbinden" CommandButton_Einstellungen_lesen.Enabled = False CommandButton_Temperatur_lesen.Enabled = False CommandButton_Datum_Auslesen.Enabled = False ComboBox_Baudrate_aktuel.Enabled = True ComboBox_COM_Anschluss.Enabled = True ToggleButton_Verbinden.BackColor = &H8000000F CommandButton_Textmeldung_auslesen.Enabled = False CommandButton1.Enabled = False CommandButton_Einstellungen_speichern.Enabled = False CommandButton5.Enabled = False CommandButton_Datum_Auslesen.Enabled = False CommandButton4.Enabled = False CommandButton6.Enabled = False CommandButton4.Enabled = False ToggleButton1.Enabled = False End If Exit Sub '____________________________________________________ Fehler: MsgBox "Fehler in Funktion ToggleButton_Verbinden_Change" & _ vbCrLf & "Fehlernummer: " & err.Number & _ vbCrLf & "Fehlerbeschreibung: " & err.Description ToggleButton_Verbinden.Value = False Exit Sub End Sub Public Function Anfrage_senden(Funktion_Nummer_senden As Integer) On Error GoTo Fehler Dim i As Integer Byte_Array(0) = 200 ' Anfrage 200=Anfrage Select Case LCD Case 0 Byte_Array(1) = ComboBox_Modulnummer_Einstellungen.Value 'Ziel Meldemodul Case 1 Byte_Array(1) = 254 'Ziel LCD End Select Byte_Array(2) = 255 'Ursprung 255=PC Byte_Array(3) = 6 'Länge, Anfrage immer 6 Byte_Array(4) = Funktion_Nummer_senden 'Befehl Nr. Byte_Array(5) = Funktion_Nummer_senden 'Befehl Nr. wiederholung Prüfsumme_berechnen (6) 'Prüfsumme berechnen Byte_Array(6) = Prüfsumme 'Prüfsumme dem Byte_Array(6) zuordnen TextBox_Log.Text = TextBox_Log.Text & "Anfrage: " & Byte_Array(0) For i = 1 To 6 TextBox_Log.Text = TextBox_Log.Text & "_" & Byte_Array(i) Next TextBox_Log.Text = TextBox_Log.Text & vbCrLf For i = 0 To 6 MSComm1.Output = Chr$(Byte_Array(i)) Next '________________________________________________________________________ Exit Function Fehler: MsgBox "Fehlernummer: " & err.Number & _ vbCrLf & "Fehlerbeschreibung: " & err.Description End Function