Wiederholung
Folgende Anweisungen haben wir bereits beschrieben:
- LD (Load) oder F5 - Schließkontakt
- LDI (Load Inverse) oder F6 - Öffnerkontakt
- LDP (Load Pulse) oder Shift+F5 - positive Flanke
- LDF (Load Falling Edge) oder Shift+F6 - negative Flanke
- OUT oder F7 - Spule / Ausgang, auch Timer sofort starten & Zähler erhöhen
- TMR - Timer zu Beginn des nächsten Zyklus starten
- SET oder F8 - Spule / Ausgang setzen
- RST oder Shift+F8 - Spule / Ausgang zurücksetzen, auch Timer & Zähler zurücksetzen
- STR, STRR, STRS - Befehle für Präzisionstimer
- CJ (Conditional Jump) - Sprung auf Marker P
- CALL - Sprung auf Subroutine P, Return durch SRET
- FEND (Flow End) - Ende des Hauptprogramms
- FOR ... NEXT - Zählschleife
- SET, ST, STL und STLE - Befehle zur Schrittsteuerung per Statusbits S
- I.., IRET, EI, DI - Befehle für die Interruptsteuerung
Weitere Grundoperationen
Folgende Basisbefehle komplettieren die Grundanweisungen:
- LDD (Load Direct) - Schließkontakt, der die Eingangsklemme direkt liest, statt aus dem Speicherabbild wie LD
- LDDI (Load Direct Inverse) - Öffnerkontakt, der die Eingangsklemme direkt liest, statt aus dem Speicherabbild wie LDI
- OUTD (Out Direct) - setzt Ausgang direkt, statt Ausgang im Speicherabbild wie OUT
- ALT (Alternate) - Befehl, der ein Bit umschaltet
- PLS (Pulse) - positive Flanke auf Ausgang
- PLF (Pulse Falling Edge) - negative Flanke auf Ausgang
- END - Ende des Programms, nützlich, um Programmteile beim Debugging zu deaktivieren
Folgende Befehle sind eigentlich nur in AWL relevant, da sie grafisch im Kontaktplan über Verbindungslinien realisiert werden. Sie werden hier nur der Vollständigkeit halber aufgeführt: AND, ANDD (direkt), ANI (And Inverse), ANDDI, ANDP (And Pulse), ANDF (And Falling Edge), OR, ORD, ORI, ORDI, ORP, ORF, ORB (Or Block), MCS (Master Control Start) und MCR (Master Control Return). Weitere Informationen dazu findet ihr im Handbuch.
Vergleichsoperationen
Folgende Vergleichsoperationen stehen zur Verfügung:
- LD= Dx Dy - vergleicht zwei Words, Beispiel schließt wenn Dx gleich Dy ist; statt D können auch FD, TD, CD, K usw verglichen werden
- LD> Dx Dy - schließt wenn Dx größer Dy
- LD< Dx Dy - schließt wenn Dx kleiner Dy
- LD<>Dx Dy - schließt wenn Dx ungleich Dy
- LD<= Dx Dy - schließt wenn Dx kleiner gleich Dy
- LD>= Dx Dy - schließt wenn Dx größer gleich Dy
Vergleichsoperationen stehen auch als 32 Bit Operationen zur Verfügung. Die Befehle DLD=, DLD > etc vergleichen jeweils zwei aufeinander folgende DoubleWords. (In AWL stehen zusätzlich AND=, OR= etc zur Verfügung, diese Verknüpfungen können über Kontaktplan grafisch mit LD= beschrieben werden.)
Datenoperationen
Die nachfolgenden Datenoperationen (jeweils mit Datentyp der Parameter) werden unterstützt:
- CMP Word Word Bit - Datenvergleich (16 Bit) - Beispiel CMP D0 D1 M0 vergleicht D0 und D1 und setzt die Bits M0, M1 oder M2 wie folgt:
- D0 > D1 dann M0 =1
- D0 = D1 dann M1 =1
- D0 < D1 dann M2 =1
- ZCP Word (unteres Limit) Word (oberes Limit) Word (Vergleichswert) Bit (Ergebnis) - Datenzonenvergleich (16 Bit) - Beispiel ZCP D10 D20 D0 M0 prüft wie D0 zu D10 und D20 steht:
- D0 < D10 dann M0 =1
- D10 <= D0 <= D20 dann M1 =1
- D0 > D20 dann M2 =1
- MOV Word (Quelle) Word (Ziel) / DMOV DWord DWord - Move (16/32 Bit) Beispiel MOV K20 D0 schreibt die Zahl 20 in Register D0
- BMOV Word (Quelle) Word (Ziel) Word (Länge) - Block Move (16 Bit) Beispiel BMOV D2 D10 K2 schreibt Register D2 und D3 in D10 und D11
- PMOV Word (Quelle) Word (Ziel) Word (Länge) - schneller Block Move (16 Bit) gleich wie BMOV nur schneller
- FMOV Word (Quelle) Word (Ziel) Word (Länge) - Fill Move (16 Bit) - Beispiel FMOV K10 D0 K5 füllt Register D0 bis D4 mit der Zahl 10
- DFMOV DWord (Quelle) DWord (Ziel) Word (Länge) - Fill Move (32 Bit)- gleich wie FMOV als 32 Bit Anweisung
- MOV, DMOV, BMOV, FMOV und DFMOV können den Flash-Speicher nicht beschreiben, dazu nutzt ihr FWRT
- FWRT Word (Quelle) Word (Ziel) optional Word (Länge) - Flash Write (16 Bit, DFWRT 32 Bit), beschreibt Flash Register (Flash Register können nur etwa 1 Million Mal beschrieben werden, dieser Befehl sollte daher mäßig genutzt werden)
- MSET Bit (Start) Bit (Ende) - Multiple Set Beispiel MSET M10 M15 setzt alle Bits zwischen M10 und M15
- ZRST Bit (Start) Bit (Ende) - Zone reset Beispiel ZRST Y0 Y5 setzt alle Ausgänge zwischen Y0 und Y5 zurück
- SWAP Word - Tauscht das hohe und niedrige Byte in einem Word Beispiel SWAP D0 tauscht das erste Byte in D0 mit dem zweiten
- XCH Word Word - Exchange (16 Bit, DXCH 32 Bit) tauscht zwei Words (DWords)
Arithmetische und Boolesche Operationen
Die nachfolgenden arithmetischen und booleschen Operationen (jeweils mit Datentyp der Parameter) werden unterstützt:
- ADD, SUB, MUL, DIV - Grundrechenarten (16 Bit) jeweils mit Paramatern Word (Operator) Word (Operator) Word (Ergebnis)
Das Ergebnis von DIV ist ein DWord, im ersten Word steht das Ergebnis, im zweiten der Rest - DADD, DSUB, DMUL, DDIV - wie oben als 32 Bit Anweisung, Achtung das Erbebnis von DDIV sind zwei DWords
- INC, DEC, DINC, DDEC - Inkrementieren / Dekrementieren (16 Bit / 32 Bit) - Parameter Word (DWord)
- MEAN Word (Quelle) Word (Ergebnis) Word (Länge) - Durchschnitt (16 Bit) - Beispiel MEAN D0 D10 K4 berechnet den Durchschnitt der Register D0 bis D3 und schreibt das Ergebnis in D10
- WAND, WOR, WXOR - Boolesche Operationen (16 Bit) Parameter Word (Operator) Word (Operator) Word (Ergebnis)
- DWAND, DWOR, WXOR - gleich wie oben als 32 Bit Operation, verlangt DWords
- CML / DCML - Compliment (16 Bit / 32 Bit) - wandelt ein Register in sein Komplement, alle Bits werden getauscht
- NEG - Negation (16 / 32 Bit) - negiert eine Zahl in einem Register (Vorzeichenwechsel)
Verschiebeoperationen
Für Verschiebeoperationen sind folgende Befehle vorhanden: SHL/DSHL Arithmetic shift left, SHR/SHR Arithmetic shift right, LSL/DLSL Logic shift left, LSR/DLSL Logic shift right, ROL/DROL Rotation left, ROR/DROR Rotation right, SFTL/DFTL Bit shift left, SFTR/DFTR Bit shift right, WSFL/DWSFL Word shift left, WSFR/DWSFR Word shift right. Bleibt zu erwähnen, dass das Bit für den Übertrag auf M8022 liegt. Weitere Infos findet ihr im Programmierhandbuch Kapitel 4.
Umwandlungsoperationen
Auch hier nur eine einfache Auflistung. WTD Single Word to Double Word, FLT 16 Bits Integer To Float (16 Bit), DFLT 32 Bits Integer converts Float (32 Bit), FLTD 64 Bits Integer to Float (64 Bit), INT / DINT wandelt Float in Integer, BIN wandelt BCD in Binary, BCD wandelt Binary in BCD, ASCI wandelt Hex. in ASCII, HEX wandelt ASCII in Hex., DECO ASCII zu Hex Dekodierung, ENCO High Bit Kodierung, ENCOL Low Bit Kodierung. Erwähnenswert ist die Möglichkeit, 64 Bit Fließkommazahlen zu erzeugen. Allerdings unterstützen die nachfolgenden Fließkommaoperationen nur 32 Bit Fließkommazahlen. Weitere Informationen im Programmierhandbuch Kapitel 4.
Fließkommaoperationen
Hier die Auflistung der Fließkommaoperationen. Alle Fließkommaoperationen sind 32 Bit Operationen. ECMP Float Compare, EZCP Float Zone Compare, EADD Float Add, ESUB Float Subtract, EMUL Float Multiplication, EDIV Float Division, ESQR Float Square Root, SIN Sinus, COS Kosinus, TAN Tangens, ASIN Arcsin, ACOS Arccos, ATAN arctan.
Eine genaue Beschreibung aller Befehle, ihrer gültigen Speicherbereiche und Trigger findet ihr in Kapitel 4 des Programmierhandbuchs.
Übung
Schreibt die Werte 10, 30 und 458 in die Register D10, D11 und D12 und bildet den Durchschnitt daraus in Register D13.