嵌入式系统中MODBUS通信的教学研究与实践

2019-07-08 03:32王雪
无线互联科技 2019年8期
关键词:校验码通信协议串口

王雪

摘   要:文章针对MODBUS通信协议进行了实践和教学研究。首先,指出了MODBUS协议的重要性以及地位作用;其次,分析了MODBUS帧的结构和通信原理,再利用一个通信项目分析了MODBUS通信的详细过程和开发代码;最后,指出MODBUS通信过程中需要注意的问题,并进行了总结,这对于MODBUS项目的研究与开发有重要的参考价值。

关键词:MODBUS通信协议;STC单片机;485通信;工业物联网

1    网络通信概述

随着计算机通信技术的发展,越来越多的计算机系统连接到网络当中,网络通信成为当前信息科学最为热点的问题之一,尤其在工业控制与物联网领域,如何安全、快速、便捷地传送数据,成为衡量工业发展水平的重要标志之一。与传统PC机相比,工业领域的信息通信的特点[1]在于:通信主机结构类型不尽相同;通信环境有可能会受到辐射干扰;通信设备成本限制;通信组网信息安全;网络拓扑结构各异。在这种背景下,选择什么样的通信方式和通信协议,就显得异常关键。

2    MODBUS通信协议

MODBUS[2]是由施耐德电气(现在的Modicon公司)于1979年为PLC之间的通信而研发的一种串行通信协议,它为连接至不同类型总线或网络的设备之间提供了C/S通信,目前已经成为工业领域通信协议的业界标准。自1979年以来,使成千上万的自动化设备能够通信,很好地解决工业领域面临的通信难题,成为目前主流的工业物联网通信协议。

MODBUS协议定义了一个与基础通信层无关的简单协议数据单元(Protocol Data Unit,PDU)。特定总线或网络上的 MODBUS协议映射能够在应用数据单元(Application Data Unit,ADU)上引入一些附加域。启动MODBUS事务处理的客户机创建MODBUS应用数据单元。功能码向服务器指示将执行哪种操作。MODBUS协议建立了客户机启动的请求格式。MODBUS事务处理流程如图1所示。

3    MODBUS通信实践与教学

3.1  总体结构

采用单片机与PC上位机的串口通信方式,并采用RS485总线进行信号传输,以保证信号的总体质量。单片机一端作为服务器端,不主动发送数据,只是等待应答客户端请求的数据。PC机作为客户端,负责启动请求与接收响应。

与RS232相比,采用RS485总线的好处在于:(1)传输方式不同。RS-232采取不平衡传输方式,即所谓单端通信。而RS485则采用平衡传输,即差分传输方式。在稳定性和抗干扰性方面都有明显优势。(2)传输距离不同。RS-232适合本地设备之间的通信,传输距离一般不超过20 m。而RS-485的传输距离为几十米到上千米。(3)主机数量不同。RS-232只允許一对一通信,而RS-485接口在总线上是允许连接收发器多达128个。

3.2  MODBUS软件设计

MODBUS公共功能码是MODBUS协议通用的功能码,这个功能码是预先被定义好的,并且需要保证是唯一的、公开证明的。对应于每个操作访问,相关程序代码如下:

void readCoil(void); //读线圈

void readRegisters(void); //读寄存器

void forceSingleCoil(void); //强制单个线圈

void presetSingleRegister(void); //设置单个寄存器

void presetMultipleRegisters(void); //设置多个寄存器

void forceMultipleCoils(void); //强制多个线圈

3.3  MODBUS通信从机软件设计

MOBUS通信的主要过程包括:(1)进行系统初始化设置,主要包括定时器初始化,串口初始化,中断服务函数的编写和变量定义。(2)定时处理,不是指定时器与计数器的初始化,而是指判断一个完整的MODBUS帧是否结束的时间。关于区分两个帧的间隔时间,有许多衡量方法,一般采用延时几十微秒的方法。(3)循环监听MODBUS状态,一旦收到完整的数据帧,便开始处理,利用前面讲到的MODBUS库函数进行处理。在完成读写任务后,按照MODBUS帧规则,应答数据通过MODBUS总线传回客户端。部分初始化代码如下。

//串口初始化代码

void UartInit (ULONG baud, UCHAR mode)

{ IE=0x90;

TMOD = (TMOD & 0X0F) | 0X20;

TH1 = -22118400L/12/32/9600;

TL1 = -22118400L/12/32/9600;

TR1 = 1;

SCON = 0X50;

PCON |= 0X80; }

//串口中断服务函数代码

void commIntProc(void) interrupt 4

{ if (!RI) return;

RI = 0;

receTimeOut = 20;

receBuf[receCount] = SBUF;

receCount ++;

receCount &= 0x0f; }

4    开发过程需要注意的问题

4.1  单片机型号的选择

单片机最常用的主要包括89C51和89C52系列,许多型号的单片机均可采用这種型号的工程。然而,单片机开发时最好要用自己的工程型号以及头文件。如本例用到的STC15系列单片机,需要在建立工程时便选定型号,并且加入其特有的头文件:#include “stc15.h”。这样,才能保证工程能够编译通过并正确下载到芯片中。

4.2  波特率的控制

在传输过程中,客户机与服务器的波特率设置必须完全一致,否则将接收不到正确的数据。受到传输距离和单片机性能的约束,在速度选择上要适中,具体情况要通过实验得以验证,一般不宜过高或过低。

4.3  传输距离

MODBUS通信物理层多采用的是串行通信,在通信过程中不同类型的串行通信差别很大,如RS232和RS485在通信原理和通信性能上都存在很大差异,在开发过程中,应该根据需要合理选择,避免造成信号不稳定。

4.4  CRC校验码

循环冗余校验码(Cyclic Redundancy Check,CRC)可以有效地检测到传输问题导致的数据错误,它的原理是利用CRC算法将数据帧转换成一个CRC检验码,接收方在接收到数据以后,再重新计算校验码并与发送时的检验码相比对,以检验数据的准确性。在实践过程中,CRC校验码的生成和检测一般直接利用库函数完成,不是MODBUS研究的重点,在开发和教学过程中应当注意区分。

4.5  节点数量

有的项目可能需要几百甚至上千个节点进行485通信,从理论上讲,无论是MODBUS还是485总线都是有数量限制的,MODBUS的数量最多240个。485总线根据芯片的不同,差异也很大,在几十到几百之间。同时,还受到线路长度的影响。如果想让更多的设备连接在一起,需要采用中继器或者多串口服务器一类的设备进行网络拓扑。

5    结语

通过对MODBUS的系统研究与实验论证,证明MODBUS协议在单片机平台上,利用RS485通信是十分可靠并可以实现的,可以应用到嵌入式系统等相关课程的教学当中。通过合理的组织教学,让学生能够熟悉并掌握工业现场的应用技术,更接近市场的人才需求,内容适合物联网相关专业的学生学习。同时,还要注意讲授内容的取舍,把重点放在MODBUS协议本身,以免使学生产生畏难心理。

猜你喜欢
校验码通信协议串口
浅谈AB PLC串口跟RFID传感器的通讯应用
基于Z-Stack通信协议栈的红外地温采集电路设计
基于DMX512通信协议的多路转发器设计与研究
基于NS-3的PLC多频通信协议仿真平台设计与实现
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
基于FPGA的循环冗余校验码设计
基于并行控制的FPGA多串口拓展实现
RSSP-I、RSSP-Ⅱ及SAHARA三种安全通信协议实现技术简介
基于FPGA和NAND Flash的存储器ECC设计与实现