随着工业应用通信越来越多,1979年施耐德电气制定了一个用于工业现场的总线协议modbus协议,现在工业中使用rs485通信场合很多都采用modbus协议,本篇文章我们具体介绍一下rs485通信和modbus协议。
一、rs485通信
实际上在rs485之前rs232就已经诞生,但是rs232有几处不足的地方:
1、接口的信号电平值较高,达到十几v,容易损坏接口电路的芯片,而且和ttl电平不兼容,因此和单片机电路接起来的话必须加转换电路。
2、传输速率有局限,不可以过高,一般到几十kb/s就到极限了。
3、接口使用信号线和gnd与其他设备形成共地模式的通信,这种共地模式传输容易产生干扰,并且抗干扰性能也比较弱。
4、传输距离有限,多只能通信几十米。
5、通信的时候只能两点之间进行通信,不能够实现多机联网通信。
针对rs232接口的不足,不断出现了一些新的接口标准,rs485就是其中之一,他具备以下的特点:
1、我们在讲a/d的时候,讲过差分信号输入的概念,同时也介绍了差分输入的好处,大的优势是可以抑制共模干扰。尤其工业现场的环境比较复杂,干扰比较多,所以通信如果采用的是差分方式,就可以有效的抑制共模干扰。而rs485就是一种差分通信方式,它的通信线路是两根,通常用a和b或者d+和d-来表示。逻辑“1”以两线之间的电压差为+(0.2~6)v表示,逻辑“0”以两线间的电压差为-(0.2~6)v来表示,是一种典型的差分通信。
2、rs485通信速度快,大传输速度可以达到10mb/s以上。
3、rs485内部的物理结构,采用的是平衡驱动器和差分接收器的组合,抗干扰能力也大大增加。
4、传输距离远可以达到1200米左右,但是他的传输速率和传输距离是成反比的,只有在100kb/s以下的传输速度,才能达到大的通信距离,如果需要传输更远距离可以使用中继。
5、可以在总线上进行联网实现多机通信,总线上允许挂多个收发器,从现有的rs485芯片来看,有可以挂32、64、128、256等不同个设备的驱动器。
二、modbus协议
modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其他设备之间可以通信,已经成为一种工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。这种协议定义了一种控制器能够认识使用的数据结构,而不管它们是经过何种网络进行通信的。它描述了控制器请求访问其他设备的过程,如何回应来自其他设备的请求,以及怎样侦测错误记录,它制定了通信数据的格局和内容的公共格式。
在进行多机通信的时候,modbus协议规定每个控制器必须要知道他们的设备地址,识别按照地址发送过来的数据,决定是否要产生动作,产生何种动作,如果要回应,控制器将生成的反馈信息用modbus协议发出。
modbus协议允许在各种网络体系结构内进行简单通信,每种设备(plc、人机界面、控制面板、驱动程序、输入输出设备)都能使用modbus协议来启动远程操作,一些网关允许在几种使用modbus协议的总线或网络之间的通信。
modbus有两种通信传输方式,一种是ascii模式,一种是rtu模式。由于ascii模式的数据字节是7bit数据位,51单片机无法实现,而且应用也相对较少,所以应用较多的rtu模式。
起始位和结束符:上图代表的是一个数据帧,前后都至少有3.5个字节的时间间隔,起始位和结束符实际上没有任何数据,t1-t2-t3-t4代表的是时间间隔3.5个字节以上的时间,而真正有意义的一个字节是设备地址。
设备地址:在多个传感器通信的时候,数据那么多,我们依靠什么判断这个数据帧是哪个设备的呢?没错,就是依靠这个设备地址字节。每个设备都有一个自己的地址,当设备接收到一帧数据后,程序首先对设备地址字节进行判断比较,如果与自己的地址不同,则对这帧数据直接不予理会,如果与自己的地址相同,就要对这帧数据进行解析,按照之后的功能码执行相应的功能。如果地址是0x00,则认为是一个广播命令,就是所有的从机设备都要执行的指令。
功能代码:在第二个字节功能代码字节中,modbus规定了部分功能代码,此外也保留了一部分功能代码作为备用或者用户自定义。
