TIA Modbus TCP/IP von Server bzw. Client lesen/schreiben

SEEFighter007

Level-2
Beiträge
17
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen.

Ich habe folgenden Aufbau:
1517H-3 PN = Server
1510SP-1 PN = Client

Problem/Frage:
Gibt es eine Möglichkeit dass sowohl der Server als auch der Client Daten schreiben/lesen können?

Die Umschaltung zwischen schreiben/lesen auf der Clientseite funktioniert.
Auf der Server Seite wollte ich das mit dem Out Parameter "DR" (0=keine Daten gelesen, 1= Daten durch den Client gelesen), dies funktioniert nicht so richtig.

Ich habe es so probiert (Server):
//Schreiben
IF
#DR THEN
#PTR := #writingRegister
END_IF;

//Lesen
IF
NOT #DR THEN
#PTR := #writingRegister
END_IF;

Die einfachste Lösung wäre einfach eine seperate Verbindung anzulegen, aber eleganter wäre halt eine Verbindung.
 
Moin
Ich habe bis jetzt nur mit einem Eaton Gateway über Modbus TCP kommuniziert und dort habe ich den Mode 23 benutzt (MB_CLIENT). Mit dem Mode kannst du lesen und gleichzeitig schreiben. Ich musste nur den Client aufrufen und diesen Mode nutzen. In deinem Fall müsste es auch funktionieren. Eine Seite Server und die andere Client im Mode 23. Dann kannst du selbst sagen wie viele Wörter du lesen und schreiben willst. Die Dokumentation in TIA ist ganz hilfreich.
Wenn du den Mode 23 nutzt musst du nur den Wert 123 an den Client übergeben.
Kann in der Hilfe vom MB_Client gefunden werden (MB_MODE)
Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Danke für den Tipp, habe es jetzt anderst gelößt.
Und zwar dass ich das Hold Register einfach doppelt so groß gemacht habe und die Lese/Schreibe Daten in hintereinander verschoben habe, funktioniert so sehr gut.

Hier der Code falls es jemanden intressiert:
Client:
//Umschaltung Lesen - Schreiben
IF
#FM_Done AND "DB10 Modbus Client".RequestRead THEN
"DB10 Modbus Client".RequestRead := FALSE;
"DB10 Modbus Client".RequestWrite := TRUE;
ELSIF
#FM_Done AND "DB10 Modbus Client".RequestWrite THEN
"DB10 Modbus Client".RequestRead := TRUE;
"DB10 Modbus Client".RequestWrite := FALSE;
ELSIF
NOT "DB10 Modbus Client".RequestRead AND
NOT "DB10 Modbus Client".RequestWrite THEN
"DB10 Modbus Client".RequestRead := TRUE;
END_IF;

//Holding Register Lesen
IF "DB10 Modbus Client".RequestRead THEN
#staticMBMode := 103;
#staticMBDataAddr := 0;
#staticMBDataLength := 99;
END_IF;

//Holding Register Schreiben
IF "DB10 Modbus Client".RequestWrite THEN
#staticMBMode := 116;
#staticMBDataAddr := 0;
#staticMBDataLength := 99;
END_IF;

//Request
#staticModbusRequest := NOT #staticBusy;


U "DB10 Modbus Client".RequestRead
SPB Read
U "DB10 Modbus Client".RequestWrite
SPB Write
SPA End

//Schreiben
Write: CALL BLKMOV
blk_type:=Variant
SRCBLK :="DB11 Modbus Daten".writingRegister
RET_VAL :=#RetVal
DSTBLK :=P#DB11.DBX100.0 BYTE 50
SPA End
//Lesen
Read: CALL BLKMOV
blk_type:=Variant
SRCBLK :=P#DB11.DBX150.0 BYTE 49
RET_VAL :=#RetVal
DSTBLK :="DB11 Modbus Daten".readingRegister

End: SET

Server:
//Lesen
Read: CALL BLKMOV
blk_type:=Variant
SRCBLK :=P#DB11.DBX100.0 BYTE 50
RET_VAL :=#RetVal
DSTBLK :="DB11 Modbus Daten".readingRegister

//Schreiben
Write: CALL BLKMOV
blk_type:=Variant
SRCBLK :="DB11 Modbus Daten".writingRegister
RET_VAL :=#RetVal
DSTBLK :=P#DB11.DBX150.0 BYTE 49

CALL #MB_Server_1
DISCONNECT :="Tag_3"
NDR :="DB10 ModbusServer".AP_112_858N.NDR
DR :="DB10 ModbusServer".AP_112_858N.DR
ERROR :="DB10 ModbusServer".AP_112_858N.Error
STATUS :="DB10 ModbusServer".AP_112_858N.Status
MB_HOLD_REG :="DB11 Modbus Daten".holdingRegister
CONNECT :="DB10 ModbusServer".AP_112_858N.ConnectionParamServer

//Staus bei Fehler Speichern
UN "DB10 ModbusServer".AP_112_858N.Error
SPB Check1
L "DB10 ModbusServer".AP_112_858N.Status
T "DB10 ModbusServer".AP_112_858N.StatusByError
Check1 : SET
 
Hallo hier ist der Parameter sowie der Daten DB, bei Fragen einfach melden. :)
DB10 ModbusServer:
AP_112_858N "MB_Server_SPSn"
NDR Bool
DR Bool
Error Bool
Status Word
StatusByError Word
ConnectionFailure Bool
ConnectionParamServer TCON_IP_v4
InterfaceId HW_ANY 257 HW-identifier of IE-interface submodule
ID CONN_OUC 1 connection reference / identifier
ConnectionType Byte 11 type of connection: 11=TCP/IP, 19=UDP (17=TCP/IP)
ActiveEstablished Bool active/passive connection establishment
RemoteAddress IP_V4 remote IP address (IPv4)
ADDR Array[1..4] of Byte IPv4 address
ADDR[1] Byte 192 IPv4 address
ADDR[2] Byte 168 IPv4 address
ADDR[3] Byte 20 IPv4 address
ADDR[4] Byte 50 IPv4 address
RemotePort UInt 0 remote UDP/TCP port number
LocalPort UInt 502 local UDP/TCP port number


DB11 Modbus Daten:
AP_112_858N Struct 0.0
readingRegister Array[1..50] of Byte 0.0
writingRegister Array[1..49] of Byte 50.0
holdingRegister Array[1..199] of Byte 100.0
 
Zurück
Oben