在使用SMB2的条件下接受数据计算数据长度

rt,打算用smb2的中断来做一个接受数据的物理抽象层,比如:协议层我们不知道,我们只是用PLC200来接受数据,放入一段存储区VB100作为起始地址.当我们物理抽象层接收到协议层发过来的发送数据请求时,我们用XMT来发送数据,发送完成后使得“允许接收数据使能位”置1,这个时候我们开始接收数据,并且中断8产生一次就使得累加器加1,如果超过一段时间未产生中断,则认为接收结束,计数器清零。
        这样的话就可以计算出我们接收了多少字节的数据,并且还能通知上面的协议层已经完成接收数据。好了,我的疑问是:
1:会不会使得通讯效率狠滴,波特率9600的情况下,会不会丢失数据?
2:会不会是程序产生崩溃?
3:如果用rcv的话,我们不知道协议,所以只能设置SMW90和SMW92,比如我设置的是5ms和100ms,那么如何计算这个一次rcv我接收了多少字节的数据?我个认为这个应该计算不出来,在不知道协议的情况下的话。

问题补充:
感谢一楼大侠的回复,首先按照你说的那样计算的话,对程序是不好,我们都知道,就是PLC会很累,不利于整个系统。我想到了RCV接收数据的起始地址,比如VB100,数据是从VB101开始存储的,那我直接读取VB100的值不就是得到我接收多少数据了么?但没有协议的前提下,rcv又是怎么识别那些是传输的数据呢?
没有协议的前提下理论上我们也是可以接收数据的,只不过接收的是什么数据我们不知道,数据格式等等都是协议的内容了。

最佳答案

呵呵,这个问题挺熟悉的。RCV指令,比如说TBL引脚VB100。接收完成时,VB100的值就是接收字符的个数。

提问者对于答案的评价:
嗯,是的,我把RCV的TBL和XMT的TBL混淆了,另外感谢西门子技术支持!!

专家置评

已阅,最佳答案正确。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc296076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月31日
下一篇 2020年10月31日

相关推荐