通信传输中如错位接收,能否倒着往前接收想要的位的地址?

分享到:
189
下一篇 >

菜鸟提问:

现有个问题,已在测试待解决中。

情景:一台仪器和200的PLC用PORT0口自由通信,用中断处理,每隔15分钟接收一组数据(共23个字符,无起始、终止校验符),16#9给SMB30。

问题:正常情况下每次能接收到23个字符,按VB1101~VB1123的地址来接收对应字符,实际取VB1113~VB1117来报数值。当接收少X个字符时,对应位置VB1113~VB1117的数据也要依次往前取X位,也就是VB(1113-X)~VB(1117-X)的数值才是需要的数据。如何实现这种功能呢?

大虾:

怎么会少X个字符呢?

菜鸟:

我也不清楚为什么有的时候会少接1个字符,按理说用中断应该不会出错的,但偏偏还是有的时候少接1个或几个的情况出现。

和仪器方沟通就是建议我从后往前推找那5个数据,早上刚试了下,原本是要取VB1113~VB1117的数据,假如只中断22次也就是只接收22个字符,我用比较法再BMB VB1112 5 VB2000的方法小试下,好像还行,但方法比较笨,后面我还要多测试下。

还有没有什么其它方法可以实现的?

不是说通信不可能100%完全正确吗?

现在我有点信了!

大虾:

对。不可的能100%正确。但是可以保证纠错之后100%正确。如果对方设备没有纠错能力没有重发能力,就只能这样了。

为何要用中断接收,而不使用接收指令空闲时间开始接收?

再说,你能不能从*后一个接收到的字符往前倒数呢?

再再说,你能确定中间不会丢失一个吗?当然如果对方设备没有校验功能的话神仙也没有办法的。

酱油甲:

出错的可能性是存在的,也是必须面对的。

但我感觉楼主的协议就不够严谨。

酱油乙:

没有校验的数据是不可信的。实际项目中,通讯成功的比例也是有限的。

比如成功率60%,但是一点儿也不影响数据的正常使用!原因是校验码的存在,错误数据被剔除。       

楼主的工作不是找哪里错了,而是需要数据校验码!

菜鸟:

指令空闲时接收就不会有问题吗?

以前用的就是空闲时接收,有段时间是好的,后面又经常接收错误,所以现在就用这种方式来接收!

但是现在偶尔会出现当没有连接设备通信时,会有大数据出现在我需要的显示位上,并且一直没有消失,当连接设备并且接收1次数据后,就不会有这种情况出现!

酱油丙:

没有解决吗。你在接收区填充满一个不可能的字节值。接收后,可以从后往前找一个非上述值的字符,然后向前截取你要的数量。

酱油丁:

如果中间丢了Xbit,那么整个接收的数据帧都可以说是错误的。
 至于芳季所说,我觉得对于字节来区分说可以实现,但对于bit来说就不可能了。

你可能感兴趣: 工控菜鸟园 自动化系统 SIMATIC S7-200 PLC 仪器
无觅相关文章插件,快速提升流量