F146_READ_DATA_TYPE_OFFS

通过类型和偏移量从从站读取数据

使用此指令,通过采用MEWTOCOL-COM或Modbus RTU协议的通信端口,如所用端口的系统寄存器中所定义,从从站请求数据。对于使用Modbus协议的数据发送,编译器会基于Modbus参考编号生成Modbus命令。

参数

输入

Port (WORD, INT, UINT)

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

  • COM端口,例如SYS_COM0_PORT

  • 以太网端口,例如SYS_ETHERNET_USER_CONNECTION_1

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

SlaveAddress (WORD, INT, UINT)

从站的站号MEWTOCOL:1–99,MODBUS:1–255),播送:0)

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

SlaveWordAddressType (WORD, INT, UINT)

从站中的目标地址类型。指定零偏移量,例如DT0WL0

SlaveWordAddressOffs (WORD, INT, UINT)

读取数据的从站中起始地址的偏移量。由SlaveWordAddressType定义地址类型。

NumberOfWords_BitsInWords (WORD, INT, UINT)

要发送的字(位)数。

或:

  • 字数

    针对Modbus RTU16#001–16#07F

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

或:

  • 位传输控制字:16#8T0F,在主站中T是“to bit”,在从站中F是“from bit”(不适用于FP7)。

输出

MasterWordData (ANY)

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

标注

  • 建议使用相应的FP7指令,来代替使用此F型指令:FP_READ_FROM_SLAVE_AREA_OFFS

  • F145F146指令只有在这两个指令均未激活时才可执行。评估程序中的"F145/F146未激活"标志以检查指令的状态。

  • 评估"F145/F146错误"标志以检查发送是否正常完成或有错误。

  • 如果目标地址是特殊内部寄存器(从R9000开始)、特殊数据寄存器(从DT9000/DT90000开始)或文件寄存器FL,则无法执行F145F146指令。

错误标志

sys_bIsOperationErrorHold(变为TRUE并保持为TRUE)

  • 如果从站或主站数据超出可用地址范围。
  • 如果SlaveWordAddressType:偏移量¹ 0

  • 如果通信模式未被设置为MEWTOCOL-COM主站/从站或Modbus RTU主站/从站。
  • 如果所选的COM端口需要尚未安装的通信插件。
sys_bIsOperationErrorNonHold(对于一次扫描变为TRUE)

  • 如果从站或主站数据超出可用地址范围。
  • 如果SlaveWordAddressType:偏移量¹ 0

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

示例

POU头

所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。

	VAR
		bBool2: BOOL:=FALSE;
		bRead1: BOOL:=FALSE;
		bWrite2: BOOL:=FALSE;
		Bool16_OverlappingDut_1: BOOL16_OVERLAPPING_DUT;
	END_VAR

POU本体

如果bRead1sys_bIsComPort1F145F146NotActive设置为TRUE,则从站2的输出Y38被读取和写入Bool16_OverlappingDut_1.w0的位1。此位可由Bool16_OverlappingDut_1.b1访问并被复制到bBool2

LD本体

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_CONTACT,,bRead1,3,1,5,3,);
B(B_CONTACT,,sys_bIsComPort1F145F146NotActive,12,1,14,3,);
B(B_COIL,,bWrite2,45,1,47,3,S);
B(B_VARIN,,2,22,3,24,5,);
B(B_VARIN,,WY0,22,4,24,6,);
B(B_VARIN,,3,22,5,24,7,);
B(B_VARIN,,SYS_COM1_PORT,22,2,24,4,);
B(B_COIL,,bRead1,41,1,43,3,E);
B(B_F,F146_READ_DATA_TYPE_OFFS!,Instance,24,0,39,8,,?DEN?DPort?DSlaveAddress?DSlaveWordAddressType?DSlaveWordAddressOffs?DNumberOfWords_BitsInWords?AENO?CMasterWordData);
B(B_VARIN,,16#8108,22,6,24,8,);
B(B_VAROUT,,Bool16_OverlappingDut_1.w0,39,2,41,4,);
L(1,2,3,2);
L(5,2,12,2);
L(43,2,45,2);
L(14,2,24,2);
L(39,2,41,2);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_CONTACT,,Bool16_OverlappingDut_1.b1,8,1,10,3,);
B(B_COIL,,bBool2,20,1,22,3,);
L(10,2,20,2);
L(1,2,8,2);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

if (bRead1 and sys_bIsComPort1F145F146NotActive) then
    F146_READ_DATA_TYPE_OFFS(Port := SYS_COM1_PORT, 
                                SlaveAddress := 2, 
                                SlaveWordAddressType := WY0, 
                                SlaveWordAddressOffs := 3, 
                                NumberOfWords_BitsInWords := 16#8108, 
                                MasterWordData => Bool16_OverlappingDut_1.w0);
end_if;
bBool2 := Bool16_OverlappingDut_1.b1;

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