Gast
#417722
Hallo,
ich hoffe ihr könnt mir helfen, denn ich bin echt am verzweifeln.
Ich habe einen Kartenleser an Com9 meines Rechners angeschlossen. An
diesen muss ich Befehle schicken und dann die Antwort empfangen. Das
komische ist, dass die ersten 2-3 Befehle richtig bearbeitet werden und
die folgenden dann mal richtig und mal falsche Ergebnisse liefern.
Leider hab ich absolut keine Ahnung woran das liegen kann. Das
Lesegerät und die Karten sind in Ordnung, es muss an meinem Programm /
Programmablauf hängen.
Die Verbindung zur seriellen Schnittstelle habe ich so gelöst:
Private Sub connection()
mySerial = New SerialPort("COM9", 9600, IO.Ports.Parity.None, 8,
IO.Ports.StopBits.One)
mySerial.Encoding = System.Text.Encoding.GetEncoding(1252)
mySerial.Open()
End Sub
#################################################################
Die Befehle schick ich folgendermaßen ab:
Private Sub senden(ByVal buffer As Byte())
Dim i As Integer
'Im ersten Array liegt die Anzahl der Folgebytes
Dim anzahl = buffer(0)
'Bytes nacheinander an die Serielle Schnittstelle schicken
For i = 0 To anzahl
mySerial.Write(Chr(buffer(i)))
Next
End Sub
################################################################
Aufgerufen wird die Sendefunktion aus meinem Hauptprogramm und von dort
wird der entsprechende SendeBefehl übergeben
zb:
Dim buffer1 As Byte() = {&H2, &HB0, &B2}
senden(buffer1)
#################################################################
Die Antwort lese ich mit folgendem Code aus:
Private Function lesen() As Byte()
Dim readbuffer As Byte() = {}
'Empfangsbuffer auf die richtige Größe bringen
ReDim readbuffer(mySerial.BytesToRead() - 1)
'Daten von Schnittstelle in Buffer schreiben
mySerial.Read(readbuffer, 0, mySerial.BytesToRead)
lesen = readbuffer
End Function
#################################################################
Wie gesagt, manchmal geht alles glatt, manchmal nicht. An der Karte
kann es nicht liegen. Hab ich vielleicht irgend etwas nicht bedacht,
was noch beachtet werden muss? Ich hab auch schon mal zwischen die
Sende und Lesevorgänge ein Thread.Sleep(1000) gelegt aber auch das hat
keine Verbesserung gebracht.
Muss noch etwas anderes eingebaut werden, damit die Kommunikation
reibungslos verläuft?
Ich hoffe ihr könnt mir da einen Tipp geben.
VG
Michael