刘立博,丁茹
(沈阳理工大学机械工程学院,辽宁 沈阳 110159)
Modbus通信协议是由美国Modicon(莫迪康)公司于1979年发明的,2004年,中国国家标准委员会正式将Modbus作为国家标准。由于其开放性、可扩展性和标准化使其成为工控领域应用范围最广的通信协议,通过Modbus协议可以将不同厂商的不同设备以简单可靠的方式接入通信网络,实现系统的集中监控、分散控制功能。
台达DVP系列PLC具有网络通信功能,其COM2(RS485接口)支持主站(master)或从站(slave)之通信协议。利用其自带的Modbus读写相关应用指令,可以实现PLC与多种设备之间的主从、从主通信。本篇论文采用一台DVP系列PLC与一个美国ATMEL公司的ATMEGA2560单片机实验板和一个触摸屏(HMI)组成通信网络,其中单片机与PLC之间利用Modbus RTU协议建立主从通信,将单片机采集到的距离、运动姿态传感器数据传输到PLC中做储存,触摸屏与
PLC之间通过Ethernet(以太网)建立通信,再由触摸屏显示出来,为PLC控制扩展出一个基于Modbus协议的位姿监控功能,其硬件原理框图如图1所示。图1中,Trig为触发测距引脚;Echo为返回测距结果引脚;SDA为串行数据引脚;SCL为时钟引脚;MAX485为TTL转RS485转换器。
图1 硬件原理框图
在串行链路中,Modbus作为一种简单的主从协议(客户机/服务器协议)进行通信。客户机作为主站向服务器发送请求;服务器(从站)接到请求后,对请求进行分析并作出应答。Modbus通信协议主要具有两种模式,分别是ASCII(美国标准信息交换代码)模式和RTU(远程终端单元)模式。在ASCII模式中,数据位中的每个8bit都被分为两个ASCII字符发送,消息帧的开始与结束处有标记并且采用的是简单一些的LRC校验方式。这种模式的优点是操作简单并且不容易产生错误,缺点是数据传输效率比较低,不适用于数据较多的情况下使用。在RTU模式中,数据位中的每个8bit包含两个4bit的十六进制字符,消息帧的开始与结束处没有标记但采用的是复杂一些的CRC校验方式。这种模式的优点是在相同波特率的情况下,数据传输效率比较高。本文中的通信需要传输多组传感器数据,所以采用的是Modbus-RTU模式进行通信。Modbus的通信帧被称为应用数据单元(Application Data Unit,ADU),其包括通信地址段、功能代码段、数据段和校验段,功能代码段和数据段组合成为协议数据单元(Protocol Data Unit,PDU),具体结构如图2所示(RTU模式)。
图2 Modbus-RTU通信帧结构
起始位与结束位:通信帧的起始与结束字符,因为RTU并没有在开始与结束处进行标记,因此,多个Modbus通信帧之间的时间间隔要大于3.5个字符的时间才能成功识别通信帧。
设备地址:Modbus通信中从站设备的地址,其有效范围是0~247(十进制)。
功能代码:在Modbus协议中已经规定了一些通用的功能代码如:01功能码表示读取线圈状态;02功能码表示读取离散量状态;03功能码表示读取保持寄存器等。
数据区:数据区中有2个16进制的数据位,数据范围是00~FF(16进制)。
CRC校验:循环冗余校验。
本设计中,PLC与单片机间通过RS485接口通信,PLC的从站通信设置程序如图3所示。
图3 从站通信设置梯形图
图中,由特殊功能继电器M1002在PLC启动时提供正向脉冲,触发程序启动。首先,通过对D1120赋值对RS485通信格式进行设置:数据长度为8,无奇偶校验,通信停止位设置为1,通信传输速率设置为9600,无起始与结束字符。M1120置位则设定通信格式保持。对D1129赋值K100设置通信逾时的时间为100ms。M1143置位则通信模式为Modbus-RTU模式。辅助继电器M0的功能为将M1122(COM2送信要求)置位并启动MODRD指令,其中K1为将联机装置地址设置为1,H1100为第一笔数据在PLC中的通信地址,K5为读取数据的笔数,此指令的执行结果为通过Modbus依次读取H1100、H1101、H1102、H1103、H1104数据地址中的当前数据信息并将返回值以十六进制数值形式依次储存到特殊数据寄存器D1073、D1075、D1077、D1079、D1081中,此时,通信成功标志特殊功能寄存器M1127闭合,同时,将数据传送给一般寄存器D0~D4做显示(D0~D4对应触摸屏中5个数据显示窗口内存地址),随之将M1127复位。M1129特殊功能辅助继电器的作用是当PLC或单片机发生某些突发情况造成通信逾时的情况下,自动将M1129置为on,程序中由M1129触发送信要求M1122再读取一次,同时,将M1129复位。
单片机的程序包含Modbus的主站通信程序以及对超声波测距传感器和运动姿态传感器的应用程序,采用ARDUINO IDE开发环境,使用C语言编写,使用Kalman库、Wire库以及Math库对运动传感器回传的数据进行解析,使用ModbusMaster库对Modbus主站进行通信设置。主程序流程图如图4所示。
图4 主程序流程图
在主循环程序中,需要对各传感器回传的数字量信号进行解算处理。对于日本TDK公司的MPU6050运动姿态传感器:首先,利用Wire库读出传感器内部寄存器中的测量值,由于噪音等因素的影响,该值存在数据偏移的现象,所以对偏移量进行校准,之后利用Math库计算出各运动参数,为进一步保证各参数的准确度,最后,利用Kalman库对各运动参数进行滤波处理得出最终的运算结果。其中,横滚角Roll与俯仰角Pitch的计算公式为:
式中,x、y、z分别为加速度计的三个坐标轴分量(存储于MPU6050芯片内部寄存器)。
横滚角速度RollRate与俯仰角速度PitchRate的计算公式为:
式中,Gyrx与Gyry分别为角速度计的x轴与y轴的分量(存储于MPU6050芯片内部寄存器)。
对于HC-SR04超声波测距传感器:首先,触发传感器发出超声波脉冲,然后,等待反射回的脉冲,使用pulseIn()函数记录此过程的时间t并换算出距离distance(cm)。即为:
式中,pulseIn()所记录的时间t单位为微秒,声速v为344m/s,所以距离distance=344*100/1000000*pulseIn()/2约等于pulseIn()/58.0。
最后,利用ModbusMaster库中的node.writeSingleRegister指令,将各数值存入相应寄存器中。具体程序如下:
其中,Modbus通信地址与PLC通信地址的对应关系如表1所示。
表1 DVP系列PLC装置通信地址(部分)
为验证传感器测量的数据是否成功通过Modbus协议经过单片机与PLC回传到触摸屏上做显示,按照本文所述方案搭建实验电路如图5所示。将PLC程序与单片机程序成功焼写之后,经上电测试可以实现Modbus通信,所显示数据均为传感器实际测量的数据。
图5 实验电路
本文着重介绍了Modbus协议的基本结构与原理,设计了基于Modbus-RTU协议的单片机与台达DVP系列PLC的主从通信系统,实现了对HC-SR04超声波测距传感器以及MPU6050运动姿态传感器所测量数据的传输,搭配功能灵活的单片机为PLC扩展出位姿监控功能。该系统可搭配多种传感器应用于各种需要数据传输的PLC控制系统中,为其它基于台达DVP系列PLC的功能扩展提供了很好的参考。