F161_MRCV

从MCU端口读取数据

使用此指令可将复合通信单元从外部设备接收的数据复制到CPU的接收缓冲区。在s_Port指定MCU的通信端口。接收缓冲区由d1_Startd2_End定义。

参数

输入

s_Port (WORD, INT, UINT)

指定数据传输到的MCU的插槽编号(高位字节)和端口号(低位字节)。

16#xx01:插槽16#xx中MCU上的COM1

16#xx02:插槽16#xx中MCU上的COM2

d1_Start (WORD, INT, UINT)

接收缓冲区的起始地址

d2_End (WORD, INT, UINT)

接收缓冲区的结束地址

标注

  • 除非已通过评估"接收完成"标志确认接收结束,否则请勿执行F161_MRCV。使用F161_MRCV轮询数据无法正确工作!可以使用IsReceptionDoneIsReceptionDoneByTimeOut函数或通过评估输入(X)标志X0X2评估“接收完成”标志。

  • 接收字节数存储在由接收缓冲区的d1_Start指定的初始地址中。如果接收数据超过由b2_End指定的结束地址,则检测到运算错误。将存储在d2_End接收到的数据。F161_MRCV还会清除接收缓冲区,复位"接收完成"标志并允许进一步接收数据。

  • F161_MRCV受所有PLC支持:如果使用合适的函数代替标志,即可创建PLC独立程序,用于处理CPU通信端口以及MCU端口的通信。不使用MCU端口的PLC根本不转化F161_MRCV指令。对于易于阅读的程序,建议使用ReadDataReadCharacters函数。

错误标志

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

  • 如果指定插槽中不存在MCU单元或应发送零字节。

  • 如果指定的通信端口不存在

sys_bIsOperationErrorNonHold(对于一次扫描变为TRUE)
  • 如果使用索引寄存器指定的区域超出限制。

  • 如果指定插槽中不存在MCU单元或应发送零字节。

  • 如果指定的通信端口不存在

示例

POU头

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

	VAR
		ReadReceivedData: BOOL:=FALSE;
		ReceiveBuffer: ARRAY [0..10] OF INT:=[11(0)];
	END_VAR

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_F,F161_MRCV!,,17,2,24,8,,?DEN?Ds_Port?Dd1_Start?Dd2_End?AENO);
B(B_VARIN,,ReadReceivedData,15,3,17,5,);
B(B_VARIN,,16#0201,15,4,17,6,);
B(B_VARIN,,ReceiveBuffer[0],15,5,17,7,);
B(B_VARIN,,ReceiveBuffer[10],15,6,17,8,);
B(B_COMMENT,,The received data of port 1 of the MCU in slot 2 are read:,2,1,32,2,);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_F,F161_MRCV!,,17,0,24,6,,?DEN?Ds_Port?Dd1_Start?Dd2_End?AENO);
B(B_VARIN,,ReadReceivedData,15,1,17,3,);
B(B_VARIN,,16#0301,15,2,17,4,);
B(B_VARIN,,ReceiveBuffer,6,4,8,6,);
B(B_F,Adr_Of_Var_I!,,10,3,17,5,,?D?C);
B(B_F,AdrLast_Of_Var_I!,,8,4,17,6,,?D?C);
L(1,0,1,6);
L(8,4,8,5);
L(8,4,10,4);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

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