IPS Modbus Wago Tasten

Hallo,

ich bin gerade am testen wie ich Modbus an mein Codesys Projekt anständig einbinde.
Ich kenne die Lösung mit dem Exklusiv Oder, nur muss ich da meine ganzen FB,s umbauen. Ich habe an jedem FB einen EIngang für Hardwaretaster und einen für Modbus.

Tastet ihr von IPS über ein Skript oder macht ihr das alle über XOR mit Rückmeldung an IPS??

Wenn mit Skript, wie bindet man so ein Skript in IPS ein?

Danke.

Da gibt es hier einen oft verlinkten Beitrag :slight_smile:

Wago und Taster. Die einzig wahre Lösung!

Hi danke. für den Link. Den kenn ich aber schon, alles getest und verstehe ich auch. Doch mein SPS Programm ist Flankenorientiert, alles über Taster usw. Das geht aber mit der Lösung nicht.
Ich hatte jetzt folgendes vor. Merker 12288 500ms true dann false, als Rückmeldung dann 12289 lesend, sollte doch funktionieren oder?

Nur verzweifele ich beim Skript zur Instanz hinzufügen, beim PHP Code bin ich mir auch nicht sicher??
Könnte mir da jemand nen Tipp geben wie man das macht. Bin IPS EInsteiger.

Tasten aus IP Symcon muss ich sowieso mal, bei der Rollo stueuerung z.B. oder wie macht ihr SPS Modbus User das??

Besten Dank.

ModBus_WriteCoil(12288,true);
IPS_Sleep(200);
ModBus_WriteCoil(12288,false);


Das wäre mein Code fürs Skript, habe ich mir irgendwo abgeschaut, würde der funktionieren ?

Also mit dem Skript scheitere ich weiter, ich habs so gemacht.

Modbus Instanz hinzugefügt, 12288 ist Schreiben (05) 12289 ist Lesen(01) dann mit Rechntklick (Skript hinzufügen) Und dann unter WERT das Skript als eigene Aktion hinzugefügt.

Jetzt kommt im Webfront beim Tasten, dieser Fehler: Warning: Instanz '12288 existiert nicht in C\IP-Symcon\scripts usw.

Du verwechselst die Instanz-ID mit der Modbus-Addresse

Du legst dir die Modbus-Instanz mit der Variable an und schaltest diese mit dem Befehl. (Nicht die modbus addressed selbst)

Danke das wars, wie gesagt blutiger Anfänger.

Für mich hat dise Version 2 Nachteile: 1. Jedesmal ein Skript erstellen 2. Je Instanz einen Merker verschenken.

Gibt es mit dieser Variante noch weitere Nachteile die ich als Anfänger noch nicht verstehe.??

Daher die Variante wie in dem Beitrag den ich verlinkt habe.

Hier hast du nur du nur eine Variable die gleichzeitig ein-und Ausgang ist.
Du kannst zum “Tasten” (stromstoßschalter) ein Script nehmen was den aktuellen Wert einfach invertiert.

Ist diese Skript hier im Forum zu finden?

Das script kannst du dir ganz einfach selbst bauen:

$id = 12345;
ModBus_WriteCoil($id,!getvalue($id));

Hab ich so jetzt nicht getestet aber so vom Prinzip sollte es passen.

In der SPS musst du dann natürlich die entsprechende Variable mit XOR Verknüpfung bauen.

Danke, ich teste es mal

ich stand auch vor dem Problem das IPS ja nicht tastet sondern dauerhaft eine Variable schaltet. Ich habe es wie folgt gelöst:

Ein Script:

<?
$id = $_IPS['VARIABLE'];
$parent= IPS_GetParent($id);
IPS_Sleep(100);
ModBus_WriteCoil($parent, false);
?>

unter diesem Script hab ich für jede Variable die, nach dem sie auf true geschaltet wurde, wieder auf false geschaltet werden soll ein Ereignis angelegt. (Wenn true dann Script ausführen)

So hast du nur ein Script und musst einfach für jede Variable ein Ereignis erstellen. Fertig.

Viele Grüße
Stephan

Hi Stephan,

Danke. Interessant! Muss ich Mal testen.

Gruß

Eine andere simple Methode ist einfach in der SPS den Symcon-Merker zu reseten.
Somit braucht man in IPS kein Sleep und in der SPS keine Flanke

Hi Dieter,

wie würde das aussehen, den Merker in der SPS zu resetten? Mit Ton und Tof?
Wäre interessant zu wissen. Weil das IPS sleep ist auch nicht so das wahre. Danke Gruß

Hi Da8ter,

ich habe deine Lösung jetzt mal getestet, bin leider jetzt erst dazu gekommen.

Ich habe jetzt das Profil Switch verwendet, funktioniert da dann bei dir das Lesen vom Status, also einen anderen Merker der Wago auslesen? Bei mir funktioniert das Tasten super aber lesen kann ich nicht.

Danke.

ich stand auch vor dem Problem das IPS ja nicht tastet sondern dauerhaft eine Variable schaltet. Ich habe es wie folgt gelöst:

Ein Script:

PHP-Code:
<?
$id = $_IPS[‚VARIABLE‘];
$parent= IPS_GetParent($id);
IPS_Sleep(100);
ModBus_WriteCoil($parent, false);
?>
unter diesem Script hab ich für jede Variable die, nach dem sie auf true geschaltet wurde, wieder auf false geschaltet werden soll ein Ereignis angelegt. (Wenn true dann Script ausführen)

So hast du nur ein Script und musst einfach für jede Variable ein Ereignis erstellen. Fertig.