0% fanden dieses Dokument nützlich (0 Abstimmungen)
2 Ansichten78 Seiten

MPS50 04

Das Dokument beschreibt die Instruktionen der Programmiersprache MPL 50, einschließlich ihrer Formate, Syntaxregeln und verschiedenen Arten von Instruktionen wie Arithmetikinstruktionen, Vergleichs- und Datentransportinstruktionen sowie Kommunikationsinstruktionen. Es werden spezifische Beispiele für die Verwendung der Instruktionen gegeben, um deren Funktionsweise zu verdeutlichen. Zudem werden Zustandsflags und deren Bedeutung im Programmablauf erläutert.

Hochgeladen von

Pierryves
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
2 Ansichten78 Seiten

MPS50 04

Das Dokument beschreibt die Instruktionen der Programmiersprache MPL 50, einschließlich ihrer Formate, Syntaxregeln und verschiedenen Arten von Instruktionen wie Arithmetikinstruktionen, Vergleichs- und Datentransportinstruktionen sowie Kommunikationsinstruktionen. Es werden spezifische Beispiele für die Verwendung der Instruktionen gegeben, um deren Funktionsweise zu verdeutlichen. Zudem werden Zustandsflags und deren Bedeutung im Programmablauf erläutert.

Hochgeladen von

Pierryves
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

Instruktionen MPL 50 Inhalt

41

Instruktionen MPL 50
Inhalt
Einführung...................................................................... 3
Instruktionsformate .................................................... 3
Syntaxregeln............................................................... 4
Zustandsflags ............................................................. 4
Arithmetikinstruktionen ................................................. 5
Arithmetikinstruktionen für Integerzahlen................. 5
Arithmetikinstruktionen für Floatingpointzahlen ...... 7
Trigonometrische Instruktionen ................................. 8
Arithmetische Hilfsinstruktionen ............................... 9
Konversionsinstruktionen .......................................... 10
Vergleichs- und Datentransportinstruktionen ................ 11
Vergleichsinstruktionen ............................................. 11
Datentransportinstruktionen....................................... 14
Logikinstruktionen ......................................................... 16
Programmsteuerinstruktionen ........................................ 17
Sprunginstruktionen ................................................... 17
Bedingte Warteinstruktion ......................................... 18
Bedingte Instruktionsausführung ............................... 18
Aufruf von Simultanprogrammen (Multitasking)...... 21
Aufruf von Unterprogrammen und Prozeduren ......... 23
Kommunikationsinstruktionen....................................... 27
Dateneingabe über RS 232C ...................................... 27
Datenausgabe über RS 232C...................................... 28
Kommunikations-Steuerflags..................................... 32
CIB-Flag................................................................. 32
ECHO-Flag ............................................................ 32
Variable KCOD...................................................... 32
Lesen aus dem FIFO-Buffer der RS 232C................. 34
Instruktionen zum Einlesen in den Linebuffer........... 37

13.10.97, 396.2400 Systemhandbuch, Seite 4.1


Instruktionen MPL 50 Inhalt

Datenübertragungs-Instruktionen............................... 40
Sonderinstruktionen ....................................................... 44
Adressen von Variablen ............................................. 44
NOP-Instruktion......................................................... 44
Umschaltung der Baud-Rate ...................................... 45
Ein/Ausgabe des gesamten ASCII-Zeichensatzes ..... 46
Positionierinstruktionen ................................................. 47
Einführung ................................................................. 47
Positionierdistanz ....................................................... 48
Geschwindigkeiten..................................................... 49
Rampen ...................................................................... 52
Die Positionierinstruktionen ...................................... 55
Starten von Endlosbewegungen ................................. 56
Polygon-Interpolation .................................................... 57
Steuersignale für die Polygon-Interpolation .............. 59
Interpolationsinstruktionen ........................................ 60
Compileranweisungen im Programm............................. 66
END-Anweisung ........................................................ 66
INCLUDE-Anweisung............................................... 67
PATH-Anweisung...................................................... 68
RAM / ROM-Anweisungen ....................................... 68
ORIGIN-Anweisung .................................................. 69
MOD-Anweisung....................................................... 70
Anweisungen für die Variablendefinition.................. 70
LISTOFF / LISTON-Anweisungen ........................... 70
Programmausführungszeiten.......................................... 71
HEX-Adressen von Systemvariablen............................. 73

13.10.97, 396.2400 Systemhandbuch, Seite 4.2


Instruktionen MPL 50 Einführung
4 Kap
Einführung
Eine Instruktion in der Programmiersprache MPL 50 besteht immer aus Operation und
zugehörigen Operanden. Die verwendbaren Operanden sind im Kapitel "Operanden" be-
schrieben. Die Operationen bestehen aus Buchstabenfolgen, die die Art der Operation be-
zeichnen. Operation und Operanden werden durch Leerschlag getrennt.

Instruktionsformate
Es werden folgende Instruktionsformate unterschieden:
Instruktion: Parameter:
OPERATION ZIELOPERAND1, ZIELOPERAND2, QUELLENOPERAND1,
QUELLENOPERAND2
OPERATION ZIELOPERAND, QUELLENOPERAND1, QUELLENOPERAND2
OPERATION ZIELOPERAND, QUELLENOPERAND
OPERATION ZIELOPERAND

Im ZIELOPERAND wird stets das Resultat der ausgeführten Operation gespeichert. Der
Inhalt von QUELLENOPERAND1 und QUELLENOPERAND2 wird durch die Operati-
on verarbeitet. Die Quellenoperanden werden durch die Ausführung der Operation nicht
verändert!
Wird nur der ZIELOPERAND angegeben, stellt dieser zugleich Quellen- und Zielope-
rand dar.

Beispiel:
IADD VAR1,VAR2,VAR3
Die Operation IADD bewirkt die Addition von zwei Integerzahlen.
Die Inhalte der Quellenoperanden VAR2 und VAR3 werden addiert.
Die Summe von VAR2 und VAR3 wird in den Zieloperanden VAR1 gespeichert.

13.10.97, 396.2400 Systemhandbuch, Seite 4.3


Instruktionen MPL 50 Einführung

Syntaxregeln
Folgende Syntaxregeln sind zu beachten:
• Zwischen Operation und Operand muß mindestens 1 Leerschlag stehen.
• Operanden werden untereinander durch Komma getrennt.
• Variablennamen dürfen keine Sonderzeichen enthalten.
• Variablennamen müssen mit einem Buchstaben beginnen.
• Bei der Definition einer Variablen muß ein Anfangswert oder ein ? angegeben werden.
• Kleinbuchstaben sind nur für Variablennamen und Labels zulässig.
• Pro Instruktion lassen sich nur Daten vom selben Typ miteinander verarbeiten.
• Vor und nach Compileranweisungen dürfen keine Labels oder Instruktionen stehen.

Zustandsflags
Durch die Ausführung einer MPL 50-Instruktion werden 4 verschiedene Zustandsflags
beeinflußt:
Flag: Syntax: Zustand:
Zeroflag ZF (aktiv wenn Resultat einer Instruktion=0)
Signflag SF (aktiv wenn Vorzeichen eines Resultates negativ)
Oddflag ODF (aktiv wenn Resultat eine ungerade Zahl ist)
Overflowflag OVF (aktiv wenn Resultat mehr Bytes umfaßt als für den
Zieloperanden vereinbart sind)

Diese Flag lassen sich mittels Logik- oder Programmsteuer-Instruktionen zur Beeinflus-
sung des Programmablaufs abfragen.

13.10.97, 396.2400 Systemhandbuch, Seite 4.4


Instruktionen MPL 50 Arithmetikinstruktionen

Arithmetikinstruktionen
Die Arithmetikinstruktionen bestehen aus den 4 Grundrechenarten Addition, Subtraktion,
Multiplikation und Division. Es werden die Datentypen Integer und Floatingpoint unter-
schieden.
Als Kurzbezeichnung der einzelnen Operanden in den Instruktionen werden folgende
Ausdrücke verwendet:
Operand: Kurzbezeichnung:
ZIELOPERAND: DOP
QUELLENOPERAND1: SOP1
QUELLENOPERAND2: SOP2

Arithmetikinstruktionen für Integerzahlen


Die Arithmetikinstruktionen für Integerzahlen sind mit dem Anfangsbuchstaben I ge-
kennzeichnet. Es werden bis 3 bzw. 4 Operanden verarbeitet, wobei diese anzahlmässig
reduziert sein können, wenn DOP und SOP1 identisch sind.

Hinweis: Der vereinbarte Datentyp des Zieloperanden (I1 ... I4) sollte demjenigen
des Quellenoperanden entsprechen. Andernfalls ist es möglich, daß Re-
chenresultate nur teilweise richtig weiterverarbeitet werden.

Instruktion: Syntax: Operation:


Addition IADD DOP,SOP1,SOP2 DOP = SOP1 + SOP2
Subtraktion ISUB DOP,SOP1,SOP2 DOP = SOP1 - SOP2
Multiplikation IMUL DOP,SOP1,SOP2 DOP = SOP1 x SOP2
Integer/Modulo-Division IDIV DOP1,DOP2,SOP1,SOP2 DOP1 = SOP1 / SOP2
DOP2 = SOP1 MOD SOP2

Ist nur ein Resultat von IDIV von Interesse, muß der andere Destinationsoperand DOP als
* angegeben werden.

13.10.97, 396.2400 Systemhandbuch, Seite 4.5


Instruktionen MPL 50 Arithmetikinstruktionen

Beispiele:
IADD VAR1,VAR2,VAR3 Die Inhalte von VAR2 und VAR3 werden addiert und
die Summe in VAR1 gespeichert.
ISUB VAR1,20,8 Die Konstante 8 wird von 20 subtrahiert und die
Differenz wird in VAR1 gespeichert.
IMUL VAR1,VAR1,2 Der Inhalt von VAR1 wird mit 2 multipliziert und das
Produkt wird wieder in VAR1 gespeichert.
IADD VARX,VARY Zum Inhalt VARX wird VARY dazu addiert.
IDIV RA,RB,17,5 RA enthält das Resultat der Division 17/5 = 3. RB
zeigt das Resultat der Modulo-Division 17/5 = 2
(Rest der Division)
IDIV RESULTAT,*,100,5 In RESULTAT wird das Ergebnis der Division
100/5 = 20 gespeichert.

13.10.97, 396.2400 Systemhandbuch, Seite 4.6


Instruktionen MPL 50 Arithmetikinstruktionen

Arithmetikinstruktionen für Floatingpointzahlen


Die Arithmetikinstruktionen für Floatingpointzahlen sind mit dem Anfangsbuchstaben F
gekennzeichnet. Für die 4 Grundrechenarten werden 3 Operanden verarbeitet, wobei die-
se identisch oder anzahlmässig reduziert sein können.
Für die Quadratbildung bzw. die Quadratwurzel sind nur der Ziel- und der Quellenope-
rand anzugeben, wobei der Zieloperand nicht zwingend notwendig ist.

Instruktion: Syntax: Operation:


Addition FADD DOP,SOP1,SOP2 DOP = SOP1 + SOP2
Subtraktion FSUB DOP,SOP1,SOP2 DOP = SOP1 - SOP2
Multiplikation FMUL DOP,SOP1,SOP2 DOP = SOP1 x SOP2
Division FDIV DOP,SOP1,SOP2 DOP = SOP1 / SOP2
Quadrat SQU DOP,SOP DOP = SOP2
Quadratwurzel SQR DOP,SOP DOP =

Beispiele:
FADD RA,VAR1,25.75 Die Konstante 25.75 wird zum Inhalt von VAR1
addiert und die Summe im Rechenregister RA gespeichert.
FDIV RA,FELD(10),RB Der Inhalt des 10. Elements aus dem Variablenfeld FELD
wird durch den Inhalt des Rechenregisters RB dividiert.
Der Quotient wird im Rechenregister RA gespeichert.
SQU RA,5.0 Das Quadrat von 5.0 (= 25.0) wird in
Rechenregister RA gespeichert.
SQR VAR1,FELD(RA) Im Variablenfeld FELD wird durch den Inhalt des
Rechenregisters RA ein bestimmtes Element indexiert
und aus dessen Inhalt die Quadratwurzel gezogen.
Das Resultat wird in der Variablen VAR1 gespeichert.

13.10.97, 396.2400 Systemhandbuch, Seite 4.7


Instruktionen MPL 50 Arithmetikinstruktionen

Trigonometrische Instruktionen
Die trigonometrischen Instruktionen werden ausschließlich mit Daten vom Typ Floating-
point ausgeführt. Die Instruktionen werden aus Operation, Zieloperand und Quellenope-
rand gebildet. Die Angabe des Zieloperanden ist nicht zwingend.
Durch Setzen des Flags RAD (log. 1) werden die Instruktionen in Radiant ausgeführt.
Durch Rücksetzen dieses Flags (log. 0) wird in Grad gerechnet.

Instruktion: Syntax: Operation:


Sinus SIN DOP,SOP DOP = sin SOP
Cosinus COS DOP,SOP DOP = cos SOP
Tangens TAN DOP,SOP DOP = tan SOP
Arcustangens ATN DOP,SOP DOP = arctan SOP

Beispiele:
SIN RA,VAR1 Der Sinuswert des in VAR1 enthaltenen Winkels wird
im Rechenregister RA gespeichert.
COS RB,60.0 Der Cosinuswert (0.5) von 60.0 Grad
(RAD-Flag = 0) wird in RB gespeichert.

13.10.97, 396.2400 Systemhandbuch, Seite 4.8


Instruktionen MPL 50 Arithmetikinstruktionen

Arithmetische Hilfsinstruktionen
Die arithmetischen Hilfsinstruktionen werden aus Operation und einem Quellenoperan-
den sowie dem nicht zwingend notwendigen Zieloperanden gebildet.

Instruktion: Syntax: Operation:


