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.
