MODBUS应用实例——使用MODBUS通信协议实现PLC对模拟量信号的采集
MODBUS应用实例——使用MODBUS通信协议实现PLC对模拟量信号的采集
阅读:138

0 引言

MODBUS是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。 [1] Modbus比其他通信协议使用的更广泛的主要原因有: [2]


公开发表并且无版权要求;

易于部署和维护;

对供应商来说,修改移动本地的比特或字节没有很多限制。

MODBUS协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。大多数MODBUS设备通信通过串口RS-485物理层进行。RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,多采用的是两线制接线方式,这种接线方式为总线式拓扑结构,在同一总线上最多可以挂接32个节点。两线制RS-485通信链路采用双绞线进行联接,连接时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来。RS-485接口采用差分方式传输信号方式,并不需要相对于某个参照点来检测信号,系统只需检测两线之间的电位差就可以了,但收发器有一定的共模电压范围,RS-485收发器共模电压范围为-7到+12V,只有满足上述条件,整个网络才能正常工作;当网络线路中共模电压超出此范围时就会影响通信的稳定可靠,甚至损坏接口,因此需要注意信号地的连接。RS485总线传输距离较远,可达1000米,抗干扰性能比较好,在工业控制设备的通讯中被广泛使用,现在众多厂家的变频器、控制器都采用了该协议。


MODBUS协议对于串行连接。是一个用于RS485的应用最广泛的通信协议,其总线传送数据格式有HEX码数据和ASCII码两种,分别称为MODBUS-RTU和MODBUS-ASC 协议,前者为数据直接传送,而后者需将数据变换为ASCII码后传送,因此MODBUS-RTU协议的通讯效率较高,处理简单,使用得更多。MODBUS为单主多从通讯方式,采用的是主问从答方式,每次通讯都是由主站首先发起,从站被动应答。因此,如变频器之类的被控设备,一般内置的是从站协议,而PLC之类的控制设备,则需具有主站协议、从站协议。


本文通过汇川H2u系列PLC采集一个模拟量光电接近开关的应用为例,说明MODBUS协议的使用方法。


1 MODBUS协议

MODBUS协议是一个主从架构的协议。有一个节点主战,其他使用MODBUS协议参与通信的节点都是从站。每一个从站都有一个唯一的地址。在串行网络中,只有主站可以启动和发送一个命令。这些指令包括写入、读取、广播指令等。


一个MODBUS命令包含了打算执行的设备的MODBUS地址。所有设备都会收到指令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会运行,不过不回应指令)。所有的MODBUS指令包含了检查码,以确定到达的命令没有被破坏。若存在多条MODBUS指令,其执行顺序是这样的:从开机开始,扫描第一条被驱动的MODBUS指令,若扫描到,把该MODBUS的参数记录下来,在后台执行。执行完后,返回用户程序,从刚执行的MODBUS指令位置开始扫描下一条被驱动的MODBUS指令并执行,周而复始。


主站一般为PLC,PLC中有相应的通信设置寄存器,可以选择MODBUS-RTU或MODBUS-ASC等,以及设置串口波特率、数据长度、停止位、奇偶校验等。PLC中有相应的通信发送指令以及相应数据格式。MODBUS-RTU发送的数据格式一般如下所示:


1)从站地址:要操作的目标设备地址。


2)功能码,由标准MODBUS协议定义,目前支持功能码有0x01,0x02,0x03,0x04,0x05,0x06,0x0f,0x10。具体含义请参照标准MODBUS协议或目标设备MODBUS协议。


3)要读或写的从机线圈(1位)或寄存器(16位)地址,取值参考从机MODBUS协议。


4)所要读写的从机线圈或寄存器个数,可为元件或常数。


5)CRC校验码。


从站返回的数据格式如下:

2 系统构建

本文建立了一个简单的系统来说明MODBUS的用法,系统的主站是汇川H 2u系统PLC,从站为一台模拟量转485模块带一个模拟量接近开关。模拟量接近开关输出信号为0-10V直流电压信号,模拟量转485模块输入信号为0-10V。系统的接线原理图如图1所示。



图1 PLC读取模拟量接近开关系统接线原理图


其中的PLC只绘制了与系统有关的部分,I/O信号及其他接口部分已省略。这样一个小系统有什么用途呢?他可以使用廉价的模拟量开关对运动的系统进行定位,例如下图的例子:

图2 模拟量接近开关使用场合


3 PLC编程

汇川H1U /H2U系列PLC的COM1通讯口可以使用MODBUS-RTU和MODBUS-ASC指令,可做主站也可做从站,通过系统寄存器D8126选择具体的通信模式。

H2U系列PLC中MODBUS主站通信有两种通信指令,当D8126设置为10h时为RS扩展指令、当D8126设置为20h时为MODBUS指令。两种方式都要设置D8120确定通信参数。