Negation Integerzahl INEG DOP,SOP DOP = - SOP
Absolutwert Integerzahl IABS DOP,SOP DOP = Absolutwert von SOP
Komplement Integerzahl CPL DOP,SOP DOP = Binäres Kompl. von SOP
Inkrementierung Integerzahl INC DOP,SOP DOP = SOP +1
Dekrementierung Integerzahl DEC DOP,SOP DOP = SOP - 1
Negation Floatingpointzahl FNEG DOP,SOP DOP = - SOP
Absolutwert
Floatingpointzahl FABS DOP,SOP DOP = Absolutwert von SOP
Reziprokwert
Floatingpointzahl INV DOP,SOP DOP = 1 / SOP

Beispiele:
CPL RA,7 Im Rechenregister RA wird das binäre
Komplement von 7 (= -8) gespeichert.
INC RA,125 Im Rechenregister RA wird 125 + 1= 126
gespeichert.
DEC VAR3 Der Inhalt von VAR3 wird um 1
dekrementiert.
INV RA,3.0 Im Rechenregister RA wird 1.0 / 3.0 = 0.3
gespeichert.

13.10.97, 396.2400 Systemhandbuch, Seite 4.9


Instruktionen MPL 50 Arithmetikinstruktionen

Konversionsinstruktionen
Die Konversionsinstruktionen dienen zum Umwandeln von Integer- in Floatingpointzah-
len und umgekehrt. Die Instruktionen bestehen aus Operation und Quellenoperand sowie
dem nicht zwingend notwendigen Zieloperand.

Konversion: Syntax:
Integer in Floatingpoint CFLO DOP,SOP
Floatingpoint in Integer: Ohne Rundung CINT DOP,SOP
Mit Rundung CINR DOP,SOP

Bei CINT gehen die Stellen nach dem Komma verloren. Bei CINR werden Kommastellen
ab 0.5 auf die nächste ganze Zahl aufgerundet.

Beispiele:
CFLO RA,10 In RA steht 10.0
CINT RA,15.6 In RA steht 15
CINR RA,15.6 In RA steht 16
CINR RA,13.4576 In RA steht 13

13.10.97, 396.2400 Systemhandbuch, Seite 4.10


Instruktionen MPL 50 Vergleichs- und Datentransportinstruktionen

Vergleichs- und
Datentransportinstruktionen
Vergleichsinstruktionen
Die Vergleichsinstruktionen dienen zum Vergleichen von alphanumerischen mit numeri-
schen Daten. Für numerische Daten sind folgende Vergleiche realisierbar:
• Größer
• Kleiner
• Gleich
• Grenzwert

Alphanumerische Daten können nur auf Gleichheit geprüft werden. Das Vergleichsresul-
tat läßt sich durch logische Verarbeitung von Zeroflag ZF und dem Signflag SF, oder
durch Anwendung der bedingten Programmsteuerinstruktionen auswerten.

Grösser/Kleiner/Gleich-Vergleich:
Vergleich von: Syntax:
Integerzahlen ICMP SOP1,SOP2
Floatingpointzahlen FCMP SOP1,SOP2

Zeroflag ZF und Signflag SF nehmen bei den verschiedenen Vergleichsresultaten folgen-


de Zustände ein:
Resultat Zeroflag Signflag
SOP1 = SOP2 ZF=1 SF=0
SOP1 < SOP2 ZF=0 SF=1
SOP1 > SOP2 ZF=0 SF=0

Beispiel:
ICMP VAR1,15 Wenn der Inhalt von VAR1:
gleich 15, dann ZF=1 und SF = 0
kleiner 15, dann ZF=0 und SF = 1
grösser 15, dann ZF=0 und SF = 0

13.10.97, 396.2400 Systemhandbuch, Seite 4.11


Instruktionen MPL 50 Vergleichs- und Datentransportinstruktionen

Grenzwert-Vergleich
Instruktion: Syntax:
Grenzwert-Vergleich
Integerzahlen ICMP SOP1,SOP2,SOP3
Grenzwert-Vergleich
Floatingzahlen FCMP SOP1,SOP2,SOP3

Wenn der Wert von SOP1 innerhalb der in SOP2 und SOP3 enthaltenen Grenzwerte liegt,
so wird das Zeroflag ZF aktiv. Vergleiche auf grösser (>) oder kleiner (<) sind nicht vor-
gesehen.
Es gilt:
SOP2 ≤ SOP1 ≤ SOP3 => ZF=1
SOP3 < SOP1 < SOP2 => ZF=0

Beispiel:
FCMP RA,12.5,30.0 Das Zeroflag wird aktiv, wenn der Inhalt des
Rechner-Registers RA zwischen 12.5 und 30.0 liegt.

13.10.97, 396.2400 Systemhandbuch, Seite 4.12


Instruktionen MPL 50 Vergleichs- und Datentransportinstruktionen

Vergleich von Stringvariablen

Instruktion: Syntax:
Vergleich von Stringvariablen SCMP SOP1,SOP2

Diese Instruktion vergleicht zwei Strings und setzt das Zeroflag ZF im Falle von Gleich-
heit. Die beiden Stringvariablen SOP1 und SOP2 müssen dieselbe Anzahl Zeichen ent-
halten.
Der Vergleich auf Grösser / Kleiner und der Vergleich mit einer Stringkonstanten ist nicht
vorgesehen.

Beispiel:
EINGABE_STRING: DSTR <' '>
VERGLEICH_STRING: DSTR <'SELEDATA'>

BEGIN: STPR <$D,$A,'EINGABE STRING ?'> ;Text ausgeben


STINP EINGABE_STRING ;String einlesen
SCMP EINGABE_STRING,VERGLEICH_STRING;Vergleichen
IFE STPR <$A,$D,'IDENTISCH !'> ;Text ausgeben wenn
;gleich

JMP BEGIN
MOD 2
END BEGIN

13.10.97, 396.2400 Systemhandbuch, Seite 4.13


Instruktionen MPL 50 Vergleichs- und Datentransportinstruktionen

Datentransportinstruktionen
Die Datentransportinstruktionen dienen zum Verschieben von Daten innerhalb von Va-
riablen, Variablenfeldern, Rechenregistern usw.

Hinweis: Die Zustandsflags (SF,ZF) werden durch diese Instruktionen nicht verän-
dert.

Instruktion: Syntax: Operation:


Daten kopieren MOV DOP,SOP Inhalt von SOP in DOP kopieren
Daten austauschen XCHG SOP1,SOP2 Inhalte von SOP1 und SOP2
werden ausgetauscht.

Die Befehle MOV und XCHG sind für Daten vom Typ Integer, Floatingpoint, Ordinal
und Bool'sch ausführbar.

Instruktion: Syntax: Operation:


Bitrotation von Integerzahlen ROT1 DOP, SOP, N Bitrotation innerhalb 1 Byte
ROT2 DOP, SOP, N Bitrotation innerhalb 2 Byte
ROT3 DOP, SOP, N Bitrotation innerhalb 3 Byte
ROT4 DOP, SOP, N Bitrotation innerhalb 4 Byte

Die ROT-Instruktion ermöglicht das Verschieben eines Datenwertes aus dem Quellen-
operanden SOP um eine definierbare Anzahl Bits. Der rotierte Datenwert wird in den
Zieloperanden DOP gespeichert, der Quellenoperand SOP bleibt unverändert.
Die Angabe eines Zieloperanden DOP ist optional. Wird nur der Quellenoperand SOP an-
gegeben, erfolgt die Bitrotation innerhalb desselben.

13.10.97, 396.2400 Systemhandbuch, Seite 4.14


Instruktionen MPL 50 Vergleichs- und Datentransportinstruktionen

N gibt an, um wieviele Bits rotiert wird. Das Vorzeichen von N legt die Rotationsrichtung
fest:
• +N bedeutet Linksrotation
• -N bedeutet Rechtsrotation

Die Operation ROT1 verschiebt nur den Datenwert innerhalb vom niederwertigsten Byte
des Quellenoperanden SOP.
Die Operation ROT2 verschiebt innerhalb der 2 niederwertigsten Bytes, ROT3 innerhalb
von 3 Bytes usw.
Je nach angewendeter Operation gibt es für N bestimmte Maximalwerte zu beachten:
Operation: Maximalwerte N:
ROT1 -7 ... +7
ROT2 -15 ... +15
ROT3 -23 ... +23
ROT4 -31 ... +31

Instruktion: Syntax: Operation:


Variablenfelder kopieren XFER DOP, SOP,N N Elemente aus Variablenfeld
SOP werden nach Variablenfeld
DOP kopiert.

Die XFER-Instruktion dient zum Verschieben von Daten von einem Variablenfeld ins an-
dere. Dabei dürfen sich die beiden Variablenfelder überlappen, wodurch sich Einfügen-
und Entfernenfunktionen einfach realisieren lassen.

Beispiel:
Einfügen eines Wertes an 9. Stelle in einem Variablenfeld

ARRAY: DF 20 DUP ?
INSERT: XFER ARRAY(10), ARRAY(9), 10
MOV ARRAY(9), 2.5

13.10.97, 396.2400 Systemhandbuch, Seite 4.15


Instruktionen MPL 50 Logikinstruktionen

Logikinstruktionen
Für die Ausführung von logischen Funktionen dienen die Logikinstruktionen. Sie ermög-
lichen Abfrage, logische Verknüpfung und Zuweisung von Bool'schen Datentypen.
Die logischen Verknüpfungen sind auch für Bytes anwendbar.

Instruktion: Syntax: Operation:


Und-Verknüpfung AND DOP,SOP1,SOP2 DOP = SOP1 & SOP2
Oder-Verknüpfung OR DOP,SOP1,SOP2 DOP = SOP1 V SOP2
Exklusiv-Oder-Verknüpfung XOR DOP,SOP1,SOP2 DOP = SOP1 (+) SOP2
Setzen SET DOP1,DOP2,...,DOPn DOP1 ... DOPn = TRUE
Rücksetzen RES DOP1,DOP2,...,DOPn DOP1 ... DOPn = FALSE

Die Zuweisung eines Bool'schen Operanden entsprechend dem Resultat einer Verknüp-
fung kann auch mit der Instruktion MOV erfolgen.
Die invertierte Abfrage von Bool'schen Operanden erfolgt durch Voranstellen des Zei-
chens /.
Für Byteoperationen ist die Anwendung des Invertierungszeichens / nicht zulässig!

Beispiele:
AND OUT(0),IN(0),/IN(1) Der Ausgang OUT(0) wird aktiv wenn der
Eingang IN(0) aktiv und IN(1) inaktiv ist.
AND FLG(1),IN(0),IN(1) Der Ausgang OUT(0) wird aktiv
AND FLG(2),IN(2),IN(3) wenn die Eingänge IN(0) und
OR OUT(0),FLG(1),FLG(2) IN(1), oder wenn die Eingänge IN(2) und
IN(3) aktiv sind
BYTE_1: DO1 7
BYTE_2: DO1 9
START : AND RA, BYTE_1, BYTE_2 RA wird zu 1
(Bitweise UND-Verknüpfung von
00000111 und 00001001)

13.10.97, 396.2400 Systemhandbuch, Seite 4.16


Instruktionen MPL 50 Programmsteuerinstruktionen

Programmsteuerinstruktionen
Ein MPL 50-Programm arbeitet grundsätzlich sequentiell. Das bedeutet, dass eine In-
struktion erst bearbeitet wird, wenn die vorangehende zu Ende geführt ist. Damit nun Pro-
grammverzweigungen, Unterprogramme und parallele Abläufe realisiert werden können,
stehen eine Reihe von komfortablen Programmsteuerinstruktionen zur Verfügung.

Sprunginstruktionen
Es werden zwei Arten Sprünge unterschieden: • Unbedingte Sprünge
• Bedingte Sprünge

Nach einem unbedingten Sprung verzweigt das Programm in jedem Fall zum angegebe-
nen Ziel.
Nach einem bedingten Sprung verzweigt das Programm nur zum angegebenen Ziel, wenn
die Sprungbedingung erfüllt ist. Andernfalls werden die direkt nachfolgenden Instruktio-
nen ausgeführt. Als Sprungbedingung wird immer ein logisches Zustandsflag untersucht,
wie z.B. das Zeroflag ZF oder das Signflag SF.

Unbedingter Sprung: Syntax: Operation:


Sprung zu Label JMP LABEL Sprungziel ist LABEL
Sprung zu Adresse JMP VAR Der Inhalt von VAR beinhaltet
die Sprungadresse

Die Operationen (J***) sind je nach Sprungbedingung verschieden.


Die Beschreibung der Bedingungen *** befindet sich auf Seite.
Bedingter Sprung: Syntax: Operation:
Sprung zu Label J*** LABEL Sprungziel ist LABEL.
Sprung zu Adresse J*** VAR Der Inhalt von VAR beinhaltet
die Sprungadresse
Sprung zu Label J*** VARC, LABEL Sprungziel ist LABEL.
Als Sprungbedingung wird der Inhalt
von VARC untersucht.
Sprung zu Adresse J*** VARC, VAR Der Inhalt von VAR beinhaltet die
Sprungadresse. Als Sprungbedingung
wird der Inhalt von VARC untersucht

13.10.97, 396.2400 Systemhandbuch, Seite 4.17


Instruktionen MPL 50 Programmsteuerinstruktionen

Bedingte Warteinstruktion
Die bedingte Warteinstruktion ermöglicht das Anhalten der Programmausführung solan-
ge eine gewünschte Bedingung erfüllt ist.
Instruktion: Syntax: Operation:
Wartefunktion W*** VARC Programmausführung anhalten,
wenn Bedingung *** für die
untersuchte Variable VARC
erfüllt ist.

Beispiel:
WT IN(0) Programmausführung anhalten, wenn Eingang IN(0)
logisch 1 (TRUE) ist.

Bedingte Instruktionsausführung
Diese Instruktion ermöglicht es, die Ausführung einer Instruktion von einer Bedingung
abhängig zu machen.

