Festgelegte Varibalentypen in Verbindung mit Modbus Befehlen

Hallo,

ich habe ein Verständnisproblem.
Zwar Schreibe und Lese ich von IPS auf eine Wago per Modbus.
Im Anhang sind SShots zum Verständnis.

Ich habe mir für Rollos ein Benutzderdefiniertes Varibalenprofil als Integer erstellt, ich schreibe via Aktionsskript ein Variable (Short) auf die Wago und lese in die Variable den Status ein, funktioniert soweit.

Frage 1: Ich kann im Aktionsskript ModbusWriteRegisterInteger oder Word sowie Short angeben, funktioniert alles, vorausgesetzt die Modbusinstanz wir entsprechend dem Datentyp angepasst.
Muss ich zwingend eine Integer Variable aus dem Skript schreiben, weil das Variablenprofil auf Integer basiert, oder ist das egal??

Frage 2: Richtet sich eher an die Wago bzw. Beckhoff User
Die Modbusadressierung ist ja in der SPS Byteweise, so weit so gut.
Ich habe bisher aus dem Aktionsskript immer mit ModbusWriteRegisterInteger geschreiben und so wie ich das verstehe 32bit geschrieben.
Als Modbusadresse in der Wago habe ich dann ein Merkerwort angegeben (hat nur 16 Bit) jetzt habe ich durch diese Art der Programmierung je nach Konstellation das vorherige oder das nachfolgende Merkerwort mitbschrieben.

Das ganze ist mir aufgefallen, als Der Rollo im Webfront „Auf“ anzeigte, weil ich an einem völlig anderen Slider (Merker 13002) den Wert verstellt habe.

Ich verstehe das so, aus IPS habe ich auf den Integer 32 bit gepackt, das Merkerwort in der Wago hat aber nur 16 Bit, somit hat der Integer aus IPS in der Wago ein Merkerdoppel beschreiben.

Gelöst habe ich das ich statt ModbusWriteRegisterInteger, ModbusWriteRegisterShort schreibe und laut IPS jetzt nur 16 bit schreibe.

Ist das jetzt alles so richtig wie ich das mache oder verrenne ich mich da???

In alten Beiträgen habe ich gelesen das man bei der Wago SPS mit Mdbus immer nur jedes zweite Merkerwort verwenden sollte, wsl rührt das daraus, das IPS bei Integer 32 Bit liefert.

Danke schon mal.

Unbenannt2.PNG

Das klingt so, als wenn du die ganzen Sorgen hinter dir lassen kannst, wenn du einfach RequestAction verwendest :loveips: Damit löst du dann einfach die gleiche Variablenaktion aus, welche auch durch einen Klick im WebFront stattfindet.

Hi Dr. Niels,

Na ja Sorgen ist was anderes;). Ich wollte bloß sicherstellen ob meine Vorgehensweise richtig ist, bzw sicherstellen das ich das kapiert habe;)

Das mit dem request action muss ich mal testen, so wie ich das lese brauche ich mir hier keine Gedanken mehr über die Art der Variable machen welche in der modbusinstanz ausgewählt wurde.

Muss ich zwingend eine Integer Variable aus dem Skript schreiben, weil das Variablenprofil auf Integer basiert, oder ist das egal??
Das wäre interessant zu wissen?

Ich glaube der Wert wird passend geparst, wenn du RequestAction verwendest. Du solltest aber schon einen Integerwert in eine Integervariable schreiben. Ich persönlich traue dem ganzen automatischen Parsen nicht wirklich und vermeide es. Sollte mal was entsprechendes erforderlich sein, dann parse ich aktiv via intval oder dergleichen.

OK, dann schreibe ich integer rein, nicht das dass mal zu Fehlern führt.

In der Wago muss ich halt dann jedes zweite Wort nehmen bzw ein Merkerdoppel, weil der Integer aus IPS ja 32 Bit hat.
Mit Short hätte ich mir hier Register Variablen sparen können.