Display-Steuerung mit LC-80 history menue

liegt noch in der Schule

LC 80 als Steuerrechner für ein VQC 10-Display

Der Lerncomputer LC 80 eignet sich besonders zur Realisierung von Steuerungsproblemen. 
Im Beitrag wird eine programmtechnische Lösung vorgestellt, die eine einfache Robotersteuerung mit dem LC 80 ermöglicht und für, den Kleinrationalisierungsmittelbau interessante Möglichkeiten eröffnet.

Dr. Ing. ACHIM LIERS und MATTHIAS MICHEL Mitteilung aus der Pädagogischen Hochschule „Karl Liebknecht" Potsdam

Im Rahmen der Aus- und Weiterbildung bestand die Aufgabe, ein Funktionsmodell für einen dreiachsigen Roboter anzufertigen, dessen Funktionen im Dialog mit dem Rechner programmierbar sein sollten und das funktionell sehr anschaulich die Wirkprinzipien eines Industrieroboters wiedergibt. Daraus ergaben sich folgende drei wesentliche 
Anforderungen:

  • gleichzeitige Bewegung in drei Achsen
  • dialogfähige Eingabe von Koordinaten und Greiferfunktion
  • Realisierung einer „Not-Aus"-Funktion

Um den Aufwand für die elektrische und mechanische Realisierung so gering wie möglich zu halten, wurde der Einsatz von Gleichstromgetriebemotoren aus dem Modellbau für die einzelnen Achsenantriebe vorgesehen. Als Steuerrechner wurde der kostengünstige Lerncomputer LC 80 ausgewählt, dessen über den Userbus zugängliche Schaltkreise PIO und CTC die einfache Ansteuerung der Achsenantriebe und die Wegstreckenerkennung zulassen.

Rechner und Schnittstellen

Per eingesetzte LC 80 wurde durch Nachbestückung mit sechs U 214 auf einen RAM-Bereich von 4 Kbyte erweitert und durch Steckfassungen für den Einsatz von 2-Kbyte-EPROM vorbereitet. Der Anschluß des Roboterfunktionsmodells erfolgt ausschließlich über den 26poligen Steckverbinder des Userbusses. Die über den Userbus verfügbare PIO wird als paralleler Ein- und Ausgabebaustein für die Ansteuerung der Achsenantriebe und des Greifers eingesetzt. Den 8 bit des Port A (AO bis A7) wurden die im Bild 1 dargestellten Steuerfunktionen zugeordnet. 
Die einzelnen Bits steuern über einfache Transistorstufen entsprechende Relais an. Das Übersichtsschaltbild des Roboterfunktionsmodells ist im Bild 2 dargestellt. Die den einzelnen Bits zugeordneten Relaiskontakte sind mit ka0 bis Ka7 gekennzeichnet. Die Lichtschranken der drei Achsen sind als Funktionsblöcke (LS) abgebildet und liefern wegstreckenproportionale Impulszahlen für die CTC-Eingänge des Userbusses. Die Zuordnung der Achsenantriebe zu den CTC-Eingängen ist Bild 2 zu entnehmen. Bei der Realisierung der Lichtschranken ist auf entsprechende Flankensteilheit der Impulse zu achten. Von Bedeutung für die sichere Funktion des Steuerrechners ist die gute Entstörung der Antriebsmotoren. Für den Greifer wurde ein Elektromagnet eingesetzt, dessen Zustand akustisch durch einen Piezosignalgeber angezeigt wird.

Programm

