Allgemeines
Kopier- und arithmetische Funktionen sind hier vereinigt, weil das Zuweisungszeichen ":=" einer Kopierfunktion entspricht.
Zur Eingabe der Formeln siehe Abschnitt "Wichtige Hinweise zum Formulieren ..." weiter unten.Im Fall einer arithmetischen Funktion erfolgt die Zuweisung des Ergebnisses an die links stehende Variable, anderenfalls die Zuweisung des Wertes der rechts - allein - stehenden Variablen.
Calculate(multiple) und Calculate(single)
unterscheiden sich grundsätzlich durch die Häufigkeit der Abarbeitung während einer stabilen Situation[1], in der die Berechnung durchgeführt wird:Es bedeutet "multiple" die normale Abarbeitung der Berechnungsfunktion, d.h. bei jedem Arbeitszyklus der Ressource (z.B. SPS) innerhalb der Situation wird berechnet.
Es bedeutet "single" eine einmalige Abarbeitung der Berechnungsfunktion, d.h. nur im ersten Arbeitszyklus der Ressource innerhalb der Situation wird berechnet.
In den Themen (aus dem Buch "Entwurfsprozeß") Kopierfunktion - Copy und Arithmetik-Funktionen finden Sie Grundsätzliches beschrieben.
Wichtige Hinweise zum Formulieren der Ausdrücke
Denken Sie daran,
daß Sie nur bereits deklarierte Variable verwenden (siehe: Eingabehilfe für Formelausdrücke[2]).
daß der Ergebnisspeicher mit seinem DATENTYP das zu erwartende Ergebnis auch aufnehmen kann. Die rechts vom Zuweisungszeichen stehenden Operanden werden weitgehend[3] automatisch angepaßt.
Für die Kopierfunktion gilt die automatische Datentyp-Anpassung in vorgegebenen Grenzen[5]. Damit ist sie nutzbar für die "Umrechnung" eines Datentypen.daß Arithmetik-Ausdrücke, die den Ergebnisspeicher enthalten, nur mit "Calculate(single)" sinnvolle Ergebnisse bringen. Z.B. sollte A:=A+1 mit "single" programmiert werden, weil sonst A letztendlich die Anzahl der Arbeitszyklen mit enthält. Sollte bei B:=A+1 in B ein Teil von A enthalten sein, gilt dies ebenso; denn B könnte ein DINT- und A ein INT-Datentyp sein, wobei A der niederwertige Teil von B ist.
Es gibt allerdings Fälle, in denen dieser Effekt praktisch genutzt werden kann!!die Symbole für "POST" und "ACCEPT"richtig bedienen: WICHTIG[6]
![]() |
|
Sie können von hier aus zu den Erklärungen der Felder gelangen:
[1]
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)
[2]
Eingabemöglichkeiten für Variable in Formelausdrücken
Die Tasten "Strg" ("Ctrl") + "Leerzeichen" ("Space") zeigen alle Variablen. Zur Nutzung als Operanden wählen Sie mit Klick den jeweils richtigen aus.
![]() |
|
Die Tasten "Strg" ("Ctrl") + "J" zeigen Ihnen alle Operationen, im Fall der Vergleicher-Ausdrücke auch die Vergleichsoperanden. Sie dürfen anstelle eines Vergleichs-Operanden einen arithmetischen Ausdruck eintragen. Sie dürfen alles von der Tastatur eingeben.
Nicht in der Tabelle vorhandene Variable
ENTWEDER
vorher, also vor dem Schreiben der Formel, in die ACCESS TABLE einführen nach KLick auf:
Danach im Formelfeld mit Strg+Leerzeichen den Formelausdruck aufbauen.ODER
Falls Sie schon die Formel mit nicht eingetragenen Variablen geschrieben haben, dann empfiehlt es sich, die Variablen nacheinander nach Klick aufin die ACCESS TABLE, also in die Variablentabelle wie folgt einzutragen:
Variable in Formel markieren und mit Strg+X entfernen oder mit Strg+C kopieren.
Klick auf
Standard-Text im Feld "NAME" ersetzen: Zunächst markieren und danach Strg+V betätigen
Fehlende Daten wie Datentyp jetzt eintragen bzw. wählen.
Falls mit Strg+X entfernt, dann mit Klick auf
übertragen. Falls mit Strg+C kopiert, einfach
anklicken.
[3] Die Standardfunktionen der Arithmetik sind in der IEC 1131-3 bezüglich Datentypen so gefordert, daß sie automatisch alle anderen auf den "größten" Datentyp anpassen.[4] Falls also der Ergebnis-Datentyp REAL sein sollte und alle Eingänge z.B. INT, steht die Datentypwandlung INT->DINT->REAL automatisch in dem Formelausdruck.
[34]
Datentyp-Wandel, Type conversion functions
Datentypen sind geordnet nach ihrer Bit-Anzahl und ihrer Kodierung, d.h. Bedeutung der Bit oder Bitgruppen. In diesem Sinne ist der kleinste Datentyp "BOOL" und der größte "REAL" bzw. "LREAL". Die "L"-Datentypen nutzen 64 Bit, derzeit gibt es keine Verwendung.
Es gibt für spezielle Zwecke auf 16-Bit-Typen eine BCD-Zahlendarstellung, die je Tetrade (4bit) nur 0 bis 9 zulassen (sprachabhängig!). Die Norm IEC 1131-3 erfaßt BCD nicht als Datentyp.
Die sogenannte Aufwärts-Konvertierung von SINT zu REAL wird für arithmetische Ausdrücke, Kopierfunktion, auch Vergleicherausdrücke, automatisch vollzogen. Das bedeutet, Sie dürfen in solchen Ausdrücken, auch in reinen Zuweisungen,also in Kopierfunktionen, die Variablen ohne Datentypwandel schreiben.
Jeder Typenwandel "abwärts" ist durch eine Konvertierungsfunktion auszudrücken, wobei es KEINE KONTROLLE gibt, ob der Inhalt unzulässig verstümmelt wird. Hierzu gehören auch Übergänge zwischen Word- und Integertypen.
Zusammenstellung zu Datentyp-Konvertierungen einer Variablen:
AUTOMATISCHE KONVERTIERUNG:
SINT-->INT-->DINT-->REAL
REAL-->DINT mit Rundungsfunktion ROUND
TIME<-->DINT
INT<-->WORD
BCD-->INT / WORD
BCD-->DINT / DWORDKONVERTIERUNGSFUNKTIONEN einer Variablen var:
DINT_TO_REAL(var)
REAL_TO_DINT(var) mit Rundungs-Funktion ROUND
TRUNC(var) mit Abschneiden der Nachkommazahlen
REAL_TO_INT(var) ohne Wertekontrolle
DINT_TO_INT(var) ohne Wertekontrolle
DINT_TO_DWORD(var)
INT_TO_SINT(var) ohne Wertekontrolle
INT_TO_BCD(var) drei Stellen mit Vorzeichen
INT_TO_WORD(var)
DINT_TO_BCD(var)sieben Stellen mit Vorzeichen
DWORD_TO_DINT(var)
WORD_TO_INT(var)
![]() |
|
[5]
Datentyp-Wandel, Type conversion functions
Datentypen sind geordnet nach ihrer Bit-Anzahl und ihrer Kodierung, d.h. Bedeutung der Bit oder Bitgruppen. In diesem Sinne ist der kleinste Datentyp "BOOL" und der größte "REAL" bzw. "LREAL". Die "L"-Datentypen nutzen 64 Bit, derzeit gibt es keine Verwendung.
Es gibt für spezielle Zwecke auf 16-Bit-Typen eine BCD-Zahlendarstellung, die je Tetrade (4bit) nur 0 bis 9 zulassen (sprachabhängig!). Die Norm IEC 1131-3 erfaßt BCD nicht als Datentyp.
Die sogenannte Aufwärts-Konvertierung von SINT zu REAL wird für arithmetische Ausdrücke, Kopierfunktion, auch Vergleicherausdrücke, automatisch vollzogen. Das bedeutet, Sie dürfen in solchen Ausdrücken, auch in reinen Zuweisungen,also in Kopierfunktionen, die Variablen ohne Datentypwandel schreiben.
Jeder Typenwandel "abwärts" ist durch eine Konvertierungsfunktion auszudrücken, wobei es KEINE KONTROLLE gibt, ob der Inhalt unzulässig verstümmelt wird. Hierzu gehören auch Übergänge zwischen Word- und Integertypen.
Zusammenstellung zu Datentyp-Konvertierungen einer Variablen:
AUTOMATISCHE KONVERTIERUNG:
SINT-->INT-->DINT-->REAL
REAL-->DINT mit Rundungsfunktion ROUND
TIME<-->DINT
INT<-->WORD
BCD-->INT / WORD
BCD-->DINT / DWORDKONVERTIERUNGSFUNKTIONEN einer Variablen var:
DINT_TO_REAL(var)
REAL_TO_DINT(var) mit Rundungs-Funktion ROUND
TRUNC(var) mit Abschneiden der Nachkommazahlen
REAL_TO_INT(var) ohne Wertekontrolle
DINT_TO_INT(var) ohne Wertekontrolle
DINT_TO_DWORD(var)
INT_TO_SINT(var) ohne Wertekontrolle
INT_TO_BCD(var) drei Stellen mit Vorzeichen
INT_TO_WORD(var)
DINT_TO_BCD(var)sieben Stellen mit Vorzeichen
DWORD_TO_DINT(var)
WORD_TO_INT(var)
![]() |
|
[6]
Nach einer Neu-Einführung einer Variablen erfolgt mit Klick auf
(ACCEPT) sowohl die Übernahme in die Formel bzw. Funktion als auch in die Datenbank und wird damit auch dem Member zugeordnet.
Nach Änderungen an Daten zu einer Variablen - Ausgenommen "NAME" - in der Datenbanktabelle mit Klick auf
diese Änderungen in die Datenbank eintragen.
Warnung Bei Klick auf ACCEPT wird diese Variable nochmal an der Stelle des Cursors eingetragen. Veränderte Eintragungen zur Variablen NICHT!
Nach jeder Auswahl ein Leerzeichen einfügen als Trennzeichen zwischen Operanden und Operationszeichen.
Solange Sie den Cursor innerhalb einer Variablen stehen haben, werden deren Eigenschaften Name, Statement und Variable Usage oben angezeigt.
Am Ende der Formel ein ";" anfügen. Damit wird deutlich, daß der Ausdruck hier abschließt.
Denn:Sie dürfen die Formel, den Ausdruck, auf mehrere Zeilen verteilen.
Sie dürfen auch mehrere arithmetische Ausdrücke - ausgenommen sind folglich Vergleiche! - eintragen. Die Abarbeitung der Formeln erfolgt in dieser Reihenfolge.
Sie dürfen in diesem Feld wie mit jedem einfachen Texteditor arbeiten, müssen also nicht mit den angegebenen Tastenschlüsseln Ctrl+Space bzw. Ctrl+J operieren, aber es erleichtert das Eintragen.
[7] Hier wird die Variable (deren "Name") angezeigt, auf der der Cursor im Feld "Formula" steht. Editierbar nur nach Klick auf .
![]() |
|
[8] Technologisch begründeter Text, dem "Name" zugeordnet ist. Hier änderbar bzw. bei neuen Variablen einzutragen.
[9]
Input
kann nur für alle Operanden rechts vom Zuweisungszeichen gelten, falls nicht lokale Speicherplätze verwendet werden.Input/Output
kann für alle Operanden beiderseits vom Zuweisungszeichen gelten. Operanden rechts vom Zuweisungszeichen können Ergebnisse der Kopierfunktion oder anderer arthmetischen Ergebnisse sein und nicht auf lokalen Speicherplätzen liegen.Output
trifft vorrangig für den Operanden links vom Zuweisungszeichen zu, sofern das Ergebnis nicht lokal abgelegt werden kann.Local Static
Falls sich die Variable innerhalb des Bausteins im RAM befindet. Zum Beispiel kann durch die Kopierfunktion auf einem lokalen Speicherplatz ein Wert abgelegt werden. Zeitgliedwerte und Zählerwerte sind ebenfalls lokal.Constant
Falls der Operand (rechts der Zuweisung) eine feste Zahl ist, die in "Initial" eingetragen werden muß (nach Klick auf).
[10] Einen Kopierauftrag (Copy) formulieren Sie ganz einfach durch:
Zielspeicher := Quelle ;
Quelle kann eine Konstante sein aber auch ein Speicherplatz. Der Datentyp soll "kleiner" oder gleich dem des Zielspeichers sein, wobei damit die Bitanzahl bzw. der Zahlenumfang gemeint ist. Die Datentypanpassung erfolgt automatisch. Sie dürfen alle Datentypen verwenden, weil es beim Kopieren nicht auf Vorzeichen ankommt. Aus BYTE, WORD oder DWORD eine Größe mit Vorzeichen "herstellen zu lassen", also z.B. von WORD nach INT wandeln gelingt nur mit ausdrücklichem Befehl WORD_TO_INT, weil der Programmierer dies sehr bewußt anzuweisen hat!.
Der Zielspeicher darf auch eine Boolesche Variable sein, der Sie entweder 0 oder 1 als Konstante zuweisen können.
Einen Berechnungsauftrag (Calculate) tragen Sie nach Ihrem Ermessen ein. Entscheiden Sie, ob das Ergebnis nur im ersten Arbeitszyklus - "single" - berechnet werden darf oder in allen - "multiple" - berechnet werden kann. Mehr hierzu: Arithmetik;Berechnungen;Addieren;Subtrahieren;Multiplizieren;Potenzieren;Dividieren;Schieben;Rotieren
Das Problem der Datentypen liegt darin, daß Byte, Word, Dword nicht "verrechenbar" sind wegen des fehlenden Vorzeichens. U-Typen, wie z.B. UINT, werden als positive Werte auf dem nächst größeren Bitformat verarbeitet, sofern überhaupt möglich, denn 64-Bit-Maschinen sind noch selten.
Als Berechnungs-Regel gilt, zuerst Klammerausdrücke, dann Shift und Rot und trigonometrische Funktionen, danach Potenzen, Multiplikation und Division, zum Schluß Addition und Subtraktion.
WICHTIG:
![]() |
|