关于RS485总线通信调试和编程代码需要注意的问题
- 格式:docx
- 大小:27.30 KB
- 文档页数:4
RS485通讯应该注意的几点一、如何布线走线走得好,可以很大程度减少干扰的影响,提高通讯的可靠性,但我们在实践中往往对此认识不足。
如为了走线方便,把网线放在电源线的线槽里,或在天花板走线时经过日光灯等干扰源,这样走线是不对的。
实际上干扰源对相邻网线的干扰,主要是通过磁场和电场的作用,按照电磁理论,干扰源对网线的感应与距离的平方成反比,因此,网线离干扰源那怕远离10厘米,网线受到的干扰都会明显减弱。
综上所述,走线应遵循两个原则:①远离电源线,日光灯等干扰源;②当网线不能与电源线等干扰源避开时网线应与电源线垂直,不能平行,并采用质量高的双绞线走线。
二、120欧姆终端电阻问题在仪表系统的末端和485转换卡的尾部,应该加入120欧姆的终端电阻,目的是防止高频反射,使通讯信号发生畸变。
三、通讯速率选取的原则我们选择的原则是:距离短可以选择较高的波特率,距离长则选择较低的波特率。
当我们选择较低的波特率时,如果发现比正常速度(同样波特率相比较)慢得多,很可能线路已受到干扰,数据校验经常出错,不断重传,造成通讯速度娈慢,此时应检查网络是否采取本文所提到的抗干扰措施,同时还可以采取提高通讯波特率的方法,以快速通过线路的方式,减少干扰的影响。
四、线型的选择RS485是采用平衡式(差分式)线路,对同时出现在两条信号线DATA+和DATA-的干扰有较强的抑制能力,当两条线绞在一起时,对通讯各种分布参数耦合过来的干扰信号则可平均地分配到这两条线上,因此对RS485的平衡式线路而言,用双绞线可获得抗干扰能力。
因此,建议采用无屏蔽的双绞线,如果有条件可采用屏蔽双绞线,但屏蔽线两端要接好地,才有屏蔽效果。
如果距离较长时,线路的电阻不容忽视,电阻的存在会使信号衰减,降低网络通讯的可靠性。
因此距离较长,应选用铜芯较粗的绞线,理论上讲一根线两端电阻不应超过80Ω。
五、注意接地目前,有相当部分PC机在使用时,电源并没接地。
主要是电源没有接地,或电源插座没有地线,从而造成PC机地线与地之间往往有几十伏以上的漏电电压存在,这个电压很容易就引入网卡或收款机中,从而导致网卡或收款机通讯损坏。
RS485通讯注意事项
1: 485总线增加终端电阻
1:设备少于22台,并且距离超过300米时需要添加终端电阻
2:设备超过22台,不需要添加终端电阻,增加终端电阻会降低485总线负载能力
2: 485干扰(共模干扰和差模干扰)
485通讯线由两根双胶线组成,它通过两根通讯线之间的电压差的方式来传递信号,称为差分电压传输,差模干扰在两根信号线之间传输,属于对称性干扰,消除差模干扰的方法是在电路中增加一个偏值电阻,并采用双胶线;共模干扰是在信号线与地之间传输,属于非对称性干扰,消除干扰的方法包括:1>采用屏蔽双绞线并有效接地2>强电场的地方还要考虑采用镀锌管屏蔽3>布线原理高压线
3:485通讯线选择标准。
rs485接口设计要点和调试方法一、RS485接口设计要点:1.基本电气参数:RS485接口是一种基于差分传输的串行通信接口,能够实现远距离和高速传输。
在设计RS485接口时,需要考虑以下基本电气参数:a.差分电平:RS485采用差分信号传输,所以需要在接口电路中设置一个电平变换器,将逻辑电平转换为差分电平。
通常差分电平为正负两个电平,例如:+5V和-5V。
b.带宽:RS485接口的带宽决定了其传输速率和信号质量。
在设计时需要根据实际需求选择合适的带宽。
c.驱动能力:RS485接口通常需要驱动一定数量的设备,因此需要考虑驱动电流和输出功率等参数,以确保信号传输稳定和可靠。
2.线路特性:a.线路长度:RS485接口支持较长的通信距离,但实际可靠距离受到多种因素的影响,如传输速率、电缆类型和环境干扰等。
因此,在设计RS485接口时需要考虑通信距离的限制,并根据需求选择合适的电缆类型和衰减补偿方法。
b.终端电阻:RS485通信线路需要在两端分别加上120欧姆的终端电阻,以确保信号有效的传输和防止信号反射。
c.屏蔽和抗干扰措施:RS485接口在电气环境中可能会受到较强的干扰,如电磁辐射和电磁感应等。
为了提高信号质量和抗干扰能力,可以采用屏蔽电缆、引入滤波电路和设置适当的接地措施。
3.通信协议:a.数据格式:RS485接口支持多种数据格式,包括:ASCII码、二进制码和Modbus等。
在设计接口时需要根据实际应用场景选择合适的数据格式。
b.通信速率:RS485接口支持多种通信速率,通常为几百kbps至几Mbps。
在设计接口时,需要根据实际需求选择合适的通信速率,并确保接口电路的传输带宽足够以支持所选择的速率。
c.错误检测和纠正:RS485接口在数据传输过程中可能会出现错误,例如位错误、校验错误和帧错误等。
为了提高通信的可靠性,可以采用差错检测和纠正机制,如CRC校验等。
二、RS485接口调试方法:1.硬件调试:a.接线检查:首先需要检查接线是否正确连接,包括数据传输线、终端电阻和供电电路等。
RS485总线常见技术问题解答!网友看完:涨知识了,不用再瞎搞了RS485总线通过拉动一对总线来扩展检测设备,然后将模块连接到总线,并将检测设备连接到模块。
一般情况下,模块与探测设备放在一起,这样线材耗费少、施工费用低、扩展方便。
在RS485总线布线或者使用中经常会遇到一些问题,我们该如何解决呢?下面给大家详细讲解一下RS485总线常见技术问题解答,希望对您有所帮助。
一、RS485总线距离能达到多远?当线材满足要求时,一条RS485总线最多可达1200米。
如果距离超过1200米,每个额外的加一个RS485总线中继器可以再延长1200米。
二、RS485总线的线材有什么要求?一般来说,推荐使用1.0 mm 2以上的屏蔽双绞线,但是当RS485总线距离较短时,可以适当降低线材要求,如下所示:1、RS485总线距离小于200米:可以使用0.5 mm 2以上的普通线材。
2、RS485总线距离超过200米但小于500米:使用0.75 mm 2以上的普通双绞线。
3、RS485总线距离超过500米但小于1200米:使用1.0 mm 2以上的屏蔽双绞线。
三、RS485总线的施工有什么要求?1、尽量用一条干线将每台RS485总线设备串联起来,如果有支路,RS485总线设备到干线支路尽可能短,最好不超过5米。
2、如果干线不是一条,而是有几条大支路,那么几条大支路的总线长度不应超过800米。
如果超过这个距离,通过在分支增加总线中继器,每增加加一个个中继器,可以增加两个分支。
3、RS485总线应远离高压设备,如220伏交流线路、荧光灯、高压变压器等。
例如,如果你使用220伏交流电,两者之间的最小距离应该超过20厘米。
4、在野外,很少有建筑物,电子设备容易受到雷击。
此时,最好将信号线和电源线放在金属管中,埋在20厘米以下的土壤中。
每根金属管都焊接在一起,金属管的两端都应连接到地线。
四、很多设备串联起来,距离远,电源电压下降严重,设备的末端部分几乎不能工作,如何解决?1、如果电压降不大,可以通过增加2-5伏来工作。
485布线应该注意的问题第一、澄清几个概念:概念一: 485总线的通讯距离可以达到1200米.其实只是485总线结构理论上 在理想环境的前提下才有可能使得传输距离达到1200米,一般是指通讯线材优质达标,波特率9600,只有一台485设备才能使得通讯距离达到1200米,而且能通讯并不代表每次通讯都正常,所以通常485总线实际的稳定的通讯距离远远达不到1200米,负载485设备多,线材阻抗不合乎标准,线径过细,转换器品质不良,设备防雷保护,波特率的加高等等因素都会降低通讯距离.概念二: 485总线可以带128台设备进行通讯.其实并不是所有485转换器都能够带128台设备的,要根据485转换器内芯片采用的型号和485设备芯片采用的型号来判断的,谁低就谁的,一般485芯片负载能力有三个级别 32台 128台 256台,理论上的标称往往实际上是达不到的,通讯距离越长,波特率越高,线径越细,线材质量越差,转换器品质越差,转换器电能供应不足(无源转换器),防雷保护越强这些都会大大降低真实负载数量.概念三: 485总线是一种最简单 最稳定 最成熟的工业总线结构.这种概念是错误的应该是: 485总线是一种用于设备联网的经济型的传统的工业总线方式,通讯质量是需要根据施工经验进行测试和调试的,485总线虽然简单,但必须严格安装施工规范进行布线.第二、严格几个施工规范:485+和485-数据线一定要互为双绞.布线一定要布多股屏蔽双绞线,多股是为了备用,屏蔽是为了出现特殊情况时调试,双绞是因为485通讯采用差模通讯原理,双绞的抗干扰性最好.不采用双绞线,是极端错误的.485总线一定要是手牵手式的总线结构,坚决杜绝星型连接和分叉连接.设备供电的交流电及机箱一定要真实接地,而且接地良好.有很多地方表面上有三角插座,其实根本没有接地,要小心接地良好时,可以确保设备被雷击 浪涌冲击静电累计时可以配合设备的防雷设计较好地释放能量,保护485总线设备和相关芯片不受伤害,避免和强电走在一起,以免强电对其干扰.第三、几种常见的通讯故障:通讯不上,无反应.可以上传数据,但不可以下载数据.通讯时,系统提示受到干扰.或者不通讯时,通讯指示灯也不停地闪烁.有时能通讯上,有时通讯不上.有的指令可以通,有的指令不可以通.第四、推荐几个调试方法:首先要确保设备接线正确,且严格合乎规范.共地法: 用1条线或者屏蔽线将所有485设备的GND地连接起来,这样可以避免所有设备之间存在影响通讯的电势差.终端电阻法: 在最后一台485设备的485+和485-上并接 120欧姆的终端电阻来改善通讯质量.中间分段断开法: 通过从中间断开来检查是否是 设备负载过多 通讯距离过长 某台设备损害对整个通讯线路的影响等原因.单独拉线法: 单独简易暂时拉一条线到设备,这样可以用来排除是否是布线引起了通讯故障.更换转换器法: 随身携带几个转换器,这样可以排除是否是转换器质量问题影响了通讯质量.笔记本调试法: 先保证自己随身携带的电脑笔记本是通讯正常的设备,替换客户电脑,来进行通讯,如果可以,则表明客户的电脑的串口有可能被损害或者受伤.第五、提出几个建议和忠告:建议用户使用和购买门禁厂家提供的485转换器或者厂家指定推荐品牌的485转换器.门禁厂家会对与其配套的485转换器做大量的测试工作,并且会单独要求485厂家安装其固定的性能参数进行生产和品质检测,所以和其门禁设备具备较好的兼容性.千万不要贪图便宜购买杂牌厂家的485转换器.严格按照485总线的施工规范进行施工,杜绝任何侥幸心理.对线路较长 负载较多的情况采用主动科学的有预留的解决方案.如果通讯距离过长,建议如果超过500米就采用中继器或者485HUB来解决问题.如果负载数过多,建议如果一条总线上超过30台就采用485HUB来解决问题.现场调试带齐调试设备.现场调试一定要随身携带几个确保以前可以接长距离和多负载的转换器 一台常用的电脑笔记本 测试通路断路的万用表 几个120欧姆的终端电阻.485总线布线规范及调试485总线由于其布线简单,稳定可靠从而广泛的应用于视频监控,门禁对讲,楼宇报警等各个领域中,但是,在485总线布线过程中由于有很多不完全准确的概念导致出现很多问题。
如何避免RS485通讯布线中的常见问题2023年了,现在通信技术越来越发达,以RS485作为一种常见的通信协议在各个领域得到了广泛应用。
RS485通信协议的优点是它是可靠的、稳定的、高速的、远距离传输的通信技术。
但是,由于使用者在布线实践过程中可能还存在一些误解,导致出现一些常见的问题,它们会严重影响RS485通信的稳定性和可靠性。
那么,本文主要是探讨如何避免在RS485通讯布线中的常见问题。
一、对RS485线路布线的要求为了保证RS485协议的通信稳定性和可靠性,我们需要确保布线的正确性。
这需要注意以下几个方面。
1.布线距离的限制RS485总线是一个多点通信总线,通常只能够在约1200米的范围内运行。
如果在这个范围内,它会受到通信距离的限制,难以达到更远距离的传输。
2.电源供电的保证RS485线路的工作电压一般在5V-12V之间,如果在通讯时没有提供稳定的电源供应,就会出现通讯各方面的异常状况,如通讯速度变慢、信号传输受损等。
3.正确的接线方式RS485的线路网络主要分为四种接线方式:点对点,双向总线,单向半双工总线和全双工总线。
正确的接线方式可以提高通信的效率和稳定性。
4.屏蔽处理在RS485的信号传输中,由于存在大量的干扰,需要对总线进行屏蔽处理,以保证传输信号的完整性。
这可以通过屏蔽线、屏蔽夹等方式进行操作。
二、避免RS485通信布线中的常见问题1.距离太远RS485通信总线一般只能在1200米的范围内传输数据。
如果RS485总线距离超过了允许的范围,那么数据传输的过程中就会出现通信的问题,例如误码率过高,通信速度变得缓慢等现象。
因此,在实际应用中需要对RS485总线的距离进行限制,以保证通信的稳定性和可靠性。
2.数据线的接触不良数据线的接触不良是RS485线路布线中最普遍的问题之一。
这是因为,在安装过程中,数据线可能被挤压或者拉伤,导致它们之间的接触不良,从而导致通信失效。
为了避免这种问题,我们需要在安装过程中谨慎处理,保护好数据线,避免受到外界影响。
RS485通讯原理及排错处理一、RS485通信原理RS485通信总线使用差分信号传输方式,即通过正负两根数据线进行数据传输。
正线上的电压高于负线上的电压表示1,反之表示0。
这种差分信号的方式可以提高抗干扰能力,减小信号失真率。
RS485总线的数据传输速率可根据具体应用需求选择,通常可以达到几十kbps至几Mbps的速率。
在RS485通信中,主设备通过向从设备发送控制命令或数据,从设备则根据命令执行相应的操作,并将执行结果返回给主设备。
RS485通信总线支持多个从设备同时响应主设备,实现了多点通信。
二、RS485通信排错处理方法1.差分信号线路电气连接方面的排错处理方法:-检查线路是否有不正常的短路或断路。
可以使用万用表或示波器进行检测。
-确保各个节点的信号引线正确连接到差分信号线路上。
检查是否有接错或误连的情况。
-检查总线两端是否加上了终端电阻,终端电阻的作用是抑制信号反射,提高通信质量。
2.通信参数配置方面的排错处理方法:-通信速率选择合适的波特率,通常可以根据具体应用需求进行设置。
-检查通信模式是否匹配,主设备和从设备之间的通信模式要保持一致,如全双工或半双工模式。
-检查数据位、停止位和校验位的配置是否一致,这些参数需要在主设备和从设备之间保持一致,否则会导致通信错误。
3.通信协议方面的排错处理方法:-检查通信命令或数据是否按照协议规定的格式进行发送。
如果命令或数据格式错误,从设备可能无法正确解析。
-确保通信命令或数据的有效性,即所发送的控制命令或数据是否正确并且得到从设备的正确响应。
4.环境干扰方面的排错处理方法:-检查总线系统中是否有强电机、电磁干扰源等影响信号传输的设备存在。
需要尽量将RS485总线与其他干扰源隔离开。
-如果环境干扰严重,可以考虑在差分信号线路上添加屏蔽层,以减小外部干扰对通信信号的影响。
5.软件程序方面的排错处理方法:-检查主设备和从设备的软件程序是否按照通信协议进行编写,确保通信命令的正确性。
RS485是一个标准总线,具有差分信号和方向控制的特点。
以下是使用RS485时应注意的几点:
1. RS485连接时,信号线不需要交叉(也不能交叉,否则容易烧坏芯片)。
2. 如果使用的是RS485芯片,可以选择5V或
3.3V供电。
3. RS485是有方向控制的,接收和发送方向需要正确设置。
4. RS485芯片分为有极性和无极性两种,使用时需要注意匹配。
5. 在长线信号传输时,为了避免信号的反射和回波,需要在接收端接入终端匹配电阻。
6. RS485一般采用双绞线(屏蔽或非屏蔽)连接,终端电阻一般介于100至140Ω之间,典型值为120Ω。
7. 在实际配置时,在电缆的两个终端节点上,即最近端和最远端,各接入一个终端电阻,而处于中间部分的节点则不能接入终端电阻,否则将导致通讯出错。
此外,如果使用的是单片机,还需要注意电平转换的问题。
在每次发送完成后,都会接受一个字节0,这是因为在将RS485设置为发送数据状态时,RO会被置低。
为了避免这种情况,建议使用TC中断进行发送。
在1200处加中继器485布线注意事项:1. 485通信线必须用屏蔽双绞线,最好多股备用,总长不超过1200米。
2. 布线尽量远离高压电线,不要与电源线并行,更不能捆扎在一起。
3. 485总线一定要是手牵手式的总线结构,坚决杜绝星型连接和分叉连接。
4. 超出30台控制器或线长大于500米,必须采用485中继器。
5. 交流供电的设备及机箱一定要真实接地,而且接地良好。
6. 用屏蔽线将所有485设备的GND地连接起来。
7. 在最后一台485设备的485+和485-上并接 120欧姆的终端电阻。
RS485接口RS485采用差分信号负逻辑,+2V~+6V表示“0”,- 6V~- 2V表示“1”。
RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,现在多采用的是两线制接线方式,这种接线方式为总线式拓朴结构在同一总线上最多可以挂接32个结点。
在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。
很多情况下,连接RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来。
而忽略了信号地的连接,这种连接方法在许多场合是能正常工作的,但却埋下了很大的隐患,这有二个原因:(1)共模干扰问题:RS-485接口采用差分方式传输信号方式,并不需要相对于某个参照点来检测信号,系统只需检测两线之间的电位差就可以了。
但人们往往忽视了收发器有一定的共模电压范围,RS-485收发器共模电压范围为-7~+12V,只有满足上述条件,整个网络才能正常工作。
当网络线路中共模电压超出此范围时就会影响通信的稳定可靠,甚至损坏接口。
(2)EMI问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个低阻的返回通道(信号地),就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向外辐射电磁波。
由于PC机默认的只带有RS232接口,有两种方法可以得到PC上位机的RS485电路:(1)通过RS232/RS485转换电路将PC机串口RS232信号转换成RS485信号,对于情况比较复杂的工业环境最好是选用防浪涌带隔离珊的产品。
关于RS485通讯注意事项关于RS485通讯注意事项2010-12-13 22:58为了让主机可以比较"从容"地切换到接收状态,从机接收到报文后不应该马上回答,而要至少等待双方约定的一个时间(比如20ms),这其实也应当是RS-485通信的一个参数。
使用全双工RS-422就没有这个问题。
有一些RS232到RS485的接口需要用RTS信号来控制发送和接收状态切换,由于PC机很难像单片机那样精确地判断最后一位从移位寄存器发出去了(单片机对有的UART可以用中断,或者笨笨地定时+查询标志等方法),所以经常发生下位机收不好最后一个字节或者上位机收不好第一各字节的情况。
有人采取上位机正常报文后面加无用字符(比如0xFF)的办法来凑合。
虽然现在有RS232到RS485的收发自动切换的转接器,但它内部其实是用单稳态触发器来实现的,为了适应不同波特率,切换仍然有一个延迟,波特率较高的时候下位机回答太快仍然有可能第一个字节出错。
所说的20ms只是一个举例,根据波特率等情况当然可以适当改变。
但是,正规的RS485规约应该要规定这个帧间空闲间隔的(比如IEC870-5规定是33bit)。
实际通信的实时性主要由轮询的间隔以及超时的处理来决定,附加几毫秒的延时并不很重要。
实际使用RS485通信最常遇到倒就是收发切换的问题,要想解决好,一是上位机从发到收的切换要尽量快(尽可能使用UART硬件自动控制RTS、发送完成中断或者精确定时),二是下位机要略位"宽容"一点。
一、如何布线走线走得好,可以很大程度减少干扰的影响,提高通讯的可靠性,但我们在实践中往往对此认识不足。
如为了走线方便,把网线放在电源线的线槽里,或在天花板走线时经过日光灯等干扰源,这样走线是不对的。
实际上干扰源对相邻网线的干扰,主要是通过磁场和电场的作用,按照电磁理论,干扰源对网线的感应与距离的平方成反比,因此,网线离干扰源那怕远离10厘米,网线受到的干扰都会明显减弱。
RS485通讯常见故障解决方法以及布线安装注意事项!RS485通信是一种常用于工业自动化控制系统中的数据通信方式,它具有抗干扰能力强、支持多节点连接等特点。
然而,在实际应用中,也可能会遇到一些通信故障,下面将介绍一些常见的RS485通信故障、解决方法以及布线安装的注意事项。
一、RS485通信常见故障:1.通信不能建立连接:RS485通信不能建立连接的原因可能有多种,包括线路断开、通信波特率设置错误、硬件故障等。
解决方法是首先检查通信线路是否正常连接,然后检查通信波特率是否设置正确,最后检查硬件设备是否有损坏。
2.数据传输错误:数据传输错误可能会导致信息错误或者通信中断。
造成数据传输错误的原因可能有噪声干扰、功率干扰、线路质量差等。
解决方法是增加隔离器、增加筛选电容、提高线路质量等。
3.通信距离过短:RS485通信在一条总线上可以连接多个节点,但是总线的物理长度也有一定的要求,如果总线长度过短,则可能无法通信。
解决方法是增加总线的长度,可以使用中继器进行信号放大,或者使用RS485转换器将信号转化为其他形式传输。
4.数据通信速度过低:数据通信速度过低可能会导致不稳定的通信,造成通信中断。
造成通信速度过低的原因可能包括通信线路长、串口通信波特率设置不当等。
解决方法是缩短通信线路长度,或者修改串口通信波特率设置。
二、RS485通信解决方法:1.加强线路保护:RS485通信中,线路的保护是非常重要的,可以采用绞线方式布线,并使用屏蔽绞线。
在线路两端可以使用终端电阻进行防护,以减少终端反射和信号干扰。
2.适当设置通信波特率:RS485通信的波特率设置应考虑到通信环境、数据传输量以及通信时间等因素,以提高通信的效率和稳定性。
3.使用合适的抗干扰措施:RS485通信可能会受到外部噪声和干扰的影响,可以使用屏蔽绞线、隔离器等设备来避免干扰。
4.增加总线长度:如果总线长度不足导致通信中断,可以使用中继器或者信号放大器来增加总线长度。
基于RS485的串口通信编程实验心得一、实验背景1.1 RS485串口通信RS485是一种应用广泛的串行通信标准,它可以在远距离、高噪声环境下传输数据。
RS485串口通信使用差分信号传输数据,可以实现多机通信和多点通信,适用于工业控制领域和数据采集系统。
1.2 串口通信编程串口通信编程是利用计算机与外部设备进行数据交换的一种方式。
在实际应用中,我们可以通过串口与传感器、执行器等设备进行数据交互,实现对外部设备的监控和控制。
二、实验过程2.1 实验准备在进行RS485串口通信编程实验之前,我们需要准备一台计算机、RS485串口转换器、外部设备(如温度传感器、风速传感器等)以及相关的编程软件(如C、C++、Python等)。
2.2 硬件连接我们需要将RS485串口转换器与计算机连接,并将外部设备与RS485串口转换器连接。
在硬件连接上,需要注意信号线的接线方式,以及串口转换器的设置。
2.3 编程实现根据实验要求,我们可以选择合适的编程语言进行串口通信程序的编写。
在编程实现中,需要注意串口的初始化、数据的发送和接收、错误处理等方面的问题。
还需要考虑数据的解析和处理方法,保证数据的准确性和完整性。
2.4 调试测试编写完成串口通信程序之后,需要进行调试测试,确保程序能够正常运行。
在测试过程中,我们可以通过监控数据的发送和接收情况,以及外部设备的响应情况,来验证程序的正确性。
三、实验心得3.1 技术难点在进行RS485串口通信编程实验的过程中,我们遇到了一些技术难点。
在设置串口参数时,需要对波特率、数据位、停止位、校验位等参数进行正确的配置,以保证数据的准确传输;另外,在数据的解析和处理过程中,也需要针对不同的数据格式进行相应的处理,确保数据的正确解析。
3.2 解决方法针对技术难点,我们通过查阅资料、交流专家以及不断的实践和调试,最终找到了相应的解决方法。
在串口参数设置方面,我们可以参考数据手册或相关资料,了解串口参数的含义和设置方法;在数据解析和处理方面,我们可以根据数据格式和协议,编写相应的解析程序,以实现数据的准确解析和处理。
RS485通信设计中需注意的几个问题在RS485通信中,常常会存在通信距离不远、通信质量差等问题。
为提高RS485的通信质量,除了采用终端匹配的总线型结构外,在系统设计中通常要考虑以下几个问题。
RS-485接口芯片能担当起一种电平转化的角色,把TTL信号、COMS 信号等转化为能在485总线上传输的差分信号,把接收到的485差分信号转化为MCU能够识别的TTL或COMS电平,在工业控制、仪器、仪表、多媒体网络、机电一体化产品等诸多领域得到了广泛应用。
但在RS485通信中,常常会存在通信距离不远、通信质量差等问题。
为提高RS485的通信质量,除了采用终端匹配的总线型结构外,在系统设计中通常要考虑以下几个问题。
1故障保护根据RS-485的标准规定,接收器的接收灵敏度为±200mV,这意味着当接收端的差分电压大于等于+200mV时,接收器输出为高电平,小于等于-200mV时输出为低电平,介于±200mV之间时,接收器输出为不确定状态。
在总线空闲(即传输线上所有节点都为接收状态)以及传输线开路或短路故障时,若不采取特殊措施,接收器可能输出高电平或者低电平。
一旦某个节点的接收器产生低电平,就会使串行接收器(UART)找不到起始位,从而引起通信异常。
2防雷电冲击RS-485接口芯片在使用、焊接或设备的运输途中都有可能受到静电冲击而损坏。
在传输线架设于户外的使用场合,接口芯片乃至整个系统还有可能遭受雷电袭击。
选用抗静电或抗雷击的芯片可有效避免此类损失。
3光耦隔离在某些工业控制领域,由于现场情况十分复杂,各个节点之间存在很高的共模电压。
虽然RS-485接口采用差分传输方式,具有一定的抗共模干扰能力,但当共模电压超过RS-485接收器的极限接收电压,即大于+12V或。
485总线布线规范及常见故障调试485总线由于其布线简单,稳定可靠从而广泛的应用于视频监控,门禁对讲,楼宇报警等各个领域中。
但是,在485总线布线过程中,由于很多模糊不清的概念导致出现很多问题。
现在将一些容易出错的地方总结一下。
1.485信号线避免和强电电源线一同走线。
在实际施工当中,由于走线都是通过管线走的,施工方有的时候为了图方便,直接将485信号线和电源线绑在一起,由于强电具有强烈的电磁信号对弱电进行干扰,导致485信号不稳定,从而导致通信不稳定。
2.485信号线最好用双绞线或屏蔽线作为布线.485信号线也可以使用平行线或非屏蔽线作为布线,但外界对其干扰影响较大,传输效果较差,所以不建议使用平行线或非屏蔽线。
这是因为485信号是利用差模传输的,即由485+与485-的电压差来作为信号传输。
如果外部有一个干扰源对其进行干扰,使用双绞线进行485信号传输的时候,由于其双绞,干扰对于485+,485-的干扰效果都是一样的,那电压差依然是不变的,对于485信号的干扰缩到了最小。
同样的道理,如果有屏蔽线起到屏蔽作用的话,外部干扰源对于其的干扰影响也可以尽可能的缩小。
.选择使用普通的超五类屏蔽双绞线即网线就可以。
由于原材料价格上涨,导致现在市场上的线材鱼龙混杂,有不良商人利用某种合金来顶替铜丝来做网线,在外面镀铜以蒙混客户。
具体区别方法:看网线截面,如果是黄色的话,就是铜丝,如为白色,则是用合金以次充好。
合金一般比较脆,容易断,而且导电性远不如铜丝,很容易在工程施工中造成问题。
线材一般建议选择标准的485线,其为屏蔽双绞线,传输线不是像网线那样为单股的铜丝,而是多股铜丝绞在一起形成一根线,这样即使某根小铜丝断掉,也不会影响整个传输线的使用。
3. 485布线规范是必须要手牵手的布线。
一旦没有借助485集线器和485中继器直接布设成星型连接和树形连接,很容易造成信号反射导致总线不稳定。
很多施工方在485布线过程中,使用了星型接线和树形接线,有的时候整个系统非常稳定,但是有的时候则总是出现问题,又很难查找原因,一般都是由于不规范布线所引起的。
RS485注意事项1.总线长度和连接设备数量问题一般的RS485标准接口允许连接32个设备(1个主站和31个从站),总线最大长度可达1000米。
但这主要取决于设备内接口芯片的驱动能力(“RS”即“Recommend Standard”,推荐标准)。
如果接口芯片的驱动能力足够大,可以超出这个限制,Modbus协议支持多达247个站点。
如采用公用电话网或无线方式通讯时,Modbus总线事实上是一对一连接,也可以突破标准限制。
相反的情况,如Micro PLC的编程端口也支持Modbus,但只允许连接8个设备和10米总线长度,超出这个限制时,必须通过加装总线隔离盒(如TSXPACC01)达到标准接口的指标。
2.传输线连接问题RS485一般采用屏蔽双绞线作为传输线以总线拓扑或串行方式连接,需注意三点:a. 将屏蔽层连接到独立的系统信号接地线上,切不可连接到电源系统的保护接地线上。
如没有信号接地线,屏蔽层可以暂时悬浮。
b. 用一根低阻线将两个接口的信号公共端(0V)互连,使接口间共模干扰电压被短路,有效地抑制电磁干扰。
这根线可以是屏蔽层。
c. 在传输总线的始端和末端都并接终端电阻,否则信号将在传输线末端产生反射产生错误。
阻值一般取120Ω的电阻(大多数双绞线电缆的特性阻抗在100~120Ω)。
也可以采取RC匹配方式,即在终端电阻上再串联一只电容,这样可以隔断直流成分以节省大部分功率。
电容的取值需要在功耗和匹配质量间进行折衷,典型值是1μF。
第四节 RS422和RS485应用注意要点一、RS422和RS485的连接RS422和RS485总线连接的原则是构建一条单一、连续的信号通道作为总线。
采用一条双绞线(干线),把各个节点串接起来,从总线到每个节点的引出线(支线)应尽量短,以使引出线中的反射信号对总线的影响最低。
图1-8是实际应用中常见的一些错误连接方式(a 、c 、e) 和正确连接方式(b 、d 、f)。
a 、c 、e 这三种连接方式在短距离、低速率条件下仍可能正常工作,但随着通讯距离的延长或通讯速率的提高,其不良影响会越来越严重,主要原因是信号在各支路末端反射后会与原信号叠加,造成信号质量下降。
RS48硬件电路设计中需注意的问题1 问题的提出在工业控制及测量领域较为常用的网络之一就是物理层采用RS-485通信接口所组成的工控设备网络。
这种通信接口可以十分方便地将许多设备组成一个控制网络。
从目前解决单片机之间中长距离通信的诸多方案分析来看,RS-485总线通信模式由于具有结构简单、价格低廉、通信距离和数据传输速率适当等特点而被广泛应用于仪器仪表、智能化传感器集散控制、楼宇控制、监控报警等领域。
但RS485总线存在自适应、自保护功能脆弱等缺点,如不注意一些细节的处理,常出现通信失败甚至系统瘫痪等故障,因此提高RS-485总线运行可靠性至关重要。
2 硬件电路设计中需注意的问题图1 RS485通信接口原理2.1 电路基本原理某节点的硬件电路设计如图1所示,在该电路中,使用了一种RS-485接口芯片SN75LBC184,它采用单一电源Vcc,电压在+3~+5.5 V范围内都能正常工作。
与普通的RS-485芯片相比,它不但能抗雷电的冲击而且能承受高达8 k V的静电放电冲击,片内集成4个瞬时过压保护管,可承受高达400 V的瞬态脉冲电压。
因此,它能显著提高防止雷电损坏器件的可靠性。
对一些环境比较恶劣的现场,可直接与传输线相接而不需要任何外加保护元件。
该芯片还有一个独特的设计,当输入端开路时,其输出为高电平,这样可保证接收器输入端电缆有开路故障时,不影响系统的正常工作。
另外,它的输入阻抗为RS485标准输入阻抗的2倍(≥24 kΩ),故可以在总线上连接64个收发器。
芯片内部设计了限斜率驱动,使输出信号边沿不会过陡,使传输线上不会产生过多的高频分量,从而有效扼制电磁干扰。
在图1中,四位一体的光电耦合器TLP521让单片机与S N75LBC184之间完全没有了电的联系,提高了工作的可靠性。
基本原理为:当单片机P1.6=0时,光电耦合器的发光二极管发光,光敏三极管导通,输出高电压(+5 V),选中RS485接口芯片的DE端,允许发送。
RS-485接口电路的硬件设计的5点注意事项RS一485接口是一种基于平衡发送和差分接收的串行总线,具有很强的抗共模干扰能力,在适当的波特率下传输距离远;同时易于进行网络扩展,被广泛的应用在很多工业现场。
RS-485通常应用于一对多点的主从应答式通信系统中,RS-485接口电路的硬件设计的5点注意事项。
1.保证系统上电时的RS-485芯片处于接收输入状态。
对于收发控制端TC建议采用MCU引脚通过反相器进行控制,不宜采用MCU引脚直接进行控制,以防止MCU上电时对总线的干扰。
2.总线隔离。
RS-485总线为并接式二线制接口,一旦有一只芯片故障就可能将总线“拉死”,因此对其二线口VA、VB与总线之间应加以隔离。
通常在VA、VB与总线之间各串接一只4~10Ω的PTC电阻,同时与地之间各跨接5V的TVS二极管,以消除线路浪涌干扰。
如没有PTC电阻和TVS二极管,可用普通电阻和稳压管代替。
3.总线匹配。
总线匹配有两种方法,一种是加匹配电阻,位于总线两端的差分端口VA与VB之间应跨接120Ω匹配电阻,以减少由于不匹配而引起的反射、吸收噪声,有效地抑制了噪声干扰。
但匹配电阻要消耗较大电流,不适用于功耗限制严格的系统。
另外一种比较省电的匹配方案是RC 匹配,利用一只电容C 隔断直流成分,可以节省大部分功率,但电容C的取值是个难点,需要在功耗和匹配质量间进行折衷。
除上述两种外还有一种采用二极管的匹配方案,这种方案虽未实现真正的匹配,但它利用二极管的钳位作用,迅速削弱反射信号达到改善信号质量的目的,节能效果显著。
4.RO及DI端配置上拉电阻。
异步通信数据以字节的方式传送,在每一个字节传送之前,先要通过一个低电平起始位实现握手。
为防止干扰信号误触发RO(接收器输出)产生负跳变,使接收端MCU进入接收状态,建议RO外接10kΩ上拉电阻。
5.合理选用芯片。
例如,对外置设备为防止强电磁(雷电)冲击,建议选用TI的75LBC184等防雷击芯片,对节点数要求较多的可选用SIPEX的SP485R。
关于RS485总线通信调试和编程时需要注意的问题以下经验是自己在开发广电1KW多类型激励器数字发射机项目时的一些经验之谈,尤其对于新同事可能在今后工作中遇到类似问题时,也许在读完本文之后或许有可能会让他们少走点弯路吧,于是乎,在此记录下来。
关于RS485总线之于RS232的通讯距离更远、实现一对多通讯等等的多种优势就跳过直接不谈了,主要讲述一下实际工作中的遇到的问题、解决方法。
在本次工作前期,更换激励器,无非首要任务是要让新激励器与CCU通讯上,原设备采用的是串口复用方式在同一个RS485串口上与主备切换板等多个模块进行通信,在与系统组态的时候如果发现部分设备通信不上,我们就应该注意以下问题。
(一)、硬件层面:(1)、确保线路不短路,不断路。
其实这应该不是问题,但却是我们部分(尤其是软件工程师)容易忽视的问题,往往认为线路没有人动应该肯定是没有问题的,结果在软件上找了半天,最后发现原来却是最基本的断路问题就尴尬了。
之所以提出来是因为以前好像也有类似情况发生过,再者,大家不要笑话我,我在这也卡了一个下午,因为当时供应商只提供了一台新激励器,测试部和研发部以及其它部门都要用它,过于频繁的插拔线导致后面RS485与主备切换板的通讯线看似完好,实则里边断路了。
(2)、确保RS232转RS485时转出来时的接口线序问题。
很多时候惯性思路的以为,一般转出来的不就是RS232或者RS485的标准接口嘛,这不可能是问题,而一旦出现问题就很难发现,就比如这次德兴激励器,由于供应商德兴的激励器的硬件版本变化很快,他们做出来的RS232接口和配套的RS232转RS485的接头的数据收发TX和RX居然是与标准头是数据收发接头是反的。
当时也正是自己的“以为”也给我的通讯调试造成了一点滴小困扰。
(二)、系统层面:(1)、波特率配置这个应该一般人通讯不上,都会想到的,只是在这里再提一下。
(2)、通讯协议通讯协议就相当于语言规范,二个模块和设备通讯上不时,我们在确保硬件线没有问题后再确保是否所发命令是否按相关通讯协议在通信的。
(3)、地址位二个模块要通讯上,当然首先要能识别对方,一般采用地址位识别,如果通讯不上,我们首要检查的这个,事实上很多设备的地址位是可设的,就比如激励器,主备机的地址位不同且可调。
感觉有点像也是属于通讯协议的范畴。
以上是通讯调试时应该注意的问题。
接下来要说的是一些关于RS485软件编程要注意的问题。
(三)、软件编程:(1)通信交互方式RS485基本上采用一问一答的交互方式,主设备向从设备(这里是激励器)发送一条指令,从设备执行指令之后,返回一条应答命令。
为了减少数据流,德兴激励器的处理方法是在设置时并没有回复一个设置确认包来确认是否设置成功,而事实上我们是在不断查询激励器的数据回复包的,通过查询判断设置前后数据包的差异性来是完成可以判断是否设置成功的,这样很好的减少了没有必要的数据流在总线上的交互。
(2)数据接收处理方法(a)方法1:对于数据接收,最直观的想法是每接收到第1个字符之后,就立刻判断是否与本机地址匹配,否则停止接收数据,等待一段时间之后再接收。
(停止接收数据的目的在于丢掉该帧后续的数据。
)暂且把这个方法叫做方法1,事实上,对于这种方法,停止接收的时间段一般是固定的且预留得比较宽,有可能在停止接收的这个时间段内收到属于本机的数据帧,却没收到。
如过总线上数据量大的话,可能会一直存在这种问题,一直通信不上。
所以数据接收处理方法不合理也是会通讯不上的哦。
(b)方法2:和方法1不一样的是,在收到第1个字符之后,不立即处理,直到接收完整的长度(德兴激励器数据回包是LEN=65字节)后,再根据长度描述符定义的长度,接收完一帧之后再处理。
处理包括地址判断、CRC校验、以及协议解析等。
此方法2的特点:能很快的接收到完整的数据包,但是不是本地的数据包也接收进来了,对低端的CPU来说是个压力。
不过还好,我们公司的公司好歹是ARM9,应该问题不大。
(c)方法3:目前采用的是方法3,它也许不应该叫方法3的,因为只是在方法2的基础上增加了超时处理机制,收到1个字符之后,如果超过多长时间没有接收到下一个字符,则认为是数据包结束,对数据进行处理。
显然这样处理以后,虽然对CPU也许会有一定的压力(由于我们用的不是低端CPU,这里只是充分利用,不予以考虑),但是接收效果肯定是最好,且响应迅速。
(3)消息队列接收、发送阻塞与非阻塞的注意事项阻塞和非阻塞书上说的很专业,看起来有时也许都会晕,其实用我自己理解的意思就是:阻塞就是干不完不准回来;非阻塞就是你先干,我先看看有其他事没有,完了告诉我一声。
之所以提出这点,是因为当时调试的时候一度CPU占用率过高,有怀疑过是这里的原因。
消息队列可以说是Linux五大进程通信方法中比较经典的方法之一了,当然每种进程通信方式实现方式和功能不一样,带来适用的场景也有所不同。
关于消息队列,信号(Sinal)、管道(pipe)、信号量(Semaphore)等具体概念和使用方法不是本文重点,跳过不提,请自行百度。
消息队列主要用到的函数有以下三个(具体的使用方法请参考man手册,只做简易介绍):Int msgget(key_t key, int msgflag):获取或者打开一个消息队列;int msgsnd (int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg):发送一个消息到消息队列;参数msgflag:它可以设置为0;或者使用IPC_NOWAIT,如果消息队列已经满了,那么下次消息就不会写到消息队列中,控制将返回到对应进程中。
如果没有指明,调用进程会被挂起,直到消息可以写到消息队列中。
int msgrcv (int msqid, struct msgbuf *msgp, size_t msgsz,long msgtyp, int msgflg):从消息队列接收一个消息到msgbuf*;参数msgflg可以设置为0,代表该进程将一直阻塞,直到有消息可读停止。
但我们可以把该值设为IPC_NOWAIT 表示,如果没有消息可读时,则立刻返回-1,进程被挂起。
这里仅以查询命令发送和接收为例:/************************************************************* 函数名称:Dexing_snd_Exc_ReferCmdMsg** 功能描述:发送激励器查询命令到查询命令消息队列** 输入:*pcmd:消息缓冲区指针msgid:消息队列识别号** 输出:0 OR -1;** 全局变量:无** 调用模块:无** 日期:2014/11/05** 作者:zimo************************************************************/s32 Dexing_snd_Exc_ReferCmdMsg(s32 msgid, DEXING_EXCITER_REFER *pcmd) {s32 msglen = sizeof(DEXING_EXCITER_REFER)-sizeof(long);s32 ret;ret = msgsnd(msgid,(void *)pcmd, msglen ,BLOCK) ;if(-1 == ret){CCU_ERR("Send command message to RS485 bus failed.\n");perror("Dexing_snd_Exc_ReferCmdMsg:");printf("Send Refer command message to RS485 bus failed.\n");return -1;}return 0;}这里msgsnd采用BLOCK阻塞方式,事实上,有一点要注意的是msgsnd不管它是不是阻塞,它发送成功只表示数据写入缓冲区,不能代表数据被对面成功接受。
/************************************************************* 函数名称:Dexing_rcv_Exc_ReferCmdMsg** 功能描述:从查询命令消息队列中接收查询命令消息** 输入:*pcmd:消息缓冲区指针msgid:消息队列识别号** 输出:0 OR -1;** 全局变量:无** 调用模块:无** 日期:2014/11/05** 作者:zimo************************************************************/s32 Dexing_rcv_Exc_ReferCmdMsg(s32 msgid, DEXING_EXCITER_REFER *pcmd) {s32 timeout;s32 ret = -1;s32 msglen = sizeof(DEXING_EXCITER_REFER)-sizeof(long);timeout = RECV_RETRY_TIMES;usleep(20000);while(timeout --){Ret = msgrcv(msgid,(void *)pcmd, msglen ,FIFO, IPC_NOWAIT);CCU_ERR("msgrcv ret is %d\n", ret);if(-1 == ret)usleep(20000);elsereturn ret;}return ret;}这里采用IPC_NOWAIT的非阻塞方式,但又做了超时处理,很好的改善了系统资源占用过高的问题。
(4)其它软件编程注意事项以下为我们在软件编程时也应该注意的问题,只简略提下。
(a)、清零。
发送指令之前,一定记得先清空接收缓冲区,预防累加有其他无效的数据。
(b)、数据缓冲区要足够大。
这也是我在这次项目中遇到的一个BUG,由于自己的一时疏忽,新激励器的数据回包较原激励器的数据回包长度更长导致缓冲区不够造成BUG。
(c)采取非阻塞式发送大块的数据客户端接收数据不完整问题。
这个问题本应该不归在这的,因为讲的是socket服务器端和客户端的数据接收问题,只是又突然想起来以前做的一个项目,在此思维强化。
以上原因处理办法:数据还没发送完就拆线。
通信建立与拆线优先级别高于数据传输!设计通信系统时一定要注意,必须让接收端来拆线,确报数据接收完整。
发送端必须加时间判断,在一定的时间(如1分钟)对方未拆线在自己拆。
以上更多像是自己一个多月工作中遇到的问题总结,都是想到哪写到哪,以防自己以后再犯类似的错以及一些知识的在脑海中的强化,高手就可以直接跳过不看了啊。