Instruktion: Syntax: Operation:


Bedingte
Instruktionsausführung IF*** INSTRUKTION Instruktion wird ausgeführt,
wenn Bedingung *** erfüllt ist.
Bedingte
Instruktionsausführung IF*** VARC INSTRUKTION Instruktion wird ausgeführt,
mit Variablen wenn Bedingung *** für die
untersuchte Variable VARC
erfüllt ist.

Hinweis: Ist die bedingt ausgeführte Instruktion ein Unterprogramm- oder ein Pro-
zeduraufruf, so muss dieser mittels CALL erfolgen.

Beispiel 1:
IFOD RA INC RB Wenn RA ungerade ist, dann inkrementiere RB

13.10.97, 396.2400 Systemhandbuch, Seite 4.18


Instruktionen MPL 50 Programmsteuerinstruktionen

Beispiel 2:
In einem MPL Programm gibt es 3 Programmblöcke: A, B und C.
Durch Eingabe von 0,1 oder 2 wird einer dieser Blöcke angesprungen. Das jeweilige
Sprungziel ist in einer Sprungtabelle gespeichert.

SPRUNGTAB: DO 2 3 DUP 0
A: ...
JMP START
B: ...
JMP START
C: ...
JMP START

START: MOV SPRUNGTAB (0), # A


MOV SPRUNGTAB (1), # B
MOV SPRUNGTAB (2), # C
ERROR: IINP RA
ICMP RA, 0, 2
JNE ERROR
JMP SPRUNGTAB (RA)
END START

13.10.97, 396.2400 Systemhandbuch, Seite 4.19


Instruktionen MPL 50 Programmsteuerinstruktionen

Tabelle der Bedingungen ***


(Der . vor der Bedingung wird je nach Instruktion mit J, W oder IF ersetzt).
Nach Vergleichsinstruktionen:
.E wenn gleich (ZF=1)
.NE wenn ungleich (ZF=0)
.LT wenn kleiner (SF=1)
.LE wenn kleiner oder gleich (ZF v SF =1)
.GT wenn grösser (/ZF & /SF = 1)
.GE wenn grösser oder gleich (ZF v /SF = 1)

Nach Arithmetikinstruktionen:
.Z wenn Null (ZF=1)
.NZ wenn nicht Null (ZF=0)
.M wenn Minus (negativ) (SF=1)
.P wenn Plus (positiv) (ZF v /SF = 1)
.OD wenn ungerade (ODF=1)
.EV wenn gerade (ODF=0)
.OV(*) wenn Ueberlauf (OVF=1)
.NOV(*) wenn kein Ueberlauf (OVF=0)

Nach Logikinstruktionen:
.T wenn wahr (log. 1) (ODF=1)
.F wenn nicht wahr (log. 0) (ODF=0)

Nach Prozeduraufruf:
.PAR wenn Parameter vorhanden
.NPAR wenn kein Parameter vorhanden
.PH wenn Scheinparameter (*) vorhanden
.NPH wenn kein Scheinparameter (*) vorhanden

*) Für diese Bedingungen ist die Angabe einer Variablen VARC nicht vorgesehen

13.10.97, 396.2400 Systemhandbuch, Seite 4.20


Instruktionen MPL 50 Programmsteuerinstruktionen

Beispiele:
JMP START Unbedingter Sprung zum Label START
JT IN(0),PROGRAMM1 Sprung zum Label PROGRAMM1 wenn Eingang IN(0)
aktiv.
ICMP RA,15 Vergleich Rechenregister RA mit 15.
JLT RA_KLEIN Wenn RA kleiner 15,
ICMP RA,15 dann Sprung zum Label RA_KLEIN, wenn RA grösser JGT
RA_GROSS 15, dann Sprung zum Label RA_GROSS.

Aufruf von Simultanprogrammen (Multitasking)


Für die Bearbeitung von simultanen (parallelen) Aufgaben bietet MPL 50 die Möglichkeit
von Simultanprogrammen. Es stehen insgesamt 8 Simultanprogramme zur Verfügung,
von denen jedes bis zu 8 Unterprogramme oder Prozeduren verarbeiten kann.
Das Konzept dieser Simultanprogramme erlaubt die mehrfache, parallele Ausführung ei-
nes einzigen Programmes. Das ermöglicht beispielsweise, dass eine Positionier-prozedur
nur einmal als Code vorhanden ist, aber trotzdem von mehreren Simultanprogrammen
aus, mit unterschiedlichen Achsen, gleichzeitig aufgerufen werden kann. Anwendung fin-
den Simultanprogramme beispielsweise bei Dateneingabe, Stop- oder Anzeigefunktionen
während dem Positionierablauf.

Syntax: Parameter:
ASIM n , LABEL n (0 ... 7) LABEL zeigt Programmbeginn
ASIM n , VAR n (0 ... 7) Inhalt von VAR zeigt
Programmbeginn.

13.10.97, 396.2400 Systemhandbuch, Seite 4.21


Instruktionen MPL 50 Programmsteuerinstruktionen

Programmsteuerung bei Simultanprogrammen


Innerhalb eines Simultanprogrammes lassen sich sämtliche bekannten Programmsteuer-
instruktionen verwenden. Von jedem Simultanprogramm aus lassen sich andere Simul-
tanprogramme aufrufen. Daneben kann die Ausführung eines Simultanprogrammes über
die entsprechenden Zustandsflags
SAF(0) ... SAF(7) beeinflusst werden:
• SAF(0) ... SAF(7) entsprechendes Simultanprogramm anhalten.
• SAF(0) ... SAF(7) entsprechendes Simultanprogramm weiterführen.
• Durch Abfragen von SAF(0) ... SAF(7) kann der Zustand aller Simultanprogramme
ermittelt werden.

Durch Abfrage der Variablen PNB kann ermittelt werden, in welchem Simultanpro-
gramm man sich befindet. Die Variable PNB ist besonders beim Aufbau von Prozeduren
wichtig, die gleichzeitig von verschiedenen Simultanprogrammen aus aufgerufen werden.
In diesen Fällen empfiehlt sich die Indexierung prozedurinterner Variablen mit PNB. Da-
mit ist sichergestellt, dass jedes Simultanprogramm seinen eigenen, geschützten Datenbe-
reich erhält.

Wichtig: Simultanprogramme dürfen nicht während der Ausführung einer Kom-


munikationsinstruktion gestoppt werden.
Stoppt sich ein Simultanprogramm selber durch Reset des eigenen SAF-
Flags, muss unmittelbar nach dem Resetbefehl ein NOP stehen.

Prioritätsumschaltung von Simultanprogrammen (Tasks)


Instruktion: Syntax:
Höchste Taskpriorität PSIM
Normale Taskpriorität RSIM

Die Instruktion PSIM gibt dem ausführenden Task höchste Priorität und hält damit die
Ausführung aller übrigen Tasks an, bis die Instruktion RSIM ausgeführt wird. Damit ist
es möglich, exklusive Ausschlüsse von kritischen Programm- oder Datenregionen wie
beispielsweise den Eintrag in eine FIFO zu realisieren.
Nach RSIM werden wieder alle Tasks gleichwertig parallel bearbeitet.

Hinweis: Nach PSIM sollte die Reaktivierung von parallelen Tasks nicht mit
ASIM erzwungen werden.

13.10.97, 396.2400 Systemhandbuch, Seite 4.22


Instruktionen MPL 50 Programmsteuerinstruktionen

Aufruf von Unterprogrammen und Prozeduren


Die Möglichkeit der Prozedurverarbeitung bietet dem Anwender bisher unerreichten
Komfort für die Programmierung und den Einsatz des Positioniersystems SELEDATA®
MPS 50. Dank Prozedurverarbeitung ist jeder Anwender in der Lage, neue Funktionen zu
schaffen, die den Erfordernissen seiner Anlage genau entsprechen. Daraus resultiert eine
wesentliche Vereinfachung und Effizienzsteigerung der Bedienung und schlussendlich
auch eine Wertvermehrung der Anlage.
SELEDATA® MPS 50 ermöglicht die Anwendung von Prozeduren und Unterprogram-
men. Als Unterprogramme werden Programmteile definiert, die einmal geschrieben, aber
während des Programmablaufs mehrmals aufgerufen und ausgeführt werden. Innerhalb
eines Unterprogramms lassen sich wiederum weitere Unterprogramme bis zu einer Ver-
schachtelungstiefe von 8 Ebenen aufrufen. Der Aufruf eines Unterprogrammes geschieht
üblicherweise durch die Instruktion CALL und dem LABEL, der den Beginn des Unter-
programmes bezeichnet. Die Instruktion CALL kann weggelassen werden, ausser nach
einer bedingten Instruktionsausführung (IF).

Instruktion: Syntax:
Unterprogrammaufruf (CALL) LABEL

Sämtliche Regeln für die Verarbeitung eines Unterprogrammes gelten ebenfalls für Pro-
zeduren. Neben dem Prozedurnamen (LABEL) lassen sich jedoch noch eine beliebige
Anzahl von PARAMETERN angeben, die die Eingangsdaten und Ausgangsdaten für die
Bearbeitung des Prozedurprogrammes darstellen.
Wichtige Eigenschaft der Programmiersprache MPL 50 ist die Möglichkeit, eine Proze-
dur gleichzeitig von mehreren Simultanprogrammen aus aufzurufen.

Instruktion: Syntax:
Prozeduraufruf PROZEDURNAME PARAMETER0, PARA-
METER1, ..., PARAMETERn

13.10.97, 396.2400 Systemhandbuch, Seite 4.23


Instruktionen MPL 50 Programmsteuerinstruktionen

Aktuelle und formale Parameter


Zusammen mit dem Prozeduraufruf lassen sich beliebige Parameter angeben. Diese Para-
meter werden als aktuelle Parameter bezeichnet, da sie für den Moment des Prozedurauf-
rufes die aktuellen Werte darstellen.
Innerhalb des Prozedurprogrammes sollen diese Werte richtig bearbeitet werden. Dazu
werden die formalen Parameter benötigt, die als Platzhalter für die aktuellen Parameter
dienen.
Die aktuellen Parameter werden im Prozedurprogramm durch folgende formalen Parame-
ter dargestellt:
• PARAMETER 0 = %(0)
• PARAMETER 1 = %(1)
• PARAMETER 2 = %(2)
• PARAMETER n = %(n)

Es lassen sich insgesamt 256 formale Parameter [%(0) ... %(255)] direkt definieren.

Das NO-Parameterflag NPAR


Unter Umständen kann es sinnvoll sein, einen Prozeduraufruf mit flexibler Anzahl Para-
metern zu ermöglichen. Anwendungen dafür sind beispielsweise Positionier-Prozeduren
für 1 ... 6 Achsen. Damit im Prozedurprogramm die Anzahl der effektiv angegebenen Pa-
rameter festgestellt werden kann, wird das NPAR-Flag aktiviert, sobald für einen forma-
len Parameter im Prozeduraufruf kein aktueller Parameter mehr vorhanden ist.

Das Scheinparameterflag PHP


Das PHP-Flag wird aktiviert, wenn für einen formalen Parameter im Prozeduraufruf das
* Zeichen als aktueller Wert übergeben wird. Durch ein passendes Prozedurprogramm
lässt sich das Scheinparameterflag PHP zur Programmsteuerung verwenden. Anwen-
dungsbeispiele sind vereinfachte Prozeduraufrufe für Prozeduren mit einer starren Anzahl
Parameter.

13.10.97, 396.2400 Systemhandbuch, Seite 4.24


Instruktionen MPL 50 Programmsteuerinstruktionen

Rücksprung aus Prozedur-/ Unterprogramm


Jedes Prozedur- oder Unterprogramm wird mit einer Rücksprunginstruktion abgeschlos-
sen.
Instruktion: Syntax:
Rücksprunginstruktionen RET Rücksprung und Ausführung der
Instruktion, die dem Aufruf folgt.
Rücksprung und Weiterführung
des Programmes ab LABEL RETJ LABEL Rücksprung und Ausführung der
Instruktion beim LABEL.
Rücksprung und Weiterführung
des Programmes ab VAR RETJ VAR Rücksprung aus Prozedur-/
Unterprogramm. VAR enthält den
Label für die Weiterführung des
Programmes.

Bei der Verwendung von RETJ ist darauf zu achten, dass keine unübersichtlichen Pro-
grammstrukturen entstehen!

13.10.97, 396.2400 Systemhandbuch, Seite 4.25


Instruktionen MPL 50 Programmsteuerinstruktionen

Beispiel:
Es soll eine Prozedur für einen Blinker programmiert werden. Als Parameter sollen ein
Eingangssignal, die Blinkzeit in Sekunden und ein Ausgangssignal angegeben werden.

Prozedur:
;Prozeduraufruf mit Eingang 0, Blinkzeit 0,5 sec und Ausgang 0.
;Hauptprogramm
START: BLINKER IN(0),0.5,OUT(0)
;Verzweigung ins
JMP START ;Prozedurprogramm

;Prozedurprogramm
BLINKER: IFF %(0) RET ;Rücksprung ins Hauptprogramm wenn
;Steuereingang false
FMUL RA,%(1),1000.0 ;Zeit in Millisekunden
CINR RA
LOOP: MOV TMR(PNB),RA ;Timerindex = Simultan-
;programm-Nummer
SET TAF(PNB) ;Start Blinkzeit ein
WT TAF (PNB) ;Warten bis Zeit abgelaufen
SET %(2) ;Set Ausgang
MOV TMR(PNB),RA
SET TAF(PNB) ;Start Blinkzeit aus
WT TAF (PNB)
RES %(2) ;Reset Ausgang
JT %(0),LOOP ;Sprung nach LOOP wenn
;Steuereingang = TRUE
RET ;Rücksprung ins Hauptprogramm
END START

13.10.97, 396.2400 Systemhandbuch, Seite 4.26


