RS485通信和Modbus通信协议汇总
1. 主从模式
RS-485上的软件层协议ModBus主要采用主从模式。主从模式即为两个或以上设备构成的通信系统中,在半双工通信方式下运作的一种通信架构。

(1) 至少且只有一个主机,其他的都是从机
(2) 不管任何时候,从机都不能主动向主机发送数据
(3) 主机具有访问从机的权限,从机不可以主动访问从机,任何一次数据交换,都要由主机发起
(4)不管是主机还是从机,系统一旦上电,都要把自己置于接收状态(或者称为监听状态)
主从机的数据交互,需要:
a. 主机将自己转为发送状态
b. 主机按照预先约定的格式发出寻址数据帧。
所谓的约定,可是主机开发者和从机开发者约定好的规约,好,例如主机要通过从机控制接在从机的电机,主机要启动电机就往从机发0x1,停止电机就往从机发0x2。这就是一种预
先约定好的格式,但是这样做,互换性、兼容性、通用性差,例如其他公司是约定发送0x03让电机转动,发0x04让电机停止。导致不同厂家的主机、从机不能相互通讯。用户需要的,就像网络操作,只要接入有网的网线那么计算机都能上网。
所以说,我们需要一种大家都共同遵循的规则(可以是ModBus,也可以是TCP/IP等上层协议),这种大家认可,共同遵循的软件层协议。软件层协议主要是解决如何解析传输的数据,即传输的目的或者更加可靠的传输数据。
半双工通讯中,都是主机寻找从机,主机的目的无非有: 主机要发数据给从机,或者主机要从从机中获取数据。
c. 主机恢复自身的接收状态
主机等待自身所寻址的从机作回应,也就是说从机接收到主机的寻址命令、数据后一定要回应主机,不然主机会认为从机通讯异常。回应数据包也是要按照ModBus协议规约(其实不局限ModBus,像TCP/IP也需要回应是吧!~)
2. ModBus通讯协议
通俗来讲,在Modbus协议中明确了主从两端的启停控制逻辑,在这种架构下, 主控制器需要向各个从端设备发送相应的控制指令. 该协议不仅规定了主从机之间数据交换的方式, 更明确了在不同场景下的具体操作流程. 只要各方设备均严格遵守该协议, 就能够实现设备间的互联互通.

