-> Hier kostenlos registrieren
Folgendes einfaches Szenario:
2 SPSe kommunizieren miteinander und haben eine Variable, die sie austauschen und synchron halten. D.h. jede CPU sendet den eigenen Wert an die andere CPU und übernimmt Wertänderungen von der anderen CPU. Jede CPU kann auch selbst Wertänderungen veranlassen, die z.B. von einem HMI kommen.
Gibt es ein Standardverfahren, um das korrekt umzusetzen? Das Problem ist, wenn beide CPUs gleichzeitig eine Wertänderung initiieren, z.B. CPU1 setzt den Wert 1 (von zuvor 0), und CPU2 setzt den Wert 2. Dann sieht jede CPU die Änderung von der anderen CPU und die Werte werden einfach getauscht. Dieses Tauschen läuft für unbestimmte Zeit weiter.
Die meisten einfachen Lösungen, die mir einfallen, sind keine Lösungen oder widersprechen den Anforderungen.
Ich versuche, mit möglichst wenigen zusätzlichen Kommunikationsbits, Code usw. auszukommen.
Eine mögliche Lösung wäre, genau eine CPU als "vorrangig" zu deklarieren. Wenn sie eine Wertänderung sendet, müssen die anderen CPUs den Wert für eine gewisse Zeit dauerhaft übernehmen, gleichzeitig darf die vorrangige CPU für eine gewisse Zeit nichts übernehmen. Das ist mit den Anforderungen vereinbar, weil bei fast gleichzeitigen Änderungen von 2 Seiten keine Priorität vorgegeben ist.
Was ist, wenn eine CPU den Wert begrenzt, die andere nicht? Die andere CPU sieht keine Änderung und kann nur durch eine zusätzliche Information zur Übernahme veranlasst werden. Also ein Signal "übernehme Variable X sofort".
Vielleicht gibt es eine effiziente Lösung, die beides abdeckt?
2 SPSe kommunizieren miteinander und haben eine Variable, die sie austauschen und synchron halten. D.h. jede CPU sendet den eigenen Wert an die andere CPU und übernimmt Wertänderungen von der anderen CPU. Jede CPU kann auch selbst Wertänderungen veranlassen, die z.B. von einem HMI kommen.
Gibt es ein Standardverfahren, um das korrekt umzusetzen? Das Problem ist, wenn beide CPUs gleichzeitig eine Wertänderung initiieren, z.B. CPU1 setzt den Wert 1 (von zuvor 0), und CPU2 setzt den Wert 2. Dann sieht jede CPU die Änderung von der anderen CPU und die Werte werden einfach getauscht. Dieses Tauschen läuft für unbestimmte Zeit weiter.
Die meisten einfachen Lösungen, die mir einfallen, sind keine Lösungen oder widersprechen den Anforderungen.
Ich versuche, mit möglichst wenigen zusätzlichen Kommunikationsbits, Code usw. auszukommen.
Eine mögliche Lösung wäre, genau eine CPU als "vorrangig" zu deklarieren. Wenn sie eine Wertänderung sendet, müssen die anderen CPUs den Wert für eine gewisse Zeit dauerhaft übernehmen, gleichzeitig darf die vorrangige CPU für eine gewisse Zeit nichts übernehmen. Das ist mit den Anforderungen vereinbar, weil bei fast gleichzeitigen Änderungen von 2 Seiten keine Priorität vorgegeben ist.
Was ist, wenn eine CPU den Wert begrenzt, die andere nicht? Die andere CPU sieht keine Änderung und kann nur durch eine zusätzliche Information zur Übernahme veranlasst werden. Also ein Signal "übernehme Variable X sofort".
Vielleicht gibt es eine effiziente Lösung, die beides abdeckt?