Instruktionen MPL 50 Kommunikationsinstruktionen

Kommunikationsinstruktionen
SELEDATA® MPL 50 bietet eine Reihe von komfortablen Kommunikations-instruktio-
nen. Als Kommunikationskanal dient immer die RS 232C Schnittstelle.

Dateneingabe über RS 232C


Ueber die serielle Schnittstelle können numerische und alphanumerische Daten eingege-
ben werden. Die gesendeten Daten werden in den angegebenen Zieloperanden DOP ge-
speichert.

Instruktion: Syntax:
Eingabe Integer- oder
Ordinalzahl IINP DOP
Eingabe Floatingpointzahl FINP DOP
Eingabe String STINP DOP

Diese Kommunikationsinstruktionen bewirken, dass die Programmausführung angehal-


ten wird, bis das Zeichen "Carriage Return" gesendet wird.

Syntax: Steuersignale über RS 232C


Instruktion: Syntax:
Eingabe eines einzelnen
ASCII-Zeichens ohne
Carriage Return KINP DOP

Diese Instruktion dient vor allem zur Verarbeitung von Steuersignalen, die über die seri-
elle Schnittstelle empfangen werden. Die nächste Instruktion nach KINP wird ausgeführt,
sobald ein Zeichen über RS 232C empfangen worden ist.

Beispiele:
FINP VAR1 Die über RS 232C gesendete Floatingpointzahl wird in
die Variable VAR1 gespeichert.
KINP RA ASCII-Zeichen in Rechenregister RA speichern und
ICMP RA, "M" mit ASCII-Zeichen M vergleichen.

13.10.97, 396.2400 Systemhandbuch, Seite 4.27


Instruktionen MPL 50 Kommunikationsinstruktionen

Datenausgabe über RS 232C


Wie bei der Dateneingabe lassen sich ebenfalls beliebige Daten über die serielle Schnitt-
stelle an angeschlossene Datengeräte (Terminals, Intelligente SPS, PC usw.) ausgeben.
Welche Daten ausgegeben werden bestimmt der Quellenoperand SOP.

Instruktion: Syntax:
Ausgabe Integerzahl IPR SOP
Ausgabe Floatingpointzahl FPR SOP
Ausgabe String STPR SOP
Ausgabe Steuerzeichen KPR SOP,SOP2,SOPn

Der Quellenoperand SOP kann entweder als Konstante oder als Variable angegeben wer-
den.

Beispiele:
IPR PABS(0) Ausgabe der Absolutposition der
Achse 0 in Schritten.
STPR <"GUTEN TAG",$D,$A> Ausgabe des Text GUTEN TAG.
Die hexadezimalen Zeichen D und A bewirken
Carriage Return und Line Feed.
Die nächste Daten-Ausgabe wird am Anfang
der nächsten Zeile beginnen.
KPR $D Ausgabe des ASCII-Zeichen CR.

13.10.97, 396.2400 Systemhandbuch, Seite 4.28


Instruktionen MPL 50 Kommunikationsinstruktionen

Die Printmode-Variablen
Die Printmode-Variablen dienen zur Festlegung des Formats von Zahlen ,welche über RS
232C ausgegeben werden. Es wird zwischen Printmodevariablen für Integerzahlen (PMI)
und für Floatingpointzahlen [PMF(0),PMF(1)] unterschieden. Die einzelnen Variablen
haben folgende Bedeutung:

PMI = 0:
Die übertragene Integerzahl wird auf der angeschlossenen Anzeige unmittelbar rechts von
der letzten Cursorposition dargestellt (Linksbündige Darstellung). Die erste Stelle ist stets
für das Vorzeichen reserviert, wobei nur das negative Vorzeichen angezeigt wird.

PMI = n (> 0):


Die übertragene Integerzahl wird auf der angeschlossenen Anzeige unmittelbar links von
der letzten Cursorposition mit n Stellen dargestellt (Rechtsbündige Darstellung).
Hat die übertragene Integerzahl mehr als n Stellen, werden alle Stellen mit 9 angezeigt.

13.10.97, 396.2400 Systemhandbuch, Seite 4.29


Instruktionen MPL 50 Kommunikationsinstruktionen

Beispiele:
Übertragene Zahlen: -1, 10, -200, 1000
Printmode Variable:
Programm: MOV PMI,0 Darstellung:
IPR -1 -1
IPR 10 10
IPR -200 -200
IPR 1000 1000
Printmode Variable:
Programm: MOV PMI,4 Darstellung:
IPR -1 -1
IPR 10 10
IPR -200 -200
IPR 1000 1000

PMF(0) = 0:
Die übertragene Floatingpointzahl wird in wissenschaftlicher Schreibweise mit 6 Nach-
kommastellen dargestellt.

PMF(0) = n (> 0):


Die übertragene Floatingpointzahl wird mit n Vorkommastellen dargestellt.

PMF(1) = n :
Die übertragenen Floatingpointzahl wird mit n Nachkommastellen dargestellt.

13.10.97, 396.2400 Systemhandbuch, Seite 4.30


Instruktionen MPL 50 Kommunikationsinstruktionen

Beispiele:
Übertragene Zahlen: 100.75 , 0.123456
Printmode Variablen:
Programm: MOV PMF(0),0 ;Vorkomma-Stellen
FPR 100.75
FPR 0.123456
Darstellung: 1.007500E02
1.234560E-01
Printmode Variablen:
Programm: MOV PMF(0),3 ;Vorkomma-Stellen
MOV PMF(1),4 ;Nachkomma-Stellen
FPR 100.75
FPR 0.1234
Darstellung: 100.7500
0.1234

13.10.97, 396.2400 Systemhandbuch, Seite 4.31


Instruktionen MPL 50 Kommunikationsinstruktionen

Kommunikations-Steuerflags

CIB-Flag
Der Default-Wert des CIB-Flags ist TRUE (log. 1). Dadurch wird unmittelbar vor jeder
INP-Instruktion der FIFO-Buffer der seriellen Schnittstelle gelöscht. PCC 50 liest also
nur jene Zeichen, die zeitlich gesehen nach Beginn der Ausführung einer INP-Instruktion
ankommen.
Wird das CIB-Flag auf FALSE (log. 0) gesetzt, erfolgt kein löschen des FIFO-Buffers.
Dadurch gehen also jene Zeichen nicht verloren, welche nach dem letzten Carriage Return
und vor Beginn der Ausführung einer INP- Instruktion gesendet worden sind. Diese Ei-
genschaft ist vor allem bei automatischem Datenaustausch mit übergeordneten Rechner-
systemen von grossem Vorteil.

ECHO-Flag
Der Default-Wert der ECHO-Flags ist TRUE (log. 1). Bei der Ausführung einer INP-In-
struktion bewirkt dies ein Zurücksenden der angekommenen Zeichen zum Sender.
(Ausnahme: KINP kennt kein ECHO!) Vor allem beim automatischen Datenaustausch
mit übergeordneten Systemen ist dieser ECHO-Betrieb unerwünscht und lässt sich des-
halb durch Rücksetzen des ECHO-Flags auf FALSE (log. 0) ausschalten.

Variable KCOD
KCOD ist eine vorgegebene, numerische Variable vom Typ Ordinal 1Byte und enthält
stets das letzte Zeichen, das über die serielle Schnittstelle angekommen ist. KCOD kann
als Operand in allen Instruktionen auftreten, welche für Operationen mit Ordinalzahlen
vorgesehen sind.
Damit kann ohne Umweg über INP-Instruktionen direkt auf diese Variable zugegriffen
werden.
Anwendungsfälle ergeben sich, wenn beispielsweise Steuerzeichen gelesen werden müs-
sen, während das System eine Print-Instruktion (STPR,FPR,IPR,KPR) ausführt und somit
die serielle Schnittstelle für eine INP-Instruktion gesperrt ist.

13.10.97, 396.2400 Systemhandbuch, Seite 4.32


Instruktionen MPL 50 Kommunikationsinstruktionen

Beispiel:
Eine Achse soll im Handbetrieb bewegt werden. Die Steuerzeichen "V" = Vorwärts, "R"
= Rückwärts und "S" = Stop sind über ein Terminal einzugeben. Auf dem Display soll die
aktuelle Position der Achse laufend angezeigt werden.

;Symboldefinitionen:
X = 0
VOR = FLG(0)
RUECK = FLG(1)
START: INITAB 0,0,100,75,75,500,25.0,2000.0
ASIM 1,BEWEGUNG
ASIM 2,ANZEIGE
MOV PMI,7

;Steuerung der Bewegung mit den Zeichen V,R und S:


STEUERUNG:ICMPKCOD,"V" ;Vorwärts
IFE SET VOR
ICMP KCOD, "R" ;Rückwärts
IFE SET RUECK
ICMP KCOD, "S" ;Stop
IFE RES VOR,RUECK
JMP STEUERUNG

;Motorbewegungen:
BEWEGUNG:JOGP X,VOR ;Handbetrieb vorwärts
JOGN X,RUECK ;Handbetrieb rückwärts
JMP BEWEGUNG

;Positionsanzeige:
ANZEIGE: IPR PABS(X) ;Anzeige der Absolutposition
KPR $D ;Cursor auf Zeilenanfang (CR)
JMP ANZEIGE

INCL (INITAB.PR4)
INCL (JOGP.PR4)
INCL (JOGN.PR4)
MOD2

END START

13.10.97, 396.2400 Systemhandbuch, Seite 4.33


Instruktionen MPL 50 Kommunikationsinstruktionen

Lesen aus dem FIFO-Buffer der RS 232C


Der Eingangsbuffer der seriellen Schnittstelle ist eine FIFO. Auf diese FIFO gibt es zwei
Zeiger. Der Schreibzeiger wird inkrementiert, sobald ein Zeichen über die RS 232-
Schnittstelle ankommt. Das Zeichen selber wird an jener Stelle in der FIFO gespeichert,
auf die der Schreibzeiger vor dem Inkrementieren zeigt.
Der zweite Zeiger ist der Lesezeiger. Dieser wird mit jedem Zeichen inkrementiert, das
aus der FIFO mit einer Instruktion xINP (KINP, IINP usw.) gelesen wird. Wird eine In-
struktion xINP ausgeführt, wenn der Lese- und der Schreibzeiger auf dieselbe Stelle zei-
gen, ist kein Zeichen mehr vorrätig und das Programm hält an dieser Stelle an bis eine
Eingabe erfolgt.

Hinweis: Die Anwendung der folgenden Instruktionen ist nur sinnvoll wenn das
CIB-Flag FALSE (log.0) ist!

Instruktion: Syntax:
Lesezeiger dekrementieren POPK

POPK dekrementiert den Lesezeiger auf die FIFO. Damit wird es möglich, ein ankom-
mendes Zeichen mit KINP zu lesen, zu analysieren und zu entscheiden, von welcher Art
die Eingabe ist (z.B. Zahl oder Buchstabe), ohne dass dieses erste Zeichen verloren geht.

13.10.97, 396.2400 Systemhandbuch, Seite 4.34


Instruktionen MPL 50 Kommunikationsinstruktionen

Beispiel:
NUMERIC: DI4 0
STRING: DSTR <' '>
START: KINP RA
ICMP RA,'0','9'
JE ZAHL
ICMP RA,'A','Z'
JE GROSSBUCHSTABE
JMP START
ZAHL: POPK ;Schon gelesenes Zeichen
;wieder zugänglich machen
IINP NUMERIC ;Zahl lesen
GROSSBUCHSTABE: POPK
STINP STRING ;String lesen
.....

Instruktion: Syntax:
Zeichen lesen ohne
inkrementieren des
Lesezeigers KVINP DOP

KVINP liest das Zeichen aus der FIFO, auf welches der Lesezeiger zeigt, ohne diesen zu
inkrementieren. Falls der Lese- und der Schreibzeiger der FIFO gleich sind, wird die Pro-
grammausführung angehalten bis ein Zeichen eingegeben wird.

Instruktion: Syntax:
Zeichenvorrat in der
FIFO ermitteln SINP DOP

SINP ermittelt den Zeichenvorrat in der FIFO oder anders ausgedrückt, die Differenz zwi-
schen Lese- und Schreibzeiger.

13.10.97, 396.2400 Systemhandbuch, Seite 4.35


Instruktionen MPL 50 Kommunikationsinstruktionen

Lesen von gemischten Datentypen


Bei der automatischen Übertragung von einem übergeordneten System zur MPS 50 tritt
oft der Fall auf, dass die ankommenden Daten aus unterschiedlichen Datentypen beste-
hen.
z.B: POS 1 100.0 [CR]
Dieser String besteht aus einem Element POS vom Typ String, einem Element 1 vom Typ
Ordinal und einem Element 100.0 vom Typ Floatingpoint.
Die Verwendung von Typenbezogenen INP-Instruktionen ist dabei nicht möglich, weil
nur ein CR am Ende der Übertragung gesendet wird. Somit verbleibt nur die Möglichkeit
des Einlesens als String mit anschliessender Aufteilung. Hier ermöglichen eine Reihe von
besonderen INP-Instruktionen sehr komfortable Lösungen.
Damit gemischte Datentypen gelesen werden können, wurde ein spezieller Linebuffer mit
einer Länge von 128 Zeichen geschaffen. In diesen Linebuffer lassen sich Strings von ge-
mischten Datentypen einspeichern und anschliessend nach Datentypen wieder auslesen.
Im ersten Byte (Adresse $FF00) dieses Linebuffers befindet sich die Anzahl der eingele-
senen Zeichen.
Wie in obigem Beispiel angedeutet, wird ein gemischter String als eine Menge von Ele-
menten mit unterschiedlichen Datentypen betrachtet. Bei der Übertragung ist daher auf
die Unterteilung der Elemente zu achten.
Als Separatoren zwischen zwei Elementen sind zulässig:
• Komma
• Ein oder mehrere Leerschläge
• Ein oder mehrere Tabulatoren

Beispiel:
POS,1, 100.0
POS 1 100.0
POS 1 100.0
Die Separatoren werden im Linebuffer gespeichert aber durch die Leseinstruktionen igno-
riert.
Durch ein ankommendes CR-Zeichen ($D) wird der Lesevorgang beendet und ein Flag
LNF gesetzt.
In einem gemischten String können sich auch Kommentare befinden. Zu diesem Zweck
werden Zeichen nach einem Semikolon [;] ignoriert.

13.10.97, 396.2400 Systemhandbuch, Seite 4.36


Instruktionen MPL 50 Kommunikationsinstruktionen

Instruktionen zum Einlesen in den Linebuffer

Instruktion: Syntax:
Initialisierung des Buffers
und der FIFO CLINP - Löscht den Linebuffer UND
die FIFO(!) der RS 232C.
- Setzt die Anzahl Zeichen im
Linebuffer ([Link] $FF00)
auf 0.
- Setzt das Flag LNF auf TRUE
(log.1).

Instruktion: Syntax:
Start des Lesevorgangs
in den Buffer LINP - Startet den Lesevorgang.
- Setzt die Anzahl Zeichen im
Linebuffer ([Link] $FF00)
auf 0.
- Setzt des Flag LNF auf
FALSE (log.0).

Die Instruktion LINP startet den Lesevorgang ohne dessen Ende abzuwarten.
Der Lesevorgang kann als beendet und damit die Daten im Linebuffer als gültig betrachtet
werden, sobald das Flag LNF = TRUE (log.1) ist. Dies ist der Fall, sobald die Datenüber-
tragung mit CR (ASCII 13) abgeschlossen wird.

13.10.97, 396.2400 Systemhandbuch, Seite 4.37


Instruktionen MPL 50 Kommunikationsinstruktionen

Instruktionen zum Auslesen aus dem Linebuffer

Instruktion: Syntax:
Auslesen String STXINP DOP,(Elementnummer)
Auslesen Integer-Zahl IXINP DOP,(Elementnummer)
Auslesen Floatingpoint-Zahl FXINP DOP,(Elementnummer)

Mit Elementnummer kann exakt definiert werden, welches Element aus dem Linebuffer
gelesen werden soll. Ohne Angabe von Elementnummer wird immer das nächst folgende
Element gelesen.
Wird ein Element ausgelesen, für welches sich keine Werte mehr im Linebuffer befinden,
wird das Overflowflag OVF gesetzt.

13.10.97, 396.2400 Systemhandbuch, Seite 4.38


Instruktionen MPL 50 Kommunikationsinstruktionen

Beispiel:
Übertragener String von übergeordnetem System:
POS X, 250.75, Y, 10.31, 200, , , , ;Positionieren [CR]
0 1 2 3 4 5 6 7 8 ;Element-Nr
Durch folgende Programmsequenz lässt sich dieser gemischte String aus dem Linebuffer
auslesen:
;Variablen
BEFEHL: DSTR <' '>
ACHSE: DSTR 2 DUP <' '>
KOORDINATE: DF 2 DUP 0.0
VORSCHUB: DO1 0

LESEN: CLINP ;Linebuffer löschen


LINP ;Lesevorgang starten
WF LNF ;Warten bis Uebertragung beendet
STXINP BEFEHL ;BEFEHL := 'POS'
STXINP ACHSE(0) ;ACHSE(0) := 'X'
FXINP KOORDINATE(0) ;KOORDINATE(0) : = 250.75
STXINP ACHSE(1) ;ACHSE(1) := 'Y'
FXINP KOORDINATE(1) ;KOORDINATE(1) : = 10.31
IXINP VORSCHUB ;VORSCHUB := 200
IXINP RA,4 ;RA := 10 (Rundung von 10.31)
IXINP RB,6 ;RB := 0 da im Element 6 kein Wert
;vorhanden
FXINP RC,7 ;RC :=0.0
FXINP RD,8 ;RD :=0.0

13.10.97, 396.2400 Systemhandbuch, Seite 4.39


Instruktionen MPL 50 Kommunikationsinstruktionen

Datenübertragungs-Instruktionen
MPS 50 bietet die Möglichkeit, bis zu 15 Systeme miteinander über die RS 232-Schnitt-
stelle zu vernetzen und Daten auszutauschen. Jedes MPS 50-System erhält seine indivi-
duelle Modulnummer (1 ... 15), welche eine direkte Kommunikation zwischen dem
Master-System und einem einzelnen Slave ermöglicht.
Die Modulnummer 0 erlaubt eine gleichzeitige Übertragung von Daten vom Master zu al-
len Slaves (nur Senden).
Folgende Punkte sind bei der Daten Übertragung in einem Netz von MPS 50-Systemen
zu beachten:
• Ein Kommunikationsnetz besteht immer aus einem übergeordneten Mastersystem und
max. 14 untergeordneten Slavesystemen
• Jedes System muss eine Modulnummer zwischen 1 und 15 haben.
• Das Senden und Empfangen von Daten sollte nur vom Mastersystem gesteuert werden
um Übertragungskonflikte zu vermeiden.
• Es können ausschliesslich numerische Daten vom Typ Floatingpoint, Integer oder
Ordinal übertragen werden.
• Der Inhalt der Rechenregister RA ... RF sowie der Variablen PNB kann nicht direkt
übertragen werden.

Diese Art der Vernetzung eignet sich nur dort, wo die Systeme nahe beieinander liegen
und die Umgebung frei von elektrischen Störungen ist.
In einem industriellen Umfeld wird für solche Zwecke mit Vorteil der Kommunikations-
controller TCC 50 eingesetzt. Dieser ermöglicht die Vernetzung über Intel-BITBUS mit
anderen MPS-Steuerungen, speicherprogrammierbaren Steuerungen SELECONTROL®
PMC 20,30 und 40 sowie mit verschiedenen handelsüblichen Steuer- und Rechnersyste-
men.

13.10.97, 396.2400 Systemhandbuch, Seite 4.40


Instruktionen MPL 50 Kommunikationsinstruktionen

Instruktion: Syntax:
Daten senden von Master zu Slave TX M,DOPSLAVE, SOPMASTER

Der Inhalt von SOP im Master wird in DOP im Slave mit Modulnummer M übertragen.
Ist M = 0 wird der Inhalt von SOP in DOP von sämtlichen Slaves übertragen.

Instruktion: Syntax:
Daten empfangen in Master von Slave RX DOPMASTER,M,SOPSLAVE

Der Inhalt von SOP im Slave mit Modulnummer M wird in DOP im Master übertragen.
M = 0 ist für die Instruktion RX unzulässig.

Falls die Slaveoperanden DOPSLAVE oder SOPSLAVE indexierte Elemente eines Varia-
blenfeldes sind, ist zu beachten, dass der Elementindex RA ... RF durch die Rechenregi-
ster im Master gebildet wird.

13.10.97, 396.2400 Systemhandbuch, Seite 4.41


Instruktionen MPL 50 Kommunikationsinstruktionen

Timeout zu Instruktionen RX und TX


Die Instruktionen RX und TX beinhalten einen Timeout von 400msec für RX und 40msec
für TX.
Falls diese Instruktionen nicht innerhalb dieser Zeit eine Reaktion auf dem Zielsystem zur
Folge haben, wird die Instruktionsausführung abgebrochen und das Overflowflag OVF
gesetzt.

Beispiel:
Für die praktische Verwendung der RX und TX-Instruktionen empfielt es sich, folgenden
Programmaufbau zu wählen:

Beispiel Programmaufbau:
MOD 1..15
START: JMP BEGINN
INCL(ALLGEMVAR)
VAR: DF 0,0 ....
BEGINN: MOV RA,0 ....
.....
END START

Die INCL-Datei ALLGEMVAR enthält alle Variablen, die in den verschiedenen Syste-
men für die Kommunikation mit dem Master verwendet werden. So ist es möglich, in den
Programmen für die verschiedenen Steuerungen stets mit denselben Symbolen zu arbei-
ten.
Mit der Compilerfunktion T (Transfer) lässt sich jedes compilierte Programm auf die zu-
gehörige Steuerung übertragen. (siehe Kapitel "Compiler")
Durch Modulnummer 0 gefolgt von R (Run) wird die Programmausführung in allen
Steuerungen gleichzeitig gestartet. (siehe Kapitel "Compiler")

13.10.97, 396.2400 Systemhandbuch, Seite 4.42


Instruktionen MPL 50 Kommunikationsinstruktionen

Vernetzung der Schnittstellen


Ein Kommunikationsnetz mit MPS 50-Systemen kann mit oder ohne PC aufgebaut wer-
den. Da der gesamte Datenverkehr bei angeschlossenem PC über dessen serielle Schnitt-
stelle läuft, ergeben sich zwei verschiedene Schaltungsarten für die Schnittstelle.

Schaltung mit PC

MPS 50 MPS 50 MPS 50


MOD 1 MOD 2 MOD 15

RXD TXD RXD TXD RXD TXD

TXD RXD

PC + MPL 50 Console-Mode

Schaltung ohne PC

MPS 50 MPS 50 MPS 50


MOD 1 MOD 2 MOD 15

RXD TXD RXD TXD RXD TXD

13.10.97, 396.2400 Systemhandbuch, Seite 4.43


Instruktionen MPL 50 Sonderinstruktionen

Sonderinstruktionen
Adressen von Variablen
Bei der Definition von Variablen werden vom Compiler den vereinbarten Variablenna-
men Adressen zugeordnet. Diese Adressen werden im Maschinencode benötigt und sind
für den Anwender normalerweise nicht sichtbar. Mit der Instruktion ADDR lassen sich
nun diese Adressen von Variablen und indexierten Variablen ermitteln.
Instruktion: Syntax: Operation:
Variablen-Adresse
ermitteln ADDR DOP,VAR Die Adresse von VAR wird
ermittelt und im Zieloperanden
DOP als Zahlenwert
gespeichert.

NOP-Instruktion
Die Instruktion NOP hat keine Funktion zur Folge. Sie dient als "Leerstelle" im Pro-
gramm.
Instruktion: Syntax:
Leerstelle im Programm NOP

13.10.97, 396.2400 Systemhandbuch, Seite 4.44


Instruktionen MPL 50 Sonderinstruktionen

Umschaltung der Baud-Rate

Instruktion: Syntax:
Baud-Rate einstellen BAUD SOP

Folgende Baudraten ergeben sich für SOP:

SOP: Baud-Rate: [Bit/sec]


0 110
1 150
2 300
3 600
4 1200
5 2400
6 4800
7 9600

Die Instruktion BAUD schaltet die Übertragungs-Geschwindigkeit vom werkseitig im


EPROM gespeicherten Defaultwert von 4800 Bit/sec auf den neuen Wert entsprechend
SOP um.

13.10.97, 396.2400 Systemhandbuch, Seite 4.45


Instruktionen MPL 50 Sonderinstruktionen

Ein/Ausgabe des gesamten ASCII-Zeichensatzes


Im Normalbetrieb lassen sich die ASCII-Zeichen 00 und E0 ... FF durch die Ein- und Aus-
gabe-Instruktionen nicht verarbeiten, da diese Zeichen vom MPL-Compiler für Durch-
griffsfunktionen auf das Betriebssystem verwendet werden.
Die Instruktion XMODE schaltet diese Durchgriffsmöglichkeit aus und ermöglicht da-
durch die Verarbeitung des gesamten ASCII-Zeichensatzes von 00 ... FF. Durch die Ta-
stenkombination ALT-X im MPL-Compiler kann für das Debugging wiederum auf
Normalbetrieb umgeschaltet werden.

Syntax: Parameter:
XMODE SOP SOP = 0 : XMODE ein Zeichen 00 ... FF
SOP = 1 : XMODE aus (Normalbetrieb) Zeichen 01 ... DF

13.10.97, 396.2400 Systemhandbuch, Seite 4.46


Instruktionen MPL 50 Positionierinstruktionen

Positionierinstruktionen
Einführung
MPS 50 ist mit sogenannten Bewegungsgeneratoren für die Steuerung der Achsbewegun-
gen ausgerüstet. Diese Bewegungsgeneratoren haben die Aufgabe, den Verlauf der
Schrittfrequenz während einer Bewegung von A nach B entsprechend den von der CPU
berechneten Werten für die Rampen und Verfahrgeschwindigkeiten zu steuern.
Für die genaue Definition einer Positionierung werden folgende Daten benötigt:
• Positionierdistanz in Schritten
• Wert für Beschleunigungsrampe
• Wert für Bremsrampe
• Maximale Verfahrgeschwindigkeit
• Arbeitsgeschwindigkeit
• Geschwindigkeitsteilwert

13.10.97, 396.2400 Systemhandbuch, Seite 4.47


Instruktionen MPL 50 Positionierinstruktionen

Positionierdistanz
Die Angabe der Positionierdistanz erfolgt für die Bewegungsgeneratoren immer als rela-
tive Anzahl von Mikroschritten. Für die Distanzeingabe in technischen Einheiten muss
also vorher mittels einem Skalenfaktor diese Anzahl Mikroschritte berechnet werden.
Diese Aufgabe übernimmt die Standardprozedur INITAB.
Bei der Angabe des Skalenfaktors ist zu beachten, dass sich die Anzahl Mikroschritte im-
mer auf eine interne Referenzfrequenz von max. 250 kHz bezieht. Werden also die
Schrittmotorantriebe am Impulsausgang FA (max. 100 kHz) betrieben, ist die Anzahl Mi-
kroschritte für die Bewegungsgeneratoren 2.5 mal und beim Impulsausgang FB (max. 25
kHz) 10 mal grösser als die vom Schrittmotor ausgeführte Schrittzahl.
Diese Faktoren werden durch die Prozedur INITAB automatisch mit einbezogen und in
den Systemvariablen KMUL (0 ... 5) gespeichert.
Beispiel:
Ein Schrittmotor treibt eine Spindel mit einer Steigung von 5 mm direkt gekoppelt an. Der
Schrittmotor macht im Mikroschrittbetrieb 2000 Schritte pro Umdrehung. Als Impulsaus-
gang wird FB verwendet.
Welcher Skalenfaktor muss verwendet werden, damit Distanzen in mm eingegeben wer-
den können?
Eine Umdrehung der Spindel entspricht 5 mm und 2000 Schritte am Schrittmotor. Daraus
folgt, dass für eine Distanz von 1 mm genau 400 Schritte benötigt werden.

