FP_WRITE_TO_SLAVE_AREA_OFFS

将数据写入带有偏移量的从站

使用此指令,通过采用MEWTOCOL-COM或Modbus RTU协议的通信端口,将主站写入从站或站读取数据(如所用端口的系统寄存器中所定义)。 确保对主站和从站设置相同的协议。 主站和从站必须具有匹配的内存区。

对于使用Modbus协议的数据发送,编译器会基于Modbus参考编号生成Modbus命令。

参数

输入

Port (INT)

根据PLC的类型指定通信端口:

  • COM端口,例如SYS_COM0_PORT

  • 以太网端口,例如SYS_ETHERNET_USER_CONNECTION_1

  • MCU/SCU,例如COM01中的16#xx01 (xx = 插槽编号)

StationNumber (WORD, INT, UINT)

从站的站号MEWTOCOL:1–99,MODBUS:1-247)

如果SYS_ETHERNET_USER_CONNECTION_xx应用到输入Port,则设置为1

Source (WORD, INT, UINT)

要写入从站的数据的主站单元上的字区域或寄存器。

Words_Bits (WORD, INT, UINT)

要发送的字(位)数。

或:

  • 字数

    针对Modbus RTU16#001–16#07F

    针对MEWTOCOL-COM16#001–16#1FD16#001–16#1BFP0, FP-e

或:

  • 位传输控制字:16#8T0FT表示向主站传输位,F表示向从站传输位(不适用于FP7)。

SlaveMemoryArea (WORD, INT, UINT)

存储数据的从站上的内存区(目标 = SlaveMemoryArea + SlaveMemoryOffset)。

内存区类型

系统变量

内部继电器

SYS_MEMORY_AREA_R

链接继电器

SYS_MEMORY_AREA_L

外部输入

SYS_MEMORY_AREA_X

外部输出

SYS_MEMORY_AREA_Y

内部继电器

SYS_MEMORY_AREA_WR

定时器/计数器设置值

SYS_MEMORY_AREA_SV

定时器/计数器经过值

SYS_MEMORY_AREA_EV

数据寄存器

SYS_MEMORY_AREA_DT

链接继电器

SYS_MEMORY_AREA_WL

链接数据寄存器

SYS_MEMORY_AREA_LD

文件寄存器

SYS_MEMORY_AREA_FL

输入寄存器

SYS_MEMORY_AREA_WX

输出寄存器

SYS_MEMORY_AREA_WY

SlaveMemoryOffset (WORD, INT, UINT)

从站中存储数据的内存区的偏移量(目标 = SlaveMemoryArea + SlaveMemoryOffset)。

输出

Result (WORD, INT, UINT)

仅对于FP7 如需查看所有错误代码的说明,请参阅Modbus/MEWTOCOL通信错误代码表。

对于其他PLC:设置为0

时间图

  1.  (1) 主站通信清除–发送标志,例如sys_bIsEthernetUserConnection1MasterCommunication
  2.  (2) 确认主站通信清除–发送标志为TRUE且主站通信发送标志为FALSE
  3.  (3) 主站通信发送标志,例如sys_bIsEthernetUserConnection1MasterCommunicationActive

    发送过程中主站通信发送标志TRUE

    发送完成后主站通信发送标志FALSE

  4.  (4) 执行此指令
  5.  (5) 主站通信发送完成标志,例如sys_bIsEthernetUserConnection1CommunicationError

    正常完成FALSE

    异常完成TRUE

  6.  (6) 发送数据
  7.  (7) 处理收到的响应

错误标志

sys_bIsOperationErrorHold(变为TRUE并保持为TRUE)
  • 如果使用索引寄存器指定的区域超出限制。

  • 如果从站或主站数据超出可用地址范围。
  • 如果由Words_Bits指定的发送数据量错误。

  • 如果通信模式未被设置为MEWTOCOL-COM主站/从站或Modbus RTU主站/从站。
  • 如果所选的COM端口需要尚未安装的通信插件。
sys_bIsOperationErrorNonHold(对于一次扫描变为TRUE)
  • 如果使用索引寄存器指定的区域超出限制。

  • 如果从站或主站数据超出可用地址范围。
  • 如果由Words_Bits指定的发送数据量错误。

  • 如果通信模式未被设置为MEWTOCOL-COM主站/从站或Modbus RTU主站/从站。
  • 如果所选的COM端口需要尚未安装的通信插件。

示例

POU头

所有用于编程此函数的输入和输出变量已在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

POU本体

LD本体

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

ST本体

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;

最后更新日期: 2025-01-10此页面上的反馈松下热线