Modbus TCP

Das Modbus-Protokoll (Norm IEC 61158) ist ein Protokoll zum Datenaustausch zwischen einem Modbus Server und einem Modbus Client. Für Modbus TCP is der Port 502 reserviert. Es können dabei folgende Daten gelesen, bzw. geschrieben werden:

Datentyp

Einheit

Zugriff

Digitale Ausgänge

[Bit]

Lesen & Schreiben

Digitale Eingänge

[Bit]

Lesen

Analoge Eingänge

[16Bit]

Lesen

Analoge Ein-/Ausgänge

[16Bit]

Lesen & Schreiben

Folgende Modbus-Funktionen sind implementiert:

Nummer

Name

Server

Client

Beschreibung

FC1

Read Coils

Ja

Ja

mehrere digitale Ausgänge zurück lesen

FC2

Read Discrete Inputs

Ja

Ja

mehrere digitale Eingänge lesen

FC3

Read Holding Register

Ja

Ja

mehrere analoge Ein-/Ausgänge lesen

FC4

Read Input Register

Ja

Ja

mehrere analoge Ein-/Ausgänge lesen

FC5

Write Single Coil

Ja

Nein

einen digitalen Ausgang setzten

FC6

Write Single Register

Ja

Nein

einen analogen Ausgang schreiben

FC15

Write Multiple Coils

Ja

Ja

mehrere digitale Ausgänge setzen

FC16

Write Multiple Registers

Ja

Ja

mehrere analoge Ausgänge schreiben

FC23

Read/Write Multiple Registers

Nein

Ja

mehrere analoge Ausgänge schreiben und gleichzeitig Ein-/Ausgänge lesen

Modbus TCP Server

Im Gefasoft Modbus TCP Server werden Datenblöcke angelegt, die von einem Modbus TCP Client gelesen und beschrieben werden können. Jeder Datenblock muss dabei einen eindeutigen Adressbereich bestehend aus Startadresse und Datenlänge haben. Die Einheit der Startadresse, bzw. der Datenlänge ist dabei abhängig vom Datentyp. Digitale Ein-/Ausgänge werden in [Bit] adressiert und analoge Ein-/Ausgänge in [16Bit] bzw. [WORD]. Die Datenbereiche der digitalen Ein-/Ausgänge und analoge Ein-/Ausgänge dürfen sich nicht überschneiden !

../../../_images/gio-modbus-server-CreateNewHW.png
  1. Type: Modbus TCP Server

  2. ID: ID vergeben

  3. Name suffix: Steuerung benennen

  4. Create: Button drücken, um Objekt zu generieren

  5. DisplayName: Steuerung benennen

  6. Ip/Port: Eintragen der IP Adresse und des Port für den Modbus TCP Server Listener.

  7. UnitIdentifier: Der Gefasoft Modbus-Server ignoriert den vom Client empfangenen UnitIdentifier. Da es nur eine Unit gibt, werden alle UnitIdentifier akzeptiert. Der Datenblock wird über die vom Client empfangene Startadresse identifiziert.

  8. +: Hinzufügen von Datenbereichen, die für Kommunikation verwendet werden sollen

../../../_images/gio-modbus-server-CreateNewHW-EditDatablock.png
  1. DatenBlockID: ID für diesen Datenbereich.

  2. Name: Name des Datenbereichs

  3. Count: Datenanzahl in [Bit] bei digitalen Ein-/Ausgängen, bzw. in [16Bit] bei analogen Ein-/Ausgängen.

  4. EType: Datentyp

Datenblock Typ

Einheit

Impementiert

Client-Zugriff

EDigitalInputs

[Bit]

Ja

digital[Bit] & analog[16Bit] Lesen

EDigitalOutputs

[Bit]

Ja

digital[Bit] & analog[16Bit] Lesen & Schreiben

EHoldingRegisters

[16Bit]

Ja

digital[Bit] & analog[16Bit] Lesen & Schreiben

EInputRegisters

[16Bit]

Ja

digital[Bit] & analog[16Bit] Lesen

EOutputRegisters

[16Bit]

Ja

digital[Bit] & analog[16Bit] Lesen & Schreiben

EInputRegistersAcyclic

[16Bit]

Nein

keine

Hinweis

