Autor Thema: Modbus TCP Zugriff von PC auf Ein- und Ausgänge des E4  (Gelesen 871 mal)

Offline danielz

  • Newbie
  • *
  • Beiträge: 7
Modbus TCP Zugriff von PC auf Ein- und Ausgänge des E4
« am: September 03, 2024, 10:15:03 Vormittag »
Hallo,

E4 firmware: V2.10
easySoft: V8.11

Ich versuche den Status der Ein- und Ausgänge des E4 per Modbus TCP vom PC aus auszulesen.
  • Im Projekt habe ich einen 'Modbus TCP server' hinzugefügt und beim E4 under 'Modbus server' in der Konfiguration 'Modbus TCP server active' aktiviert.
  • Bei der Definition des MS1 habe ich verschiedene Kombinationen under 'Cyclic data' und 'Assigned operands' ausprobiert, bekomme aber bisher immer folgende Fehlermeldung: 'Code 208, Connection failure in module MS1 (error 33).'

In der Hilfe finde ich dazu nur folgende Erklärung:
33 Server port service is not provided respectively not activated
 
Kann mir hierbei jemand weiterhelfen wie ich diese Verbindung richtig definieren kann?

Offline w.sprungmann

  • Full Member
  • ***
  • Beiträge: 252
Antw:Modbus TCP Zugriff von PC auf Ein- und Ausgänge des E4
« Antwort #1 am: September 03, 2024, 11:32:56 Vormittag »
Hallo danielz,
so sind meine Einstellungen. Siehe Bild im Anhang
Gruß Wilhelm
« Letzte Änderung: September 03, 2024, 13:48:25 Nachmittag von w.sprungmann »

Offline danielz

  • Newbie
  • *
  • Beiträge: 7
Antw:Modbus TCP Zugriff von PC auf Ein- und Ausgänge des E4
« Antwort #2 am: September 04, 2024, 07:06:46 Vormittag »
Hallo Wilhelm,

Danke für die Screenshots. Das sieht bei mir genauso aus.

Ich habe gestern noch viele Varianten getestet, unter anderem alle Einträge beim MS1 under 'Cyclic data' und 'Assigned operands' gelöscht. Wenn ich dann unter 'Programming' alle Ein- und Ausgänge auf Marker Mx mappe, kann ich diese mit dem Modbus register 1001 abrufen (ref. Modbus TCP map in der Hilfe).

Heisst das, dass es den Baustein 'Modbus TCP Server' nun dann braucht, wenn der E4 als Server aufgesetzt sein soll?

Offline w.sprungmann

  • Full Member
  • ***
  • Beiträge: 252
Antw:Modbus TCP Zugriff von PC auf Ein- und Ausgänge des E4
« Antwort #3 am: September 04, 2024, 07:40:06 Vormittag »
Hallo danielz,
schick das Projekt mal rüber und mach ein paar Bilder vom "Modbus TCP server" Einstellungen.
Gruß Wilhelm

Offline radar17892

  • Sr. Member
  • ****
  • Beiträge: 788
  • Think easy!
    • mollgruppe
Antw:Modbus TCP Zugriff von PC auf Ein- und Ausgänge des E4
« Antwort #4 am: September 04, 2024, 09:38:16 Vormittag »
Hallo danielz,
du brauchst im Projekt keinen Modbus Server hinzufügen.
Wenn dein PC die Visu ist, aktivierst du nur den Server der E4 wie bei Wilhelm auf dem 3. Bild und setzt die Haken bei den Freigaben.
Was benutzt du auf dem PC als Client?

Gruß Thomas
Weil Einfach einfach Einfach ist!

Offline danielz

  • Newbie
  • *
  • Beiträge: 7
Antw:Modbus TCP Zugriff von PC auf Ein- und Ausgänge des E4
« Antwort #5 am: September 05, 2024, 07:29:28 Vormittag »
Hallo,

Ein Screenshot der Modbus Einstellungen für den E4 ist angehängt.
Die Marker M1..M12 sind auf I1..I8 und Q1..Q4 gemappt.

