# PUT GET Kommunikation überschreibt INOUT Variable



## Geextah (11 September 2018)

Hallo zusammen,

zur Koordination unserer Bestücklinie gibt es ein übergeordnetes Leitsystem welches auf C# und Snap7 arbeitet. Das Anlagennetzwerk besteht idR. aus mind. 15 SPS' (*1200er *oder *1500er*) welche alle beim Leitsystem nach der Richtung fragen.

Erster Ansatz/DB Aufbau:

DBX0.0 - Start
DBD2.0 - ErrorCode

1. CPU setzt Bit 0.0 auf true
2. PC führt seine Aktion aus (schreibt optional einen Fehlercode in 2.0 und) setzt Bit 0.0 auf false

Problem - sporadisch: Die CPU überschreibt (mit true) den vom PC geschriebenen Wert (false) und wartet dadurch endlos (bis zum Timeout) auf Rückmeldung vom PC.

Die Variablen werden dabei als INOUT an die FBs gehängt.
Beim Aufruf des FBs werden die Werte in einen I-DB zwischengespeichert und anschließend über diesen wieder zurück geschrieben. Dadurch kann es passieren, dass ein Wert/eine Variable die während einem FB Aufruf (vom PC) geschrieben wurde, von der CPU wieder zurück überschrieben wird und diese/r somit verloren geht.

Zweiter Ansatz:

DBX0.0 - Done
DBD2.0 - ErrorCode
DBX6.0 - Start

1. CPU setzt Bit 6.0 auf true
2. PC führt seine Aktion aus (schreibt optional einen Fehlercode in 2.0 und) setzt Bit 0.0 auf true
3. CPU setzt Bit 6.0 auf false
4. PC setzt Bit 0.0 auf false

Dadurch konnte dieses Problem vermieden werden.

Meine Frage, gibt es jdn. der einen ähnlichen Anwendungsfall hat und dieses Problem kennt oder anders gelöst hat?

Danke!


----------



## volker (11 September 2018)

was ich mich als erstes frage ist warum der pc nicht auf die erneute änderung auf true des bit 0.0 reagiert?
in der regel handhabe ich das wie dein 2ter ansatz.
allerdings setze ich nach erfolgreichem datenaustausch das done-bit zurück und nicht der pc. der pc muss also nur das startbit überwachen. aber das ist sicherlich ansichtssache.


----------



## jok3r (11 September 2018)

Servus, 
das ist ein Leidiges Thema und darüber stolpert jeder mal.

Das Problem nennt sich "Zyklus Synchronisierungspunkt" (der fehlt bei den 1200 und 1500 Steuerungen) und das in Kombination mit einem nicht Optimierten DB.

Du bist zu dem Thema recht schnell fündig benutze einfach mal die Suche.

Gruß


----------



## PN/DP (11 September 2018)

Mit dem Suchbegriff "zykluskontrollpunkt" kannst Du unsere vielen bisherigen Diskussionen zu dem Thema finden.

Harald


----------



## Ralle (12 September 2018)

Das Verhalten kenne ich aber auch schon von Früher mit 300-er und OPC (PC).
Daher nutze ich auch immer Verfahren 2, wobei grundsätzlich jeder "Teilnehmer" seine Variablen die er setzt auch wieder rücksetzt. 
Damit umgeht das Problem, dass sich Variablen gegenseitig überschreiben.


----------



## Geextah (12 September 2018)

Danke für eure Antworten! Ich bin gestern Abend auch noch fündig geworden und auf "Zyklus Synchronisierungspunkt" gestoßen.



> was ich mich als erstes frage ist warum der pc nicht auf die erneute änderung auf true des bit 0.0 reagiert?
> in der regel handhabe ich das wie dein 2ter ansatz.
> allerdings setze ich nach erfolgreichem datenaustausch das done-bit  zurück und nicht der pc. der pc muss also nur das startbit überwachen.  aber das ist sicherlich ansichtssache.



Der PC reagiert jedesmal, sobald das Bit 0.0 auf true gesetzt wird. Ich lasse den PC dieses Bit zurücksetzen, da ich damit das Problem umgehe, dass sich Variablen gegenseitig überschreiben.


Gibt es eine Alternative zu PUT GET um eine konsistente Datenübertragung zu haben und Daten zwischen PC und SPS auszutauschen?


----------

