恭喜,你发布的帖子
发布于 2023-10-18 10:37:18
1楼
下面是SCL程序,我觉得它只是流程,并不能通信呀。
难道是它的背景数据块里的MB_Client和TCON_IP_v4与外围设备进行Modbus TCP通信?
---------------------------------------------------------
CASE #statStep OF
0:
//如果连接成功,则跳转到步骤 1
IF #instClient.Connected
THEN
#statStep := 1;
END_IF;
1:
(*触发读命令,设置读参数
设置 MB_UNIT_ID 为 1
如果完成或错误则跳转到步骤 2
如果 TCP 通信中断跳转到步骤 0*)
#statReq := TRUE;
#statMode := 0;
#statAddr := 40001;
#statLen := 2;
#instClient.MB_Unit_ID := 1;
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:
(*触发读命令,设置读参数
设置 MB_UNIT_ID 为 2
如果完成或错误则跳转到步骤 1
如果 TCP 通信中断跳转到步骤 0*)
#statReq := TRUE;
#statMode := 0;
#statAddr := 40001;
#statLen := 2;
#instClient.MB_Unit_ID := 2;
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);
请填写推广理由:
分享
只看
楼主