Auf dem PC benutze ich ein python Script:

from pyModbusTCP.client import ModbusClient
MC = ModbusClient(host="10.10.177.120", port=502, unit_id=1, auto_open=True)
regs = MC.read_input_registers(1001, 1)

Offline radar17892

  • Sr. Member
  • ****
  • Beiträge: 788
  • Think easy!
    • mollgruppe
Antw:Modbus TCP Zugriff von PC auf Ein- und Ausgänge des E4
« Antwort #6 am: September 05, 2024, 15:20:23 Nachmittag »
Mit dieser Einstellung müssten die Merkerworte 1-12 auslesbar sein.
Lesen der MW mit read holding register 1001 müsste auch gehen wenn du die IO auf Merker gelegt hast.
« Letzte Änderung: September 05, 2024, 15:24:38 Nachmittag von radar17892 »
Weil Einfach einfach Einfach ist!

Offline danielz

  • Newbie
  • *
  • Beiträge: 7
Antw:Modbus TCP Zugriff von PC auf Ein- und Ausgänge des E4
« Antwort #7 am: September 06, 2024, 09:15:51 Vormittag »
Hallo radar17892,

Ich habe jetzt digitale Ein- und Ausgänge (von E4-UC-12RC1) und einen analogen Eingang (von E4-DC-6AE1) die ich mit python am PC auslesen kann. Mir ist aber noch nicht klar, wie die Merkerworte richtig gesetzt werden sollen.

Unter Modbus server sind jetzt die Merker MW01 bis MW16 aktiv.

Unter Programming habe ich diesen Teil:
M1 := I1;
M2 := I2;
M3 := I3;
M4 := I4;
M5 := I5;
M6 := I6;
M7 := I7;
M8 := I8;
M9 := Q1;
M10 := Q2;
M11 := Q3;
M12 := Q4;
MW13 := IA05;


Dies gibt mir folgendes Resultat am PC mit den entsprechenden Modbus Registern (read_holding_registers). In diesem Beispiel ist I1 und Q1 aktiv und am analogen Eingang ist ein Sensor angeschlossen:

1001 [ 257 ]
1002 [ 0 ]
1003 [ 0 ]
1004 [ 0 ]
1005 [ 0 ]
1006 [ 0 ]
1007 [ 0 ]
1008 [ 0 ]
1009 [ 0 ]
1010 [ 0 ]
1011 [ 0 ]
1012 [ 0 ]
1013 [ 2138 ]
1014 [ 0 ]
1015 [ 0 ]
1016 [ 0 ]

Warum werden alle Merker M1..M12 binär gesammelt unter dem Register 1001 ausgegeben? Gibt es eine Möglichkeit diese so zu programmieren, dass ich sie einzeln unter 1001..1012 abrufen kann?

Offline radar17892

  • Sr. Member
  • ****
  • Beiträge: 788
  • Think easy!
    • mollgruppe
Antw:Modbus TCP Zugriff von PC auf Ein- und Ausgänge des E4
« Antwort #8 am: September 06, 2024, 10:03:58 Vormittag »
Ein Register ist ein ganzes Wort.
Du kannst mit FC1 (read discrete inputs) die einzelnen Aus und Eingänge lesen.
Wobei immer ein ganzes Wort übertragen wird, egal ob nur ein einzelnes Bit gelesen wird. wenn du 16 einzelne Bitabragen machst, wird 16 mal je 1 Wort mit overhead kommuniziert.
Mit FC2 die Eingänge und Merker 1-512. Mit FC3 die Modbusregister, also die Merkerworte 1-512.
Du musst dann im Phyton das Register aufdröseln und die Bits extrahieren. Bei Codesys wird das einfach mit der Syntax MW1.0 für das erste Bit im MW1 angesprochen.
Andersherum schreibst du die Bits in das Register und übertägst es dann mit FC5 oder FC16.

Weil Einfach einfach Einfach ist!