TIA Atomare Schreibvorgänge in Siemens 1500 CPUs

Jochen Kühner

Level-3
Beiträge
4.558
Reaktionspunkte
764
Zuviel Werbung?
-> Hier kostenlos registrieren
Weiß jemand ob Schreibvorgänge auf einer 1500 PLC vom Type "Real" Atomar sind? Also der Schreibvorgang kommt über das CommPlus Protokoll.
Ist das Atomar, oder kann ich in der CPU innerhalb des Zyklus vorkommen das nur 2 Bytes des Wertes geschrieben wurden?
 
was auch immer "atomar" bedeutet ;) Jedenfalls sind Grunddatentypen normalerweise konsistent.

Problem kann z.B. sein, wenn bei PUT/GET die REAL-Werte nicht auf jeweils dem 4.Byte beginnen, dann kann es u.U. in dem 32. 64. usw. Byte zu Ärger kommen. Also wenn z.B. 64Byte konsistent übertragen werden und eine Realzahl das 62-65.Byte verwendet, dann kann da u.U. Quatsch rauskommen...



z.B. hier für OPC-UA:


Konsistenz von Datentypen an der Server-Schnittstelle

Die Konsistenz von Variablen (im Sprachgebrauch von OPC UA: "atomicity") innerhalb eines Programmzyklus einer S7-1500 CPU ist an den Knoten der Server-Schnittstelle sichergestellt für folgende Datentypen:

  • BOOL, BYTE, WORD, DWORD, LWORD
  • SINT, INT, LINT, DINT, USINT, UINT, ULINT, UDINT
  • REAL, LREAL
  • DATE, LDT, TIME, LTIME, TIME_OF_DAY, LTIME_OF_DAY, S5TIME
  • CHAR, WCHAR
  • Ebenfalls konsistent sind Systemdatentypen bzw. Hardware-Datentypen, die auf den oben genannten Datentypen basieren.

    Beispiel: HW_ANY, von UINT (UInt16) abgeleitet.
Tipp: Wenn Sie im Adressraum der S7-1500 CPU browsen (z. B. mit dem OPC UA Client UaExpert), dann finden Sie die konsistenten Datentypen unter Types > BaseDataType > Enumeration/Number/String.



Variablen von folgenden Datentypen sind nicht konsistent (im Sprachgebrauch von OPC UA: nonatomic):

  • SIMATIC-Strukturen sind generell nicht konsistent. D. h. alle Variablen, die z. B. unbenannte Strukturen sind oder einen UDT-Datentyp haben, sind nicht konsistent.
  • Systemdatentypen wie z. B. DTL, IEC_Counter, IEC_TIMER etc. – das sind Datentypen, die von Strukturen abgeleitet sind.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist das vielleicht auch abhängig von optimiert bzw. nicht-optimiert ?
Ich bemerke dass in den Zitat werden auch die längere Datentypen LWORD, LINT, LREAL als konsistent aufgelistet. Also mehr als 4 Bytes.
 
Ist das vielleicht auch abhängig von optimiert bzw. nicht-optimiert ?
Ich bemerke dass in den Zitat werden auch die längere Datentypen LWORD, LINT, LREAL als konsistent aufgelistet. Also mehr als 4 Bytes.
ja, wie gesagt, Grunddatentypen, unabhängig wie lang.
Aber wo der Unterschied zwischen den verschiedenen Kommunikationsarten bzw. Zugriffsarten liegt, bleibt wohl den Spezialisten vorbehalten zu erkennen ;)
 
Zuletzt bearbeitet:
ja, wie gesagt, Grunddatentypen. Aber wo der Unterschied zwischen den verschiedenen Kommunikationsarten bzw. Zugriffsarten liegt, bleibt wohl den Spezialisten vorbehalten zu erkennen ;)
Und selbst da herrscht keine Sicherheit.
Datentypen, optimiert, MTU, Firmware, ... Da spielen soviele Dinge ne Rolle, dass man da einfach aufpassen muss.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
was auch immer "atomar" bedeutet
Leitet sich vom griechischen Atomos für unteilbar her.
Im programmtechnischen Sinne eine Operation, die durch nichts unterbrochen werden kann und somit nativ konsistent ist.

Das wusstest Du sicher. Ich bin aber grad in Klugscheißerlaune 🤓🤣🤣🤣🤣
 
Zuviel Werbung?
-> Hier kostenlos registrieren
theoretisch kann man bei den 1500ern die Priorität des OB1 ja höher stellen als die Kommunikationsprio. Ausprobiert hab ichs aber noch nicht. Und ob das bei den neuen CPUs mit Mehrkernprozessor auch noch funktioniert, steht in den Sternen.
 
