紧接4-20mA电流环和RS-232,今天聊一下RS-485。毫不夸张的说,RS-485绝对是工控领域的扛把子。应用到底有多普遍?举个例子,目前支持RS-485的工控协议,包括且不限于Modbus, Profibus, CAN bus, Foundation Fieldbus, Siemens S7等等等等。可以这么说,凡是涉及工控总线(bus)的,那基本就得跟RS-485有点关系。工控领域,RS-485才是那个一直被挑战,从未被超越的江湖大佬。
P.S.: 别看川普总统最近很忙,又是封杀Tiktok、Wechat,又是拆除华为设备,有本事你把RS-485总线封杀了,设备全部拆除,那才是真牛逼。
(接上一篇)
(2)RS-485
RS-485也是一种串行通信技术,主要是为了改进RS-232的技术缺点(如传输速率低、通信距离短、点对点通信等)而制定的,标准确定年份是1998年,技术诞生时间更早(具体我也不知道,推测可能在上世纪七八十年代,因为我博导的博士论文做的是总线实时通信与建模,毕业时间1989年)。
上篇提到RS-232也是串行通信,有一根RX用于接收数据,一根TX用于发送数据,外加几根辅助信号线。RS-485总线也采用两根线(俗称双绞线,绞在一起是为了降低两根线之间的串扰噪声,以及工控环境中的电磁干扰噪声)进行数据通信,分别用A,B来表示。只不过,比特‘0’、‘1’不再用单纯的高低电平表示,而采用差分电平,如表1所示。注意:接的时候,A和B别接反了;线接反了,数据也就反了。
虽说如此,但是关于哪根信号线是A,哪根信号线是B的问题,目前已经变得非常混乱。甚至,部分公司的官方数据手册,采取了与RS-485标准完全相反的定义方法,即A定义成了B,B定义成了A,傻傻分不清楚。因此,在一个工控应用中,使用不同厂家产品的时候需要特别注意;建议按着一家的产品买,别给自己找麻烦。
表1 RS-485信号表示方法
信号线 | 比特‘1’ | 比特‘0’ |
A | 低电平 | 高电平 |
B | 高电平 | 低电平 |
在RS-485的接收端,比特‘0’与‘1’的判断标准如下(RS-485标准定义,部分厂家是反过来的,取决于哪根线定义成了A,那根线定义成了B)。而RS-485发射机的高低电平一般为±5V。差分信号改善了RS-485总线对工控电磁干扰的抵抗能力,因此传输距离也比RS-232有了很大的提升。
上一个RS-485收发机实物图,见图1。咋样?是不是非常简单,几块钱就可以买一个。右下角是RS-485接口,A,B,电源和地,左上角接单片机的UART和I/O,就可以DIY一个支持RS-485通信的工控设备。这也是为啥RS-485在工控领域,可以经久不衰——简单、实用、还便宜。单凭便宜这一点,就可以吊打TSN,5G,wireless等一众后期之秀。
图1RS-485收发机模块
那么如何利用RS-485总线连接工控设备,实现数据传输?见图2,基本上A,B别认反了,把线接上就行了,非常简单。另外,一般会在总线的两头,接120欧的电阻(不用很准,最便宜的那种就行),降低RS-485信号的反射干扰。
图2RS-485总线示意图(图不是我画的)
这种接法,大家可能也发现了问题所在。因为A,B两个线是多个RS-485设备共享的,那如果它们同时发送数据,信号之间不就相互干扰了?非常正确!这时候就用到了古老的Master-Slave模式。也很简单,就是有一台设备充当Master,其它设备都是Slave。Master说了算,它说谁发数据,谁就发数据,其它Slave的都听着。一般Master会产生一个令牌(Token),它想让谁发,就会把这个令牌发给谁。那令牌是咋实现的?也是通过数字信号来实现的。比如,大家约定好,‘10101010 0101 0101+设备地址+校验’是令牌帧,那收到令牌帧的Slave,检查一下设备地址是不是跟自己匹配,匹配的话就可以开始发送数据了。这种方式,最大的好处就是,资源统一调配,保证了通信的时延、丢包、误码等都是确定性的(俗称deterministic communication)。这一特性,让RS-485总线,在工控领域混的风声水起,丝毫没有退位让贤的意思。
当然,RS-485总线也不是完美的。一方面,作为一个有线技术,离不开A、B这两根线,布线是需要钱的,尤其是面对大范围、连接多个设备的需求;厂房新建的时候往往还好,后期升级改造比较要命(可以参见房子重新装修)。当然,所有有线技术都有这个问题。另一方面,就是添加新设备、或者有设备故障需要退出时,为了满足工控实时性等方面的需求,通常需要对整个总线进行重新配置等等。
另外,在工业互联网的大背景下,工控安全问题也逐渐凸显。在RS-485总线里, A、B两跟线是共享的,设备通信需要遵循 一定的规则,但是如果有设备遭受攻击,打破了既定规则怎么办?比如说,有设备不等拿到令牌,就开始发送数据,并且不停的发,恶意干扰其它设备的通信。因为媒介是共享的,很难发现具体是那台设备出问题了;发现了,也不容易从技术上解决,只能派人去把线剪了。
最后,不罗嗦。按惯例,总结一下RS-485总线的技术指标:
(1)传输速率:< 10 Mbps
(2)传输距离:1200米
(3)部署经验法则:传输速率(bps) X 传输距离 (米) < 108