Den Hexadezimalausdruck des Programms zeigt die Tafel. Das Programm ist ab Adresse 2800 im RAM abzuspeichern und auf dieser Adresse zu starten. Nach dem Start des Programms wird auf dem Display „Input" geschrieben, und die Eingabe der Koordinaten einzelner Bahnpunkte kann beginnen. Die über das Display organisierte Eingaberoutine ermöglicht die Eingabe von maximal 127 Bahnpunkten, deren Koordinaten durch wegstreckenproportionale Impulszahlen angegeben werden. Für die X- und Y-Achse sind diese im Zahlenbereich von 0 bis FF und für die Z-Achse von 0 bis 7F einzugeben. Der Greiferzustand (ein oder aus) wird durch Bit7 des Bytes für die Z-Koordinate verschlüsselt. 
Die Abspeicherung der Anzahl der eingegebenen Bahnpunktkoordinaten erfolgt auf Adresse 2000. Bit 7 dieses Bytes wird für die Verschlüsselung der Abarbeitung des eingegebenen Programms in einer endlosen Schleife genutzt (Bit 7 = 1). Ab Adresse 2001 erfolgt die Abspeicherung der jeweils drei Bytes für die X-, Y- und Z-Koordinate. Dabei wird das Bit 7 des Bytes der Z-Koordinate zur Verschlüsselung der Greiferfunktion genutzt ("Ein" entspricht Bit 7 = 1). Ausgehend von 
den Zielkoordinaten und der aktuellen Greiferposition, wird die Relativbewegung (Anzahl der Impulse) und die notwendige Bewegungsrichtung der einzelnen Achsantriebe berechnet. In Abhängigkeit davon werden die Zählerstände an die entsprechenden CTC-Kanäle ausgegeben und diese gestartet. 
Danach erfolgt die Steuerbyteausgabe an die PIO. Der CTC arbeitet im Interruptbetrieb als Zähler. Durch die Steuerbyteausgabe an die PIO wurden die Antriebsmotoren in den entsprechenden Richtungen vor oder zurück gestartet, und die CTC-Kanäle registrieren die wegstreckenproportionalen Impulse. Werden die ausgegebenen Werte erreicht, löst 
der CTC-Kanal Interrupt aus. In der zum Kanal gehörenden ISR wird durch Steuerbyteausgebe an die PIO der Achsenantrieb gestoppt. Sind alle Achsen auf den vorgegebenen Koordinaten angelangt, wird der Greifer durch Steuerbyteausgabe an die PIO in den programmierten Zustand versetzt. Danach Werden die nächsten Zielkoordinaten in gleicher Art verarbeitet. Das Byte für die Steuerbyteausgabe an die PIO wird in den einzelnen Programmabschnitten durch Bitverknüpfung gewonnen. Ist keine Bahnbewegung in einer Endlosschleife programmiert worden, kehrt der Rechner in den Eingabezustand zurück. Während der gesamten Abarbeitung des Programms werden die aktuellen Bahnkoordinaten auf dem Display und die Funktion des Greifers akustisch durch den Piezosignalgeber angezeigt. Die Bahnkoordinatenanzeige erfolgt hexadezimal aus Gründen der beschränkten Kapazität der Lichtschachtanzeige des LC 80. Mit dem realisierten Programm sind 255 x 255 x 127 Punkte im Raum anfahrbar. Die erreichbare Auflösung richtet sich im wesentlichen nach der mechanischen Realisierungsvariante. Jede laufende Bahnbewegung kann bei Druck auf die NMI-Taste unterbrochen werden, dabei erscheint auf dem Display „Notaus". Hierbei wird der jeweilige Zustand des Greifers beibehalten. Bei Betätigung der Taste „+" wird die Bahnbewegung weiter fortgesetzt, bei Druck auf die Taste „-" erfolgt die Rückfahrt 
in die Ausgangsposition des Greifers, und mit der Ausschrift „Input" erwartet der Rechner eine erneute Eingabe.

Eingabedialog

