9 Anschuß von Magnetkartengeräten
Nachdem die Grundlagen der Magnetkarten und -geräte diskutiert worden sind, widmen
wir uns den Anschlußmöglichkeiten von Lese- und Schreibgeräten. Zuerst wird der
einfache Anschluß eines Magnetkartenlesers an die Druckerschnittstelle eines PCs
besprochen. Danach folgt die Beschreibung, wie ein Magnetkartencodierer an der seriellen
Schnittstelle eines Computers angeschlossen wird. Der Aufbau und die Befehle des
dazu notwendigen Kontrollers werden ausführlich besprochen. Zu jedem Befehl wird
eine kurze Programmumsetzung angegeben. In einem weiteren Abschnitt wird eine
Interface-Schaltung zwischen einem Magnetkartenleser und der senellen Schnittstelle
vorgeschlagen. Mit dieser ist es möglich eine Spur der Magnetkarte zu lesen und seriell zu
senden. Damit ist man dann nicht mehr nur auf einen PC angewiesen, sondern kann die
gelesenen Daten auch z.B. zu einer Workstation senden. Als ein weiteres Beispiel wird
eine Zutnttskontrolle vorgestellt. Diese arbeitet als ,,stand-alone" Lösung. Als
Identifikationskarten können bereits vorhandene Magnetkarten benutzt werden, da das Gerät
einen Lernmodus für zugangsberechtigte Karten besitzt. Beide Schaltungen erfordern
nur wenige Bauteile und sind leicht nachzubauen.
Die einfachste Art einen Magnetkartenleser anzuschließen ist, eine bereits vorhandene
Schnittstelle am Computer auszunutzen. Bei PCs bieten sich die parallelen
Druckerschnittstellen an. Zusätzlich benötigt man dann noch ein Programm zum Lesen der
Daten, die vom Lesegerät bereitgestellt werden. Als Magnetkartenleser haben wir für
diese Anwendung den Durchzugleser der HNR-Sene von Omron gewählt. Dieser bietet
einige Vorteile. Die Elektronik ist in CMOS-Technologie ausgeführt, wodurch die
Stromaufnahme nur 6 mA beträgt, die durch die Datenleitungen der Druckerschnittstelle
bereitgestellt werden können. Der Lesekopf läßt sich durch das Lösen von Schrauben
auf jede beliebige ISO-Spur einstellen. Ferner kann die Bit-Dichte über einen
Schiebeschalter zwischen 75 bpi und 210 bpi eingestellt werden (siehe Abschnitt 7.1).
Zur Erzeugung der Versorgungsspannung setzt das Leseprogramm die
Datenleitungen DO bis D3 auf high. Diese Datenleitungen werden über vier Dioden
zusammengelegt. Die Dioden sollten eine gennge Schleusenspannung haben, damit eine genügend
hohe Spannung für den Magnetkartenleser zur Verfügung steht. Bewährt haben sich die
Schottky-Dioden des 5ps BAT-42. Sollte ein anderes Gerät angeschlossen werden,
kann eine externe Stromversorgung notwendig werden. Die Ausgänge CLS, RCP und
RDP des Magnetkartenlesers werden mit den Statusleitungen der Druckerschnittstelle
verbunden, da diese, im Gegensatz zu den Datenleitungen, mit Sicherheit bidirektional
sind. An den Leitungen befinden sich noch pull-up Widerstände, die bei dem gewählten
Magnetkartenleser nicht erforderlich sind, da dieser komplementäre Ausgangsstufen
hat. Möchte man aber ein Gerät mit open-collector Ausgängen benutzen, sind diese
Widerstände erforderlich (Abbildung 9-1; Tabelle 9-1).
Abb. 9-1:Schaltplan zum Anschluß des HNR-Magnetkartenlesers an die parallele
Druckerschnittstelle
Halbleiter
| D1...D4 |
Schottky-Diode BAT-42 |
|
Sonstiges
| Sub-D-Stecker 25pol. male |
Durchzugleser Omron 3S4YR-HNR4 |
|
Widerstände
| R1...R3 |
10 k Ohm |
|
|
Tabelle 5-2:
Werte für den Widerstand R1, und die Kondensatoren C1 und C2 für unterschiedliche Bit-Dichten
Das Programm zum Lesen der Daten hat folgende Aufgabe: Es überwacht die Acknowledge
(Ack)-Leitung der Druckerschnittstelle, um einen Wechsel des RCP-Signals zu
erfassen. Bei einer abfallenden Flanke (negative Logik beachten!) liegen am Ausgang
RDP gültige Daten, die vom Programm über die Busy-Leitung übernommen werden.
Das geschieht solange der Ausgang CLS auf,,low" liegt, was an der PE
(Paperend)-Leitung überwacht wird. Sind alle Datenbits eingelesen, wird nach
den Start- und Stopzeichen gesucht. Anschließend werden die eingelesenen Bits nach dem 5- bzw.
7-Bit Zeichensatz decodiert, das Paritäts-Bit gepriift und in ASCII-Zeichen umgewandelt. Auf
dem Bildschirm erscheinen dann die Daten der Magnetspur in Klarschrift.
Das folgende Programm ,,LESEN.PAS" erledigt die hier beschriebenen Aufgaben.
Durch die Übergabe von Parametern kann es sowohl die 5-Bit- als auch die
7-Bit-Codierung lesen. Das Lesen selbst erfolgt unabhängig von der Bit-Dichte. Die Adresse der
Druckerschnittstelle kann dem Programm ebenfalls übergeben werden. Es ist in Turbo
Pascal 6.0 geschrieben und kann leicht für eigene Bedürfnisse modifiziert werden.
PROGRAM lesen;
{***************************************************************
* Programm zum Auslesen von Magnetkarten nach ISO 3554 *
* Programmierer: Francesco P. Volpe und Safinaz Volpe *
* Version 0.99 *
* Der Magnetkartenleser OMRON HNR wird an die Drucker- *
* schnittstelle angeschlossen. *
* Die Belegung lautet: *
* Magnetkartenleser Druckerschnittstelle *
* RDP (4) <----> Busy *
* RCP (5) <----> Ack *
* CLS (6) <----> PE *
***************************************************************}
{$N- G- X+}
USES Crt, Dos;
CONST Max = 3000;
Startzeichen5 : BYTE = $1A; { 11010 Startzeichen rckw}
Stopzeichen5 : BYTE = $1F; { 11111 Stopzeichen rckw}
Startzeichen7 : BYTE = $51; {1010001 Startzeichen rckw}
Stopzeichen7 : Byte = $7C; {1111100 Stopzeichen rckw}
Bitcode5 : BYTE = $30; {Offset zur ASCII-Umwandl}
Bitcode7 : BYTE = $20; {Offset zur ASCII-Umwandl}
Lpt1 : INTEGER = $0378;{Basisadr. 1. Druckerschn.}
Lpt2 : INTEGER = $0278;{Basisadr. 2. Druckerschn.}
Herc : INTEGER = $03BC;{Basisadr. Herculeskarte}
Lpt1_status : INTEGER = $0379;
Lpt2_status : INTEGER = $0279;
Herc_status : INTEGER = $03BD;
VAR i : LONGINT;
j : INTEGER;
ch : CHAR;
bit_anzahl,
parity_err,
start,ende,
anzahl,
LPT,LPT_status : INTEGER;
s,
RDP, RCP,
CLS, CLS_alt,
import,parity,code,
zeichenoffset,
startzeichen,
stopzeichen : BYTE;
clocks,
databits,data : ARRAY[1..Max] OF BYTE;
dec_data : ARRAY[1..Max] OF CHAR;
PROCEDURE Initialisiere;
{***************************************************************
* Initialisiert die Schnittstelle in Abh„ngigkeit der *
* bergebenen Parameter. Default-Werte sind LPT1 ($378) und *
* Codel„nge 5. šber D0 bis D3 'high' wird die Versorgungs- *
* spannung des Lesers eingeschaltet. *
***************************************************************}
BEGIN
anzahl := 0; {* Default *}
LPT := LPT1;
LPT_status := LPT1_status;
startzeichen := Startzeichen5;
stopzeichen := Stopzeichen5;
code := 5;
zeichenoffset := Bitcode5;
IF ((ParamCount > 0) AND (ParamCount <= 2)) THEN
FOR i := 1 TO ParamCount DO
BEGIN
IF (ParamStr (i) = '378') THEN
BEGIN
LPT := LPT1;
LPT_status := LPT1_status;
END;
IF (ParamStr (i) = '278') THEN
BEGIN
LPT := LPT2;
LPT_status := LPT2_status;
END;
IF (ParamStr (i) = '3BC') THEN
BEGIN
LPT := Herc;
LPT_status := Herc_status;
END;
IF ((ParamStr (i) = 'c5') OR (ParamStr (i) = 'C5')) THEN
BEGIN
code := 5;
zeichenoffset := Bitcode5;
startzeichen := Startzeichen5;
stopzeichen := Stopzeichen5;
END;
IF ((ParamStr (i) = 'c7') OR (ParamStr (i) = 'C7')) THEN
BEGIN
code := 7;
zeichenoffset := Bitcode7;
startzeichen := Startzeichen7;
stopzeichen := Stopzeichen7;
END;
END;
Port[LPT] := $0F; {* Spannungsversorgung einschalten (D0-D7)*}
END;
PROCEDURE Lieskarte;
{****************************************************************
* Liest eine Spur der Magnetkarte und schreibt die Bits in das *
* Feld 'databits'. Zur Kontrolle werden die Clock-Bits in das *
* Feld 'clocks' geschrieben. *
* RDP = Busy-bit => Read Data Pulse *
* RCP = ACK -bit => Read Clock Pulse *
* CLS = PE-bit => Card Load Signal *
* RCP_alt > RCP => abfallende Flanke *
* RCP_alt < RCP => ansteigende Flanke *
****************************************************************}
VAR RCP_alt : BYTE;
BEGIN
bit_anzahl := 0;
FOR i := 1 TO Max DO BEGIN clocks[i] := 0; databits[i] := 0;
END;
i := 0;
j := 1;
RCP_alt := 1;
import := 0;
CLS := 1;
REPEAT
ASM cli END;
import := Port[LPT_status];
CLS_alt := CLS;
CLS := (import AND $20) SHR 5; { PE-Bit ausmaskieren }
RCP := (import AND $40) SHR 6; { ACK-Bit ausmaskieren }
RDP := (import AND $80) SHR 7; { Busy-Bit ausmaskieren }
IF RCP_alt > RCP THEN { auf abfallender Flanke von RCP lesen }
BEGIN
clocks[j] := RCP ;
databits[j] := RDP ;
RCP_alt := RCP;
Inc (j);
END
ELSE
RCP_alt := RCP;
ASM sti END;
UNTIL (CLS > CLS_alt);
bit_anzahl := j;
END;
PROCEDURE Findstart;
{***************************************************************
* Sucht im Feld 'databits[i]' nach dem Startzeichen und *
* Stopzeichen. *
* Die Bitposition des Startzeichens wird in 'start' und *
* die Bitposition des Stopzeichens wird in 'ende' gespeichert *
***************************************************************}
VAR bitoffset : INTEGER;
k : INTEGER;
CONST b : ARRAY[1..7] OF BYTE =(1, 2, 4, 8, 16, 32, 64);
BEGIN
FOR bitoffset := 1 TO Max DO data[bitoffset] := 0;
bitoffset := 1;
start := 0;
ende := 0;
REPEAT
FOR k := 0 TO code-1 DO
data[bitoffset] := data[bitoffset]+
databits[bitoffset+k]*b[code-k];
IF ((data[bitoffset] = startzeichen) AND (start = 0)) THEN
start := bitoffset;
Inc (bitoffset);
UNTIL ((bitoffset >= bit_anzahl) OR (start <> 0));
bitoffset := bitoffset + code-1;
REPEAT
FOR k := 0 TO code-1 DO
data[bitoffset] := data[bitoffset]+
databits[bitoffset+k]*b[code-k];
IF (data[bitoffset] = stopzeichen) THEN
ende := bitoffset + code;
bitoffset := bitoffset + code;
UNTIL ((bitoffset >= bit_anzahl) OR (ende <> 0)) ;
END;
PROCEDURE Liesrueckwaerts;
{***************************************************************
* Liest aus dem Datenfeld 'databits[i]', beginnend ab dem *
* Startzeichen, bis zum Stopzeichen (rckw„rts) *
***************************************************************}
VAR i, j, k : INTEGER;
parity_mod_2 : BYTE;
CONST b : ARRAY[0..6] OF BYTE =(1, 2, 4, 8, 16, 32, 64);
BEGIN
FOR i := 1 TO Max DO data[i] := 0;
i := start;
j := 1;
parity_err := 0;
WHILE i < ende DO
BEGIN
parity := 0;
FOR k := 0 TO code-2 DO
BEGIN
data[j] := data[j]+databits[i+k]*b[k];
IF databits[i+k] = 1 THEN parity := parity+1;
END;
parity_mod_2 := parity MOD 2;
IF (parity_mod_2 = databits[i+code-1]) THEN
Inc (parity_err);
Inc (j);
i := i+code;
END;
anzahl := j-1;
END;
PROCEDURE Decodiere;
{***************************************************************
* Wandelt die eingelesenen Zeichen in ASCII-Zeichen um. *
* Das geschieht durch die Addition des 'zeichenoffset'. *
***************************************************************}
VAR j :INTEGER;
BEGIN
FOR j := 1 TO 1000 DO dec_data[j] := ' ';
j := 1;
REPEAT
dec_data[j] := Chr (data[j]+zeichenoffset);
Inc (j);
UNTIL ((dec_data[j-1] = '?') OR (j > anzahl));
END;
{***************************************************************
* Hauptprogramm *
***************************************************************}
BEGIN
ClrScr;
Initialisiere;
REPEAT
ClrScr;
Write ('Bitte die Magnetkarte durchziehen ');
WRITELN (' (CLS-Signal wird erkannt) ');
Lieskarte;
IF bit_anzahl > 1 THEN
BEGIN
WRITELN('Databits:'); { Hilfslineal }
WRITE (' 1');
WRITE (' 2');
WRITE (' 3');
WRITE (' 4');
WRITE (' 5');
WRITE (' 6');
WRITE (' 7');
WRITE (' 8');
WRITE ('1234567890');
WRITE ('1234567890');
WRITE ('1234567890');
WRITE ('1234567890');
WRITE ('1234567890');
WRITE ('1234567890');
WRITE ('1234567890');
WRITELN('1234567890'); { Ende Hilfslineal }
FOR i := 1 TO j DO
Write (databits[i]);
WRITELN;
WRITELN ('Die Auswertung beginnt');
Findstart;
IF start >= 1 THEN
BEGIN
Liesrueckwaerts;
WRITELN ('Startzeichen ab Position : ', start:5);
WRITELN ('Stopzeichen ab Position : ', ende:5);
WRITELN ('Parity-Error : ', parity_err:5);
WRITELN ('Anzahl der gelesenen Zeichen : ', anzahl:5);
Decodiere;
WRITELN ('Kartendaten: ');
FOR i := 1 TO anzahl DO
WRITE (dec_data[i]);
WRITELN;
WRITELN;
END
ELSE WRITELN ('Startzeichen nicht gefunden');
END
ELSE
BEGIN
WRITELN ('KARTE konnte nicht gelesen werden');
END;
WRITELN('Wiederholen oder abbrechen ?');
ch := ReadKey;
ch := UpCase (ch);
UNTIL ch = 'Q';
Port[LPT] := 0; {* Versorgungsspannung des Lesers ausschalten *}
ClrScr;
END.
Das Programm wird durch die Eingabe von ,,LESEN" gestartet. Übergibt man keine
Parameter, werden für die Codierung der Daten und für die Adresse der
Druckerschnittstelle die Defaultwerte angenommen. Für die Codierung ist das 5-Bit und für die
Adresse $378. Möchte man z.B. die Spur 1 mit der 7-Bit-Codierung lesen und befindet
sich die Druckerschnittstelle an der Adresse $278 lautet der Aufruf:,,lesen c7 278". Der
folgende Ausdruck ieigt das Leseergebnis einer Testkarte, die auf Spur 3 mit
,,01020304050607080900" beschrieben ist.
Man erkennt, daß insgesamt 22 Zeichen korrekt gelesen wurden. Diese Zahl setzt sich
aus den 20 Zeichen sowie einem Start- und einem Stopzeichen zusammen. Zur
Diagnose werden die gelesenen Daten auch bitweise dargestellt. Das ermöglicht,
eine unbekannte Magnetkarte auf Startzeichen zu durchsuchen, falls diese nicht ISO-konform
codiert ist.
Im folgenden wird die Ansteuerung eines Magnetkartencodierers über einen
universellen Kontroller zum Lesen und Schreiben von Magnetkarten beschneben. Dieser
Kontroller wird über eine senelle Schnittstelle mit dem Personal Computer angesteuert. Auf
dem Markt existieren lediglich eine handvoll unterschiedliche Kontroller, deren
Befehlssätze kompatibel oder zumindest sehr ähnlich sind. Exemplansch ist ein Kontroller
zur Ansteuerung eines Magnetkartencodierers der MKW-Sene der Firma Omron
ausgewählt worden, ohne damit eine Wertung vorzunehmen. Dieser Kontroller wird u.a.
zusammen mit einem MKW-Magnetkartencodierer, Datenblättern und einem
Demo-Programm in einem Koffer angeboten. Damit steht potentiellen
Entwicklern ein Entwicklungs-Tool zur Verfügung, das eine hervorragende Starthilfe darstellt.
Das Demo-Programm zur Ansteuerung des Magnetkartencodierers befindet sich in dem Archiv,
in dem auch diese Files waren. Eine Beschreibung folgt in Abschnitt 9.2.6
In Abschnitt 9.1 wurde aufgezeigt, wie es ohne großen Hardwareaufwand möglich ist,
einen Einspur-Magnetkartenleser an die Druckerschnittstelle eines Personal Computers
anzuschließen. Zum Betrieb von Magnetkartencodierern bedarf es etwas mehr
Elektronik. Die handelsüblichen Kontroller sind in der Lage, alle drei Spuren einer
Magnetkarte gleichzeitig zu lesen bzw. zu beschreiben. Dazu muß man das Timing der
Magnetkartencodierer genau einhalten. Der hier beschnebene Kontroller verfügt über eine 280
CPU mit eigenem Betnebssystem in einem EPROM. Dieses Betriebssystem stellt dem
Anwender komplette Befehle zur Steuerung des Magnetkartencodierers bereit. Zur
Programmierung müssen diese Befehle zum Lesen oder Beschreiben einer Magnetkarte
vom Anwender als Stnngs dem Kontroller übermittelt werden. Etwaige
Statusriickmeldungen oder gelesene Daten von der Magnetkarte werden vom Kontroller
ebenfalls als
Strings übertragen. Eine Beschreibung der Kontroller-Befehle folgt im nächsten
Abschnitt. Zur asynchronen Übertragung zwischen Computer und Kontroller, ist dieser mit
einer 8251-UART ausgestattet. Über DIP-Schalter lassen sich die Übertragungsrate, die
Anzahl der Daten- und Stop-Bits sowie die Pantät auf gerade (even) oder ungerade
(odd) einstellen. Der Magnetkartencodierer ist über einen parallelen Port mit dem
Kontroller verbunden. Über weitere parallele Ports können Leuchtdioden LEDs zur Anzeige
des jeweiligen Status (Read, Write, Error und Ready), ein Drucker, eine 4x4-Tastatur
und eine LCD-Anzeige angeschlossen werden (Abbildung 9-3).
Abb. 9-3:Vereinfachtes Blockdiagramm des Kontrollers zur Ansteuerung eines
Magnetkartencodierers der MKW-Serie
Ein am Kontroller angeschlossener Drucker oder eine angeschlossene Anzeige können über den
Kontroller angesprochen werden. Dazu stehen entsprechende befehle zur Verfügung.
Der Befehlssatz des Kontrollers umfaßt 40 Befehle, die in zwei Gruppen eingeteilt wer-
den können. Dies sind zum einen Befehle ohne Daten und zum anderen Befehle mit
Daten. Die Formate der Befehlsgruppen sehen wie folgt aus
- Befehlsformat ohne Daten
<Befehlscode> <Spur-Nr.> CR LF
- Befehlsformat mit Daten
<Befehlscode> <Spur-Nr.> <Daten> CR LF
Für den Befehlscode, die Spur-Nummer und die Daten erwartet der Kontroller
ASCII-Zeichen. Beide Befehlsgruppen müssen mit einem Camage Return (CR, 0x0A) und
Line Feed (LF, PxOD) abgeschlossen werden. In der Regel überträgt der Personal
Computer diese Abschlußsequenz. Einige Compiler schließen die Übertragung zur seriellen
Schnittstelle nicht automatisch mit CR/LF ab. In diesen Fällen darf nicht vergessen
werden, nach der Spur-Nummer beim 1. Befehlsformat bzw. nach den Daten
beim 2. Befehlsformat, die beiden Bytes OxOA und OxOD zum Kontroller zu übertragen.
Der Befehlscode besteht aus ASCII-Zeichen, die eine zweistellige Zahl darstellen. Für die
Spur-Nummer sind die ASCII-Zeichen '1','2' und '3' zulässig, die derjeweiligen ISO-Spur
zugeordnet sind. Bei Befehlen, die kelner speziellen Spur zugeordnet sind, wird für
das ASCII-Zeichen 'O' übergeben. Bei den Daten sollte man sich an den
Zeichenvorrat der 5- und 7-Bit-Codierung (vgl. Abschnitt 4.5.1 und 4.5.2) halten.
Insbesondere sollte kein Stopzeichen geschneben werden, wenn es sich nicht wirklich um ein
gültiges Stopzeichen an der entsprechenden Stelle handelt. Der Lesevorgang wird
nämlich beim Antreffen des ersten Stopzeichens unterbrochen. Das erste Zeichen nach
diesem falschen Stopzeichen würde als LRC-Zeichen interpretiert, was mit größter
Sicherheit nicht zum gelesenen Datensatz paßt.
Nachfolgend wird die Befehlsübersicht des Kontrollers mit einer Beschreibung des
Befehlsformates und der Umsetzung in einem kurzen Beispielprogramm in der
Programmiersprache BASIC angegeben.
| Befehlscode: 00 |
Leerbefehl (NOP) |
| Format: |
'00' CR LF |
| Beschreibung |
Führt einen Leerbefehl (NOP) durch. Für muß
ASCII-Zeichen '0' eingesetzt werden.
|
| -------------------- |
| Beispiel |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1, "000" |
sendet den Befehlscode '000' for NOP zur COM1 |
| Befehlscode: 01 |
RESET |
| Format: |
'01' CR LF |
| Beschreibung |
Führt einen Warmstart durch. Für muß das ASCII-Zd-
chen '0'eingesetzt werden.
|
| -------------------- |
| Beispiel |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1, "010" |
sendet den Befehlscode '010' for RESET zur COM1 |
| Befehlscode: 04 |
Startzeichen setzen |
| Format: |
'04' CR LF |
| Beschreibung |
Setzt das zu verwendende Startzeichen für die unter angegebene Spur.
|
| -------------------- |
| Beispiel |
Das Startzeichen von Spur 1 soll auf ';' gesetzt werden |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"041"; |
sendet den Befehlscode ' 041' zur COM1 |
| 30 PRINT #1,";" |
sendet das zu verwendende Startzeichen ';' |
| Befehlscode: 05 |
Stopzeichen setzen |
| Format: |
'05' CR LF |
| Beschreibung |
Setzt das zu verwendende Stopzeichen für die unter angegebene Spur.
|
| -------------------- |
| Beispiel |
Das Stopzeichen von Spur 2 soll auf '?' gesetzt werden |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"052"; |
sendet den Befehlscode '052' zur COM1 |
| 30 PRINT #1,"?" |
sendet das zu verwendende Startzeichen '?' |
| Befehlscode: 06 |
Anzahl der Bit pro Zeichen setzen |
| Format: |
'06' CR LF |
| Beschreibung |
Setzt die Anzahl der zu verwendenden Bit pro Zeichen einschließ-
lich dem Paritäts-Bit für die unter angegebene Spur.
|
| -------------------- |
| Beispiel |
Die Anzahl der Bit pro Zeichen für Spur 1 soll 5 betragen |
| 10 OPEN "COMl:9600,E,7,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"061"; |
sendet den Befehlscode ' 061' COM1 |
| 30 PRINT #1, "5" |
sendet den Wert '5' for die Bit/Zeichen |
| Befehlscode: 07 |
Wiederholungszähler setzen |
| Format: |
'07' CR LF |
| Beschreibung |
Setzt den Wert des Wiederholungsz'ahlers, der beim Auftreten eines
Fehlers die Anzahl der Versuche angibt, wie oft die Magnetkarte er-
neut gelesen bzw. beschrieben wird. Zulässig ist ein Wert zwischen
' 1' und '9'.
|
| -------------------- |
| Beispiel |
Der Wert des Wiederholungsz'âhlers soll auf 3 gesetzt werden |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"070"; |
sendet den Befehlscode ' 070' zur COM1 |
| 30 PRINT #1, "3" |
sendet den Wert ' 3' für den Wiederholungszfihler |
| Befehlscode: 08 |
Norm setzen |
| Format: |
'08' CR LF |
| Beschreibung |
Setzt die Norm, nach der der Magnetkartencodierer die Magnetkarte
lesen bzw. beschreiben soll. Mögliche Angaben für sind
'B' für BIT-Norm, 'I' für ISO-Norm und 'S' für SIPASS-Norm.
|
| -------------------- |
| Beispiel |
Den Kontroller auf ISO-Norm setzen |
| 10 OPEN "COMl:9600,E,7,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"080"; |
sendet den Befehlscode '080' zur COM1 |
| 30 PRINT #1, "I" |
sendet den Wert 'I' für die ISO-Norm |
| Befehlscode: 09 |
Magnetkartentyp setzen |
| Format: |
'09' CR LF |
| Beschreibung |
Setzt den Magnetkartencodierer auf den Magnetkartentyp ein, falls
dieser HiCo-Karten beschreiben kann. Standardm'ißig werden von
Magnetkartengeräten LoCo-Karten verarbeitet. Mögliche Typen
sind 'H' für HiCo- und 'L' für LoCo-Karten.
|
| -------------------- |
| Beispiel |
Den Magnetkartencodierer auf LoCo-Karten setzen |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"090"; |
sendet den Befehlscode '090' zur COM1 |
| 30 PRINT #1,"L" |
sendet den Wert 'L' für LoCo-Karten |
| Befehlscode: 12 |
Abfrage, ob Magnetkarte im Gerät |
| Format: |
' 12' CR LF |
| Beschreibung |
Es wird abgefragt, ob sich eine Magnetkarte im Magnetkartenco-
dierer befindet. Der Kontroller gibt als Rückmeldung den Status
zurück. Der Status ist '00', falls sich eine Karte im Gerät befindet
und '08', falls nicht (vgl. Abschnitt 9.2.5).
|
| -------------------- |
| Beispiel |
Abfragen, ob sich eine Magnetkarte im Magnetkartencodierer befin-
det (Annahme: Karte befindet sich im Gerät)
|
| 10 OPEN "COMl:9600,E, |
7,1,CS,DS,LF" AS #1 initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"120" |
sendet den Befehlscode '120' zur COM1 |
| 30 INPUT #l,status$ |
liest den zurückgemeldeten Status |
| 40 PRINT status$ |
druckt den Status, der in diesem Fall '00' ist |
| Befehlscode: 15 |
Magnetkarte einziehen |
| Format: |
'15' CR LF |
| Beschreibung |
Magnetkartencodierer zieht die Magnetkarte ein, indem sie durch
das Gerät transportiert und nach hinten ausgeworfen wird.
|
| -------------------- |
| Beispiel |
Die Magnetkarte einziehen |
| 10 OPEN "COMl:9600,E,7,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1, "150" |
sendet den Befehlscode ' 150' zur COM1 |
| Befehlscode: 16 |
Magnetkarte einziehen und in hintere Ruheposition ablegen |
| Format: |
'16' CR LF |
| Beschreibung |
Magnetkartencodierer zieht die Magnetkarte ein und legt sie in die
hintere Ruheposition ab, d.h die Karte wird nicht an der Rückseite
des Gerätes ausgeworfen und kann somit wieder nach vorne trans-
portiert werden
|
| -------------------- |
| Beispiel |
Die Magnetkarte einziehen und hinten ablegen |
| 10 OPEN "COMl:9600,E,7,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"160" |
sendet den Befehlscode '160' zur COM1 |
| Befehlscode: 17 |
Magnetkarte vorne auswerfen |
| Format: |
'17' CR LF |
| Beschreibung |
Magnetkartencodierer wirft eine bereits im Gerät befindliche Ma-
gnetkarte vorne wieder aus.
|
| -------------------- |
| Beispiel |
Die Magnetkarte vorne auswerfen |
| 10 OPEN "COMl:9600,E,7,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1, "170" |
sendet den Befehlscode ' 170' COM1 |
| Befehlscode: 18 |
Magnetkarte einziehen, lesen und in hintere Ruheposition
ablegen
|
| Format: |
' 18' CR LF |
| Beschreibung |
Der Magnetkartencodierer zieht die Magnetkarte ein, liest die unter
angegebene Spur und legt die Karte in die hintere Ru-
heposition ab.
|
| -------------------- |
| Beispiel |
Spur 1 lesen und Karte hinten ablegen (Annahme: auf Spur 1 steht
'HEISE^VERLAG')
|
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1, "181" |
sendet den Befehlscode '181' zur COM1 |
| 30 INPUT #1,lesens |
Zeichenkette der Spur 1 einlesen |
| 40 PRINT lesens |
Inhalt ' HEISE^VERLAG' ausgeben |
| Befehlscode: 19 |
Magnetkarten beschreiben, verifizieren und vorne auswerfen |
| Format: |
' 19' CR LF |
| Beschreibung |
Der Magnetkartencodierer beschreibt eine bereits im Gerät befindli-
che Magnetkarte mit den in Zeichen angegebenen Daten auf der
unter angegebenen Spur. Der Kontroller hängt das
Start- und Stopzeichen, bei Verwendung der ISO-Norm auch das
LRC-Zeichen, automatisch an. Anschließend wird die Karte vorne
ausgeworfen.
|
| -------------------- |
| Beispiel |
Die Magnetkarte mit 'HALLO' auf Spur 1 beschreiben |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"191"; |
sendet den Befehlscode '191' zur COM1 |
| 30 PRINT #1,"HALLO" |
sendet die Zeichen 'HALLO', die geschrieben
werden sollen
|
| Befehlscode: 20 |
Magnetkarte lesen und in hintere Ruheposition ablegen |
| Format: |
'20' CR LF |
| Beschreibung |
Der Magnetkartencodierer liest die unter angegebene
Spur einer bereits im Gerät befindlichen Magnetkarte und legt sie in
die hintere Ruheposition ab.
|
| -------------------- |
| Beispiel |
Spur 1 lesen und Karte hinten ablegen (Annahme: auf Spur 1 steht
'HEISE^VERLAG')
|
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"201" |
sendet den Befehlscode '201' zur COM1 |
| 30 INPUT #1,lesens |
Zeichenkette der Spur 1 einlesen |
| 40 PRINT lesens |
Inhalt 'HEISE^VERLAG' ausgeben |
| Befehlscode: 21 |
Magnetkarte beschreiben, verifizieren und in hintere Ruheposi-
tion ablegen
|
| Format: |
'21' CR LF |
| Beschreibung |
Der Magnetkartencodierer beschreibt eine bereits im Gerät befindli-
che Magnetkarte mit der in Zeichen angegebenen Daten auf der
unter angegebenen Spur. Der Kontroller hängt das
Start- und Stopzeichen, bei Verwendung der ISO-Norm auch das
LRC-Zeichen, automatisch an. Anschließend wird die Karte in die
hintere Ruheposition abgelegt.
|
| -------------------- |
| Beispiel |
Die Magnetkarte mit 'HALLO' auf Spur 1 beschreiben |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"211"; |
sendet den Befehlscode '211' zur COM1 |
| 30 PRINT #1,"HALLO" |
sendet die Zeichenkette 'HALLO' |
| Befehlscode: 22 |
Magnetkarte einziehen, lesen und vorne auswerfen |
| Format: |
'22' CR LF |
| Beschreibung |
Der Magnetkartencodierer zieht die Magnetkarte ein, liest die unter
angegebene Spur und wirft sie vorne aus.
|
| -------------------- |
| Beispiel |
Spur 3 lesen und Karte vorne ausweden (Annahme: auf Spur 3 steht
'30625')
|
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"223" |
sendet den Befehlscode '223' zur COM1 |
| 30 INPUT #1,lesens |
Zeichenkette der Spur 3 einlesen |
| 40 PRINT lesens |
Inhalt '30625' ausgeben |
| Befehlscode: 23 |
Magnetkarte einziehen, beschreiben, verifizieren und vorne
auswerfen
|
| Format: |
'23' > CR LF |
| Beschreibung |
Der Magnetkartencodierer zieht die Magnetkarte vorne ein, be-
schreibt sie mit den in Zeichen angegebenen Daten auf der unter
angegebenen Spur. Der Kontroller hängt das Start- und
Stopzeichen, bei Verwendung der ISO-Norm auch das LRC-Zei-
chen, automatisch an. Anschließend wird die Karte vorne ausge-
worfen.
|
| -------------------- |
| Beispiel |
Die Magnetkarte mit 'HALLO' auf Spur 1 beschreiben |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"231"; |
sendet den Befehlscode '231' zur COM1 |
| 30 PRINT #1,"HALLO" |
sendet die Zeichenkette 'HALLO', die
geschrieben werden sollen
|
| Befehlscode: 24 |
Magnetkarte einziehen, lesen und hinten auswerfen |
| Format: |
'24' CR LF |
| Beschreibung |
Der Magnetkartencodierer zieht die Magnetkarte ein, liest die unter
angegebene Spur und wirft sie an der Rückseite des
Ger'es aus.
|
| -------------------- |
| Beispiel |
Spur 3 lesen und Karte hinten auswerfen (Annahme: auf Spur 3
steht ' 30625')
|
| 10 OPSâ "COM1:9600, E, 7,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1, "243" |
sendet den Befehlscode '243' zur COM1 |
| 30 INPUT #1,lesens |
Zeichen der Spur 3 einlesen |
| 40 PRINT lesens |
Inhalt "30625" ausgeben |
| Befehlscode: 25 |
Magnetkarte einziehen, beschreiben, verifizieren und hinten
auswerfen
|
| Format: |
'25' CR LF |
| Beschreibung |
Der Magnetkartencodierer zieht die Magnetkarte vorne ein, be-
schreibt sie mit den in Zeichen angegebenen Daten auf der unter
angegebenen Spur. Der Kontroller hängt das Start- und
Stopzeichen, bei Verwendung der ISO-Norm auch das LRC-Zei-
chen, automatisch an. Anschließend wird die Karte an der Rückseite
des Gerätes ausgeworfen.
|
| -------------------- |
| Beispiel |
Die Magnetkarte mit 'HALLO' auf Spur 1 beschreiben |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1, "251"; |
sendet den Befehlscode '251' zur COM1 |
| 30 PRINT #1, "HALLO" |
sendet die Zeichenkette 'HALLO', die
geschrieben werden sollen
|
| Befehlscode: 26 |
Magnetkarte lesen und hinten auswerfen |
| Format: |
'26' CR LF |
| Beschreibung |
Der Magnetkartencodierer liest die mit angegebene
Spur einer im Gerät befindlichen Magnetkarte und wirft sie an der
Rückseite des Gerätes aus.
|
| -------------------- |
| Beispiel |
Spur 1 lesen und hinten auswerfen (Annahme: auf Spur 1 steht
, HEiSE^VERLAG,)
|
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"261" |
sendet den Befehlscode '261' zur COM1 |
| 30 INPUT #1,lesens |
Zeichen der Spur 1 einlesen |
| 40 PRINT lesens |
Inhalt 'HEISE^VERLAG' ausgeben |
| Befehlscode: 27 |
Magnetkarte beschreiben, verifizieren und hinten auswerfen |
| Format: |
'27' CR LF |
| Beschreibung |
Der Magnetkartencodierer beschreibt eine bereits im Gerät befindli-
che Magnetkarte mit der in Zeichen angegebenen Daten auf der
unter angegebenen Spur. Der Kontroller hängt das
Start- und Stopzeichen, bei Verwendung der ISO-Norm auch das
LRC-Zeichen, automatisch an. Anschließend wird die Karte an der
Rückseite des Gerätes ausgeworfen.
|
| -------------------- |
| Beispiel |
Magnetkarte mit 'HALLO' auf Spur 1 beschreiben |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"271"; |
sendet den Befehlscode '271' zur COM1 |
| 30 PRINT #1, "HALLO" |
sendet die Zeichenkette 'HALLO', die
geschrieben werden sollen
|
| Befehlscode: 28 |
Magnetkarte lesen und in vorderer Ruheposition ablegen |
| Format: |
'28' CR LF |
| Beschreibung |
Der Magnetkartencodierer liest die unter angegebene
Spur einer bereits im Gerät befindlichen Magnetkarte und legt sie in
die vordere Ruheposition ab.
|
| -------------------- |
| Beispiel |
Spur 1 lesen und Karte vorne ablegen (Annahme: auf Spur 1 steht
'HEISE^VERLAG')
|
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"281" |
sendet den Befehlscode '281' zur COM1 |
| 30 INPUT #1,lesens |
Zeichen der Spur 1 einlesen |
| 40 PRINT lesens |
Inhalt 'HEISE^VERLAG' ausgeben |
| Befehlscode: 30 |
Bit-Speicher lesen |
| Format: |
'30' CR LF |
| Beschreibung |
Die Bit-Positionen 001 bis 200 des Bit-Speichers werden gelesen.
Im Bit-Speicher befinden sich die Daten des letzten Lese- bzw. Ve-
rifikationsvo, rgangs. Dieser Befehl dient zur Kartendiagnose.
|
| Befehlscode: 31 |
Bit-Speicher lesen |
| Format: |
'31' CR LF |
| Beschreibung |
Die Bit-Positionen 201 bis 400 des Bit-Speichers werden gelesen.
Im Bit-Speicher befinden sich die Daten des letzten Lese- bzw. Ve-
rifikationsvorgangs. Dieser Befehl dient zur Kartendiagnose.
|
| Befehlscode: 32 |
Bit-Speicher lesen |
| Format: |
'32' CR LF |
| Beschreibung |
Die Bit-Positionen 401 bis 600 des Bit-Speichers werden gelesen.
Im Bit-Speicher befinden sich die Daten des letzten Lese- bzw. Ve-
rifikationsvorgangs. Dieser Befehl dient zur Kartendiagnose. |
| Befehlscode: 33 |
Bit-Speicher lesen |
| Format: |
'33' CR LF |
| Beschreibung |
Die Bit-Positionen 601 bis 800 des Bit-Speichers werden gelesen.
Im Bit-Speicher befinden sich die Daten des letzten Lese- bzw. Ve-
rifikationsvorgangs. Dieser Befehl dient zur Kartendiagnose. |
| Befehlscode: 34 |
Bit-Speicher lesen |
| Format: |
'34' CR LF |
| Beschreibung |
Die Bit-Positionen 001 bis 800 des Bit-Speichers werden gelesen.
Im Bit-Speicher befinden sich die Daten des letzten Lese- bzw. Ve-
rifikationsvorganges. Dieser Befehl dient zur Kartendiagnose. |
| Befehlscode: 40 |
Shutter-Modus setzen
|
| Format: |
'40' CR LF
|
| Beschreibung |
Setzt den Betriebsmodus des Shutters, falls einer vorhanden ist.
Mögliche Moduswerte sind 'D', um den Shutter zu deaktivieren
(disable) oder 'E' um ihn zu aktivieren (enable). Ferner kann mit
der Übergabe des Moduswertes 'M' eine Magnetspurüberprüfung
aktiviert bzw. mit 'N' deaktiviert werden.
|
| -------------------- |
| Beispiel |
Shutters des Magnetkartencodieres aktivieren
|
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1, "400";
|
sendet den Befehlscode '400' zur COM1
|
| 30 PRINT #1, "E"
|
sendet den Wert 'E' zur Aktivierung des Shutters
|
| Befehlscode: 41 |
wartezeit für einen Befehl setzen |
| Format: |
'41' CR LF
|
| Beschreibung |
Setzt die Wartezeit des Kontrollers, auf die er für einen Befehl war-
tet bis ein TIME-OUT Fehler gemeldet wird. Der Wert Zeit gibt die
Wartezeit in Sekunden an. Zulässige Werte sind von '00' bis '99'
Sekunden.
|
| -------------------- |
| Beispiel |
Wartezeit des Kontrollers auf 3 Sekunden setzen
|
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"410"; |
sendet den Befehlscode '410' zur COM1
|
| 30 PRIN #1,"03" |
sendet den Wert '03' für 3 Sekunden Wartezeit
|
| Befehlscode: 50 |
Warten auf eine Magnetkarte
|
| Format: |
'50' CR LF
|
| Beschreibung |
Magnetkartencodierer wartet darauf, daß eine Magnetkarte an der
Rückseite des Gerätes eingesteckt wird. Der Kontroller gibt als
Rückmeldung den Status zurück. Der Status ist '01', falls eine Karte
eingesteckt wird (vgl. Abschnitt 9.2.5).
|
| -------------------- |
| Beispiel |
Kontroller wartet auf eine Karte an der Rückseite
|
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"500"
|
liest den rückgemeldeten Status des
|
| 30 INPUT #1,status$
|
Kontrollers ein
|
| Befehlscode: 52 |
Magnetkarte von der Rückseite einziehen, lesen und vorne aus-
werfen |
| Format: |
'52' CR LF
|
| Beschreibung |
Der Magnetkartencodierer zieht die Magnetkarte von der Rückseite
des Gerätes ein, liest die unter angegebene Spur und
wirft sie vorne aus.
|
| -------------------- |
| Beispiel |
Spur 3 lesen und Karte vorne auswerfen (Annahme: auf Spur 3 steht
'30625') |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"523"
|
sendet den Befehlscode '523' zur COM1
|
| 30 INPUT #1,lesens
|
Zeichen der Spur 3 einlesen
|
| 40 PRINT lesens
|
Inhalt '30625' ausgeben
|
| Befehlscode: 53 |
Magnetkarte von der Rückseite einziehen, beschreiben, verifi-
zieren und vorne auswerfen |
| Format: |
'53' CR LF |
| Beschreibung |
Der Magnetkartencodierer zieht die Magnetkarte von der Rückseite
des Gerätes ein, beschreibt sie mit den in Zeichen angegebenen
Daten auf der unter angegebenen Spur. Der Kontroller
hängt das Start- und Stopzeichen, bei Verwendung der ISO-Norm
auch das LRC-Zeichen, automatisch an. Anschließend wird die
Karte vorne ausgeworfen.
|
| -------------------- |
| Beispiel |
Magnetkarte mit 'HALLO' auf Spur 1 beschreiben
|
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"531";
|
sendet den Befehlscode '531' zur COM1
|
| 30 PRINT #1,"HALLO"
|
sendet die Zeichen 'HALLO', die geschrieben
werden sollen
|
| Befehlscode: 62 |
Status der Druckerschnittstelle einlesen
|
| Format: |
'62' CR LF |
| Beschreibung |
Der Kontroller liest den Status der Druckerschnittstelle ein. Die
Länge des Status ist 8 Byte, da der Status aus 8 ASCII-Werten aus
'0' und '1' besteht.
|
| -------------------- |
| Beispiel |
Status der Druckerschnittstelle einlesen (Annahme: Status ist
'11101001') |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"620"
|
sendet den Befehlscode '620' zur COM1
|
| 30 INPUT #1,status$
|
Status einlesen
|
| 40 PRINT status$
|
Inhalt '11101001' ausgeben
|
| Befehlscode: 63 |
Bit-Muster an Druckerschnittstelle ausgeben
|
| Format: |
'63' CR LF
|
| Beschreibung |
Der Kontroller gibt die unter Bit-Muster angegebene Informationen
an die Druckerschnittstelle aus. Das Bit-Muster muß eine Länge
von 8 Byte haben und setzt sich aus ASCII-Zeichen von '0' und ' 1'
zusammen.
|
| -------------------- |
| Beispiel |
Bit-Muster '01001001' an Druckerschnittstelle ausgeben
|
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT g1,"630" |
sendet den Befehlscode '630' zur COM1 |
| 30 PRINT #1,"01001001" |
sendet die Bit-Kombination '01001001' an die
Druckerschnittstelle |
| Befehlscode: 65 |
Zeichen auf der LCD-Anzeige ausgeben |
| Format: |
'65' CR LF |
| Beschreibung |
Der Kontroller gibt die in Zeichen angegebene ASCII-Werte auf der
LCD-Anzeige (falls vorhanden) des Kontrollers aus. Die Länge der
Daten darf maximal 32 Zeichen betragen.
|
| -------------------- |
| Beispiel |
Zeichenkette 'FACHBUCH' auf der LCD-Anzeige ausgeben |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"650" |
sendet den Befehlscode '650' zur COM1 |
| 30 PRINT #1,"FACHBUCH" |
sendet das Zeichen 'FACHBUCH' an die LCD-
Anzeige |
| Befehlscode: 70 |
Karte in die hintere Ruheposition transportieren |
| Format: |
'70' CR LF |
| Beschreibung |
Der Magnetkartencodierer transportiert eine bereits im Gerät be-
findliche Magnetkarte in die hintere Ruheposition.
|
| -------------------- |
| Beispiel |
Magnetkarte in die hintere Ruheposition transportieren |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"700" |
sendet den Befehlscode '700' zur COM1 |
| Befehlscode: 71 |
Karte in die vordere Ruheposition transportieren |
| Format: |
'71' CR LF |
| Beschreibung |
Der Magnetkartencodierer transportiert eine bereits im Gerät be-
findliche Magnetkarte in die vordere Ruheposition.
|
| -------------------- |
| Beispiel |
Magnetkarte in die vordere Ruheposition transportieren |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1, "710" |
sendet den Befehlscode '710' zur COM1 |
| Befehlscode: 73 |
Karte in die MM-Modulposition transportieren |
| Format: |
'73' CR LF |
| Beschreibung |
Der Magnetkartencodierer transportiert eine bereits im Gerät be-
findliche Magnetkarte in die MM-Modulposition.
|
| -------------------- |
| Beispiel |
Magnetkarte in die vordere Ruheposition transportieren |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT #1,"730" |
sendet den Befehlscode '730' zur COM1 |
| Befehlscode: 99 |
Versionsnummer des Betriebssystems abfragen |
| Format: |
'99' CR LF |
| Beschreibung |
Der Kontroller sendet die aktuelle Versionsnummer des Betriebssystems
|
| -------------------- |
| Beispiel |
Versionsnummer |
| 10 OPEN "COMl :9600,E, 7 ,1,CS,DS,LF" AS #1 |
initialisiert die serielle Schnittstelle COM1 |
| 20 PRINT '1,"990" |
sendet den Befehlscode '990' zur COM1 |
| 30 INPUT '1, version$ |
die Versionsnummer in verson$ einlesen |
Nachdem der Kontroller die Ausführung eines Befehls beendet hat, sendet dieser eine
Rückmeldung. Diese beinhalten den Status des Kontrollers, die Spur auf der sich der
Befehl bezieht und eventuelle Daten. Die Übertragung wird vom Kontroller mit einem
CR/LF abgeschlossen. Die Formate der Rückmeldungen sind ähnlich wie die
Befehlsformate aufgebaut, und sehen wie folgt aus
- Rückmeldung ohne Daten
<Status> <Spur-Nr.> CR LF
- Befehlsformat mit Daten
<Status> <Spur-Nr.> <Daten> CR LF
Die Tabelle 9-2 faßt die Statuswerte zusammen, die der Kontroller als mögliche
Rückgabemeldungen sendet.
| Status |
Bedeutung |
Erläuterung |
| 00 |
Übertragung o.k. |
|
| 01 |
LED-1 aktiv |
LED zeigt an, daß die Karte eingesteckt ist |
| 03 |
time-out |
Beim Empfangen der Daten ist eine
Zeitüberschreitung aufgetreten |
| 04 |
Übertragungsfehler |
Beim Empfangen der Daten ist ein
Übertragungsfehler aufgetreten |
| 05 |
Syntax Error |
Befehl ist nicht bekannt oder fehlerhaft
angegeben |
| 06 |
Es wurden mehr als 1024 Daten empfangen |
|
| 07 |
Spurangabe falsch |
Es wurde keine gültige Spurnummer angegeben |
| 08 |
Fehler beim Umgang mit der Karte |
|
| 09 |
Shutter-Error |
Shutter ist nicht vorhanden oder klemmt |
| 11 |
LRC-Zeichen falsch |
LRC-Zeichen paßt nicht zum Datensatz |
| 12 |
Verify-Error |
Beim Vergleich der Daten nach
Schreibvorgang ist ein Fehler aufgetreten |
| 14 |
Parity-Error |
Es ist ein Fehler beim Pantäts-Bit aufgetreten |
| 17 |
Bitspeicher Überlauf |
Beim Lesen ist der Bitspeicher übergelaufen |
| 18 |
Stopzeichen fehlt |
Im Datensatz fehlt ein gültiges Stopzeichen |
| 19 |
Karte leer |
Beim Lesen wurde festgestellt, daß die Karte
nicht beschrieben ist |
| 20 |
Startzeichen falsch |
Es wurde kein gültiges Startzeichen im
Datensatz gefunden |
| 21 |
Kartenende unerwartet erreicht |
Dieser Fehler tritt auf, wenn der zu
schreibende Datensatz zu lang ist |
Tabelle 9-2:
Statusübersicht
In dem Archiv, aus dem diese Dateien stammen, befindet sich das Programm ,,CARD.EXE" der
Firma Newtec Ebert GmbH, welches unter dem Betriebssystem MS-DOS auf einem PC
lauffähig ist. Mit dem Programm ,,CARD" kann man den in Abschnitt 9.2 beschnebe-
nen Kontroller ansteuern. Das Programm ist menügesteuert, so daß die Bedienung kei-
nerlei Schwiengkeiten bereiten sollte. Neben Menüpunkten, mit denen man eine kom-
plette Spur auf der Magnetkarte lesen bzw. beschreiben kann, gibt es einen Testmodus
für die einzelnen Kontrollerbefehle, die in Abschnitt 9.2.3 besprochen wurden. Ferner
kann man jede der drei Spuren im Bit-Modus untersuchen.
In diesem Abschnitt wird ein einfaches Interface vorgestellt, mit dem es möglich ist,
eine Spur einer Magnetkarte zu lesen und über die senelle Schnittstelle einem Rechner
zu übertragen. Damit ist man nicht mehr wie in Abschnitt 9.1 auf einen Rechnertyp
festgelegt. Das Interface ist in der Lage sowohl die 5-Bit- als auch die 7-Bit-Codierung
zu verarbeiten. Kernstück des Interfaces ist ein Mikrokontroller PIC16C58A der Firma
Microchip (siehe Abbildung 9-4; Tabelle 9-3). Dieser besitzt einen internen 2Kx12
Bit EPROM Speicher für das Programm und einen 72x8 Bit Speicher für Daten. Im
Programmspeicher ist das Programm zum Lesen der Magnetkarte untergebracht. Die
Umstellung von der 5- auf 'i~-Bit-Codierung erfolgt durch die Brücke Brl. Bei gesteckter
Briicke wird mit 5-Bit gelesen, ansonsten mit 7-Bit. Die Abfrage erfolgt nur beim
Einschalten des Gerätes. Möchte man also die Codierung ändern mit der gelesen werden
soll, muß man das Interface durch Aus- und wieder Einschalten reseten. Eine
Umstellung der zu lesenden Bit-Dichte ist nicht erforderlich, da unabhängig davon gelesen
wird. Das Protokoll für die Übertragung der gelesenen Daten über die senelle
Schnittstelle ist softwaremäßig ebenfalls im Programmspeicher des Mikrokontrollers
untergebracht. Die Pegelanpassung zwischen Mikrokontroller und seneller Schnittstelle
übernimmt ein Schnittstellentreiber MAX232, der hier in seiner Standardbeschaltung laut
Datenblatt Verwendung findet. Übertragen werden mit den Parametern 9600 Baud,
8 Daten-Bits, ohne Pantät und einem Stop-Bit.
Abb. 9-4:Schaltplan des Magnetkartenleser-Interfaces mit serieller Schnittstelle
Halbleiter
| IC1 |
Mikrokontroller PIC16C58A(programmiert) |
| IC2 |
MAX232 |
|
|
|
Kondensatoren
| C1...C5 |
4.7 mü F/35V |
| C6,C7 |
20 pF |
|
|
|
Sonstiges
| Br1 |
Jumper |
| Xt1 |
Quarz 8 MHz |
| J1 |
Pfostenleiste 9-polig |
| J2 |
Sub-D-Stecker 9-polig female |
| IC-Fassung 18-polig |
|
| IC-Fassung 16-polig |
|
| Platine |
|
| Durchzugleser Omron 3S4YR-HNR4 |
|
|
|
Das Interface ist für einen Magnetkartenleser der Serie HNR entwickelt worden. Die
Wahl fiel auf diesen 5p, da man einen HNR Magnetkartenleser auf jede beliebige Spur
und Bit-Dichte stellen kann. Prinzipiell kann jeder Magnetkartenleser am Interface
betneben werden. Man sollte aber darauf achten, daß bei Venvendung eines
Einstecklesers, die gesamte Spur gelesen werden kann (vgl. dazu Kapitel 7), da das Programm des
Mikrokontrollers ein gültiges Endzeichen erwartet. Sollte der verwendete
Magnetkartenleser über Ausgangstreiber mit ,,open collector" verfügen, so werden drei
,,pull up"
Widerstände an den Signalen RCP, RDP und CLS nötig.
Ein weiteres Beispiel für den Einsatz der Magnetkarte ist die Zugangs- bzw. die
Zutrittskontrolle. Im folgenden wird eine einfache Schaltung vorgestellt, mit der die
Realisierung einer solchen Kontrolle leicht möglich ist. Dabei können bereits vorhandene
Magnetkarten, wie EC- oder Kreditkarte, benutzt werden. Als Magnetkartenleser ist
ein Einsteckleser der Sene SBR gewählt worden. Damit man sowohl EC- und
Kreditkarte verwenden kann, muß man die Daten der Spur 2 lesen können. Die Auswahl der
Spur 2 für die zu lesenden Daten bietet zudem den Vorteil, daß bei beiden
Magnetkartentypen die Spur 2 mit 5-Bit codiert ist. Das Programm des Mikrokontrollers braucht
also nicht zwischen zwei unterschiedlichen Codierungen zu unterscheiden. Die
vorgestellte Schaltung (siehe Abbildung 9-5; Tabelle 9-4) ist in der Lage, die Daten von
maximal vier Magnetkarten zu lesen und anschließend als berechtigte Karten zu identifizieren.
Abb. 9-5:Schaltplan der Zutrittskontrolle mit Magnetkarte
Halbleiter Kondensatoren
IC1 Mikrokontroller PIC16C58A C1,C2 20 pF
(programmiert)
IC2 EEPROM 93LC46 Sonstiges
T1 Transistor BC 547 XT1 Quarz 4 MHz
D1 Diode IN4148 S0...S2 DIL-Schalter
D2 Leuchtdiode J1 Pfostenleiste 10-polig
IC-Fassung 18-polig
Widerstände IC-Fassung 8-polig
R1...R7 47 k Ohm Relais 5V
R8 270 Ohm Platine
R9 1 k Ohm Einsteckleser Omron 3S4YR-SBR4-20
Das geschieht sehr einfach: Durch das Schließen des Schalters S2 wird die
Schaltung in den Lernmodus gebracht. Anschließend wird mit den Schaltern SO und S1
binär eine von vier Speicherstellen ausgewählt, in der die berechtigten Daten der
Magnetkarte gespeichert werden sollen. Die Daten der Magnetkarte, die dann eingeschoben
wird, werden in einem seriellen EEPROM gespeichert, und bleiben auch nach
Ausschalten der Versorgungsspannung erhalten. Zum Abschließen des
Programmiervorgangs muß der Schalter S2 wieder geöffnet werden. Für die Programmierung
einer weiteren Karte wird der Vorgang einfach wiederholt.
Damit ist es möglich, gezielt eine Speicherstelle im EEPROM anzusprechen und mit
den gewünschten Daten zu beschreiben. Das gezielte Löschen der Daten einer
Magnetkarte, die keine Berechtigung mehr haben soll, ist ebenfalls möglich. Dazu wird der
Schalter S2 geschlossen und die entsprechende Speicherstelle mit den Schaltern SO und
S1 ausgewählt. Es wird diesmal keine Magnetkarte eingeschoben, sondern nur der
Schalter S2 geöffnet. Die Daten der ausgewählten Speicherstelle sind somit gelöscht.
Im normalen Betriebsmodus (S2 geöffnet) haben die Schalter SO und S1 eine weitere
Funktion. Wird eine Magnetkarte als berechtigt erkannt, zieht ein Relais an. Die Zeit
wie lange das Relais angezogen bleiben soll kann mit den Schaltern SO und S1 binär in
Stufen von jeweils einer Sekunde eingestellt werden. Tabelle 9-5 faßt die Funktionen
der Schalterstellungen zusammen. Auskunft über den Status der Schaltung gibt eine
Leuchtdiode. Tntt während der Programmierung oder im normalen Betnebsmodus ein
Fehler auf, blinkt die Leuchtdiode schnell für eine Zeit von 2 Sekunden. War ein
Programmierversuch erfolgreich, leuchtet sie für 1 Sekunde auf. Wird im normalen
Betnebsmodus eine Magnetkarte als berechtigt erkannt, leuchtet die Diode solange auf,
wie das Relais anzieht.
| S2 |
S1 |
S0 |
Funktion |
| 1 |
0 |
0 |
Programmierung der Speicherstelle 0 |
| 1 |
0 |
1 |
Programmierung der Speicherstelle 1 |
| 1 |
1 |
0 |
Programmierung der Speicherstelle 2 |
| 1 |
1 |
1 |
Programmierung der Speicherstelle 3 |
|
|
| S2 |
S1 |
S0 |
Funktion |
| 1 |
0 |
0 |
Relais zieht 1s an |
| 1 |
0 |
1 |
Relais zieht 2s an |
| 1 |
1 |
0 |
Relais zieht 3s an |
| 1 |
1 |
1 |
Relais zieht 4s an |
|