使用超时评估“接收完成”条件
此功能块评估超时条件以检测不包含结束代码的数据流中的接收是否结束,例如:传输二进制数据时。
输入
根据PLC的类型指定通信端口:
COM端口,例如SYS_COM0_PORT
以太网端口,例如SYS_ETHERNET_USER_CONNECTION_1
MCU/SCU,例如COM01中的16#xx01(xx = 插槽编号)
在该时间之后,如果不再接收更多数据,IsDone将被设置为TRUE。
应用于接收缓冲区的起始地址。此地址包含接收到的字节数。(仅限CPU)
输出
如果已接收到一个或多个字节且接收到的字节数在TimeOutForCPU或"MCU设置"对话框中指定的时间内没有改变,将设置为TRUE。
对于CPU的通信端口,接收缓冲器的第一个字必须被应用于NoOfBytesReceived(接收的字节数)。如果接收的字节数在TimeOutForCPU指定的时间内没有改变,IsDone将变为TRUE。
针对复合通信单元和FP7,将评估"接收完成"标志。必须在PROG模式下使用[MCU设置]对话框或在RUN模式下使用F159_MWRT_PARA(仅限FP2)设置超时。
“接收完成”标志的评估
指定时间内如果没有接收到更多字节或已执行命令ClearReceiveBuffer,IsDone输出将变为TRUE。将禁止接收更多字节。F159_MTRN或ClearReceiveBuffer会将"IsDone" 标志变为FALSE。
还可以通过查看接收缓冲区的内容确定接收的结束(例如:接收的字节数)。 当正在执行扫描时,接收字节数可能会改变。例如,如果多次读取接收到的字节数,则在单次扫描中可能存在不同的状态。
所有用于编程此函数的输入和输出变量已在POU头中声明。 所有编程语言使用相同的POU头。
VAR
IsReceptionDone1: IsReceptionDoneByTimeOut;
END_VAR
VAR_EXTERNAL
g_awReceiveBuffer: ARRAY [0..10] OF WORD;
END_VAR
VAR
bIsRecDone1: BOOL:=FALSE;
wPort: WORD:=0;
END_VAR
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_FB,IsReceptionDoneByTimeOut!,IsReceptionDone1,11,1,24,6,,?BPort?BTimeOutForCPU?BNoOfBytesReceived?AIsDone);
B(B_VARIN,,wPort,9,2,11,4,);
B(B_VARIN,,T#20ms,9,3,11,5,);
B(B_VAROUT,,IsRecDone1,24,2,26,4,);
B(B_VARIN,,g_awReceiveBuffer[0],9,4,11,6,);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IsReceptionDone1(Port := wPort,
TimeOutForCPU := T#20ms,
NoOfBytesReceived := g_awReceiveBuffer[0],
IsDone => bIsRecDone1);