Funnygamer
Grünschnabel
Hallo zusammen,
ich habe einen Kartenleser welcher per serieller Schnittstelle angesprochen wird.
Die Kommunikation über die Schnittstelle mit meinem Javaprogramm funktioniert mit
anderen Geräten ohne Probleme,aber der Leser hat ein eigenes Protokoll, deswegen
vermute ich den Fehler dort.
Das Protokoll besitzt folgenden Aufbau:
1. Byte: SOH Protokolltyp & Startzeichen
2. Byte: ADR Busadresse
3. Byte: CMD Kommando
4. Byte: AZA Datenanzahl
5. Byte: Daten oder Parameter
n. Byte: BCC Prüfsumme
Als Beispiel Kommando benutze ich im folgenden das Statusauslesen.
Laut Handbuch wird dies so realisiert:
HexCode|
02 | SOH | Satzstartzeichen
xx | ADR | Moduladresse (01..10H) // In meinem Fall 01, da kein bus vorhanden also das erste Gerät
41 | CMD | Lese Status INTERN
00 | AZA | Datenanzahl = 0
cc | BCC | Prüfsumme
Der CRC wird als ein 8-bit BCC (byteweises XOR auf die Daten) erzeugt.
So.. das war die Theorie..
Die Anforderungen habe ich nun wie folgt umgesetzt:
Und wird mit folgendem Code gesendet:
Versuche mit .flush(), "\r\n" usw. brachten auch keinen Unterschied.
Ich hoffe das reicht an angaben, sonst einfach nachfragen
Vielen Dank
mfg
Christian
ich habe einen Kartenleser welcher per serieller Schnittstelle angesprochen wird.
Die Kommunikation über die Schnittstelle mit meinem Javaprogramm funktioniert mit
anderen Geräten ohne Probleme,aber der Leser hat ein eigenes Protokoll, deswegen
vermute ich den Fehler dort.
Das Protokoll besitzt folgenden Aufbau:
1. Byte: SOH Protokolltyp & Startzeichen
2. Byte: ADR Busadresse
3. Byte: CMD Kommando
4. Byte: AZA Datenanzahl
5. Byte: Daten oder Parameter
n. Byte: BCC Prüfsumme
Als Beispiel Kommando benutze ich im folgenden das Statusauslesen.
Laut Handbuch wird dies so realisiert:
HexCode|
02 | SOH | Satzstartzeichen
xx | ADR | Moduladresse (01..10H) // In meinem Fall 01, da kein bus vorhanden also das erste Gerät
41 | CMD | Lese Status INTERN
00 | AZA | Datenanzahl = 0
cc | BCC | Prüfsumme
Der CRC wird als ein 8-bit BCC (byteweises XOR auf die Daten) erzeugt.
So.. das war die Theorie..
Die Anforderungen habe ich nun wie folgt umgesetzt:
Code:
byte[] b = new byte[] { 0x02, 0x01, 0x2A, 0x00 }; // Einzelnen Bytes festlegen
int pruefsumme = 0;
for (int i = 0; i < b.length; i++) {
pruefsumme = pruefsumme ^ b[i]; // XOR'n
}
Und wird mit folgendem Code gesendet:
Code:
serialPort.getOutputStream().write(b);
serialPort.getOutputStream().write((byte)pruefsumme);
Versuche mit .flush(), "\r\n" usw. brachten auch keinen Unterschied.
Ich hoffe das reicht an angaben, sonst einfach nachfragen
Vielen Dank
mfg
Christian
Zuletzt bearbeitet: