Mit dem Begriff "Arithmetik-Funktionen" sind folgende Verknüpfungsoperationen gemeint, die auch verwendet werden dürfen:
Zweistellige Operationen:
Addieren ( + ), Subtrahieren ( - ),Multiplizieren ( * ), Dividieren ( / )
Bitweise UND-Verknüpfung ( AND ), ODER-Verknüpfung ( OR )Einstellige Operationen:
Absolutwert eines Operanden ABS (für Integer- und Real-Typen)Bitweise Schieben oder Rotieren eines Operanden rechts/links um eine Anzahl N Bit.
Beispiel:
SHL(IN:=Operand,N:=Anzahl)
Aber auch Potenzieren (**) und trigonometrische Funktionen werden in zukünftigen Versionen zugelassen sein. Sprachabhängig bleiben natürlich bestimmte Einschränkungen. Vergewissern Sie sich also, ob eine von Ihnen gewünschte Funktion auch auf der Ressource durchführbar ist.
Ein arithmetischer Ausdruck wie z.B. E := a + b * c - SHR(IN:=d,N:=Anz)
wird mit Anz=9 wie folgt berechnet:
Zuerst alle Rotier- und Schiebefunktionen. Also SHR wird berechnet und auf d gespeichert. Die Anzahl, hier 9, darf auch auf einem Speicherplatz stehen. Das Ergebnis wird vorzeichenbehaftet verarbeitet, weil alle Operanden eines solchen Ausdrucks diese eigenschaft haben müssen.
Anschließend folgt die "Multiplikation", also b*c.
Danach erfolgt die Addition des Zwischenwertes mit a und schließlich die Subtraktion minus d.
Der Ergebniswert wird auf dem Ergebnis- oder Ziel-Speicherplatz E abgelegt.
![]() |
|
Um Datentypen-Anpassung brauchen Sie sich selten zu kümmern, weil der Precompiler das meist selbständig durchführt. Es werden allerdings, wie schon erwähnt, nur vorzeichenbehaftete Datentypen angenommen, das sind SINT, INT, DINT und REAL. Die Ausnahme sind reine Zuweisungen bzw. Kopierfunktionen (z.B. A := D), Schiebe- und Rotierfunktionen und andere Bitmanipulationen wie AND, OR usw. Sollte die Anpassung nicht automatisch erfolgen können, dann erhalten Sie eine Mitteilung.
Das Ausführen einer arithmetischen Funktion bestimmt eine Operationsvariable[1]. Sobald sie in einer Operation[2] true ist, erfolgt der oben erklärte Ablauf so lange (bei jedem SPS-Zyklus), bis der Wert der Operationsvariablen wieder false ist, also etwa in der folgenden Operation. Daher "Caculate(multiple)", also "berechne mehrfach".
Falls Sie diese Boolesche Variable mit Local Static angeben, erzeugt der Precompiler eine lokale Variable selbst.
Sollte der Ergebnis-Speicher auch im arithmetischen Ausdruck erscheinen,
z.B. a := a + 1,
dann muß die Berechnung innerhalb genau eines Bearbeitungszyklus' der SPS erfolgen, weil ansonsten das Ergebnis die Anzahl der SPS-Zyklen am Ende der betreffenden Situation[3] enthielte. Zum Beispiel sei a=5 beim Aufruf der Additionsfunktion (ist gleich Übergang in diese Situation), und es sollen 60 Bearbeitungszyklen während der Dauer der Situation angenommen werden, dann ist am Ende a=65 anstelle a=6. Sie können solche Ausdrücke zum Zählen verwenden anstelle Zählglieder zu projektieren. Aber eine einmalige Berechnung müssen Sie mit "Calculate (single)" wählen. Es sei denn, Sie wollen den Zähleffekt nutzen.
Weitere Details unter Kopier- und Arithmetikfunktionen.
[1] Operationsvariable sind binär zu wertende Größen. Sie können sein:
Stellgrößen für alle prozeßtechnologischen Eingriffe:
Ein- und Ausschalten. Öffnen und Schließen.
Einschalten und nicht Einschalten. Ausschalten und nicht Ausschalten.
Öffnen und nicht Öffnen. Schließen und nicht Schließen.Informationen an den Operateur im Rahmen der MAK
Ansteuersignale für Zeit- und Zählglieder, Programmgeber, Schieberegister, usw.
Erzeugte Koppelvariable zur funktionellen Beeinflussung anderer Teilprozesse.
[2]
Eine Operation enthält alle zu einem Teilprozeß gehörenden, binär bewerteten Operationsvariable (kurz: OVar, auch Steuervariable genannt). Zu jeder Operation gehört eine zu ihr gehörende Wertebelegung. Jede Operation ist daher ein Binärvektor.
Sie sollten auch einen Text in eine Operation schreiben (=Comment), um dem Leser des PRAP eine Art Schrittbezeichnung anzubieten, die Auskunft über den technologisch wesentlichen Sinn der Operation gibt.
[3]
Prozeßsituation
Für die Dauer der Ausführung einer Operation, z.B. O7, ändert sich deren Halte- oder Stabilitäts-Prozeßzustand, P77, nicht. Enthält er im PRAP mehrere Pfade, so kann es sein, daß zwischen ihnen die Belegung der P-Variablen während der Situationsdauer wechselt.
Die beiden zusammengehörigen Größen Operation und Halteprozeßzustand stellen eine Prozeßsituation Sit7 = (O7, P77) dar, auch kurz mit Situation bezeichnet.
Übergangssituationen gibt es nicht, nur Übergangs-Prozeßzustände,weil die Übergangsdauer zwischen Situationen im PRAP null ist. Die Steuereinrichtung benötigt dazu genau einen Arbeitszyklus.
Eine Situation kann auch als WHILE P77 DO O7 gelesen werden, oder REPEAT O7 UNTIL(P77 = false)