# eCockpi Modbus TCP Verständnis



## Passion4Automation (12 September 2021)

Hallo Zusammen,

ich habe eine Anlage vor Jahren auf Basis von CS. 2.3 programmiert. Es ist ein 750 8202 ein 750 881 und IP Symcon als universelles Modbus Gateway bzw. Visu im Netzwerk.
Die Kommunikation erfolgt von IP Symcon komplett auf den 8202, der 881 ist via Netzwerkvariablen an den 8202 verbunden.

Jetzt möchte ich den 8202 auf eCockpit hochrüsten, den 881 via Modbus anstatt NetVars anbinden und zusätzlich eine 750 8100 auch via Modbus anbinden.
Wago hat anscheinend die Modbus Geschichte ziemlich verändert.
Mit dem Modbuskonfigurator habe ich schon gespielt, ist auch recht einfach, jedoch scheint mir das recht aufwendig, jedes Register einzeln hinzuzufügen, bei 850 Registern, ein haufen Arbeit.

Jetzt habe ich die WagoAppPlcModbusTcp entdeckt. Mir erschließt sich die Funktion der einzelenen Bausteinen jedoh nicht. So wie ich das verstehe kann ich z.B. FC 5 Register in gewünschter Länge lesen und schreiben.? Liege ich da richtig? Was kann man mit der Lib sonst noch so anstellen?
Gibt es dazu ausführliche Beispiele, ich habe bisher nur Einzelheiten gefunden?

Würdet Ihr die Modbuskommunikation in meinem Fall über den Konfigurator machen?

Ich habe noch einen Screenshot angehängt, damit Ihr sehr was mein Vorhaben ist.

Danke schon mal


----------



## Blockmove (12 September 2021)

Mit dem Bausteinen aus der App kannst du ein 2.3 kompatibles Verhalten erreichen.
Ausserdem benötigst du bei Änderungen seltener einen Stop.


----------



## Passion4Automation (13 September 2021)

Hallo,

ich habe mich noch etwas mit dem Thema auseinander gesetzt. Ich denke die Vorteile der Modbusbausteine liegen auf der Hand, nur kopieren muss man das ganze.
Ich habe Screenshots angehängt.
Ich habe versucht eine Verbidnung über MB_TCP zwischen einer 881er und einem 8202 aufzubauen.

Meine Frage:
Wie picke, bzw. mappe ich jetzt die Register aus dem Array in mein Programm? Bzw. ist das überhaupt richtig was ich da gemacht habe?

Danke schon mal.


----------



## holgermaik (14 September 2021)

goifalracer schrieb:


> ist das überhaupt richtig was ich da gemacht habe?


sieht doch erstmal ganz gut aus.
Über den Response kann man jetzt noch auswerten ob die Antwort korrekt ist. Für einfache Sachen reicht auch sicherlich die Error Auswertung.


goifalracer schrieb:


> Wie picke, bzw. mappe ich jetzt die Register aus dem Array in mein Programm?


- Du könntest sie umkopieren und als Ausgang an der Schnittstelle zur Verfügung stellen. (ist m.M.n. die sauberste Sache)
- im Baustein auf GVL kopieren
- einen direkten Zugriff an der Verwendungsstelle ( Daten := Modbus_tcp.Antwort.awData[0]


----------



## Passion4Automation (14 September 2021)

Hi Holgermaik,

ich meinte das anders.
Die Daten Array words  in mehere  Words holen ist kein Problem.

Modbus addressiert ja Wortweise.
Nur möchte ich die Daten Bitweise auslesen bzw. schreiben. Aus dem awData[0] müsste ich 16 Bits raus holen können.
Gibt es eine Funktion die das macht oder wird das komplizierter??

Anhand der dezimalen Wertigkeit könnte ich mir schon die MX0....... raussuchen die sich ändern aber das wäre ein hoher Aufwand.
Das geht bestimmt eleganter, blß ich weiß nicht wie.
Danke


----------



## PN/DP (14 September 2021)

Kann man bei eCockpit nicht auch die Bits in Variablen direkt adressieren?


```
MyBit00 := MyWord.0;
MyBit01 := MyWord.1;
...
MyBit15 := MyWord.15;

MyWord2.3 := true;
...
```

Harald


----------



## Passion4Automation (14 September 2021)

Danke Harald,

sorry, aber da hätte ich selbst drauf kommen könnnen.
Was sich schwieriger gestaltet ist das ich aus 2 Words ein Real basteln muss und umgekehrt, weil Modbus ja nur Words kann.
Ich werde das mit einer Union versuchen.


----------