虽然传统的485总线是常用的连接方式之一,但现代系统中也广泛采用IIC、SPI等多种总线协议以提高通信效率
ModBus规定:(1)主从模式
(2)从机地址分配原则
从机的地址有两个重要作用
(3)ModBus数据包格式规范
RTU编码特点
ASC编码工作原理
显然,RCT编码由于其高效性在实际应用中更为常见,
而ASC编码由于其不可逆性导致信息丢失因此较少使用
总结而言(Modbus是一种高效可靠的工业控制通信协议,
它通过灵活的数据编码方式实现了高可靠性与兼容性),
值得在工业自动化领域广泛应用并深入研究其优化方案
特别强调,在遵循RS-485硬件协议的前提下,在每个字节数据传输过程中都是先发送高位后发送低位。基于此假设,在接收端解析数据时,默认将接收到的数据存储于u8型数组revArr中,则相应的16位整数data应计算为data = revArr[0] * 256 + revArr[1]。
在工业控制、电力通讯及智能仪表等技术领域中普遍采用串口通信的方式进行设备间的数据交换。早期常用的是RS232接口,在工业现场由于各种电气设备的存在会产生较多的电磁干扰而导致信号传输出现错误。此外 RS232接口仅能实现单点对单点之间的直接通信 不具备网络化连接功能 其最大传输距离仅能达到几十米 这一限制使其无法满足远程通信需求
而RS485则克服了这些问题。数据信号采用差分传输技术,并能有效地解决共模干扰问题。其最大传输距离可达1200米,并可允许多个收发器连接到同一条总线上。随着工业应用通信越来越普及,在1979年施耐德电气制定了一种适用于工业现场的总线协议——Modbus协议。如今,在工业领域中使用RS485通信的情况较多时多采用Modbus协议。因此今天我们将深入探讨RS485通信与Modbus通信协议。
【RS485通信】
实际上在RS485之前RS232就已经诞生,但是RS232有几处不足的地方:
接口的信号电平偏高,超过10伏特,在这种情况下可能导致芯片损坏,并且这种工作状态无法直接与TTL电路兼容;因此在连接单片机时需要配置相应的转换电路以实现兼容性。
2、传输速率有局限,不可以过高,一般到几十Kb/s就到极限了。
3、接口采用信号线与GND与其他设备建立共地模式的通信,在这种共地通信方式下会容易引发干扰,并呈现较弱的抗干扰能力
4、传输距离有限,最多只能通信几十米。
5、通信的时候只能两点之间进行通信,不能够实现多机联网通信。
针对此问题持续存在不足之处,在长时间的使用过程中也遇到了诸多不便与挑战。 RS485作为一种新的接口标准之一,在众多现有技术的基础上进行了创新性设计与优化,并且在传输距离、带宽以及抗干扰能力等方面都较之前的标准有了显著提升。
采用两线间的电压差为±(2—6)V来表示逻辑1和逻辑0。其中当两线间的电压差为+(2—6)V时代表逻辑1;反之当电压差为-(2—6)V时代表逻辑0。该接口信号工作电平较RS232C较低从而保护了芯片免受损坏并且其工作电平与TTL兼容便于与其电路进行连接
2.RS485通信速度快,数据最高传输速率为10Mbps以上
RS485内部采用了平衡驱动器与差分接收器的组合配置,在抗干扰能力方面明显提升
4.最高可达约1200米,然而该系统的传输速率与其传播距离呈反相关关系,仅当数据传输速率达到100KB/s以下时,才能实现最长距离的有效通信;若要实现更长的距离通信,则需借助中继设备辅助完成.
该网络总线系统可实现多机互联通信功能,并支持在总线上连接多个收发器装置。现有RS485系列芯片能够兼容并连接32至256个不同规格的设备模块以满足复杂网络需求
基于平衡传输技术和差分接收原理的RS-485通信系统能够有效抑制共模干扰;该系统采用单向通信模式工作,在特定时刻只有发送电路处于启用状态;在多点连接场景下非常实用,在这种网络架构下仅当需要远距离通信时才选用该标准作为传输介质;只有通过一台主控制器才能协调所有节点的信息共享;这种网络结构仅允许存在一个主控制器节点;其余节点则作为从节点参与通信
RS485系统分为两线制与四线制两种配置模式;其中四线制电路仅支持主从型通信模式,如今已很少采用,多采用的是两线制总线型接线方案,这种设计使得在同一总线上可连接多达32个节点;在RS485数据传输网络中,通常情况下,默认设置下仅将各端子的A,B端通过双绞电缆直接相连,这种做法在实际应用中往往能正常运行,但存在潜在的风险性问题;具体原因有两个:其一由于缺少信号地的有效连接可能导致高频信号衰减严重甚至产生干扰;其二未采取正确的滤波措施容易引发数据传输误码率上升等问题
(1) 共模干扰问题是RS-485接口通过差分传输信号的方式实现的,并未依赖于相对于参考点的检测;而系统仅需关注两条线之间的电位差即可。然而人们常常忽略了接收器存在一定的共模电压限度,在这种情况下RS-485收发器的工作状态才会得以维持。具体而言,在电路中若出现超过规定范围(从-7伏至+12伏)的共模电压,则可能导致通信链路不稳定并降低可靠性;在极端情况下甚至会损坏设备连接端子。
(2) EMI问题:实现共模信号的有效回路需要设置一个返回通路。若缺乏一个阻抗低的回路(如信号地),则会导致电磁波以辐射形式从源端散失到外部环境。这会严重影响总线系统的工作性能甚至引发故障。由于标准个人计算机默认配置仅配备RS-232接口,在获取具备更高传输性能的RS-485电路时有两种主要方法可供选择:第一种方法是采用RS-232至RS-485转换模块将原始PC串口模拟数据转换为工业通信接口格式,在复杂度较高的工业环境中建议选用具备抗干扰能力的高阻隔组件;第二种方法则是通过部署PCIe多通道卡可直接配置外部设备提供符合工业标准的RS-485通信接口
【Modbus通信协议】
Modbus协议是一种被广泛应用于工业控制领域的通用通讯协议。它通过定义一套标准的消息格式与服务程序,实现了不同设备间的高效通信与数据传输。该协议通过统一的消息规范,使得来自不同厂商的控制设备能够方便地连接到同一个工业网络中,实现集中监控与管理。Modbus协议为工业自动化系统提供了一个标准化的基础框架,使得设备间的交互过程更加简便可靠。通过这一协议,控制器能够发送请求、接收反馈并处理故障信息,从而实现了对远程设备的有效控制与管理
Modbus具有以下几个特点:
符合行业标准并具有开放性的一套通信协议系统,在线用户均可免费获取相关技术资料,并可放心操作该系统以实现数据传输与设备控制功能。该协议系统无需支付任何许可证费用,并且不会侵犯任何知识产权。当前已有超过400家厂商支持这一协议标准,并推出了超过600种相关产品型号供市场选择。
Modbus兼容多种标准如RS-232及RS-485,并能在不同传输介质中使用包括双绞线光纤及无线等多种方式。
(3)Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。
R【TU协议帧数据】
Modbus采用两种不同的通信传输方式,在本研究中主要采用其中的一种即RTU(Remote Terminal Unit)通信模式
与我们现有的串口通信程序类似,在发送数据时必须确保每次发送的数据显示为一个连续的字节流。在我们的串口通信程序中采用的方法是将数据接收窗口设置为30毫秒。若在接收数据的过程中未能及时获取到下一个字节,在达到30毫秒的时间限制后我们将视作本次数据传输已结束。Modbus的RTU通信模式要求不同数据帧之间至少相隔3.5个字节的时间间隔。若在接收当前数据的过程中出现超过3.5个字节的时间中断,在完成接收当前数据包之前接收设备将重置当前消息并假定下一个接收到的字节是一个新的数据包开头。同样的情况,在接收设备看来可能会将后续接收到的数据视为前一数据包的延续。这种处理方式会导致错误的发生。每个RTU数据帧末尾都会附带一个16位的数据校验码(CRC)。
起始位与结束符之间设置不低于3.5个字节的时间间隔。这些标志字段并未存储任何数据信息。其中T1至T4字段标记表示超过3.5个字节的时间跨度。而第一个具有意义的字节编码则直接对应设备地址信息。
在多机通信场景中,在接收大量数据时需要判断每条数据来自哪个设备的关键在于该设备的唯一性标识——设备地址字节。每个设备都拥有一个独特的标识符用于标识其来源。当接收方接收到一帧数据后,系统首先会对该帧中的设备地址字节进行比对:若与当前处理的设备标识符不一致,则直接过滤掉这帧数据;若吻合,则进入后续的数据解析流程,并根据功能码字段来执行相应的操作;若检测到的地址字段值为0x00,则视为一个广播指令(Broadcast Command),所有接收方都需要执行的指令。
在Modbus协议的第二个字节中规范了若干功能码的同时仍保留一部分作为备用或供用户自定义使用这些功能码无需刻意记忆甚至无需查看直至需要用的时候回过头来查阅这个表格即可
CRC检验:CRC检验是一种用于核实信息准确性的方式。该方法通过一种特定的数据算法对一帧信息中的大部分字节进行运算,在运算完成后会得到一个16位的结果作为检验码,并将其附加在该帧信息之后。当接收端接收到这一信息时也会对该部分信息应用同样的运算方法进行核验,在运算结果与接收到的信息中的检验码相一致时则认为传输过程无误;若两者不一致则表示传输过程中发生了错误从而导致该帧信息丢失就像并未收到一样而发送端在未获得确认的情况下将采取相应的错误处理措施。
鼎酷IOT部落(dkiot888)是由鼎易鸿基与万酷电子强强联合推出的新媒体平台。该平台致力于成为物联网领域的知识分享中心,在紧跟行业发展前沿的同时专注于为您提供专业的技术资讯与应用方案。我们的目标是打造您身边的物联网智慧助手——通过构建开放共享的学习生态让用户便捷获取知识并促进交流合作。所有信息同步至我们的官方公众平台,并热忱欢迎您的咨询与建议,请随时联系。
