APP下载

基于RS-485总线的MODBUS 通信协议在单片机上的实现

2019-08-23马亚玲

通信电源技术 2019年7期
关键词:通信协议校验上位

马亚玲

(云南省玉溪技师学院 玉溪工业财贸学校,云南 玉溪 653100)

0 引 言

仓库进行智能化改造时,要求可以在值班室显示仓库当前温湿度参数,并能够在值班室对仓库现场的除湿和通风设备进行远程控制。由于产品成本控制非常严格,所以在值班室计算机上安装组态软件作为上位机,仓储现场采用单片机控制装置与除湿通风设备相连,并将温湿度传感器参数接入到单片机中,上位机和单片机采用串行通信进行信息的交换。需要搭建通信网络,并进行上位机和单片机之间通信程序的开发。本文主要介绍上位机和单片机之间通信网络及通信协议的选择,重点论述单片机和上位机之间串行通信通信程序的开发实现。

1 通信网络和通信协议的选择

随着工业现代化及信息化的迅猛发展,单片机控制已经从传统的本地控制向远程控制、网络控制发展,设备信息的采集和显示也由本地处理、分散显示向远程采集、集中显示发展。单片机控制功能的改变对其应用开发提出了新的要求。单片机开发应用人员需要掌握与单片机相关的通信网络和通信协议。

但在目前的单片机应用中,主要还是以本地数字量的采集和控制为主,很少涉及通信,即便是涉及通信部分,也只是采用RS-232串行接口,利用单片机自带的UART进行短距离的简单数据收发控制,也不涉及通信的协议规范。但是在工业控制中,基于RS-485总线的设备已经得到了广泛应用,设备的网络化、模块化应用需求日益明显。相较于RS-232,RS-485在信号传输距离、传输速率、抗干扰性及支持多点通信等方面具有很强的优势,能够满足工业现场通信的要求,因此在通信网络搭建采用RS-485总线形式相连接。

确定通信网络后,为了保证数据传输的可靠性、实时性以及协议的通用性,经过对比研究,选择MODBUS通信协议。MODBUS有两种串行传输模式,包括RTU、ASCII[1]。两种传输方式不同之处在于数据命令的编码、解码方式不同,多数支持MODBUS协议的设备都支持RTU模式,并且RTU模式在单片机上实现相对简单,因此采用MODBUS RTU进行通信程序的开发。

2 MODBUS RTU协议规则

采用MODBUS通信协议的设备连接在一起就构成了通信网络,以RS-485方式为例进行连接。一个通信网络中只有一个设备可以作为主机,其余设备均为从机,每一个从机都会分配一个地址,从机地址的范围为1~247。MODBUS通信协议中,主机发送数据和指令中包含指定的从机地址,通信网络中的每个从机都会收到数据和指令,从机判断协议命令中的地址和本机地址不一致时,就不会进行处理,只有读取到协议命令中的地址和本机地址一致时,才进行数据命令的解析处理。MODBUS RTU方式主机发送时的数据格式如表1所示。

当从机收到主机的指令时,根据主机的功能代码的命令要求,执行从寄存器读取数值或者写入数值到寄存器中,并在执行指令后向主机发送返回数据,响应主机操作。功能码是在标准MODBUS RTU协议中已经定义了常用指令代码的功能,在单片机通信应用中常用功能码及功能如表2所示。

表1 MODBUS通信数据格式

表2 常用MODBUS功能码及功能

3 基于单片机的MODBUS协议的实现

3.1 MODBUS协议处理函数流程图

MODBUS协议是主/从通信协议,以单片机作为从机,编写接收主机命令,执行命令,并发送响应指令给主机的通信程序。MODBUS协议处理函数的流程如图1所示。单片机循环扫描时间到时,判断是否接收到主机数据命令,当接收到数据命令时,首先解析地址是否为本机地址,然后判断CRC校验是否正确,对CRC校验后正确的数据命令,按照功能码指令以及数据地址和数据进行处理,并在处理后返回给主机响应数据,对于不是本机地址,或者是本机地址但是CRC校验不正确的数据,不进行处理[2]。

图1 MODBUS协议处理函数流程图

