S7-300 PLC使用CP卡做串口通信时,在硬件组态中有“防止覆盖(Prevent Overwriting)”设置,默认是勾选状态,见下图所示。
当我们不想使用“防止覆盖(Prevent Overwriting)”功能时,需先将“Buffered Receive Message Frames”设置为1后,再取消勾选“Prevent Overwriting”。下面,我们就使用“防止覆盖(Prevent Overwriting)”功能与不使用“防止覆盖(Prevent Overwriting)”功能进行功能测试。需要说明一点,根据功能要求,前提条件是CP卡接收缓冲区还没有被CPU读取(需设置接收指令FB7(P_RCV_RK)使能位EN_R=0)
1. 使用“防止覆盖(Prevent Overwriting)”功能(即按照上图进行设置):
使用调试软件发送4组数据,01 02 03/04 05 06/07 08 09/0A 0B 0C,然后使能EN_R=1,发现CPU模块能完整接收到这4组数据,接收次数是4。
结论:使用“防止覆盖(Prevent Overwriting)”功能时,所有在缓冲区中的数据帧都会依次被发送至CPU中。
2. 不使用“防止覆盖(Prevent Overwriting)”功能(“Buffered Receive Message Frames”设置为1,取消勾选“Prevent Overwriting”。):
使用调试软件发送4组数据,01 02 03/04 05 06/07 08 09/0A 0B 0C,然后使能EN_R=1,发现CPU模块只能接收消息帧01/02/03和0A/0B/0C,接收次数是2。
结论:不使用“防止覆盖(Prevent Overwriting)”功能时,所有在缓冲区中的数据帧只有第1帧和最后一帧数据会被发送至CPU中,中间数据都会被覆盖(Overwriting)掉。