仅做实验记录保存,也整哈大家都看看,有什么不对的地方。
关于通讯中的KeepAlive定时器的设置,做了以下实验:
硬件:
1513PLC TCP客户端
PC TCP服务器
程序:
测试流程:
1.打开PC端网络调试助手,设置为TCP服务器,打开链接;
2.PC端打开WireShack软件,开启数据捕捉;
3.博途中打开Trace,设置观察数据;
4.博途在线 设置"TestDB".TCPtoPC.SedLEN为100,即发送的数据长度为100,置位"TestDB".TCPtoPC.CONNT,等待链接5.建立后,置位"TestDB".UDPtoPC.SedREQ开启发送;
6.发送过程中,拔掉PLC与PC链接的网线;
7.等待PLC侧判断出异常后,恢复网线;
实验1:KeepAlive设定为5秒
实验结果:
Trace图:
WireShack捕获如图
总结:
网线拔掉后,间隔11秒左右PLC侧反馈到异常,异常状态为16#80C4->16#7004->16#7002;重新插入网线后,PLC侧重新发送链接请求,连接成功后继续发送;
实验2:KeepAlive设定为10秒
实验结果:
Trace图:
WireShack捕获如图
总结:
网线拔掉后,间隔15秒左右PLC侧反馈到异常,异常状态为16#7004->16#7002;重新插入网线后,PLC侧重新发送链接请求,连接成功后继续发送;
实验3:KeepAlive设定为20秒
实验结果:
Trace图:
WireShack捕获如图
总结:
网线拔掉后,间隔25秒左右PLC侧反馈到异常,异常状态为16#7004->16#7002;重新插入网线后,PLC侧重新发送链接请求,连接成功后继续发送;
综上:
网线断连后,大概为KeepAlive+5秒后PLC反馈到异常,不知这个结论是否正确,另外为什么会有+5秒这个时间?
不是每次都会出现16#80C4故障代码,如下图在KeepAlive设定为5秒时,反复的插拔网线
实验4:KeepAlive设定为10秒,发送长度改为1000
实验结果:
Trace图:
如上图,PLC在8秒左右就检测出异常,BUSY常为1,在插上网线后BUSY为0,并产生错误信息16#80C5,如下图
WireShack捕获如图
对比试验2,得出如下结论:
网线断开后,可从两方面反馈,第一点就是KeepAlive,第二点就是StackBuffer满;满足任意条件均会输出异常。