QQ登录

只需一步,快速开始

与仪表自由通讯问题!

[ 复制链接 ]
与仪表自由通讯问题!

226 CPU与第三方仪表通讯,开始用9600波特率通讯时,仪表返回的数开始几个字节都是错误的,但有时所有接到的字节都正确的,每秒轮询一次仪表,超时时间为500MS。后来我把波特率都给提高了,发现接到的错误率低了,现在通讯的波特率是57600(仪表已是最高了)虽然大部分接收的都正确,但是还是有错误,这个问题已经困扰我好几天了,所有想到的都试了,还是没有解决。请大神们帮着分析下是什么原因呢!

仪表通过串口调试助手试过最高速率设置为200MS发送,返回的没有错误,如果在低的话有时会返回错误字节!

请大神帮助!

问题是给仪表多发了一位!谢谢大家的热心帮助!


---------波特率不正确是收不到正确字符的。

如果在多种波特率下均可收到正确字符,对方要有侦测波特率的机制,一般仪表是很难做到的。


你把通讯双方的参考地连起,看看错误是否会消除?




---------- 一般老说,如果你的程序写得正确合理,波特率低出现错误的机率小,而你的情况恰恰相反,只能说你的程序写得不够合理。

试着调整RCV、XMT这2个指令所在网络段在整个程序中的位置,或许可以解决问题。



--------啊,抱歉,仪表是可以设置波特率的,不需要自动侦测。




--------也有二楼的感觉。

可能是一些较为隐含的时序不合理造成个别出错。具体很难说,好像有些中断出现在很接近end指令的时候出错机会会大减,而中断出现在程序开始位置时,出错机会会很大。这是不同流程之间不同步引出的必须的同步问题。


----------我想楼主还有一个事没说:串口除了波特率,还有校验位和停止位,也是可变化的。


---------控制没处理好吧



--------谢谢你的帮助,我按照你的方法把所有仪表的通讯口的GND与PLC通讯口的GND连在一起了,还是没有解决问题。

数据位,校验位,停止位我也试了,如果不一样的话是通讯不上的。



--------XMT 我写在子程序中,是从主程序中每秒轮询式调用,将RCV写在发送中断里的(26)并在此将SMB187赋值为16#9C,在接收中断(24)将SMB187赋值0并做的接收数据处理,我感觉这样应该可以的!

还有一个不解的是SMW190的设置是怎么使用,我现在将此设置为0,就可以通讯,但是我设置为其它值,就通讯不上了。我将SMB187.4设置为0忽略空闲检测时间也是不行.



--------- 这种问题怎么来试验呢?有好的方法吗?这个问题已经困惑我好几天了!


--------试了,不行还是有错误!


--------无法具体地告诉你怎么处理。只能提醒你个别原因,引申到其他情况靠你想象了。

发送的信息在发送正在进行中,你去修改内容,那么这段信息整段都是废的了。等同于书本印刷折页,一页纸中一半是第三页一半是第四页。不知道你有没有注意这些事情。然而,通讯是纯硬件的工作,只要执行了发送指令,就再与软件无关(指本次发送),你的软件可以毫无顾忌地修改什么。如果修改发生在发送完成之后,那么这次的发送没有问题。如果修改碰上在没有发送完成的时候,那么摊上事了。

这样的错误,当波特率很高的时候,对的机会就大。因为利用速度躲过了很多次出错的机会,可以有数量更多的通讯次数没有碰上错误。从而认为通讯较正常。但是波特率低的话,每次都碰上出错,结果没有一次正常了,一帧的数据不是头遇到错误就是尾遇到错误。


---------谢谢大神们的帮助,问题找到了,是我给仪表多发了一位,十分感谢大家的解答!太不细心了,范了一个这么一个低级错误!希望下次有机会还会大家一起讨论学习共同提升!


------- 仪表是可以设置波特率的,不需要自动侦测。


--------正常来说,波特率越低,错误的概率应该就越低,你这个怎么是恰恰相反了。

也可能是不是接收开始条件设置的有问题??

而且通信接收的字节需要检验过后使用的,校验不过去就直接忽略了


----------把仪表和PLC都换下试试,是不是通讯部件存在问题?


-------波特率是假象

如果自己对自由口指令理解不深,那就用官方MODBUS库做。


是仪表问题 还是接线问题?还是你程序问题?  现场调试 你头都能搞大。




回复

使用道具 举报

快速回复 返回列表 客服中心 搜索