226 CPU与第三方仪表通讯,开始用9600波特率通讯时,仪表返回的数开始几个字节都是错误的,但有时所有接到的字节都正确的,每秒轮询一次仪表,超时时间为500MS。后来我把波特率都给提高了,发现接到的错误率低了,现在通讯的波特率是57600(仪表已是最高了)虽然大部分接收的都正确,但是还是有错误,这个问题已经困扰我好几天了,所有想到的都试了,还是没有解决。请大神们帮着分析下是什么原因呢!
仪表通过串口调试助手试过最高速率设置为200MS发送,返回的没有错误,如果在低的话有时会返回错误字节!
请大神帮助!
问题是给仪表多发了一位!谢谢大家的热心帮助!
---------波特率不正确是收不到正确字符的。
如果在多种波特率下均可收到正确字符,对方要有侦测波特率的机制,一般仪表是很难做到的。
你把通讯双方的参考地连起,看看错误是否会消除?
试着调整RCV、XMT这2个指令所在网络段在整个程序中的位置,或许可以解决问题。
可能是一些较为隐含的时序不合理造成个别出错。具体很难说,好像有些中断出现在很接近end指令的时候出错机会会大减,而中断出现在程序开始位置时,出错机会会很大。这是不同流程之间不同步引出的必须的同步问题。
----------我想楼主还有一个事没说:串口除了波特率,还有校验位和停止位,也是可变化的。
---------控制没处理好吧
--------谢谢你的帮助,我按照你的方法把所有仪表的通讯口的GND与PLC通讯口的GND连在一起了,还是没有解决问题。
数据位,校验位,停止位我也试了,如果不一样的话是通讯不上的。
还有一个不解的是SMW190的设置是怎么使用,我现在将此设置为0,就可以通讯,但是我设置为其它值,就通讯不上了。我将SMB187.4设置为0忽略空闲检测时间也是不行.
发送的信息在发送正在进行中,你去修改内容,那么这段信息整段都是废的了。等同于书本印刷折页,一页纸中一半是第三页一半是第四页。不知道你有没有注意这些事情。然而,通讯是纯硬件的工作,只要执行了发送指令,就再与软件无关(指本次发送),你的软件可以毫无顾忌地修改什么。如果修改发生在发送完成之后,那么这次的发送没有问题。如果修改碰上在没有发送完成的时候,那么摊上事了。
这样的错误,当波特率很高的时候,对的机会就大。因为利用速度躲过了很多次出错的机会,可以有数量更多的通讯次数没有碰上错误。从而认为通讯较正常。但是波特率低的话,每次都碰上出错,结果没有一次正常了,一帧的数据不是头遇到错误就是尾遇到错误。
---------谢谢大神们的帮助,问题找到了,是我给仪表多发了一位,十分感谢大家的解答!太不细心了,范了一个这么一个低级错误!希望下次有机会还会大家一起讨论学习共同提升!
------- 仪表是可以设置波特率的,不需要自动侦测。
--------正常来说,波特率越低,错误的概率应该就越低,你这个怎么是恰恰相反了。
也可能是不是接收开始条件设置的有问题??
而且通信接收的字节需要检验过后使用的,校验不过去就直接忽略了
----------把仪表和PLC都换下试试,是不是通讯部件存在问题?
-------波特率是假象
如果自己对自由口指令理解不深,那就用官方MODBUS库做。
是仪表问题 还是接线问题?还是你程序问题? 现场调试 你头都能搞大。
欢迎光临 工控编程吧 (https://www.gkbc8.com/) | Powered by Discuz! X3.4 |