将数据写入带有偏移量的从站
使用此指令,通过采用MEWTOCOL-COM或Modbus RTU协议的通信端口,将主站写入从站或站读取数据(如所用端口的系统寄存器中所定义)。 确保对主站和从站设置相同的协议。 主站和从站必须具有匹配的内存区。
对于使用Modbus协议的数据发送,编译器会基于Modbus参考编号生成Modbus命令。输入
根据PLC的类型指定通信端口:
COM端口,例如SYS_COM0_PORT
以太网端口,例如SYS_ETHERNET_USER_CONNECTION_1
MCU/SCU,例如COM01中的16#xx01 (xx = 插槽编号)
从站的站号(MEWTOCOL:1–99,MODBUS:1-255)
如果SYS_ETHERNET_USER_CONNECTION_xx应用到输入Port,则设置为1
要写入从站的数据的主站单元上的字区域或寄存器。
要发送的字(位)数。
或:
字数
针对Modbus RTU:16#001–16#07F
针对MEWTOCOL-COM:16#001–16#1FD或16#001–16#1B(FP0, FP-e)
或:
位传输控制字:16#8T0F,在主站中T是“to bit”,在从站中F是“from bit”(不适用于FP7)。
存储数据的从站上的内存区(目标 = SlaveMemoryArea + SlaveMemoryOffset)。
从站中存储数据的内存区的偏移量(目标 = SlaveMemoryArea + SlaveMemoryOffset)。
输出
0:正常完成
1:通信端口用于主站通信
2:通信端口用于从站通信
3:已超过可同时使用的最大主站通信指令数
4:发送超时
5:响应接收超时
6:接收数据错误
发送过程中:主站通信发送标志为TRUE
发送完成后:主站通信发送标志为FALSE
正常完成:FALSE
异常完成:TRUE
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
bSetParameters: BOOL:=FALSE;
wWriteToSlaveResult: WORD:=0;
(*result of write to slave instruction*)
iSlaveStationNumber: INT:=0;
(*slave station number*)
arrParameters: ARRAY [0..15] OF DINT;
(*Array of parameters to be send to slave station*)
iSlaveMemoryOffset: INT:=100;
bBool: BOOL:=FALSE;
END_VAR
VAR CONSTANT
iSlaveMemoryArea_Bool: INT:=10000;
(*memory Area in slave station*)
iSlaveMemoryArea_Word: INT:=5;
(*memory Area in slave station*)
END_VAR
VAR
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_VARIN,,SYS_COM1_PORT,18,2,20,4,);
B(B_VARIN,,iSlaveStationNumber,18,3,20,5,);
B(B_VARIN,,arrParameters,11,4,13,6,);
B(B_CONTACT,,bSetParameters,4,1,6,3,);
B(B_VAROUT,,wWriteToSlaveResult,36,2,38,4,);
B(B_F,Size_Of_Var!,,13,5,20,7,,?D?C);
B(B_F,FP_WRITE_TO_SLAVE_AREA_OFFS!,,20,0,36,9,,?DEN?DnPort?DStationNumber?DSource?DWords_Bits?HSlaveMemoryArea?DSlaveMemoryOffset?AENO?CResult);
B(B_VARIN,,SYS_MEMORY_AREA_DT,18,6,20,8,);
B(B_VARIN,,iSlaveMemoryOffset,18,7,20,9,);
L(13,5,13,6);
L(1,2,4,2);
L(13,5,20,5);
L(6,2,20,2);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bSetParameters) then
FP_WRITE_TO_SLAVE_AREA_OFFS(Port := SYS_COM1_PORT,
StationNumber := iSlaveStationNumber,
Source := arrParameters[0],
Words_Bits := Size_Of_Var(arrParameters[0]),
SlaveMemoryArea := SYS_MEMORY_AREA_DT,
SlaveMemoryOffset := iSlaveMemoryOffset,
Result => wWriteToSlaveResult);
end_if;