西门子1214C做客户端,做modbusTCP通讯,读取两台从站设备数据(两台从站为RTU,使用一个Modbus TCP网关)。
1. 参考modbusTCP通讯案例,
两个从站调用两个 MB_CLIENT,背景数据块使用同一个,ID 、 端口、数据地址长度等切换,
通讯一直报7004,8200。
各种数据地址等修改查找,还是没找到原因。
具体见附图。



2. 又直接使用通讯案例里面的SCL程序(如下),也是没有解决。
CASE #statStep OF
0:
IF #instClient.Connected
THEN
#statStep := 1;
END_IF;
1:
#statConn.RemotePort := 23;
#instClient.MB_Unit_ID := 2;
#statReq := TRUE;
#statMode := 0;
#statAddr := "DB_Set".add1;
#statLen := 4;
IF
#instClient.DONE
THEN
#statRead1 := #statPtr;
#statReq := FALSE;
#statStep := 2;
END_IF;
IF #instClient.ERROR
THEN
#statReq := FALSE;
#statStep := 2;
END_IF;
IF NOT #instClient.Connected
THEN
#statStep := 0;
END_IF;
2:
#statConn.RemotePort := 26;
#instClient.MB_Unit_ID := 1;
#statReq := TRUE;
#statMode := 0;
#statAddr := "DB_Set".add2;
#statLen := 4;
IF #instClient.DONE
THEN
#statRead2 := #statPtr;
#statReq := FALSE;
#statStep := 1;
END_IF;
IF #instClient.ERROR
THEN
#statReq := FALSE;
#statStep := 1;
END_IF;
IF NOT #instClient.Connected
THEN
#statStep := 0;
END_IF;
ELSE
;
END_CASE;
//通信指令
#instClient(REQ := #statReq,
DISCONNECT := FALSE,
MB_MODE := #statMode,
MB_DATA_ADDR := #statAddr,
MB_DATA_LEN := #statLen,
MB_DATA_PTR := #statPtr,
CONNECT := #statConn);
3.期间只连一台时,偶尔读到过一次数据,但是数据不刷新。
4. 使用Modbus Poll,读取两个从站数据正常。