串⼝通信(232、485、422)常见问题及解决
对于串⼝,理想的情况下,⼀般只要⼀上电,不需要太多的操作和配置,就可以通信上。但是现实不会那么美好,总会出现各种各样的问题,这⾥并不对串⼝的编程作讲解,主要是从应⽤的⾓度去讲⼀讲碰到的⼀些问题。ARM嵌⼊式,提供开发板、主板、核⼼板等ARM硬件产品和解决⽅案。
1、电脑使⽤USB转串⼝可以和设备通信上,换成屏与设备就通信不上了:
①有可能电脑USB转串⼝接到设备上,使⽤的是标准串⼝功能,也就是除了RX,TX,GDN外,还使⽤了其它引脚。⽐如像欧姆龙PLC,三菱PLC,在实际与屏的通信中,就需要接某些引脚短接的情况。
②电脑与控制器或PLC通信时,是扫描波特率参数,⾃适应的,屏通信可能参数没有设备好。在三菱,基恩⼠等PLC,就存在变化波特率进⾏通信交互的过程。
③也有可能是接线⽅式不对。因为有些DB9,还需要公头,母头。如果不注意的话,也会存在把TX接到TX上,把RX接到RX上,这样需要注意的地⽅。
④在这⾥补充⼀下,有时候可能会使⽤⼀些串⼝助⼿发送测试数据与控制器通信,有些串⼝助⼿的奇偶校验是不起作⽤,这个要提醒⼀下。
2、在A家的屏可以和设备通信,换成B家的屏就通信不上了:
①⾸先确认⼀下接线是否正确了,RX和TX是否兼容。
②地线是否没有接。
③除了RX,TX,GND,是否还有其它引脚需要短接的。
④通信协议是否⼀致或不完善,波特率是否⼀样。
3、以前不接地线可以通信,换个设备为什么需要接地线了:
这个问题和上⼀个有类似的。因为有些设备使⽤了隔离电源。以前不接地可以通信,有可能是地线已经在另外⼀个环路已经共地了,实际地线已经接了,所以才可以通信。可能换了个带隔离电源的,两个设备的地是隔离的,就需要在串⼝上把地线接起来。这个我是⾃⾝经历过的,有个客户⽼说他的设备通信不上,后来拍个照我给我,他地线没有接,他说以前不接地线可以通信的。于是我就给他科普了⼀下。
4、⼀个设备是232,另⼀个设备是422,没有转换设备,怎么办(232与422互转的简单⽅法);
这个情况我遇到过,客户的设备是422通信的,但是我⼿上并没有422设备,只有232通信可以测试。因此就需要把422转成232进⾏通信。刚才也讲了422和232的接线,因为这两个都是全双⼯的,接收和发送都是分到的,⽽422只是以⼀种差分信号进⾏传输。
把422的Rx+与232的TX接,422的RX-与232的GND接。
把422的TX+与232的RX接,422的TX-与232的GDN接。
这样,422设备要发送数据的,就可以发送到了232的RX上。232的TX发数据后,由于TX和GND也形成了差分信号给422,422就可以接收到数据了。
5、⽤232通信没问题,⽤485通信没问题,使⽤232转485之后就通信不稳定。
232和485从通信原理上,最⼤⼀个差别是全双⼯和半双⼯的区别。可是应⽤层发送数据和接收数据才不管底下是全双⼯还是半双⼯。
但是485就得管了。因为既然是半双⼯,就得严格保证通路上只能有发送或只能有接收的数据,⼀旦同时有发送和接收,数据就会冲突了。所以解决的办法就是主站设备,也就是主动命令的⼀⽅就需要严格控制好发送数据命令的节奏了。当然有些232转485的设备做的⽐较好了,可以优化这个,但是主站还是要控制,⽐较把通信速率调节慢⼀些(不是调节波特率)。
6、485单独接每个设备都通信正常,多个从站接⼀块通信就不稳定。
这个是属于485通信的不稳定因素了。
7、要想实现两个屏或两个主站通过485访问modbus设备,有什么好的办法。
在485通信中,基本上是⼀主多从。但是遇到⼀些客户实际使⽤中,有客户想⽤两个屏来访问⼀个modbus设备的。⽬前暂时还没有好的办法。
8、针对串⼝通信的弱点,在使⽤上应该要注意哪些地⽅。
说来串⼝通信的弱点,那就说来话长了。不过还是长话短说吧。
①信号⼲扰的问题。建议使⽤带屏蔽线,接线要严格,⽐如要接地。有些485通信上,还考虑接上终端电阻来匹配。如果是232,尽量不要让线太长。通信协议上尽量避免长报⽂的数据通信。
②波特率匹配的问题。因为有些设备的计算的波特率是存在
博客为什么没人用了误差的,特别是⼀些控制器,由于使⽤的晶振不⼀样。因此在⼀些波特率⽐如9600波特率就存在误差。存在误差带来的影响是什么呢。因为接收⽅是通过时间来计算⼀个位的。那么如果⼀个报⽂过长,就会存在误差积累的问题,算着算着就偏了。所以,这也是串⼝通信不稳定的⼀些地⽅,在使⽤上应注意避免发送太长数据的包。
③在⼀些可能会存在⼲扰的情况,在有的选的情况,可以考虑使⽤奇校验或者偶校验。因为虽说出现错
误的可能性不⼤,但既然存在⼲扰,如果加了校验,⾄少可以把错误的报⽂过滤掉。总好⽐没有校验然后通信数据错了不知道。或者尽量使⽤⼀些带校验的协议,防⽌数据出错。
④串⼝通信本来就⽐较慢,请降低对数据响应的要求。
因为串⼝通信本⾝就⽐以太⽹慢。⽽且,串⼝通信并不是能像CPU那样多线程处理。因为就⼀个⼝⼀个线数据出去,即便你应⽤到程序再怎么⽤多线程处理数据,但是最底下也只有⼀个⼝出去,⼀次也只能传⼀个位,⼀个字节过去。因为有客户在使⽤9600的波特率通信,但是⼜希望多少的数据可以在多少毫秒内得到响应。
但是串⼝通信还是要事实求是,所以正确认识串⼝通信对应⽤,对开发,对沟通都有着很⼤的帮助的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论