Nach dem Start des Programms auf Adresse 2800 erfolgt bei Druck auf die Taste „1" der Übergang in den Eingabemodus. Wird die Taste „0" betätigt, wird auf dem Display „Start" geschrieben. Im Eingabemodus müssen die Koordinaten für die X-, Y- und Z-Achse in hexadezimaler Form nacheinander eingegeben und jeweils die Eingabe für jede Achse mit der Taste „+" quittiert werden. Ist das erfolgt, erscheint auf dem Display „Magnet". Bei Betätigen der Taste „1" wird der Magnet eingeschaltet. Die Taste ;,0" führt zum Ausschalten des Magneten, wenn die entsprechende Koordinate erreicht wird. Mit 
der Taste „+" wird die Eingabe quittiert, und es erscheint „Ende" auf dem Display. Die Taste „1" führt zum Abbruch der Koordinateneingebe und die Taste „0" zur erneuten Eingabe von Koordinaten und Magnetfunktion. 
Wurde die Taste „1" betätigt, erscheint auf dem Display die Frage „Roti", mit der Taste „1" wird die Abarbeitung der eingegebenen Bahnkurve in einer endlosen Schleife und mit „0" die einmalige Abarbeitung veranlaßt. Es erscheint die Frage „Start", mit „1" wird das Roboterfunktionsmodell gestartet und die eingegebene Bahnkurve abgefahren. 
Soll die programmierte Bahnkurve auf Tonband gespeichert werden, so ist der Speicherbereich ab Adresse 2000 zu sichern. Die Anzahl der Bytes berechnet sich aus der Anzahl der eingegebenen Bahnpunkte mal drei plus eins. Die Anzahl der Bahnpunkte in einem Bewegungsablauf beträgt maximal 127, damit sind etwa 8300000 einzelne Raumpunkte anfahrbar. Programmtechnisch ist eine wesentlich größere Auflösung durch kleine Änderungen möglich, aber das erschien hinsichtlich der Aufgabenstellung nichtsinnvoll.

Zusammenfassung

Die vorgestellte Lösung hat sich bisher in der Aus- und Weiterbildung bewährt und dürfte auf mehreren Gebieten nachnutzungsfähig sein. Mit leichten Änderungen lassen sich entsprechende Sensorfunktionen des Greifers (z. B. Werkstück vorhanden oder nicht) integrieren und damit äußerst kostengünstige und leistungsfähige Lösungen für den Kleinrationalisierungsmittelbau ableiten, zumal noch freie Speicherkapazität von 4 Kbyte EPROM und 2 Kbyte RAM vorhanden ist.

Marke Adresse Hex-Code Assembler-Code Kommentar
ORG 2800H ;Adresse Programmbeginn
2800H F3 LD HL, 2040H ;Adresse erster Operand
2801H  21 96 2A LD A, (HL)  ;erster Operand in A
2804H 11 10 24 INC HL ;Adresse zweiter Operand
2807H 01 30 00 CP (HL) ;Vergleich 1. mit 2. Operand
280AH ED B0  JPNC, FERTIG  ;FERTIG, wenn 1. groesser
280CH LD A, (HL)  ;zweiter Operand nach A
FERTIG:  280AH INC HL ;Zieladresse
280BH LD (HL), A ;groessere Zahl ablegen
280CH  HALT ;Programm STOPP
EQUATE
2040H ORG 2040H ;DATEN Adresse
2040H  DEFB 079H ;erste Zahl
2041H DEFB 05AH ;zweite Zahl

 



 