Beispiel: Schrittmotor: 2000 µSchritte / Umdrehung

Schritt-
motor

Steigung p = 5 mm

2000 µSchritte / Umdrehung


Skalenfaktor = = 400.0
5 mm / Umdrehung

13.10.97, 396.2400 Systemhandbuch, Seite 4.48


Instruktionen MPL 50 Positionierinstruktionen

Geschwindigkeiten
Die Verfahrgeschwindigkeit wird aus insgesamt drei veränderbaren Komponenten er-
rechnet:
• Maximale Verfahrgeschwindigkeit
• Arbeitsgeschwindigkeit
• Geschwindigkeitsteilwert

Frequenz

SPMX

SPLD

SPLI

Zeit
Ta Ta

Der maximale Geschwindigkeitswert hängt von den Gegebenheiten der Anwendung ab.
Durch Versuche oder Berechnung wird die maximal erlaubte Verfahrgeschwindigkeit er-
mittelt und im Programm einmal festgelegt. Damit wird verhindert, dass eine program-
mierte Arbeitsgeschwindigkeit ausserhalb der erlaubten Grenzwerte liegt.

13.10.97, 396.2400 Systemhandbuch, Seite 4.49


Instruktionen MPL 50 Positionierinstruktionen

Die vorgegebenen Variablen für die maximale Verfahrgeschwindigkeit sind:


SPMX(0 ... 5) Inhalt: 0 ... 255

Die Arbeitsgeschwindigkeit wird entsprechend dem Programmablauf immer wieder neu


bestimmt. Sie stellt einen Teilwert der maximalen Verfahrgeschwindigkeit dar.
Die vorgegebenen Variablen für die Arbeitsgeschwindigkeit sind:
SPLD(0 ... 6) Inhalt: 0 ... 255

Der Geschwindigkeitsteilwert wird über die Zeigervariable SPLI festgelegt. Im Gegen-


satz zu einer normalen Variablen werden in einer Zeigervariablen keine numerischen
Werte, sondern Adressen gespeichert.
Das Betriebssystem des PPC 50-Controllers berechnet alle 2msec neue Geschwindigkei-
ten. Für diese Berechnung werden folgende Werte herangezogen:
• Der zu Beginn der Bewegung gelesene Wert im SPMX
(bleibt für 1 Bewegung unverändert).
• Der Wert in SPLD
• Der Wert der Variablen, deren Adresse in SPLI steht. Da für Geschwindigkeiten Werte
zwischen 0 und 255 zulässig sind, muss die Variable vom Typ Ordinal 1 Byte sein.

0 255

SPMX
0 255

SPLD
0 255

SPLI

13.10.97, 396.2400 Systemhandbuch, Seite 4.50


Instruktionen MPL 50 Positionierinstruktionen

Die vorgegebenen Zeigervariablen für die Geschwindigkeitswerte sind:


SPLI (0 ... 6)Inhalt:Adresse einer Variablen vom Typ Ordinal 1 Byte.

Beispiele:
GTW:DO1 100 ;Variable für Geschwindigkeitsteilwert
START: MOV SPLI(0),#GTW ; Adresse von GTW in SPLI speichern

Sinnvollerweise werden in der Praxis die Analogeingänge für den Geschwindigkeitsteil-


wert verwendet, da sich so auf einfache Weise ein Override realisieren lässt, indem ein
Potentiometer am Analogeingang angeschlossen wird.
Beispiel:
START: MOV SPLI (0), # ADC (8) ;Adresse von Analogeingang in SPLI speichern

Die effektiv resultierende Schrittfrequenz am Ausgang lässt sich also wie folgt berechnen:
ADC(8)
—————
SPMX * SPLD * Ganzzahlrundung 255
F = f * ——————————————————————
2552

Schrittfrequenzen für PPC 50: f [kHz]:


Jumper J2 & J3 in Position ’a’ 25
100
Jumper J2 & J3 in Position ’b’ 31,25
250

13.10.97, 396.2400 Systemhandbuch, Seite 4.51


Instruktionen MPL 50 Positionierinstruktionen

Rampen
Das Drehmoment Montag, 13. Oktober 1997eines Schrittmotors nimmt mit zunehmender
Frequenz ab. Um auch bei hohen Schrittfrequenzen optimale Beschleunigunswerte zu er-
zielen, erfolgt die Rampensteuerung bei MPS 50 exponentiell. Dadurch nimmt die Be-
schleunigung mit zunehmender Frequenz ab und damit auch das
Beschleunigungsmoment.
Dieses Verfahren erlaubt eine mechanische Masse in wesentlich kürzerer Zeit zu be-
schleunigen und abzubremsen als das mit einer linearen Rampensteuerung der Fall wäre.
Sind die BSTE-Flags = log 1, so werden die BST-Steuerausgänge während TA aktiviert.

Systemvariablen für
exponentiellen Rampen: Syntax: Bereich:
Beschleunigungsrampe KUP(0 ... 6) 0 ... 255
Bremsrampe KDN(0 ... 6) 0 ... 255

Bei SPMX = 255 und SPLD = 255 lässt sich die Beschleunigungs- und BremszeitMontag,
13. Oktober 1997 für die exponentiellen Rampen mit folgender Näherungsformel bestim-
men:

KUP oder KDN


1 – --------------------------------------
52
TA (sec) = 10

Für SPMX und SPLD kleiner als 255 reduziert sich TA entsprechend.

13.10.97, 396.2400 Systemhandbuch, Seite 4.52


Instruktionen MPL 50 Positionierinstruktionen

Soll während dem Positioniervorgang die Geschwindigkeit verändert werden, lässt sich
die berechnete exponentielle Bremsrampe nicht verwenden. Deshalb wird ein zusätzli-
cher linearer Rampenwert festgelegt, der dann den Beschleunigungs-/Bremsvorgang zeit-
lich steuert.

Systemvariablen für
lineare Bremsrampe: Syntax: Bereich:
Bremsrampe KLIN(0 ... 6) 0 ... 65535

Bei der linearen Rampe KLIN ist die Beschleunigungs- oder Bremszeit diejenige Zeit,
welche verstreicht, um von einer Anfangsgeschwindigkeit VA auf eine neue Endge-
schwindigkeit VE zu beschleunigen.
Für die Berechnung der Rampenzeit wird also die Geschwindigkeitsdifferenz DV benö-
tigt.
DV = V A - VE

SPLDA * (InhaltA von Variable in SPLI)


VA = —————————————————
256

SPLDE * (InhaltE von Variable in SPLI)


VE = —————————————————
256

Die resultierende Rampenzeit für KLIN kann nach folgender Formel ermittelt werden:

DV * 256
TA (sec) = ———— * 4 * 10-3
KLIN

13.10.97, 396.2400 Systemhandbuch, Seite 4.53


Instruktionen MPL 50 Positionierinstruktionen

Falls durch ein Programm keine Geschwindigkeits- und Rampenwerte vorgegeben wer-
den, nimmt der Controller PPC 50 folgende Default-Werte an:

Variable: Default-Wert:
PABS (0 ... 5) 0
SPMX (0 ... 6) 128
SPLD (0 ... 6) 128
SPLI (0 ... 6) Adresse $FF enthält den Wert 255
KUP (0 ... 6) 64
KDN (0 ... 6) 64
KLIN (0 ... 6) 512

13.10.97, 396.2400 Systemhandbuch, Seite 4.54


Instruktionen MPL 50 Positionierinstruktionen

Die Positionierinstruktionen
Die Ausführung einer Positionierung erfolgt in verschiedenen Schritten:
• Laden des Bewegungsgenerators mit der richtigen Anzahl Mikroschritten.
• Setzen bzw. Rücksetzen des Drehrichtunsflags DIR
• Setzen des RUN-Flags und damit starten der Bewegung. Warten solange RUN-Flag
aktiv ist, d.h. solange Bewegung läuft.

Instruktion: Syntax:
Laden Bewegungsgenerator IMG ACHSNUMMER, DISTANZ

Beispiel:
START: MOV SPMX(0),200 ; Max. Geschwindigkeit
MOV SPLD(0),100 ; Arbeitsgeschwindigkeit
MOV SPLI(0),#ADC(8) ; Geschwindigkeitsteilwert
MOV KUP (0),50 ; Beschleunigungsrampe
MOV KDN (0),50 ; Bremsrampe
MOV KLIN(0),500 ; Linearrampe

IMG 0,-5700 ; Bewegungsgenerator mit


; -5700 Mikroschritt laden

MOV DIR(0),SF ; Drehrichtung entsprechend


;Vorzeichen Distanz setzen
SET RUN(0) ; Bewegung starten
WT RUN(0) ; Ende Bewegung abwarten
WF IN(0) ; Warten wenn Eingang 0 inaktiv

JMP START ; Sprung auf START


END START ; Ende Compilation

Hinweis: Die maximale Mikroschrittzahl für die Bewegungsgeneratoren


beträgt ± 223-1 = ± 8'388'607.

13.10.97, 396.2400 Systemhandbuch, Seite 4.55


Instruktionen MPL 50 Positionierinstruktionen

Starten von Endlosbewegungen


Bei Achsen, die nur eine Drehbewegung ohne Positionierung ausführen müssen, bewirkt
das Nullsetzen der Bremsrampe KDN eine Endlosbewegung.
Die Steuerung der Bewegung über SPLI und SPLD und das RUN-Flag ist nach wie vor
möglich.

Folgende Programmsequenz kann angewendet werden:

Beispiel:
X=0
ENDLOS_X_RW:SETDIR(X) ;Drehrichtung RW
RES KDN(X)
IMG X,100000
SET RUN(X) ;Start Endlosbewegung
MOV RA,SPLD(X)
HALT_X: WF IN(0) ;Warten auf HALT ein
RES SPLD(X) ;Halt Bewegung
WF ZSF(X) ;Warten bis Motor steht
WT IN(0) ;Warten auf HALT aus
MOV SPLD(X),RA ;alte Geschwindigkeit
;laden
RES RUN(X) ;KDN(X) anschl. wieder
;auf alten Wert schreiben
JMP HALT_X
END ENDLOS_X_RW

Hinweis: Das Stoppen der Motorbewegung erfolgt mit der in KLIN(X) festgeleg-
ten linearen Rampe.

13.10.97, 396.2400 Systemhandbuch, Seite 4.56


Instruktionen MPL 50 Polygon-Interpolation

Polygon-Interpolation
Das Betriebssystem des Controllers PPC 50 enthält die notwendigen Funktionen, um alle
6 Achsen interpolierend verfahren zu können. Diese Funktionen erlauben lineare Interpo-
lationen zwischen allen Achsen.
Komplexe Bahnen wie beispielsweise Kreise werden als Polygon behandelt.
Zu dem Zweck lassen sich bis zu 255 lineare Bahnsegmente in einem Interpolationsbuffer
ablegen und ohne Zwischenhalt verfahren.
Für die Ausführung von Interpolationen stehen eine Reihe von spezifischen Instruktionen
zur Verfügung. Für die notwendigen Berechnungen dienen die Arithmetik-Instruktionen.

Die Beschleunigungs- und Bremsrampen der beteiligten Achsen haben keinen negativen
Einfluss auf die Bahngeometrie und auch die Verfahrgeschwindigkeit entlang der Bahn
bleibt konstant. Dies ist möglich, weil eine virtuelle siebente Achse (Achse 6) als Steuer-
element für die Interpolation geschaffen wurde.
Sämtliche Daten zur Bestimmung der zu verfahrenden Bahn beziehen sich auf diese vir-
tuelle Achse. Die beteiligten realen Achsen (Achse 0 ... 5) werden untergeordnet betrie-
ben.
Die Geschwindigkeitsdaten SPMX(6), SPLD(6), SPLI(6) und Rampen KUP(6), KDN(6),
KLIN(6) übersteuern somit die für die realen Achsen angegebenen Werte.

13.10.97, 396.2400 Systemhandbuch, Seite 4.57


Instruktionen MPL 50 Polygon-Interpolation

Schematische Darstellung einer zweidimensionalen Bahn A nach B mit mehreren Seg-


menten:

B
DX6
S6
DY6

S4
S5
S3
S2
DX1
S1
A
DY1

Im vorliegenden Beispiel wird jeder Bahnabschnitt durch die Teildistanzen


DX(1 ... 6)/DY(1 ... 6) definiert.
Nach dem Satz von Pythagoras berechnet sich das resultierende Bahnsegment S1 ... S6
aus DX(1 ... 6) und DY(1 ... 6).
Im Verhältnis DX(1 ... 6)/DY(1 ... 6) werden ebenfalls die Verfahrgeschwindigkeiten
VX(1 ... 6) und VY(1 ... 6) errechnet.
Alle diese berechneten Datenwerte sind in einem Interpolationsbuffer gespeichert. Dieser
Buffer wird als gewöhnliches Variablenfeld vom Typ Integer 3Byte (DI3) gebildet.
Die Anzahl Elemente richtet sich nach der Anzahl Bahnsegmente.

13.10.97, 396.2400 Systemhandbuch, Seite 4.58


Instruktionen MPL 50 Polygon-Interpolation

Steuersignale für die Polygon-Interpolation


Ähnlich wie bei den Positionierinstruktionen lässt sich eine interpolierende Bewegung
der Motorachsen durch Setzen und Rücksetzen entsprechender Steuerflags beeinflussen.
Folgende Flags sind dazu vorgesehen:
RUN(6): Steuerflag und Zustandsflag der virtuellen Achse 6
LIN(0 ... 5): Steuerflag für die Bewegung der realen Achsen während einer
Interpolation

Durch den Start der Interpolation werden die LIN-Flags der beteiligten Achsen automa-
tisch gesetzt und nach Erreichen der Endposition auch wieder zurückgesetzt.

Hinweis: • Die Systemvariablen KUP(6) und KDN(6) beeinflussen das Beschleuni-


gungs-Verhalten während der Interpolations-Bewegung.
• Die Geschwidigkeit kann durch das Verändern von SPMX(6) in DTAB-
VA sowie SPLD(6) gesteuert werden.
• Die entsprechenden Parameter der Achsen (0 ... 5) aus INITAB
haben keinen Einfluss auf die Interpolations-Bewegung.

Wichtig: Soll eine laufende Interpolation von aussen, z.B. durch den Eingang 0
unterbrochen werden, ist folgende Sequenz zu programmieren:

IFT IN(0) RES RUN(6),LIN(0),LIN(1),...,LIN(n)

13.10.97, 396.2400 Systemhandbuch, Seite 4.59


Instruktionen MPL 50 Polygon-Interpolation

Interpolationsinstruktionen
MPL 50 umfasst die notwendigen Instruktionen für die Ausführung einer Polygon-Inter-
polation. Dazu gehören Befehle zum Einrichten eines Interpolationsbuffers zur Berech-
nung der Interpolationsdaten und zum Ausführen der Interpolation.

Öffnen eines Interpolationsbuffers


Syntax:
OPENC Bufferadresse, Achse1, Achse2, ..., AchseN

Beispiel: OPENC #INT_BUFFER,X,Y,Z


Der Buffer INT_BUFFER wird für die Achsen X,Y
und Z geöffnet.
Die Reihenfolge der Achsen beim öffnen des Buffers muss in
der Folge immer eingehalten werden!
OPENC organisiert den Interpolationsbuffer wie folgt:

HEADER FÜR INTERNE


STEUERDATEN
( 13 BYTES )

Segmentdaten

13.10.97, 396.2400 Systemhandbuch, Seite 4.60


Instruktionen MPL 50 Polygon-Interpolation

Organisation Interpolationsbuffer: Header

Adresse Inhalt Format


# INT_BUFFER Anzahl Achsen 1 Byte
# +1 Liste der beteiligten Achsen 6 Bytes
# +7 Anzahl Segmente 1 Byte
# +8 Anzahl der benötigten Bytes 1 Byte
pro Segment
# +9 Länge der gesamten Bahn 4 Bytes

Organisation Interpolationsbuffer: Segmentdaten

Adresse Inhalt Format


# +13 Halbe Länge des ersten Seg- 3 Bytes
mentes T1
# +16 Distanz 1. Achse DX 1 3 Bytes
# +19 Geschwindigkeit 1: 3 Bytes
Achse VX 1
# +22 Distanz 2. Achse DY 1 3 Bytes
# +25 Geschwindigkeit 2: 3 Bytes
Achse VY 1

# +28 Halbe Länge des zweiten Seg- 3 Bytes


mentes T2
# +31 Distanz 1. Achse DX 2 3 Bytes
# +34 Geschwindigkeit 1: 3 Bytes
Achse VX 2
# +37 Distanz 2. Achse DY 1 3 Bytes
# +40 Geschwindigkeit 2: 3 Bytes
Achse VY 2
....

13.10.97, 396.2400 Systemhandbuch, Seite 4.61


Instruktionen MPL 50 Polygon-Interpolation

Rechnen der Interpolationsdaten für ein Segment


Syntax:
SEGMC Bufferadresse, Modus,Koordinate1,
Modus,Koordinate2,
....
Modus,KoordinateN

Parameter: Bedeutung:
Bufferadresse Anfangsadresse des Interpolationsbuffers.
Modus Gibt an, ob die Koordinaten relativ oder absolut sind.
Modus = 0 Absolute Koordinaten bezogen auf den Anfangspunkt der Bahn.
Modus = 1 Relative Koordinaten bezogen auf das vorangehende Bahnsegment.
Koordinate1 ... N Die Koordinaten werden in technischen Einheiten als Floatingpoint
angegeben. Für die Umrechnung sind systembekannte
Skalenfaktoren KMUL (0 ... 6) eingeführt [Link] müsssen für
die Interpolation unbedingt initialisiert werden, was durch die
Standardprozedur INITAB geschieht (ohne KMUL (6)).

Hinweis: KMUL (6) muss mindestens 1.005 mal grösser sein als der grösste Wert
von KMUL (0 ... 5).

Beispiel: SEGMC #INT_BUFFER, 0, 100.0, 0, 50.0, 0, 25.5


SEGMC #INT_BUFFER, 0, 110.0, 0, 55.0, 0, 26.0
SEGMC #INT_BUFFER, 0, 115.0, 0, 60.0, 0, 27.0

Diese Sequenz berechnet eine Bahn mit 3 Interpolations-Segmenten und speichert sie im
INT_BUFFER.
Die Rechenzeit für Bahnen beträgt :
Bei 2 Achsen: Ca. 60 Segmente pro sec
Bei 3 Achsen: Ca. 50 Segmente pro sec

13.10.97, 396.2400 Systemhandbuch, Seite 4.62


Instruktionen MPL 50 Polygon-Interpolation

Berechnen der nächsten freien Adresse


in einem Interpolationsbuffer
Um die Interpolationsdaten von einer oder mehreren Bahnen zu speichern, benötigt man
einen entsprechend vorbereiteten Speicherbereich. Dazu gibt es zwei Methoden:
• Definition eines statischen Datenbereichs mit einer festen Grösse z.B. am Anfang
des Programms:
INT_BUFFER: DO3 1000 DUP ?
BEGIN: MOV RA,10 ;Programmbeginn
.....
.....

• Definition eines dynamischen Datenbereichs unbestimmter Grösse ganz am Schluss


des Programms:
.....
.....
RET ;Programmende
INT_BUFFER: DO1 ? ;Nur Anfangsadresse des Buffers
END BEGIN

Die zweite Methode hat den Vorteil der kürzeren Compilationszeit und auch die Grösse
des Interpolations-Buffers muss nicht zum voraus definiert werden.
Sind nun in eine der obigen Datenstrukturen Interpolations-Daten für mehrere Bahnen zu
speichern, muss natürlich für eine Bahn N die letzte belegte Adresse der vorangehenden
Bahn N-1 bekannt sein. Diese Funktion übernimmt NEXTC.

Syntax: Parameter:
NEXTC DOP,SOP DOP= Anfangsadresse für Bahn N
SOP= Anfangsadresse von Bahn N-1

13.10.97, 396.2400 Systemhandbuch, Seite 4.63


Instruktionen MPL 50 Polygon-Interpolation

Beispiel:
NEXTC RA,#INT_BUFFER
Die nächste freie Adresse im INT_BUFFER wird in RA gespeichert.
Der notwendige Speicherplatz berechnet sich wie folgt:
NB = NS*(3 + NA*6) + 13

NB : Anzahl Bytes
NS : Anzahl Segmente
NA : Anzahl Achsen

Beispiel: Speicherplatz für 200 Segmente und 2 Achsen


NB = 200*(3 + 2*6) + 13 = 3013 Bytes

Ausführung der Interpolation


Für die Ausführung einer Interpolation dient die Instruktion EXECC
Syntax:
EXECC Bufferadresse

Zur Steuerung der Polygoninterpolation bedient sich das Betriebssystem eines Segment-
pointers (Adresse $164). Dieser zeigt während der Interpolation, wieviele Segmente noch
zu verfahren sind.

Beispiel:
EXECC #INT_BUFFER
EXECC startet die Interpolation. Das Ende der Achsbewegungen lässt sich über das Flag
RUN(6) ermitteln.

13.10.97, 396.2400 Systemhandbuch, Seite 4.64


Instruktionen MPL 50 Polygon-Interpolation

Beispiel:
X =0
Y =1
Z =2
ABS =0
REL =1

;Linearinterpolation
INITAB X,0,200,75,75,500,25.0,2000.0,
Y,0,200,75,75,500,25.0,2000.0,
Z,0,200,75,75,500,25.0,2000.0,
MUL KMUL(6),KMUL(Z),1.005
DTABVA 100,75,75,500
BEGIN: OPENC #INT_BUFFER,X,Y,Z ;Öffnen Interpolationsbuffer
SEGMC #INT_BUFFER,REL,-100.0,REL,30.7,REL,50.8;Berechnen
;Linearinterpolation
EXECC #INT_BUFFER ;Ausführen Linearinterpolation
WT RUN(6)

;Bahn-Interpolation
NEXTC RA,#INT_BUFFER ; RA = Anfangsadresse für Bahn
OPENC RA,X,Y,Z ;Öffnen Interpolationsbuffer für
;Bahn
SEGMC RA,ABS,20.0,ABS,50.0,ABS,10.0;Berechnen der Bahn-
SEGMC RA,ABS,50.0,ABS,90.0,ABS,10.0;interpolation
SEGMC RA,ABS,90.0,ABS,120.0,ABS,10.0
SEGMC RA,ABS,140.0,ABS,140.0,ABS,10.0
EXECC RA ;Ausführen der Bahninter-
WT RUN(6) ;polation
JMP BEGIN
INCL (INITAB.PR4)
INCL (DTABVA.PR4)
INT_BUFFER: DO1 ? ;dynamischer Interpolations-
;buffer
MOD 2
END BEGIN

Durch Definition des INT_BUFFER am Ende des Programmes steht der gesamte nach-
folgende Speicherplatz für den Interpolationsbuffer zur Verfügung.

13.10.97, 396.2400 Systemhandbuch, Seite 4.65


Instruktionen MPL 50 Compileranweisungen im Programm

Compileranweisungen im Programm
MPL 50 sieht eine Reihe von Anweisungen vor, die für die eigentliche Programmausfüh-
rung unbedeutend sind, aber bestimmte Funktionen während der Compilation steuern.

Hinweis: Vor Compileranweisungen sind keine Labels erlaubt.


Bei der Verwendung dieser Steueranweisungen ist daher unbedingt dar-
auf zu achten, dass keine MPL 50- Instruktionen auf der selben Zeile ste-
hen.

END-Anweisung
Damit der Compiler das Ende des Programmes erkennen kann, muss jedes Programm mit
der Instruktion END beendet werden.
Zusammen mit END ist ein Label anzugeben, der die Startadresse für den automatischen
Start darstellt. In Prozeduren, die auf Harddisk oder Diskette gespeichert und mit INCL
weiterverarbeitet werden, wird END ohne Label angegeben.

Syntax:
END Ende Compilation einer mit INCL geladenen Prozedur
END LABEL Ende Compilation. Programmstart bei LABEL

13.10.97, 396.2400 Systemhandbuch, Seite 4.66


Instruktionen MPL 50 Compileranweisungen im Programm

INCLUDE-Anweisung
Bei der Verwendung von Prozeduren veranlasst diese Anweisung den Compiler, das ent-
sprechende Prozedurprogramm automatisch zu laden und mitzucompilieren. Die Datei-
grösse der Prozedurprogramme kann jeweils max. 64kByte betragen. Die max. Anzahl
INCLUDE-Dateien hängt ab vom Eintrag FILES = n in der [Link]-Datei des PC.

Hinweis: Sollen Prozedurprogramme auf diese Weise geladen werden, muss die
letzte Anweisung im Prozedurprogramm ein END ohne Label sein.
INCLUDE-Dateien dürfen selber keine INCL-Anweisung enthalten.

Instruktion: Syntax: Operation:


Incl-Anweisung INCL (Drive:[Link]) Das unter ’[Link]’ angegebene
Programm wird automatisch
vom Laufwerk ’Drive’ geladen.

13.10.97, 396.2400 Systemhandbuch, Seite 4.67


Instruktionen MPL 50 Compileranweisungen im Programm

PATH-Anweisung
Befinden sich alle Prozeduren in einem besonderen Unterverzeichnis, kann mit der
PATH-Anweisung der Pfad eingestellt werden. (Pfad kann max. 80 Zeichen haben).

Instruktion: Syntax:
Pfad-Anweisung PATH (Drive:\Dir\) Die nachfolgenden Dateien werden
durch die INCL-Anweisungen im
Laufwerk ’Drive’ aus dem
Unterverzeichnis ’Dir’ geladen.

RAM / ROM-Anweisungen
MPS 50 bietet die Möglichkeit, ausgetestete Programme im freien Bereich des EPROMs
(Adressen 4000 ... 7FFF) zu speichern. Damit jedoch weiterhin variable Daten verarbeitet
werden können, ist dafür zu sorgen, dass den Variablen Speicherplatz im RAM-Bereich
reserviert wird. Zu diesem Zweck wird dem Variablen-Definitionsteil die Anweisung
RAM und dem Programmteil die Anweisung ROM vorangestellt. Für die genaue Be-
schreibung der Speicherung in EPROMs mit handelsüblichen EPROM-Programmierge-
räten siehe Kapitel "Compiler".

Beispiel:
RAM
VAR: DF 10 DUP 0.0
ROM
START: WT IN(0)
MOV RA,7

13.10.97, 396.2400 Systemhandbuch, Seite 4.68


Instruktionen MPL 50 Compileranweisungen im Programm

ORIGIN-Anweisung
Allen Variablen, Labels usw. wird durch den Compiler automatisch in chronologischer
Folge eine hexadezimale Adresse zugeordnet. Die ORIGIN-Instruktion ermöglicht es, ei-
ner Variablen, einem Label usw. eine selber definierte Adresse zuzuordnen.
Syntax:
ORG ADRESSE Der Zeiger für die Speicheradressen wird auf den Wert
ADRESSE gesetzt.
ORG SYMBOL Der Zeiger für die Speicheradressen wird gleich der Adresse
von SYMBOL gesetzt.