使用RS指令时需要设置D8120的b10位,而使用MODBUS指令时不需要设置此位。


RS指令格式:

RS指令格式为:


RS(TXDADDR,TXDLEN,RXDADDR,RXDLEN);


TXDADDR:要发送数据地址,必须是D元件;


TXDLEN:发送数据长度,可以是变量和常数;


RXDADDR:接收数据地址:必须是D元件,编程时要留够空间;


RXDLEN:接收数据长度,可以是变量和常数。


发送请求命令:M8122,若程序把M8122置为ON,并且RS指令被驱动,即从TXDADDR指定的D元件地址起,发送TXDLEN个数据到COM1(若指定有起始符或中止符,会一起发出)。发送完成后系统自动复位M8122。接收标志:M8123,接收数据完成后,M8123自动置为on,复位将进入下一次接收状态。


RS指令之前需要编程人员事先将要发送的数据按照MODBUS-RTU发送的数据格式保存在TXDADDR中。


MODBUS指令

此指令只能用于COM1通信,若D8126=20h,COM1协议为MODBUS-RTU主站(指令);若D8126=30h,COM1协议为MODBUS-ASC主站(指令);用哪种指令由从站所支持的协议格式定,若从站两种协议都支持而用户要求较快速的通信,建议选用RTU协议。两种协议只是通信格式不一样,对用户编程都一样,下面仅就RTU协议做说明。


MODBUS指令的语句也叫RS,其指令格式如下:


RS(ADDR&CMD,REGADDR,REGLEN,DATABUF)


ADDR&CMD:从机地址和MODBUS功能码,高8位表示从机地址,即目标设备地址。低8位表示MODBUS功能码,0x01,0x02表示读线圈,0x03,0x04表示读寄存器,0x05表示写单个线圈,0x06表示写单个寄存器,0x0f表示写多个线圈,0x10表示写多个寄存器。

REGADDR:所要读或写的从机线圈(1位)或寄存器(16位)地址,取值参考从机MODBUS协议。可为元件或常数。

REGLEN:所要读写的从机线圈或寄存器个数,可为元件或常数。

DATABUF:只能为D元件。本机用于存放数据的起始寄存器,即数据缓冲区。缓冲区长度与REGLEN相关,至少取1。若MODBUS命令为读,指令成功执行完后,把从机数据读到缓冲区中,若MODBUS命令为写,把缓冲区发送给从机。用户在设计程序时需要计算缓冲区长度,预留足够的寄存器作缓冲区。


具体到本例,通信方式选择主站MODBUS-RTU,因此为D8126赋值20h,D8120设置串口参数为8位数据,无校验,1位停止位,波特率为4800bps。从站地址为1,功能码为03(读寄存器),从站中存放模拟量的地址为H40(需要从模拟量转485模块的说明书中获得),读取2个字,存放在D210中。HC5DF为指令的CRC校验码,存放在D203中,即发送数据的最后一个字,低位在前,高位在后。CRC校验码可以在网上下载专用的计算器计算。PLC程序如下图所示。

MODBUS从站。

最后说一下MODBUS从站的用法,一般系统中除了工控机、HMI设备和PLC以外的设备都处于从站模式,当PLC由工控机或者另外一个PLC控制时也可以设置成从站模式,此时寄存器D8126的值为02h。寄存器D8120的设置与主站一致。


从站的编程比较简单,如果是读操作只要将需要需要被读取的数据写入约定好的寄存器即可,如果是写操作,直接使用约定好的寄存器的数据即可,不需要向主站发送指令。


以下指令表示将X0-X7,X10-X17的状态放置在D120中供主站读取,同时将主站发送到D106中的数据分解到Y10-Y17各位上,作为输出。

4 总结

RS485是硬件简单、通信距离比较长的串口总线,总线上可以携带32个站点,因此可以满足小型的工业现场系统的应用。MODBUS是广泛应用的用于RS485串口总线的通信协议,MODBUS采用主从模式,只有一台设备作为主站,其他设备作为从站。指令全部由总站发出,可以对从站进行读写。从站不能够主动向其他设备发送指令,只需要将需要发送的数据放入约定好的寄存器中,并从约定好的寄存器中直接使用接收的数据。发送指令的格式一般包括从站地址+功能码+从站寄存器地址+数据长度+CRC校验码,反馈指令的格式一般包括从站地址+功能码+数据长度+从站数据+CRC校验码。具体的指令格式、寄存器地址、通信参数设置要参照各个设备的使用说明书。


相关文章
外贸独立站点的国外支付接口Paypal对接示例
外贸独立站点的国外支付接口Paypal对接示例
阅读:112
uniapp将图片转换为base64字符串的方法
uniapp是很常用的开发平台,前端操作经常需要将图片转换成base64字符串,这就是uniapp的解决方案
阅读:93
uniapp 图片裁剪插件推荐
uniapp 图片裁剪插件推荐
阅读:91