|
6.7.3 Die Mitutoyo-Digimatic-Routine
6.7.3.1 Mitutoyo: erforderliche Interfacekonfiguration
Für Mitutoyo-Meßmittel muss nur wenig eingestellt werden. Der Massejumper J38 für den Optokoppler auf der Platine muss gesteckt sein, da sonst der Optokoppler die Request-Leitung des
Mitutoyo-Meßmittels nicht auf Masse ziehen kann. Weiterhin muss die Triggerschwelle für die Eingangskanäle 1 und 2 mit demnäher am MAX232 (IC1) liegenden T-Jumper J21 auf +1.4V eingestellt werden. Sämtliche anderen
Jumper des Interfaces sind für Mitutoyo nicht von Bedeutung und sollten auf die in 7.3 beschriebenen Standard-Werte voreingestellt werden.
6.7.3.2 Mitutoyo: Implementiertes Datenformat
Es werden 13 Digits (Ziffern) zu je 4 Bit als Bit-Serie, beginnend bei 2 vom ersten Digit (d1) bis 2 vom
letzten Digit (d13) vom Interface erwartet. Die Bedeutung der einzelnen Digits wird der Vollständigkeit halber hier noch einmal in der untenstehenden Grafik erläutert:
Abb. 28: Das Mitutoyo-Datenformat
6.7.3.3 Mitutoyo: Algorithmus
Wenn Mitutoyo-Meßmittel-Lese-Routine gestartet wird, so werden als erstes die
Speicherbereiche für die Meßdaten (direkt vom Meßmittel empfangen) und Sendedaten (umgewandelte und aufbereitete Meßdaten) gelöscht. Anschliessend wird der Optokoppler auf
der Platine eingeschaltet, der dadurch die Request-Leitung auf "Low" zieht und damit die Meßdaten vom Meßmittel anfordert. Nun wird der Timer gestartet, damit nach zwei Sekunden
vergeblichen Wartens die Pollingschleife für die Taktleitung abgebrochen wird. In P_ERROR wird eine 1 eingetragen, um anzuzeigen, dass, falls ein Fehler auftreten sollte, dieser beim ersten Digit
auftrat. Nun wird eine Schleife 13 mal durchlaufen, in der jeweils ein Digit gelesen und weggespeichert wird, der Schleifenzähler dekrementiert und P_ERROR inkrementiert wird. Ist
der Schleifenzähler = 0, so wurde die korrekte Anzahl von Digits gelesen.
In der Routine, in der die einzelnen Digits eingelesen werden, wird eine Schleife viermal
durchlaufen, welche jedesmal ein Bit einliest und abspeichert. Dazu wird zuerst auf einen "High"-Pegel auf der Taktleitung gewartet. Wird dieser festgestellt, so wird auf einen "Low"-Pegel
gewartet. Während dieser Warteschleifen wird laufend der Timeout-Zähler COUNT überprüft, ob die voreingestellte Timeout-Zeit schon verstrichen ist und im Fehlerfalle dies wie schon erwähnt angezeigt.
Unmittelbar nach der fallenden Flanke wird der Zustand auf der Datenleitung abgefragt. Ist sie ="1", so wird das Carry-Flag im Statusregister des Prozessors gesetzt, ist sie ="0", so wird es
gelöscht. Das vereinfacht die seriell-parallel-Wandlung der Daten, da es mit dem Befehl ROR (Rotiere rechts) einfach möglich ist, serielle Werte nacheinander über das Carry-Flag in eine
Speicherzelle zu schreiben. Dabei wandern alle Bits in der betreffenden Speicherstelle um einen Platz nach rechts (zu niedrigeren Wertigkeiten), das LSB wird "herausgeschoben" und geht in das
Carry-Flag, während der Inhalt des Carry-Flags als MSB in das rotierende Speicher-Byte eingesetzt wird. Wenn nun das Speicher-Byte vorher gelöscht war, so befindet sich nach dem
viermaligen Durchlaufen dieser Schleife in den Bits 0 (LSB) bis Bit 3 einschliesslich Nullen, in Bit 4 ist das erste Datenbit, in Bit 5 das zweite, in Bit 6 das dritte und in Bit 7 (MSB) das vierte und
letzte Datenbit. Auf diese Weise werden alle 13 Digits eingelesen und im RAM-Bereich mit dem Namen MESSDTA (Meßmitteldaten) abgelegt.
Nachdem die Daten vollständig empfangen wurden, wird der Timer gestoppt und der Optokoppler ausgeschaltet, so dass die Datenanforderung zurückgenommen wird. Anschliessend
werden die 6 Datendigits und das Digit, welches die Lage des Dezimalpunktes angibt, um jeweils vier Bit nach rechts geschoben, damit das LSB der Daten auch wirklich in Bit 0 des
Speicherbytes, in dem es abgelegt wurde, steht. Diese Speicheroperationen spielten sich nur im Meßmittel-daten-RAM ab. Nun werden die Sendedaten vorbereitet.
Zuerst kommt die Zeichenkette "00A" an den Anfang des Sende-RAMs, welche als Brankamp-interne Kennung für Meßmitteldaten verwandt wird. Nun wird die Vorzeichenstelle im
Meßdaten-RAM geprüft und, wenn dort eine 0 steht, ein ASCII-Zeichen "+", sonst ein "-" in den Sendedatenspeicher an die Kennung angehängt. Dann werden alle 6 Datendigits aus dem
Meßdaten-RAM in das Sendedaten-RAM kopiert und zu deren Wert dezimal 32 dazuaddiert, um die BCD-Daten in ASCII-Zeichen zu wandeln (BCD 0 = ASCII 32).
Jetzt wird das die Anzahl der Nachkommastellen beschreibende Digit als Schleifenzähler für eine Schleife verwendet, welche nacheinander die ASCII-Digits vom Ende der Meßdaten im
Sende-RAM beginnend um eine Stelle nach rechts byteweise weiterschiebt. Wenn diese Schleife so oft durchlaufen wurde, wie das Digit vorgab, so ist genau an der Stelle zwischen den
Meßdaten-Digits (Im Sende-RAM), wo der Dezimalpunkt richtig eingesetzt werden muss, eine Lücke entstanden, welche nur noch mit eine Dezimalpunkt-Zeichen (ASCII $2E) gefüllt werden muss.
Zum Abschluss der Meßdaten im Sende-RAM wird am Ende der Daten ein CR (ASCII $0D) angehängt, um für nachfolgende Programmteile das Ende der Daten anzuzeigen.
6.7.3.4 Mitutoyo: Fehlerbehandlung, Fehlercodes
Als Fehlercode ist nur ein Timeout-Fehler mit zwei Sekunden nach Anforderung der Daten
implementiert. Es wird geprüft, ob innerhalb von zwei Sekunden alle 52 Taktimpulse (13 Digits mit je 4 Bits) auflaufen. Der Fehlercode entspricht dem Digit, bei dem der Fehler auftrat. Wurde
z.B. die Verbindung zwischen dem Meßmittel und dem Interface bei der Übertragung des 5. Digits aufgetrennt, so wird nach zwei Sekunden ab Datenanforderung der Fehlercode 5 erzeugt
und über ERRBLNK angezeigt (sofern die LED-Monitorplatine gesteckt ist).
Übersicht schafft das Ablaufdiagramm:
 |
Abb. 29: Ablaufdiagramm der Mitutoyo-Lese-Routine
6.7.3.5 Mitutoyo: Erforderliches Kabel, Pinbelegungen:
Es wird das Kabel vom alten Multiplexer 1080 weiterverwendet und ein neues, hier beschriebenes Kabel zusätzlich angesteckt. Am Meßmittel wird ein 8-poliger DIN-Stecker
verwendet, am Meßmittelinterface kommt ein 25-poliger Sub-D-Stecker zum Einsatz.
|
Mitutoyo Stecker
|
Kabel
|
25pol. Sub-D Stecker Interface
|
|
Pin 1 GND
|
weiss
|
GND Pin 13
|
|
Pin 6 Daten
|
grün
|
Daten Pin 21 Input 1 am Interface
|
|
Pin 7 Clock
|
rot
|
Clock Pin 20 Input 2 am Interface
|
|
Pin 8 Request
|
blau
|
Request Pin 3 Opto open Collector
|
|
|