quote:以下是引用凡烨在2011-04-20 09:22:54的发言:quote:以下是引用四书五经在2011-04-19 23:10:21的发言:quote:以下是引用凡烨在2011-04-19 10:08:08的发言:
好,真的感谢大家的积极参与!同时也感觉到大家的技术水平都很高,让我有些力不从心啊!
这里,我再给大家提出一个问题,就是CP板和PN CPU的接口属性中有一个属性,即Keepalive,大家知道它是干什么的?能在我们的那些应用中起到作用?
前面我们已经谈到了它其中的一个应用,这里暂不挑明。
再次谢谢大家!
KEEP ALIVE如同一个心跳信号,TCP通讯的一端发送这个心跳信号来判断TCP连接是否正常。前面讲到TCP通讯时网线断了再恢复的时候会收到旧的数据。这时如果把KEEP ALIVE超时时间设的小一些,当网线断了的时候就会在短时间内判断出TCP连接出错,并且TCP协议会自动关闭连接。当网线恢复正常时,TCP连接会重新建立,重新发送、接收数据,这样就不会收到旧的数据了。呵呵,TCP能够自己干的很好的事,干吗再去调用AG_CTRL判断呢!
不知道理解的对不对,谢谢技术支持!
您和火麒麟的推论都正确!
这里我再和大家谈一下动态连接的概念,动态连接顾名思义就是资源可以动态的建立和释放。使用Open IE的方式与NetPro IE的方式不同就是资源的动静上。Keepalive的作用有两个,一个是检测通信伙伴的生死状态,根据伙伴的状态自己作出判断处理;另一个功能就是维持通信连接信息当双方的网络活动处于休眠状态,例如伙伴通信通过防火墙,通过两者的Keeplalive防火墙维持其链接。
我们这里谈到的Keepalive指的是第一个功能,当定时时间到,默认30秒,PLC会自动释放自己的任务资源,连接资源并没有释放,(这里的2个资源是通信资源的两个要素),任务资源的释放表现在清空了Shadow buffer和ISO/OSI堆栈的TCP的Window Size缓冲区里的数据。这样就不会收到新的数据。这里的Shadow buffer是与DB大小对应一致的。连接资源并没有释放,因为此时的PLC的在线连接还能看到该连接数。
由于该连接已经断开,因此该连接资源处于Passive状态,若此时加入一个新的伙伴可以使用该任务资源进行连接。