3.2 01功能码的功能实现

01功能码是主机读取单片机一个数据位数据的指令。当从机接收到01功能码指令时,首先解析要获取的数据位的地址,然后读取该地址中的数据,将数据通过响应指令发送给上位机,即可实现01功能码读取一位数据的功能。01功能码实现流程如图2所示。

3.3 05功能码的功能实现

05功能码是主机向单片机的一个数据位地址写入数据的指令。当从机接收到05功能码指令时,首先解析要写入数据位的目标地址,然后将指令中的数据写入到目标地址,最后向主机发送响应,即可实现05功能码写入一位数据的功能。

图2 01功能码实现流程图

4 51单片机利用MODBUS协议实现对设备的控制

单片机控制装置的通信网络采用RS-485总线形式相连接。将计算机作为通信的主机、单片机作为通信的从机,通过在51单片机中运行MODBUS通信协议,实现在上位机对设备的控制。

4.1 单片机MODBUS协议控制设备处理函数

在单片机的数据存储空间中定义数据的接收和发送缓冲区,单片机发送的数据首先送入发送缓冲区中,接收的数据放入到接收缓冲区中。对于单片机和主机,数据缓冲区是一个公用的区域。本文定义两个缓冲区:

unsigned char TxBuff[20];//数据发送缓冲区

unsigned char RxBuff[20];//数据接收缓冲区

定义单片机中LED的地址为0,当地址中数据为0时,设备打开,非0时,设备关闭。当单片机接收到主机打开和关闭设备的指令时,处理函数如下:

CRC=CRC16MODBUS(RxBuff,6);//CRC校验

CRCH =CRC>>8; //获取CRC校验高位

CRCL =CRC&0xff; //获取CRC校验低位

if(RxBuff[6]==CRCH&&RxBuff[7]==CRCL)//判断CRC校验是否正确

{

if(RxBuff[0]==Add)//判断地址是否是本机地址

{

if(RxBuff[0]==0x05)//判断是否是05功能码

{

Regadd=RxBuff[2]*256+RxBuff[3];//获取寄存器地址

if(Regadd==0)

{

if(RxBuff[4]==0x00) //判断打开还是关闭

LED=0; //打开设备

else

LED=1; //关闭设备

TxBuff[0]=RxBuff[0]; //设备地址

TxBuff[1]=RxBuff[1]; //功能码

TxBuff[2]=RxBuff[2]; //地址高位

TxBuff[3]=RxBuff[3]; //地址低位

TxBuff[4]=RxBuff[4]; //数据位

TxBuff[5]=RxBuff[5]; //数据位

CRC=CRC16MODBUS(TxBuff,6);//CRC 校验

TxBuff[6]=CRC>>8; //CRC校验高位

TxBuff[7]=CRC&0XFF; //CRC校验低位

TxDell();//向主机发送响数据

}

}

}

}

4.2 上位机发送指令实现对设备的控制和信息的采集

上位机发送协议指令:0105 00 00 00 00 CD CA,单片收到指令打开设备,并返回响应指令。上位机发送协议指令:0105 00 00 FF 00 8C 3A,单片收到指令关闭设备,并返回响应指令。对于现场温湿度信息的采集,主机采用03功能码数据指令进行温湿度数据的采集,单片机执行指令将数据传输到上位机的组态软件中进行显示。

5 结 论

本文通过在单片机上运行MODBUS从机通信协议程序,以计算机作为上位机,通过上位机发送指令对单片机进行远程控制和现场信息的采集。经过产品开发研究,验证了基于RS-485通信网络和MODBUS通信协议实现上位机和单片机通信的可行性,达到了预期的效果。

猜你喜欢

通信协议校验上位
使用Excel朗读功能校验工作表中的数据
基于Wireshark的列控中心以太网通信协议解析器的研究与实现
特斯拉 风云之老阿姨上位
智能电能表的现场快速校验方法探讨
车载网络通信协议标准化问题研究
电子式互感器校验方式研究
电动汽车充电接口及通信协议新国标发布
基于ZigBee和VC上位机的教室智能监测管理系统
浅谈微电子故障校验
SIP协议系统模型的形式化研究