2800 F3 21 96 2A 11 10 24 01 30 00 ED B0 21 C0 2A 22
2810 41 23 3E 2A ED 47 ED 5E 3E OF D3 FA 3E 03 D3 FA
2820 AF D3 F8 32 0A 24 3E 90 D3 EC 3E FF D3 EC D3 EC
2830 D3 EE 32 09 24 FB DD 21 10 24 CD 5A 04 FE 02 F2
2840 36 28 FE 01 C2 E4 28 11 00 20 3E 01 32 00 20 3A
2850 00 20 CD CR 04 32 18 24 OE 03 AF 32 16 24 32 17
2860 24 32 1C 24 13 DD 21 16 24 CD 5A 04 FE 10 F2 65
2870 28 F5 3A 16 24 32 17 24 62 6B F1 F5 ED 6F F1 CD
2880 CA 04 32 16 24 CD 5A 04 FE 10 20 E2 0D 20 CB 3A
2890 18 24 32 1E 24 DD 21 1C 24 CD 5A 04 FE 02 F2 95
28A0 28 4F CD CA 04 32 1C 24 CD 5A 04 FE 10 20 ED 79
28B0 FE 01 20 04 1A CB FF 12 DD 21 22 24 CD 5A 04 FE
28C0 02 F2 B8 28 FE 01 28 07 21 00 20 34 C3 4F 28 DD
28D0 21 28 24 CD 5A 04 FE 02 F2 CF 28 FE 01 20 05 21
28E0 00 20 CB FE DD 21 2E 24 CD 5A 04 FE 01 20 F5 21
28F0 00 24 06 06 AF 77 23 10 FC 26 00 3A 00 20 CB BF
2900 6F FD 21 01 20 FD 46 00 3A 00 24 B8 20 03 AF 18
2910 OF CB CC 38 05 90 CB 84 18 06 4F 78 41 90 CB C4
2920 32 06 24 D3 EC FD 46 01 3A 01 24 B8 20 03 AF 18
2930 0F CB DC 38 05 90 CB 94 18 06 4F 78 41 90 CB D4
2940 32 07 24 D3 ED FD 46 02 CB B8 3A 02 24 B8 20 03
2950 AF 18 0F CB EC 38 05 90 CB A4 18 06 4F 78 41 90
2960 CB E4 32 08 24 D3 EE 7C D3 F8 32 0A 24 CB 4C 28
2970 17 3A 06 24 0E EC ED 40 90 47 3A 00 24 CB 44 28
2980 03 80 18 01 90 32 03 24 CB 5C 28 17 3A 07 24 0E
2990 ED ED 40 90 47 3A 01 24 CB 54 28 03 80 18 01 90
29A0 32 04 24 CB 6C 28 17 3A 08 24 OE EE ED 40 90 47
29B0 3A 02 24 CB 64 28 03 80 18 01 90 32 05 24 CD 2D
29C0 2A 3A 0A 24 67 CB 4C 20 A4 CB 5C 20 A0 CB 6C 20
29D0 9C 3E FF D3 EC D3 ED D3 EE FD CB 02 7E 28 06 CB
29E0 F4 CB FC 18 04 CB B4 CB BC 7C D3 F8 32 0A 24 FD
29F0 23 FD 23 FD 23 E5 OE 80 C5 CD 2D 2A C1 0D 20 F8
2A00 E1 2D C2 05 29 3A 00 20 CB 7F C2 FB 28 3A 09 24
2A10 E6 FF 28 11 AF 32 09 24 FD 77 00 FD 77 01 FD 77
2A20 02 2C C3 05 29 3E FF 32 09 24 C3 36 28 E5 21 05
2A30 24 11 3A 24 0E 03 7E 47 CD CA 04 12 78 07 07 07
2A40 07 CD CA 04 13 12 13 2B 0D 20 EB DD 21 3A 24 CD
2A50 83 04 E1 C9 F5 FD 7E 00 32 03 24 32 00 24 3A 0A
2A60 24 CB 8F 18 22 F5 FD 7E 01 32 04 24 32 01 24 3A
2A70 0A 24 CB 9F 18 11 F5 FD 7E 02 CB BF 32 05 24 32
2A80 02 24 3A 0A 24 CB AF D3 F8 32 0A 24 F1 FB ED 4D
2A90 54 2A 65 2A 76 2A 00 CA EO 4F 68 20 00 00 00 68
2AA0 20 CE 00 00 00 E6 6F 6C 00 CE E9 68 CE 00 00 20
2AB0 CA E8 48 00 CA 48 6F CA AE 00 AE E3 6F CA E8 68
2AC0 F5 C5 D5 E5 3A OA 24 E6 D5 D3 FB DD 21 34 24 CD
2AD0 5A 04 FE 10 28 2B FE 11 20 F1 3A 03 24 32 00 24
2AE0 3A 04 24 32 01 24 3A 05 24 32 02 24 3E FF D3 EC
2AF0 D3 ED D3 EE E1 D1 C1 F1 AF 6F 32 00 20 FB C3 14
2B00 2A 3A 0A 24 D3 F8 E1 D1 C1 F1 ED 45 FF FF FF FF
2B10 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2B20 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF