串⼝通信(232、485、422)和常见问题,⼀篇⽂章就给你说清楚
下⾯先讲串⼝通信的⼀些基本概念,术语。如果对串⼝通信⽐较熟悉的,就当复习,如果哪⾥讲的不到位,欢迎及时指
出。
这⾥并不对串⼝的编程作讲解,主要是从应⽤的⾓度去讲⼀讲。因为更多的时候,都是产品做好了,⽐如触摸屏需要和
控制器,PLC通信。理想的情况下,⼀般只要⼀上电,不需要太多的操作和配置,就可以通信上。
还需要先了解⼀下什么是串⼝通信,232,485,422等。
什么是串⼝通信
常见的串⼝通信⼀般是指异步串⾏通信。
这⾥就要说⼀下同步和异步的区别了。
先讲⼀下串⾏通信的概念。那么,与串⾏通信相对的是什么呢?
与串⾏通信相对的是并⾏通信。数据传输⼀般都是以字节传输的,⼀个字节8个位。拿⼀个并⾏通信举例来说,也就是
会有8根线,每⼀根线代表⼀个位。⼀次传输就可以传⼀个字节,⽽串⼝通信,就是传数据只有⼀根线传输,⼀次只能
传⼀个位,要传⼀个字节就需要传8次。就像⼩虎队那⾸歌⼀样,把你的⼼,我的⼼,串⼀串,再烤⼀烤。。串⼝通信
就是把数据串在⼀根线上传输,所以就叫串⼝吧。
与异步通信相对的就是同步通信了。同步通信⼀般是指有⼀个时钟信号进⾏数据信号同步。同步通信对接收⽅来说就相
对简单⼀些。因为有时钟信号在,每⼀个⾼低电平变化⼀下,就去取⼀下数据就⾏了。通信速率可以由发送⽅或者说是
主站设备进⾏控制。通信速度也相对⽐串⼝通信快很多。但是为什么很多设备,屏和plc,控制器不采⽤这种⽅式,都
使⽤串⼝呢。
那么,在很多设备上,不⽅便接太多线,⽐如接8根数据线,也不⽅便接同步时钟信号(这个后⾯再说),于是⼀种异
步串⾏通信就诞⽣了。
相对来说,异步串⼝通信,就只需要⼀根线就可以发送数据了。在对速率要求不⾼的情况,使⽤⼀根线发送数据是带来
相对来说,异步串⼝通信,就只需要⼀根线就可以发送数据了。在对速率要求不⾼的情况,使⽤⼀根线发送数据是带来
⼤⼤的⽅便和实⽤价值的。
那么问题来了,怎么样才能保证⼀根线就能发送正常的数据呢。也就说发送⽅发送的数据,接收⽅是怎么知道是什么数
据呢。
为了能正常发送数据和接收正确的数据,那异步串⼝通信就需要满⾜以下⼏个条件:
也就是双⽅必要约定⼀种暗号。
也许当时发送这个通信的⼩组是这样讨论的。
经理:我要⽤⼀根线就能传输数据,你来给我定个标准。
研发:好。
经理:只有⼀根线,我怎么知道数据什么时候开始呢。
研发:就⼀根线,默认是⾼电平,那就有⼀个起始位吧。当检测到有低电平的时候,就是开始有⼀个字节的数据发送了,
起始位之后,先是字节的最低位,传送⼀个字节。
经理:可是,就⼀根线,过来的数据会不会有⼲扰,容易出错呀。
研发:⾏呀,那就在字节数据后再加⼀个校验位。可以作奇校验,偶校验,1校验,0校验,⽆校验。
经理:嗯,很不错。有起始位就应该有停⽌位,那我们就再加个停⽌位在后⾯吧。
研发:。。。。。。。。。
经理:传输⼀串数据,对⽅要怎么知道数据的拆分呢,怎么按时间或频率去解读数据位,校验位呢。
研发:这样吧,双⽅约定⼀个波特率吧,定义⼀个每个位占⽤多长的时间,这样双⽅按这个波特率就可以处理了。
经理:这个⽐特率呀。。。
研发:⽼板,是波特率。
经理:我知道,是⽐特率嘛。
研发:这个波特率呢,是指1S钟可以传输多个位,也就知道⼀个位占⽤多长时间。这样就解决传输的问题了。
经理:那万⼀传输过程,数据快太,判断失误停不下来怎么办。
研发:那就把停⽌位可以调节为1个停⽌位或者2个停⽌位。这样就可以停下来了。
经理:嗯,听着不错。就这样办吧。
于是,串⼝通信就这样出来了。
在串⼝的通信参数上,就有了波特率,数据位,停⽌位,校验位这⼏个参数来确保串⼝通信的正确性和稳定上。当然,
这只是某个⽅⾯保证串⼝通信的正确性和稳定性,不代表设备间通信的正确性和稳定性。
串⼝通信主要为分232,485,422通信三种⽅式。
这三种有什么区别呢。
232:
232通信主要是由RX,TX,GND三根线组成。
RX与TX,TX接RX,GND接GND。这样还是⽐较好理解吧。因为发送和接收分别是由不同的线处理的,也就是能同时
发送数据和接收数据,这就是所谓的全双⼯。
在这⾥扩展⼀下,串⼝通信还有⼀个功能叫做全功能串⼝通信,也叫标准串⼝。因为在两个设备间进⾏数据传输,有些
设备处理速度⽐较快,有些数据⽐较慢。为了保证数据能正常传输,在RX,TX的基础上,还增加了⼏个控制引脚,本来
好端端就R,T,G,三根线,凑着就凑齐了9个引脚,召唤出了DB9这个东西。
这要怪就怪当时使⽤电脑的时候,还没有互联⽹这个概念,但是⼜想在两台电脑间进⾏通信。所以才有这样⼀个东西。
在后来的设备,很多控制器,⼈机界⾯,PLC等使⽤串⼝通信中,基本上就不使⽤标准串⼝,⽽是就直接使⽤
RX,TX,GND三根线来通信了。
但是这⾥为什么要提到这个呢。因为只是很多设备这样⽤,也就是还存在少数设备还保留了标准串⼝的功能。这就是为
什么会遇到明明电脑通信是好的,换成触摸屏通信就不⾏了。因为很多触摸屏只使⽤了RX,TX,GND通信,遇到⼀些
还保留标准串⼝功能的就⽐较讨厌了。
485:
485是为了解决232通信距离的问题。原理什么之类的就不多讲了。反正232通信距离就是不长。485主要是以⼀种差分
信号进⾏传输,只需要两根线,+,-两根线,或者也叫A,B两根线。A,B两根线的差分电平信号就是作为数据信号传
输。
那么问题来了,那是不是就没有RX和TX的概念了。是的,发送和接收就不能分开了。发送和接收都是靠这两根的来传
输,也就是每次只能作发送或者只能作接收,这就是半双⼯的概念了,这在效率上就⽐232弱很多了。就像对讲机⼀
样,经常是某个⼈讲完之后,都要说⼀个over,确保当前说完了,等待对⽅回复。
485就是这样牺牲了232全双⼯的效率来达到⾃⼰传输距离远的代价。那有没有即保留了232的全双⼯,⼜可以像485这
样提⾼传输距离呢,于是,422出来了。
422:
422呢,有些标注为485-4。⽽485就标注为485-2。有什么区别呢。就是为了好记呢。485-2就是2根线。485-4就是4根
线。
422就是把232的RX分成两根线,RX+,RX-,把TX分成TX+,TX-。这样就可以同时发送和同时接收了,还可以像485
这样,有较远的传输距离。可是这样⼀种很有优势的通信⽅式,为什么⽤的不多呢。我个⼈的答案和理解就是:线太多
了。特别是像我这样懒得接线的⼈,超过3根线就头晕的。搞个通信还需要接这么多线,什么TX,RX,正啊负啊。交换
来交换去。
因为在很多设备通信中,基本上是属于⼀问⼀答式的,因此,232的全双⼯通信优势其实也并没有发挥出来。就像现在
打电话,虽然两个⼈可以同时说话,但是两个⼈同时说话,叽叽歪歪的,谁知道说什么呀。特别是⼀个主站与多个从站
通信的时候,485的接线就就⽅便多了,反正⼤家就两根线,把+都接⼀块,把-都接⼀块。如果是422作⼀主多从,接线
上还要理半天呢,⽽且通信异常了也不好解决。
好了,串⼝通信基本就普及到这⾥吧。下⾯就对刚上提到的问题进⾏讲⼀讲。
1、电脑使⽤USB转串⼝可以和设备通信上,换成屏与设备就通信不上了?
1)有可能电脑USB转串⼝接到设备上,使⽤的是标准串⼝功能,也就是除了RX,TX,GDN外,还使⽤了其它引脚。
⽐如像欧姆龙PLC,三菱PLC,在实际与屏的通信中,就需要接某些引脚短接的情况。
2)电脑与控制器或PLC通信时,是扫描波特率参数,⾃适应的,屏通信可能参数没有设备好。在三菱,基恩⼠等
PLC,就存在变化波特率进⾏通信交互的过程。
3)也有可能是接线⽅式不对。因为有些DB9,还需要公头,母头。如果不注意的话,也会存在把TX接到TX上,把RX
接到RX上,这样需要注意的地⽅。
4)在这⾥补充⼀下,有时候可能会使⽤⼀些串⼝助⼿发送测试数据与控制器通信,有些串⼝助⼿的奇偶校验是不起作
⽤,这个要提醒⼀下。
2、这A家的屏可以和设备通信,换成B家的屏就通信不上了?
1)⾸先确认⼀下接线是否正确了,RX和TX是否兼容。
2)地线是否没有接。
3)除了RX,TX,GND,是否还有其它引脚需要短接的。
4)通信协议是否⼀致或不完善,波特率是否⼀样。
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、针对串⼝通信的弱点,在使⽤上应该要注意哪些地⽅?
说来串⼝通信的弱点,那就说来话长了。不过还是长话短说吧。
1)信号⼲扰的问题
建议使⽤带屏蔽线,接线要严格,⽐如要接地。有些485通信上,还考虑接上终端电阻来匹配。如果是232,尽量不要
让线太长。通信协议上尽量避免长报⽂的数据通信。
2)波特率匹配的问题
因为有些设备的计算的波特率是存在误差的,特别是⼀些控制器,由于使⽤的晶振不⼀样。因此在⼀些波特率⽐如9600
波特率就存在误差。存在误差带来的影响是什么呢。因为接收⽅是通过时间来计算⼀个位的。那么如果⼀个报⽂过长,
波特率就存在误差。存在误差带来的影响是什么呢。因为接收⽅是通过时间来计算⼀个位的。那么如果⼀个报⽂过长,
就会存在误差积累的问题,算着算着就偏了。所以,这也是串⼝通信不稳定的⼀些地⽅,在使⽤上应注意避免发送太长
数据的包。
3)在⼀些可能会存在⼲扰的情况,在有的选的情况,可以考虑使⽤奇校验或者偶校验。因为虽说出现错误的可能性不
⼤,但既然存在⼲扰,如果加了校验,⾄少可以把错误的报⽂过滤掉。总好⽐没有校验然后通信数据错了不知道。或者
尽量使⽤⼀些带校验的协议,防⽌数据出错。
4)串⼝通信本来就⽐较慢,请降低对数据响应的要求。
因为串⼝通信本⾝就⽐以太⽹慢。⽽且,串⼝通信并不是能像CPU那样多线程处理。因为就⼀个⼝⼀个线数据出去,即
便你应⽤到程序再怎么⽤多线程处理数据,但是最底下也只有⼀个⼝出去,⼀次也只能传⼀个位,⼀个字节过去。因为
有客户在使⽤9600的波特率通信,但是⼜希望多少的数据可以在多少毫秒内得到响应。
但是串⼝通信还是要事实求是,所以正确认识串⼝通信对应⽤,对开发,对沟通都有着很⼤的帮助的。
为什么不⽤同步通信呢?
刚才提到,同步通信需要依赖于时钟信号。这就存在⼀个问题,这个时钟信号是谁来发起呢。在同步通信中,往往需要
⼀个主设备发起时钟信号读从模块的数据。在实际中,有屏读PLC,有屏读屏的数据。⽽单纯地从异步串⼝通信来说,
是没有主从之说,双⽅都是平等的⾓⾊,都可以互发信息,互收信息。⽽同步通信⼀般是应⽤于CPU读⼀些模块,由
CPU发起时钟信号,⽐如读SD卡模块,就可以通过SPI⽅式,还有⼀些传感器模块。
本文发布于:2022-11-28 06:34:44,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/37524.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |