Kommunikation Modbus/TCP Siemens: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „== Modbus-Client == === Baustein === {| class="wikitable" |+ !Name !Beschreibung !Version |- |MB_CLIENT |Als Modbus-TCP-Client über PROFINET kommunizieren |5…“ Markierung: visualeditor |
Keine Bearbeitungszusammenfassung Markierung: visualeditor |
||
| (Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
== Modbus-Client == | ==Modbus-Client== | ||
=== Baustein === | ===Baustein=== | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
| Zeile 19: | Zeile 19: | ||
<br /> | <br /> | ||
=== Wichtige Hinweise === | ===Wichtige Hinweise=== | ||
==== MB_Unit_ID ==== | ====MB_Unit_ID==== | ||
Im statischen Bereich in dem jeweiligen IDB gibt es eine Variable "MB_Unit_ID". | Im statischen Bereich in dem jeweiligen IDB gibt es eine Variable "MB_Unit_ID". | ||
Ihr Startwert lautet '''16#FF.''' Mit diesem Startwert funktionert aber die Kommunikation nicht. | Ihr Startwert lautet '''16#FF.''' Mit diesem Startwert funktionert aber die Kommunikation nicht. | ||
Startwert mit '''16#01''' belegen. (siehe TIA V15 Projekt EV Leverkusen) | |||
<br /> | <br /> | ||
== Modbus-Server == | ==Modbus-Server== | ||
=== Baustein === | ===Baustein=== | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
| Zeile 48: | Zeile 48: | ||
Vorgehensweise findest du gut beschrieben in der Siemens-Hilfe zu dem Baustein. | Vorgehensweise findest du gut beschrieben in der Siemens-Hilfe zu dem Baustein. | ||
===Wichtige Hinweise=== | |||
====CONNECT==== | |||
Am "CONNECT" Eingang des "MB_Server" Bausteines muss auf eine "TCON_IP_v4" Struktur in einem | |||
Datenbaustein verwiesen werden. | |||
====TCON_IP_v4==== | |||
Die TCON_IP_v4 Struktur muss wie folgt belegt werden: | |||
{| class="wikitable" | |||
|+ | |||
!Name | |||
!Datentyp | |||
!Wert | |||
!Beschreibung | |||
|- | |||
|InterfaceId | |||
|HW_Any | |||
| | |||
|Hardwarekennung der Modbus TCP Schnittstelle | |||
|- | |||
|ID | |||
|CONN_OUC | |||
|1 | |||
|Verbindungsnummer (falls mehrere Verbindungen aufgebaut werden) | |||
|- | |||
|ConnectionType | |||
|Byte | |||
|11 | |||
|Verbindungstyp (11 = TCP/IP / 19 = UDP) | |||
|- | |||
|ActiveEstablished | |||
|Bool | |||
|False | |||
|Aktiver Verbindungsaufbau (beim MB_Server immer False) | |||
|- | |||
|RemoteAddress | |||
|IP_V4 | |||
| | |||
|IP-Adresse des Modbus TCP Client | |||
|- | |||
|RemotePort | |||
|UInt | |||
|0 | |||
|Remote UDP/TCP Port | |||
|- | |||
|LocalPort | |||
|UInt | |||
|502 | |||
|Lokaler UDP/TCP Port | |||
|} | |||
===Möglichkeit 1 - Direkter Zugriff auf verschiedene Datenbereiche=== | |||
Normalerweise wird am Eingang "MB_HOLD_REG" auf einen einzigen Datenbaustein verwiesen, | |||
in welchem die Datenpunkte liegen. Es gibt aber auch die Möglichkeit auf verschiedene Datenbausteine | |||
zu verweisen (z.B. Bitsignale senden, Bitsignale empfangen usw.). Hierfür kann der "MB_HOLD_REG" einfach | |||
mit einer temporären Variable (Word) verknüpft werden, weil dieser nicht weiter berücksichtigt wird. | |||
====Datenbereiche festlegen==== | |||
Im Instanzdatenbaustein des "MB_Server" Funktionsbausteines kann man unter "Data_Area_Array" bis zu 8 | |||
Datenbereiche bzw. verschiedene Datenbausteine angeben. Dafür muss man folgende Dinge eingeben: | |||
{| class="wikitable" | |||
|+ | |||
!Name | |||
!Datentyp | |||
!Wert | |||
!Beschreibung | |||
|- | |||
|data_type | |||
|UInt | |||
|0-4 | |||
|Kennung für den Modbus Datentype (0 = Leeres Feld / 1 = Prozessabbild der Ausgänge / | |||
2 = Prozessabbild der Eingänge / 3 = Holding-Register / 4 = Input Register) | |||
|- | |||
|db | |||
|UInt | |||
|1 bis 60999 | |||
|Nummer des Datenbausteines. | |||
|- | |||
|start | |||
|UInt | |||
|0 bis 65535 | |||
|Erste Modbus - Adresse die im Datenbaustein ab 0.0 abgebildet wird. | |||
|- | |||
|length | |||
|UInt | |||
|1 bis 65535 | |||
|Anzahl der Bits / Anzahl der Werte. | |||
|} | |||
====Beispiel==== | |||
Es sollen in diesem Beispiel folgende Daten übertragen werden: | |||
*16 Befehle empfangen | |||
*16 Sollwerte empfangen | |||
*32 Meldungen senden | |||
*32 Messwerte senden | |||
Hierfür wird jeweils ein Datenbaustein (kein optimierter Zugriff) erstellt: | |||
{| class="wikitable" | |||
|+16 Befehle empfangen | |||
!Name | |||
!Offset | |||
!Datentyp | |||
|- | |||
|BIT_Input | |||
|0.0 | |||
|Array[0..15] of Bool | |||
|- | |||
|reserved | |||
|2.0 | |||
|Word | |||
|} | |||
{| class="wikitable" | |||
|+16 Sollwerte empfangen | |||
!Name | |||
!Offset | |||
!Datentyp | |||
|- | |||
|WORD_Input | |||
|0.0 | |||
|Array[0..15] of Word | |||
|- | |||
|reserved | |||
|32.0 | |||
|Word | |||
|} | |||
{| class="wikitable" | |||
|+32 Meldungen senden | |||
!Name | |||
!Offset | |||
!Datentyp | |||
|- | |||
|BIT_Output | |||
|0.0 | |||
|Array[0..31] of Bool | |||
|- | |||
|reserved | |||
|4.0 | |||
|Word | |||
|} | |||
{| class="wikitable" | |||
|+32 Messwerte senden | |||
!Name | |||
!Offset | |||
!Datentyp | |||
|- | |||
|WORD_Output | |||
|0.0 | |||
|Array[0..31] of Word | |||
|- | |||
|reserved | |||
|64.0 | |||
|Word | |||
|} | |||
[[Kategorie:Siemens Kommunikation]] | [[Kategorie:Siemens Kommunikation]] | ||
Aktuelle Version vom 17. Februar 2022, 10:20 Uhr
Modbus-Client[Bearbeiten]
Baustein[Bearbeiten]
| Name | Beschreibung | Version |
|---|---|---|
| MB_CLIENT | Als Modbus-TCP-Client über PROFINET kommunizieren | 5.0 |
Als Modbus-Client können Daten von einem Server gelesen oder geschrieben werden.
Vorgehensweise findest du gut beschrieben in der Siemens-Hilfe zu dem Baustein.
Wichtige Hinweise[Bearbeiten]
MB_Unit_ID[Bearbeiten]
Im statischen Bereich in dem jeweiligen IDB gibt es eine Variable "MB_Unit_ID".
Ihr Startwert lautet 16#FF. Mit diesem Startwert funktionert aber die Kommunikation nicht.
Startwert mit 16#01 belegen. (siehe TIA V15 Projekt EV Leverkusen)
Modbus-Server[Bearbeiten]
Baustein[Bearbeiten]
| Name | Beschreibung | Version |
|---|---|---|
| MB_Server | Als Modbus-TCP-Server über PROFINET kommunizieren | 5.0 |
Als Modbus-Server können Daten einem Client zur Verfügung gestellt werden.
Vorgehensweise findest du gut beschrieben in der Siemens-Hilfe zu dem Baustein.
Wichtige Hinweise[Bearbeiten]
CONNECT[Bearbeiten]
Am "CONNECT" Eingang des "MB_Server" Bausteines muss auf eine "TCON_IP_v4" Struktur in einem
Datenbaustein verwiesen werden.
TCON_IP_v4[Bearbeiten]
Die TCON_IP_v4 Struktur muss wie folgt belegt werden:
| Name | Datentyp | Wert | Beschreibung |
|---|---|---|---|
| InterfaceId | HW_Any | Hardwarekennung der Modbus TCP Schnittstelle | |
| ID | CONN_OUC | 1 | Verbindungsnummer (falls mehrere Verbindungen aufgebaut werden) |
| ConnectionType | Byte | 11 | Verbindungstyp (11 = TCP/IP / 19 = UDP) |
| ActiveEstablished | Bool | False | Aktiver Verbindungsaufbau (beim MB_Server immer False) |
| RemoteAddress | IP_V4 | IP-Adresse des Modbus TCP Client | |
| RemotePort | UInt | 0 | Remote UDP/TCP Port |
| LocalPort | UInt | 502 | Lokaler UDP/TCP Port |
Möglichkeit 1 - Direkter Zugriff auf verschiedene Datenbereiche[Bearbeiten]
Normalerweise wird am Eingang "MB_HOLD_REG" auf einen einzigen Datenbaustein verwiesen,
in welchem die Datenpunkte liegen. Es gibt aber auch die Möglichkeit auf verschiedene Datenbausteine
zu verweisen (z.B. Bitsignale senden, Bitsignale empfangen usw.). Hierfür kann der "MB_HOLD_REG" einfach
mit einer temporären Variable (Word) verknüpft werden, weil dieser nicht weiter berücksichtigt wird.
Datenbereiche festlegen[Bearbeiten]
Im Instanzdatenbaustein des "MB_Server" Funktionsbausteines kann man unter "Data_Area_Array" bis zu 8
Datenbereiche bzw. verschiedene Datenbausteine angeben. Dafür muss man folgende Dinge eingeben:
| Name | Datentyp | Wert | Beschreibung |
|---|---|---|---|
| data_type | UInt | 0-4 | Kennung für den Modbus Datentype (0 = Leeres Feld / 1 = Prozessabbild der Ausgänge /
2 = Prozessabbild der Eingänge / 3 = Holding-Register / 4 = Input Register) |
| db | UInt | 1 bis 60999 | Nummer des Datenbausteines. |
| start | UInt | 0 bis 65535 | Erste Modbus - Adresse die im Datenbaustein ab 0.0 abgebildet wird. |
| length | UInt | 1 bis 65535 | Anzahl der Bits / Anzahl der Werte. |
Beispiel[Bearbeiten]
Es sollen in diesem Beispiel folgende Daten übertragen werden:
- 16 Befehle empfangen
- 16 Sollwerte empfangen
- 32 Meldungen senden
- 32 Messwerte senden
Hierfür wird jeweils ein Datenbaustein (kein optimierter Zugriff) erstellt:
| Name | Offset | Datentyp |
|---|---|---|
| BIT_Input | 0.0 | Array[0..15] of Bool |
| reserved | 2.0 | Word |
| Name | Offset | Datentyp |
|---|---|---|
| WORD_Input | 0.0 | Array[0..15] of Word |
| reserved | 32.0 | Word |
| Name | Offset | Datentyp |
|---|---|---|
| BIT_Output | 0.0 | Array[0..31] of Bool |
| reserved | 4.0 | Word |
| Name | Offset | Datentyp |
|---|---|---|
| WORD_Output | 0.0 | Array[0..31] of Word |
| reserved | 64.0 | Word |