quote:以下是引用凡烨在2011-04-21 10:59:28的发言:
很好啊!再次感谢大家的热情参与!
今天希望大家再次思考3个问题:
1. TCP通信Done,NDR和Busy信号表示什么?
2. S7通信Done和NDR信号表示什么?
3. 为什么S7通信时功能块没有Busy信号?
提示,其实我们前面有一些讨论过,知识都是相通的,只是希望大家遇见问题举一反三,更快的解决现场问题。
确实,这几个问题都是与之前的讨论相关,譬如数据一致性等。
1、S7通信:
BSEND/BRCV:
done信号的产生:数据发送是分段的,每个分段接收方都有应用层的回复确认,最后一个分段确认之后,发送方产生一个done上升沿信号,而且一次发送只产生1个done上升沿信号。done信号表示本次通信任务结束,即数据已被成功的发送到对方的数据接收区。
USEND/URCV:
done信号的产生:数据的发送在应用层没有对方的回复确认,所以新发送任务存在覆盖上次发送数据的可能。done信号表示本次通信任务的结束,即数据已被发送到对方的接收缓存区(注意:不是对方的数据接收区),至于数据有没有从对方的缓存区读取到接收区,USEND/URCV这种机制就不管了。所以不是很靠谱啊。
PUT/GET:
done信号的产生:与BSEND/BRCV类似,也是数据被成功接收到数据接收区之后认为是本次任务的结束,产生Done上升沿信号,不同的是通信量小,不分段发送。
S7done信号的作用及使用:用done信号来保证发送数据的一致性,将done信号串到发送数据更新(赋新值)的条件中,即没来done信号之前,不允许发送数据的更新。
NDR信号:NDR信号表示数据从接收缓存读取到本方数据接收区。
OPEN IE TCP:
done及busy信号的产生:数据的传送要途径 本方发送缓存---->本方网络堆栈区---->对方网络堆栈区---->对方接收缓存;数据只要从本方发送缓存成功的压入本方网络堆栈即认为数据已发送,即产生done上升沿信号;如果后面的堆栈区包括对方接收缓存都满了,从本方发送缓存数据没有压栈成功,则产生busy信号。
NDR信号:NDR信号表示数据从接收缓存读取到本方数据接收区。
done及busy信号的使用:用于数据流量控制,避免网络堆栈区堆满。
先谈这么多,欢迎讨论啊。
管理员注:本帖已被纳入此次探讨发帖整理,请
点此详阅。