Da beim Viper Modbus TCP Server die Prozessdaten im Arbeitsspeicher gehalten werden, ist ein Zugriff auf alle implementierten Datenblock Typen über analoge [16Bit] und digitale [1Bit] Modbus Funktionen möglich.

  1. StartAddress: Startadresse der Daten in [Bit] bei digitalen Ein-/Ausgängen, bzw. in [16Bit] bei analogen Ein-/Ausgängen.

  2. TwistRegisterBytes: High und Low Byte beim Registerzugriff (bei analogen Ein-/Ausgängen) vertauschen.

  3. Acyclic inputregisters: Beim Gefasoft Modbus-Server sind azyklische Registerzugriffe nicht implementiert. Alle Daten befinden sich im Prozessabbild im Arbeitsspeicher und werden direkt gelesen und beschrieben.

  4. FileName: Pfad auf eine Datei um die Daten des Datenblocks permanent zu sichern. Beim Beenden werden die Daten gesichert und beim Starten wieder gelesen.

Siehe auch

Modbus TCP Client

Über den Gefasoft TCP Client werden Daten mit einem Modbus TCP Server ausgetauscht.

../../../_images/gio-modbus-client-CreateNewHW.png
  1. Type: Modbus TCP Client

  2. ID: ID vergeben

  3. Name suffix: Steuerung benennen

  4. Create: Button drücken, um GInOut Hardware-Objekt anzulegen.

  5. DisplayName: Steuerung benennen

  6. Ip/Port: Eintragen der IP Adresse und des Port des Modbus TCP Servers mit dem sich der Client verbinden soll.

  7. UnitIdentifier: Unit-ID für alle Daten, die vom Server abgefragt werden (Der UnitIdentifier ist Bestandteil des Modbus-Headers).

  8. +: Hinzufügen von Datenbereichen, die für Kommunikation verwendet werden sollen

../../../_images/gio-modbus-client-CreateNewHW-EditDatablock.png
  1. DatenBlockID: ID für diesen Datenbereich.

  2. Name: Name des Datenbereichs

  3. Count: Datenanzahl in [Bit] bei digitalen Ein-/Ausgängen, bzw. in [16Bit] bei analogen Ein-/Ausgängen.

  4. EType: Datentyp

Typ

Einheit

Implementiert

EDigitalInputs

[Bit]

Ja

EDigitalOutputs

[Bit]

Ja

EHoldingRegisters

[16Bit]

Ja

EInputRegisters

[16Bit]

Ja

EOutputRegisters

[16Bit]

Ja

EInputRegistersAcyclic

[16Bit]

Ja

  1. StartAddress: Startadresse der Daten in [Bit] bei digitalen Ein-/Ausgängen, bzw. in [16Bit] bei analogen Ein-/Ausgängen.

  2. TwistRegisterBytes: High und Low Byte beim Registerzugriff (bei analogen Ein-/Ausgängen) vertauschen.

  3. Acyclic inputregisters: Manche analoge Daten befinden sich nicht im Prozessabbild des Modbus Servers. Diese müssen dann über EInputRegistersAcyclic (FC23) ausgelesen werden. Dem Modbus Server wird über die Parameter ‚ReadAcyclStartAddressWrite = Zieladresse für Registernummer‘ und ‚ReadAcyclDataWrite = zu lesende Registernummer‘ mitgeteilt, welche Prozessdaten er dem Client schicken soll.

Hinweis

Für analoge Ausgänge (Register) muss die Datenausrichtung auf zwei Byte gestellt werden, da die Einheit zum Übertragen der Daten im Modbus Protokoll [16Bit] ist !

../../../_images/gio-modbus-client-registers-data-alignment.png

Durch doppelklicken des Datenknotens (1) wird der Parameterdialog für die Dateneinstellungen geöffnet. Der Parameter alignment (2) muss auf ‚2‘ gestellt werden. Auch im Dateneditor (3) können die Daten dann immer nur 16Bit-weise geschrieben werden.

Siehe auch

Hinweis

Bei einigen Modbus TCP Bus Kontrollern ist es nötig den Watchdog auf Serverseite abzuschalten, da ansonsten keine fehlerfreie Kommunikation mit dem GInOut Modbus TCP Client möglich ist.

Watchdog des Bus Controller B&R X20BC0087 deaktivieren

  1. cmd.exe Starten

  2. folgende Befehle eingeben:

  • telnet 192.168.100.1

  • fc6 0x1043 0xC0

  • flash store

  • quit

Watchdog des Bus Controller Beckhoff BK9100 deaktivieren

  1. Modbus TCP Client im HW-Explorer anlegen (172.16.17.1:502).

  2. Datenblock Holdingregister Adresse 4384 (0x1120) anlegen. Das ist das Register für die Watchdog Zeit [ms].

  3. GInOut-Daten für den Datenblock anlegen und den Wert ‚0‘ in das Register 4384 (0x1120) schreiben.