Hallo zusammen, vielleicht kann mir einer weiterhelfen. Ich versuche über VB.Net Programm ein Regelgerät anzusprechen. Dazwischen befindet sich ein Adapter RS232/RS485. Mein Programm verbindet sich ohne Probleme mit dem Gerät, aber wenn ich meinen Befehl ausführe dann passiert gar nix. Ich bin noch ein Anfänge auf dem Gebiet.. Ich hoffe deshalb findet man den Fehler sehr schnell. Im Anhang befindet sich ein Beispiel, nachdem ich meinen Code gestaltet habe. (Herstellerangaben) als erstes ermittel ich meine Checksumme über diesen Code: Public Sub Test_Checksumme() Dim Ergebnis As String Dim Rech As Long Dim a, b, c, d, e, f, g, h As String a = "&H" & "21" b = "&H" & "31" c = "&H" & "38" d = "&H" & "20" e = "&H" & "31" f = "&H" & "30" g = "&H" & "30" h = "&H" & "20" Ergebnis = (Hex(Val(a) + Val(b) + Val(c) + Val(d) + Val(e)+ Val(f) + Val(g) + Val(h))) Rech = CLng("&H" & Ergebnis) Rech = Rech * -1 Ergebnis = Hex$(Rech - 1) MsgBox(Mid(Ergebnis, Len(Ergebnis) - 1, 2)) End Sub 2. Mit diesen Buttonevent schicke ich dann das Ergebniss zum Steuergerät. Private Sub EX_Vent_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EX_Vent.Click Dim Send_buffer(0 To 10) As Byte Send_buffer(0) = Convert.ToByte(CChar("!")) 'Befehl Send_buffer(1) = 31 'Adresse Send_buffer(2) = 38 'Code Send_buffer(3) = 20 'Leerzeichen Send_buffer(4) = 31 'Daten Send_buffer(5) = 30 'Daten Send_buffer(6) = 30 'Daten Send_buffer(7) = 20 'Leerzeichen Send_buffer(8) = CByte("&H" & "A4") 'Check Send_buffer(8) = 0 Send_buffer(9) = 13 'Carriage Return Try SerialPort1.Write(Send_buffer, 0, 10) Catch ex As Exception MsgBox(ex.Message) End Try End Sub Das Ergebniss sollte sein dass sich im Code 8 das ist eine direkte Einstellung der Wert 100 (31;30;30) zu lesen sein sollte. Aber irgendwie raff ich das nicht. Bestimmt lacht sich ein Profi über diesen verzweifelten Versuch kaputt :) Vielen Dank schonmal im vorraus.
Wo machst Du die COM Schnittstelle auf (Baudrate, Stopbits, Anzahl Datenbits).
Nebenbei: Bist Du Dir sicher, daß das, was Du da in Deiner Prüfsummenfunktion treibst, irgendeinen Sinn hat?
Hi, '######################################################### Die verfügbaren COM Schnittstellen werden beim laden der Form in eine Listbox geschrieben. Private Sub MPS_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim ports As String() Dim port As String Me.Refresh() Windows.Forms.Cursor.Current = Windows.Forms.Cursors.WaitCursor Me.Text = "Suche verfügbare COM-Ports. Bitte warten" ports = IO.Ports.SerialPort.GetPortNames() If ports.Length = 0 Then MsgBox("Kein COM-PORT gefunden", MsgBoxStyle.Critical) End End If For Each port In ports Try With SerialPort1 .PortName = port .ReadTimeout = Int32.Parse(500) .Open() End With Catch es As Exception Finally If SerialPort1.IsOpen = True Then COM_Liste.Items.Add(port) End If SerialPort1.Close() End Try Next port _SerialPort1.BaudRate = 2400 _SerialPort1.Parity = IO.Ports.Parity.None _SerialPort1.DataBits = 8 _SerialPort1.StopBits = 1 _SerialPort1.Handshake = IO.Ports.Handshake.None End Sub '######################################################### Die Verbindung starte ich dann mit einem einfachen 'Button Click Private Sub CMD_Verbinden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CMD_Verbinden.Click With SerialPort1 .PortName = COM_Liste.SelectedItem .ReadTimeout = Int32.Parse(500) .Open() End With End Sub
[@] Rufus naja ich glaube nicht das wahr mein Problem hatte solange rumprobiert, bis ich den selben Wert wie im Beispiel hatte. Vielleicht hast du eine Kompetentere Lösung als mein Pfusch. Wäre Dir sehr dankbar.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.