Das funktioniert soweit gut, jetzt muß ich aber in der SPS, um den gesetzten Wert aus dem WF auszuführen, ein MX auf TRUE setzen. Wie ich ein MX auf True/False, per Skript setze, ist klar nur wie lasse ich das Skript ausführen. Ändere ich mit dem Slider einen Wert, dann hat dies zwar zur Folge das das Skript von oben ausgeführt wird aber wenn ich hier noch weiteren Code hinzufüge, so wird das nicht beachtet. Irgendwie stehe ich auf dem Schlauch und beiße mir die Zähne aus. Ich sehe bestimmt den Wald vor lauter Bäumen nicht.
OK, vielleicht war die Frage auch einfach zu dumm :mad:
Ich habe noch ein wenig rumprobiert aber so ganz will es nicht und ich verstehe nicht warum.
Er schreibt das RegisterWord, aber macht dann nicht weiter mit dem ModBus_WriteCoil. Warum nicht
Habe auch schon mal mit der Zeit ips_sleep gespielt aber das hat keine Auswirkung. Habe testweise das false setzen weggelassen um zu sehen ob der Merker überhaupt auf True gesetzt wird…wird er aber nicht.
Setze ich die Instanz auf True, über die Einstellungen der Instanz, dann wird der Merker schön gesetzt. Aber warum nicht über das Skript. Vorhin funzte es einmal, war aber irgendwie wohl Zufall. Ich habe danach einen neuen Wert im WF vorgegeben und dann ging es schon wieder nicht.
ich kann dir sagen warum es mit sleep funktioniert. Du Kannst bei Modbus TCP oder RTU keine Zwei Funktionen gleichzeitig ausführen. Es geht immer nur eine Funktion. Du kannst auch nicht gleichzeitig schreiben und lesen. Immer eins nach dem anderen. Erst schreiben, dann lesen. Und bei einer Normalen SPS muss nach jeder Anfrage an den Slave erst auf die Antwort gewartet werden.
Beispiel:
Frage Master Lesen:
Slave 1 sage mir was im Register 25 liegt
Antwort vom Slave:
Hallo Master im Register 25 ist dieser Wert xxx
Master hat jetzt eine Antwort und kann jetzt wieder eine andere Funktion abfragen.
Master Schreibt jetzt ins Register 45…
So Funktioniert das Ganze. Also immer eine Funktion abarbeiten bis es zur nächsten geht. Und immer auf den Response warten bevor ein Funktionswechsel gemacht wird. Wenn du nicht auf die Antwort wartest dann kann es passieren das du ein Falsches Register schreibst oder liest.
so wie du es in deinem letzten Beispiel hast ist es Richtig
Ahhh ok, das erklärt einiges. Wie kann man denn sicherstellen das die erste Abfrage komplett abgearbeitet worden ist. Kann man hier irgendwie das Script erweitern so das man das abfangen kann oder reicht das Einfügen einer Zeit?
Wie es bei IP-Symcon Funktioniert kann ich dir nicht sagen. Es müsste irgedwo eine Response Array geben. In diesem Array steht dann die Antwort mit Slavenummer, Registernummer und die werte die du schreibst oder liest. Ich habe bis jetzt nur mit dieser Classe gearbeitet