Zuletzt bearbeitet:
theoretisch kann man bei den 1500ern die Priorität des OB1 ja höher stellen als die Kommunikationsprio. Ausprobiert hab ichs aber noch nicht. Und ob das bei den neuen CPUs mit Mehrkernprozessor auch noch funktioniert, steht in den Sternen.
Bei Siemens ist es ja quasi Tradition seit S5-Zeiten, dass funktionale Unterschiede bei der Kommunikation gibt.
Wär vielleicht mal wirklich interessant zu Testen wie sich aktuelle 1500er Mehrkern-CPUs im Detail verhalten. Würde mich nicht wundern, wenn es da jetzt wieder Unterschiede geben würde. Gerade bei so Dingen wie (nicht vorhandenen) Zykluskontrollpunkt.
 
Jetzt mal was ernsthafter:

Variablentypen bis 4Byte wurden und werden immer konsistent übergeben. Das muss auch für die neuen Steuerungen und 64Bit-Typen gelten.

Wenn z.B. ein Programminterrupt zu inkonsisteneten Werten führt, dann kann man sich nicht mehr auf die Integrität von Werten verlassen und ein solches System ist definitiv unbrauchbar!!!

Mehrkernprozessoren haben dies in der Firmware zu garantieren...
 
Jetzt mal was ernsthafter:

Variablentypen bis 4Byte wurden und werden immer konsistent übergeben. Das muss auch für die neuen Steuerungen und 64Bit-Typen gelten.

Wenn z.B. ein Programminterrupt zu inkonsisteneten Werten führt, dann kann man sich nicht mehr auf die Integrität von Werten verlassen und ein solches System ist definitiv unbrauchbar!!!

Mehrkernprozessoren haben dies in der Firmware zu garantieren...
Theoretisch ja, aber nicht, wenn ich bei PUT/GET von der 4Byte Variable 2 Byte in der ersten und 2 Byte in der zweiten übertragenen Gesamtmenge liegen habe... Und wieviele Bytes konsistent per PUT/GET übertragen werden, hängt von CPU/CP sonstwas ab.
Zugriffe innerhalb der SPS sollten bei Variablen mit Grunddatentypen immer konsistent sein. Nur Kommunikation nach aussen nicht unbedingt.

Und wenn die 4Byte in nem UDT usw. liegen, also kein Grunddatentyp sind, dann ist das nicht konsisten!

Variablen von folgenden Datentypen sind nicht konsistent (im Sprachgebrauch von OPC UA: nonatomic):

  • SIMATIC-Strukturen sind generell nicht konsistent. D. h. alle Variablen, die z. B. unbenannte Strukturen sind oder einen UDT-Datentyp haben, sind nicht konsistent.
  • Systemdatentypen wie z. B. DTL, IEC_Counter, IEC_TIMER etc. – das sind Datentypen, die von Strukturen abgeleitet sind.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Theoretisch ja, aber nicht, wenn ich bei PUT/GET von der 4Byte Variable 2 Byte in der ersten und 2 Byte in der zweiten übertragenen Gesamtmenge liegen habe... Und wieviele Bytes konsistent per PUT/GET übertragen werden, hängt von CPU/CP sonstwas ab.
Das Thema hatten wir hier auch schon (mindestens) einmal. Jemand hat Realwerte übertragen, meistens haben sie gepasst und sporadisch wurde ein NaN geliefert ( Not a number ).
 
Zuletzt bearbeitet:
Und wenn die 4Byte in nem UDT usw. liegen, also kein Grunddatentyp sind, dann ist das nicht konsisten
Das verstehe ich anders. Die Real Zahl innerhalb des UDT wird für sich schon konsistent behandelt, es ist nur nicht sichergestellt, daß die eine Real Zahl und die zweite Real Zahl im gleichen UDT gleichzeitig behandelt werden. Wenn natürlich das Limit bei Put/Get tangiert wird, sieht es natürlich anders aus.
 
Das verstehe ich anders. Die Real Zahl innerhalb des UDT wird für sich schon konsistent behandelt, es ist nur nicht sichergestellt, daß die eine Real Zahl und die zweite Real Zahl im gleichen UDT gleichzeitig behandelt werden. Wenn natürlich das Limit bei Put/Get tangiert wird, sieht es natürlich anders aus.
man hofft das beste und rechnet mit dem schlimmsten. Ich würd den Satz nicht eindeutig interpretieren können:

  • SIMATIC-Strukturen sind generell nicht konsistent. D. h. alle Variablen, die z. B. unbenannte Strukturen sind oder einen UDT-Datentyp haben, sind nicht konsistent.
 
Zurück
Oben