通过类型及偏移量将数据写入从站
使用此指令,通过采用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,播送:0)
如果SYS_ETHERNET_USER_CONNECTION_xx应用到输入Port,则设置为1
要写入从站的数据在主站上的源地址。
从站中的目标地址类型。指定零偏移量,例如DT0或WL0。
写入数据的从站中起始地址的偏移量。由SlaveWordAddressType定义地址类型。
要发送的字(位)数。
或:
字数
针对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)。
建议使用相应的FP7指令,来代替使用此F型指令: FP_WRITE_TO_SLAVE_AREA_OFFS。
F145或F146指令只有在这两个指令均未激活时才可执行。评估程序中的"F145/F146未激活"标志以检查指令的状态。
F145指令仅请求要发送到从站的数据。实际处理发生在扫描结束时。
评估"F145/F146错误"标志以检查发送是否正常完成或有错误。
当播送时(SlaveAddress设置为0),确保仅在经过最大扫描时间后才执行发送。
如果目标地址是特殊内部寄存器(从R9000开始)、特殊数据寄存器(从DT9000/DT90000开始)或文件寄存器FL,则无法执行F145或F146指令。
如果从站或主站数据超出可用地址范围。
如果SlaveWordAddressType:偏移量¹ 0
如果通信模式未被设置为MEWTOCOL-COM主站/从站或Modbus RTU主站/从站。
如果所选的COM端口需要尚未安装的通信插件。
如果从站或主站数据超出可用地址范围。
如果SlaveWordAddressType:偏移量¹ 0
如果通信模式未被设置为MEWTOCOL-COM主站/从站或Modbus RTU主站/从站。
如果所选的COM端口需要尚未安装的通信插件。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
bBool1: BOOL:=FALSE;
bRead1: BOOL:=FALSE;
bWrite1: BOOL:=FALSE;
Bool16_OverlappingDut_1: BOOL16_OVERLAPPING_DUT;
END_VAR
VAR_EXTERNAL
Printer: WORD:=0;
END_VAR
VAR
END_VAR
系统变量sys_bPulse1s被复制到bBool1和Bool16_OverlappingDut_1.b0。如果bWrite1和sys_bIsComPort1F145F146NotActive设置为TRUE,则bBool1通过Bool16_OverlappingDut_1.b0被写入从站2的输出Y38。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_CONTACT,,sys_bPulse1s,3,1,5,3,);
B(B_COIL,,bBool1,15,1,17,3,);
L(5,2,15,2);
L(1,2,3,2);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_CONTACT,,bBool1,3,1,5,3,);
B(B_COIL,,Bool16_OverlappingDut_1.b0,15,1,17,3,);
L(5,2,15,2);
L(1,2,3,2);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 13 ;
NETWORK_BODY
B(B_CONTACT,,sys_bIsComPort1F145F146NotActive,8,1,10,3,);
B(B_CONTACT,,bWrite1,18,1,20,3,);
B(B_COIL,,bRead1,46,1,48,3,S);
B(B_VARIN,,2,23,3,25,5,);
B(B_VARIN,,Bool16_OverlappingDut_1.w0,23,4,25,6,);
B(B_VARIN,,WY0,23,5,25,7,);
B(B_VARIN,,3,23,6,25,8,);
B(B_VARIN,,16#8800,23,7,25,9,);
B(B_F,F145_WRITE_DATA_TYPE_OFFS!,Instance,25,0,40,9,,?DEN?DPort?DSlaveAddress?DMasterWordData?DSlaveWordAddressType?DSlaveWordAddressOffs?DNumberOfWords_BitsInWords?AENO);
B(B_VARIN,,SYS_COM1_PORT,23,2,25,4,);
B(B_COIL,,bWrite1,42,1,44,3,E);
L(1,2,8,2);
L(10,2,18,2);
L(20,2,25,2);
L(44,2,46,2);
L(40,2,42,2);
L(1,0,1,13);
END_NETWORK_BODY
END_NET_WORK
END_BODY
bBool1 := sys_bPulse1s;
Bool16_OverlappingDut_1.b0 := bBool1;
if (bWrite1 and sys_bIsComPort1F145F146NotActive) then
F145_WRITE_DATA_TYPE_OFFS(Port := SYS_COM1_PORT,
SlaveAddress := 2,
MasterWordData := Bool16_OverlappingDut_1.w0,
SlaveWordAddressType := WY0,
SlaveWordAddressOffs := 3,
NumberOfWords_BitsInWords := 16#8800);
bRead1 := true;
bWrite1 := false;
end_if;