|
6.7.2 Die Datalogic-Barcode-Routine
6.7.2.1 Barcode: Erforderliche Interfacekonfiguration
Da es sich um ein RS232-Meßmittel handelt, sind keine Hardware-Konfigurationen erforderlich. Lediglich die ACIA muss programmiert werden. Dies läuft wie folgt ab:
Zuerst wird getestet, ob
die ACIA schon programmiert wurde. Nachdem die Dienstroutine ACIAINI die ACIA nach einem Reset oder einem Modulwechsel programmiert hat, wird das Flag ACIA_OK auf $FF gesetzt. Ist das Flag auf $00 (wird von einem
Reset oder einem Modulwechsel auf $00 gesetzt), so liegt eine erste Datenanforderung für die Schnittstelle nach einem Reset oder Modulwechsel vor, so dass die ACIA noch programmiert werden muss. Durch Programmieren
der Command- und Control-Register der ACIA wird die Schnittstelle auf folgende Übertragungsparameter eingestellt:
Alle Interrupts gesperrt, RTS "High", even Parity, 1 Stoppbit, 7 Databits, 9600 Bd.
6.7.2.2 Barcode: Implementiertes Datenformat
Das Datenformat des Barcode-Lesers ist sehr flexibel, da es nur
von den eingelesenen Barcodes abhängt. Gelesen werden also die Barcodes, über die der Lesestift geführt wird. Es findet keine weitere Manipulation der Daten statt. Lediglich die Länge der gelesenen Daten wurde auf
20 Zeichen begrenzt, damit die Lesedaten in dem Terminalprogramm richtig weiterverarbeitet werden können, wo bis jetzt alle Eingabefelder und weiterverarbeitenden Routinen von Barcode-Zeichenketten mit einer Länge
nicht größer als 20 Bytes (Zeichen) ausgehen.
6.7.2.3 Barcode: Algorithmus
Zuerst wird über das Command-Register der
RTS-Ausgang des Interfaces zur Datenanforderung an den Barcodeleser auf "Low" gelegt. Nun werden solange Zeichen gelesen, bis entweder ein LF (ASCII 10) empfangen wird oder 22 Zeichen gelesen wurden
(inclusive CR, LF, also 20 echte Datenbytes). Anschliessend wird der Datenempfang beendet. Wenn der Barcodeleser mehr als 22 Zeichen sendet, so werden ab dem 22. Zeichen zwar alle weiteren von der Schnittstelle
empfangen, aber nicht mehr abgespeichert. Das 20. Zeichen wird dann durch ein Ausrufezeichen "!" ersetzt, um anzuzeigen, dass der Barcodeleser mehr als 20 Datenbytes gesendet hatte.
Nun wird im
Sende-RAM ein "A" als Kennung, dass die Daten vom Barcode kommen, an den Anfang geschrieben und anschliessend die Barcode-Daten unverändert dahinterkopiert. -Abgeschlossen wird der Barcode-Datenblock wie
immer mit einem CR (ASCII 13).
6.7.2.4 Barcode: Fehlerbehandlung, Fehlercodes
Da der Barcode die Dienstroutine
READONE zum Lesen eines Zeichens von der RS232-Schnittstelle verwendet, so sind auch alle dort implementierten Fehlercodes gültig. Zusätzlich wurde ein Fehlercode Nr.5 eingebaut, der anzeigt, dass mehr als 20
Datenbytes gelesen wurden.
Hier noch einmal eine Zusammenfassung aller Fehlercodes:
- 1: Timeout: Nach der Datenanforderung kam zwei Sekunden lang kein Signal vom Barcodeleser. Dieser Fehler tritt auf,
wenn der Fusstaster gedrückt wird und mit dem Barcode kein Code gelesen wurde, oder wenn die Verbindung zwischen dem Barcodeleser und dem Interface unterbrochen ist.
- 2: Overrun: Das Receiver-Register der
seriellen Schnittstelle auf der Interfaceplatine wurde nicht gelesen, während der Barcode weitere Daten nachgeschoben hat. Dieser Fehler sollte niemals auftreten, da das Programm bei einer Baudrate von 9600 Baud
schnell genug arbeitet, um die Schnittstelle korrekt zu bedienen.
- 3: Framing: Das Datenformat stimmt nicht. Entweder es fehlen Stoppbit(s) oder Datenbits oder ähnliche Dinge. Meist liegt dann ein
Hardwarefehler vor oder die ACIA wurde falsch programmiert (Baudrate...).
- 4: Parity: Die Paritätskontrolle ergab einen Übertragungsfehler. Auch meist eine Hardware-Ursache.
- 5: Es wurden mehr als
22 Zeichen incl. CR,LF empfangen. Die Daten werden mit einem Ausrufezeichen "!" nach dem 19. Zeichen abgeschlossen und der Rest der Daten geht verloren. 22 Zeichen deswegen, weil 20 Zeichen von der 2090
her zugelassen sind und CR, LF nicht als Datenbytes gezählt werden.
Zur Datalogic-Barcode-Routine ein Ablaufdiagramm:
 |
Abb. 27: Ablaufdiagramm zur Datalogic-Barcode-Lese-Routine
6.7.2.5 Barcode: Erforderliches Kabel, Pinbelegungen
Zum Betrieb des Barcodes muss ein neues Kabel angefertigt werden. Der Stecker am Barcode ist ein 8-poliger DIN-Stecker, an der neuen MUX-Platine wird immer ein 25-polige Sub-D-Stecker verwandt.
Pinbelegung Barcode-Kabel an neue Muxplatine:
|
Barcode-Stecker
|
Kabel
|
25pol. Sub-D Stecker am IF
|
|
Pin 1 GND
|
weiss
|
GND Pin 13
|
|
Pin 2RxD
|
gelb
|
TxD Pin 12
|
|
Pin 3TxD
|
rosa
|
RxD Pin 11
|
|
Pin 5CTS
|
grau
|
RTS Pin 10
|
|
Pin 4RTS
|
grün
|
CTS Pin 9
|
|
Pin 6+5V
|
rot
|
+5V Pin 8
|
|
Die Numerierung des Sub-D-Steckers ist hier wie auf dem Prototyp des Messmittelinterfaces aufgeführt. Leider ist diese Numerierung fehlerhaft, da die V.24- Leitungen aufgrund einer
Verwechslung nicht auf den der Norm entsprechenden Pins liegen: Die RS232-Signale liegen auf dem Prototyp fälschlicherweise an den Pins 9..13 der 25-poligen Sub-D-Buchse. Bei einer
endgültigen Version des Platinenlayouts sollen die Signale normgemäss an die Pins 1 bis 5 gelegt werden. |