Beispiel:
ORG $8F00 Der Zeiger für die Speicheradressen wird auf
hexadezimal 8F00 gesetzt.
VAR: DF 0.0 Der Floatingpointvariablen VAR wird somit
die Adresse hexadezimal 8F00 zugeordnet.

Beispiel Zuordnung Systembus:


ALTEADRESSE: Dem Hilfssymbol ALTEADRESSE wird
automatisch die aktuelle Speicheradresse zugeordnet.
ORG $20 Der Zeiger der Speicheradressen wird auf
hexadezimal 20 gesetzt.
BUS: D01 ? Die Variable BUS erhält somit die Adresse hexadezimal 20.
ORG ALTEADRESSE Der Zeiger der Speicheradressen wird wieder
auf den alten Wert gesetzt.

13.10.97, 396.2400 Systemhandbuch, Seite 4.69


Instruktionen MPL 50 Compileranweisungen im Programm

MOD-Anweisung
Für die Kommunikation zwischen mehreren SELEDATA® MPS 50-Systemen ist jedem
System eine eigene Modulnummer (1 ... 15) zuzuordnen.
Die Anweisung MOD plus eine Zahl zwischen 1 und 15 veranlasst den Compiler, auto-
matisch die entsprechende Modulnummer für den nachfolgenden Programmtransfer- und
Start vorzunehmen.

Beispiel:
MOD 2 Die Modulnummer 2 wird bei der Compilation
automatisch gewählt.

Anweisungen für die Variablendefinition


Folgende Compileranweisungen dienen zur Definition von Datentypen und zur Reserva-
tion von Speicherplatz.
Anweisung: Datentyp:
DO1 ... DO4 Ordinal und 1 ... 4 Byte
DI1 ... DI4 Integer und 1 ... 4 Byte
DF Floatingpoint (4 Byte)
DSTR String (Anzahl Zeichen + 1 Byte)

Die Anwendung dieser Anweisung ist im Detail im Kapitel Standardprozeduren MPL 50


beschrieben.

LISTOFF / LISTON-Anweisungen
Mit den Anweisungen LISTOFF und LISTON lassen sich Teile eines MPL-Programmes
für die LIST-Funktion des Compilers ausblenden.
Beispiel:
LISTOFF
INCL (POSA.PR4)
LISTON

Hinweis: Die beiden Anweisungen LISTOFF und LISTON dürfen nie allein in ei-
nem Programm stehen.

13.10.97, 396.2400 Systemhandbuch, Seite 4.70


Instruktionen MPL 50 Programmausführungszeiten

Programmausführungszeiten
Die Ausführungszeit eines Programmes setzt sich aus der Summe der einzelnen Instruk-
tionszeiten zusammen.
Durch die Verwendung von Simultanprogrammen verlängert sich die gesamte Ausfüh-
rungszeit eines Programmes, da der Prozessor mehrere Aufgaben quasi gleichzeitig aus-
führen muss.

Instruktionsausführungszeiten
Die angegebenen Werte sind immer mit maximal möglicher Anzahl Operanden ermittelt
worden. Bei reduzierter Anzahl Operanden können sich kürzere Zeiten ergeben.

Instruktion Zeit [ ms ] Instruktion Zeit [ ms ] Instruktion Zeit [ ms ]


IADD 0,7 FNEG 0,55 IINP 04. *
ISUB 0,7 FABS 0,55 FINP 0,4 *
IMUL 1,3 INV 1,8 STINP 0,4 *
IDIV 2,0 CFLO 0,75 RX 0,4 *
FADD 1,2 CINT 0,65 TX 0,9
FSUB 1,2 CINR 0,65 KINP 0,4 *
FMUL 1,2 ICMP 0,85 POPK 1,0
FDIV 2,0 FCMP 2,0 KVINP 1,0 *
SQU 1,3 SCMP 1 ... 3,0 SINP 1,0
SQR 2,1 MOV 0,45 CLINP 1,0
SIN 11,0 XCHG 0,65 LINP 1,0
COS 11,0 ROT 1 ... 4 0,75 STXINP 4,0 *
TAN 21,0 XFER 1,0 + 0,015/Byte IXINP 1,0 *
ATN 13,0 AND 0,65 FXINP 1,0 *
INEG 0,55 OR 0,65 IPR 0,15*
IABS 0,5 XOR 0,65 FPR 0,5 *
CPL 0,5 SET 0,35 STPR 0,9 *
(1Operand)
INC 0,5 RES 0,35 KPR 0,9 *
(1Operand)
DEC 0,5 JMP 0,3 TX 0,9
J*** 0,4 XMODE 1,0
W*** 0,4 NOP 0,4

13.10.97, 396.2400 Systemhandbuch, Seite 4.71


Instruktionen MPL 50 Programmausführungszeiten

Instruktion Zeit [ ms ] Instruktion Zeit [ ms ] Instruktion Zeit [ ms ]


IF*** 0,5 ADDR 0,4 SEGMC 15 ... 40
ASIM 0,5 IMG 0,4 NEXTC 1,0
CALL + RET 0,5 ILG 0,4 EXECC 2,0
PSIM 1,0 ILI 0,4 BAUD 1,0
RSIM 1,0 OPEN 1,0

* plus Datenübertragungszeit

13.10.97, 396.2400 Systemhandbuch, Seite 4.72


Instruktionen MPL 50 HEX-Adressen von Systemvariablen

HEX-Adressen von Systemvariablen


Über die formalen Variablen kann direkt auf den Adressbereich des Systems zugegriffen
werden. Besonders für Initialisierungszwecke wie beispielsweise RESET aller Ausgänge
ist ein solcher Direktzugriff sehr praktisch.
Zu beachten ist allerdings, dass beim direkten Zugriff auf Adressen die Syntaxüberprü-
fung des Compilers nicht aktiv ist, was unter Umständen zu schwer erkennbaren Pro-
grammausführungsfehlern führen kann.

Symbol Hex-Adresse Datentyp Bemerkung


IN(0 ... 7) $0 VO1 nur lesen
IN(8 ... 15) $1 VO1 nur lesen
IN(16 ... 23) $2 VO1 nur lesen
IN(24 ... 31) $3 VO1 nur lesen
IN(32 ... 39) $4 VO1 nur lesen
IN(40 ... 47) $5 VO1 nur lesen
IN(48 ... 55) $6 VO1 nur lesen
IN(56 ... 63) $7 VO1 nur lesen

OUT(0 ... 7) $0 VO1 nur schreiben


OUT(8 ... 15) $1 VO1 nur schreiben
OUT(16 ... 23) $2 VO1 nur schreiben
OUT(24 ... 31) $3 VO1 nur schreiben
OUT(32 ... 39) $4 VO1 nur schreiben
OUT(40 ... 47) $5 VO1 nur schreiben
OUT(48 ... 55) $6 VO1 nur schreiben
OUT(56 ... 63) $7 VO1 nur schreiben

13.10.97, 396.2400 Systemhandbuch, Seite 4.73


Instruktionen MPL 50 HEX-Adressen von Systemvariablen

Symbol Hex-Adresse Datentyp Bemerkung


OUT(0 ... 7) $ 80 00 VO1 Interner Arbeits-
OUT(8 ... 15) $ 80 01 VO1 speicher für physi-
OUT(16 ... 23) $ 80 02 VO1 kalische Ausgänge
OUT(24 ... 31) $ 80 03 VO1 OUT (0 ... 63)

OUT(32 ... 39) $ 80 04 VO1 Interner Arbeits-


OUT(40 ... 47) $ 80 05 VO1 speicher für physi-
OUT(48 ... 55) $ 80 06 VO1 kalische Ausgänge
OUT(56 ... 63) $ 80 07 VO1 OUT (0 ... 63)

ADC(0) $ 80 08 VO1 auf EAM 50/51


ADC(1) $ 80 09 VO1 auf EAM 50/51
ADC(2) $ 80 0A VO1 auf EAM 50/51
ADC(3) $ 80 0B VO1 auf EAM 50/51
ADC(4) $ 80 0C VO1 auf EAM 50/51
ADC(5) $ 80 0D VO1 auf EAM 50/51
ADC(6) $ 80 0E VO1 auf EAM 50/51
ADC(7) $ 80 0F VO1 auf EAM 50/51
ADC(8) $ 80 10 VO1 auf PPC 50/51
Analogausgang $1F VO1 auf EMM 50

TMR(0) $ 80 18 VI3
TMR(1) $ 80 1B VI3
TMR(2) $ 80 1E VI3
TMR(3) $ 80 21 VI3
TMR(4) $ 80 24 VI3
TMR(5) $ 80 27 VI3
TMR(6) $ 80 2A VI3
TMR(7) $ 80 2D VI3

13.10.97, 396.2400 Systemhandbuch, Seite 4.74


Instruktionen MPL 50 HEX-Adressen von Systemvariablen

Symbol Hex-Adresse Datentyp Bemerkung


PABS(0) $ 80 30 VI4
PABS(1) $ 80 34 VI4
PABS(2) $ 80 38 VI4
PABS(3) $ 80 3C VI4
PABS(4) $ 80 40 VI4
PABS(5) $ 80 44 VI4

SPMX(0) $ 80 48 VO1
SPMX(1) $ 80 49 VO1
SPMX(2) $ 80 4A VO1
SPMX(3) $ 80 4B VO1
SPMX(4) $ 80 4C VO1
SPMX(5) $ 80 4D VO1
SPMX(6) $ 80 4E VO1

SPLD(0) $ 80 4F VO1
SPLD(1) $ 80 50 VO1
SPLD(2) $ 80 51 VO1
SPLD(3) $ 80 52 VO1
SPLD(4) $ 80 53 VO1
SPLD(5) $ 80 54 VO1
SPLD(6) $ 80 55 VO1

SPLI(0) $ 80 56 VO2
SPLI(1) $ 80 58 VO2
SPLI(2) $ 80 5A VO2
SPLI(3) $ 80 5C VO2
SPLI(4) $ 80 5E VO2
SPLI(5) $ 80 60 VO2
SPLI(6) $ 80 62 VO2

13.10.97, 396.2400 Systemhandbuch, Seite 4.75


Instruktionen MPL 50 HEX-Adressen von Systemvariablen

Symbol Hex-Adresse Datentyp Bemerkung


KUP(0) $ 80 64 VO1
KUP(1) $ 80 65 VO1
KUP(2) $ 80 66 VO1
KUP(3) $ 80 67 VO1
KUP(4) $ 80 68 VO1
KUP(5) $ 80 69 VO1
KUP(6) $ 80 6A VO1

KDN(0) $ 80 6B VO1
KDN(1) $ 80 6C VO1
KDN(2) $ 80 6D VO1
KDN(3) $ 80 6E VO1
KDN(4) $ 80 6F VO1
KDN(5) $ 80 70 VO1
KDN(6) $ 80 71 VO1

KLIN(0 $ 80 72 VO2
KLIN(1) $ 80 74 VO2
KLIN(2) $ 80 76 VO2
KLIN(3) $ 80 78 VO2
KLIN(4) $ 80 7A VO2
KLIN(5) $ 80 7C VO2
KLIN(6) $ 80 7E VO2
Segmentpointer
Polygoninterpolation $ 164 VO1 nur lesen
KCOD $ 80 84 VO1
PMF(0) $ 80 8D VO1
PMF(1) $ 80 8E VO1
PMI(0) $ 80 8F VO1
FIFO-Buffer $ 8180 ... $ 81BF VO1 64 Byte
RS 232C
Write pointer $ 10A VO1 nur lesen
Read pointer $ 10B VO1 nur lesen

13.10.97, 396.2400 Systemhandbuch, Seite 4.76


Instruktionen MPL 50 HEX-Adressen von Systemvariablen

Symbol Hex-Adresse Datentyp Bemerkung


FLG(0 ... 7) $ 80 EO VO1
FLG(8 ... 15) $ 80 E1 VO1
FLG(16 ... 23) $ 80 E2 VO1
FLG(24 ... 31) $ 80 E3 VO1
FLG(32 ... 39) $ 80 E4 VO1
FLG(40 ... 47) $ 80 E5 VO1
FLG(48 ... 55) $ 80 E6 VO1
FLG(56 ... 63) $ 80 E7 VO1
FLG(64 ... 71) $ 80 E8 VO1
FLG(72 ... 79) $ 80 E9 VO1
FLG(80 ... 87) $ 80 EA VO1
FLG(88 ... 95) $ 80 EB VO1
FLG(96 ... 103) $ 80 EC VO1
FLG(104 ... 111) $ 80 ED VO1
FLG(120 ... 127) $ 80 EF VO1
FLG(128 ... 135) $ 80 F0 VO1
FLG(136 ... 143) $ 80 F1 VO1
FLG(144 ... 151) $ 80 F2 VO1
FLG(152 ... 159) $ 80 F3 VO1
FLG(160 ... 167) $ 80 F4 VO1
FLG(168 ... 175) $ 80 F5 VO1
FLG(176 ... 183) $ 80 F6 VO1
FLG(184 ... 191) $ 80 F7 VO1
FLG(192 ... 199) $ 80 F8 VO1
FLG(200 ... 207) $ 80 F9 VO1
FLG(208 ... 215) $ 80 FA VO1
FLG(216 ... 223) $ 80 FB VO1
FLG(224 ... 231) $ 80 FC VO1
FLG(232 ... 239) $ 80 FD VO1
FLG(240 ... 247) $ 80 FE VO1
FLG(248 ... 255) $ 80 FF VO1
Linebuffer $ FF 00 String

13.10.97, 396.2400 Systemhandbuch, Seite 4.77


Instruktionen MPL 50 HEX-Adressen von Systemvariablen

13.10.97, 396.2400 Systemhandbuch, Seite 4.78

Das könnte Ihnen auch gefallen