您的位置:控制工程论坛网论坛 » 现场总线 » ModBus协议在工业控制系统中的应用

常青树

常青树   |   当前状态:在线

总积分:1421  2024年可用积分:0

注册时间: 2008-09-28

最后登录时间: 2012-05-30

空间 发短消息加为好友

ModBus协议在工业控制系统中的应用

常青树  发表于 2008/11/13 7:20:07      931 查看 0 回复  [上一主题]  [下一主题]

手机阅读

摘 要:随着计算机网络、通讯、控制等技术的发展,信息交换沟通的领域正在迅速覆盖从工厂的现场设备层到控制、管理的各个层次。基于现场总线的智能仪表对现场总线技术在我国的推广应用具有非常重要的意义。本文在Modbus现场总线协议的基础上设计了一个工业温度控制系统。

关键词:现场总线; ModBus协议; 单片机控制

一、ModBus协议简介

  当今世界,工业控制已从单机控制走向集中监控、集散控制。在进入网络时代的今天,工业控制器连网也为网络管理提供了方便。ModBus协议就是工业控制器的网络协议中的一种。ModBus协议是Modicon公司于1978年发明的一种用于电子控制器进行控制和通讯的通讯协议。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以进行通信。它的开放性、可扩充性和标准化使它成为一个通用工业标准。有了它,不同厂商生产的控制设备可以简单可靠地连成工业网络,进行系统的集中监控,从而使它成为最流行的协议之一。

  ModBus协议包括ASCII, RTU, PLUS, TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的ModBus 是使用RS-232C 兼容串行接口, RS-232C规定了连接器针脚、接线、信号电平、波特率、奇偶校验等信息,ModBus的ASCII, RTU协议则在此基础上规定了消息、数据的结构、命令和应答的方式。ModBus控制器的数据通信采用Master/Slave方式(主/从),即Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。

  ModBus可以应用在支持ModBus协议的PLC和PLC之间、PLC和个人计算机之间、计算机和计算机之间、远程PLC和计算机之间以及远程计算机之间(通过Modem连接),可见ModBus的应用是相当广泛的。由于ModBus是一个事实上的工业标准,许多厂家的PLC, HMI、组态软件都支持ModBus,而且ModBus是一个开放标准,其协议内容可以免费获得,一些小型厂商甚至个人都可根据协议标准开发出支持ModBus的产品或软件,从而使其产品联入到ModBus的数据网络中。因此,ModBus有着广泛的应用基础。在实际应用中,可以使用RS232, RS 485 /422 , Modem加电话线、甚至TCP/IP来联网。所以,ModBus的传输介质种类较多,可以根据传输距离来选择。

二、ModBus协议的通讯格式

  ModBus可分为两种传输模式:ASCII模式和RTU模式。使用何种模式由用户自行选择,包括串口通信参数(波特率、校验方式等)。在配置每个控制器的时候,同一个ModBus网络上的所有设备都必须选择相同的传输模式和串口参数。

  2.1 ASCII模式

  当控制器设为在ModBus网络上以ASCII模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。

  表1 ASCII模式的消息帧

  如表1所示,使用ASCII模式,消息以冒号(:)字符(ASCII码3AH)作为起始位,以回车换行符(ASCII码0DH, 0AH)作为结束符。传输过程中,网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每个设备就解码下个位的地址域,来判断是否发给自己的。与地址域一致的设备继续接受其它域,直至接受到回车换行符。除起始位和结束符外,其他域可以使用的传输字符是十六进制的0…9,A…F,当然也要用ASCII码表示字符。当选用ASCII模式时,消息帧使用LRC(纵向冗长检测)进行错误检测。

  2.2RTU模式

  当控制器设为RTU模式时,消息帧中的每个8Bit字节包含两个4Bit的十六进制字符。

  表2 RTU模式的消息帧

  该模式下消息发送至少要以3.5个字符时间的停顿间隔开始。传输过程中,网络设备不断侦测网络总线,包括停顿间隔时间内。当第一个域(地址域)接收到,相应的设备就对接下来的传输字符进行解码,一旦有至少3. 5个字符时间的停顿就表示该消息的结束。

  在RTU模式中整个消息帧必须作为一连续的流转输,如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3. 5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。如果在传输过程中有以上两种情况发生的话,必然会导致CRC校验产生一个错误消息,反馈给发送方设备。

  当控制器设为RTU(远程终端单元)模式通信时,消息中的每个8Bit字节包含两个4Bit的十六进制字符。这种模式与ASCII模式相比在同样的波特率下,可比ASCII模式传送更多的数据。

三、系统设计

  本文所设计的系统是一个基于modbus的工业控制网络,它主要由实现现场控制功能的智能控制仪表、实现对智能控制仪表在线配置与监控功能的主机两部分组成。作为从机的现场智能控制仪表主要任务有:实现现场温度采集、输出控制、显示、系统配置以及响应主机激励;主机的主要任务是在线配置从机、监控从机从而得到相应从机的状态、历史温度数据分析;两者之间的通讯是基于现场总线技术的。

  3.1 系统的硬件设计

  系统主要由通讯电路(输入)、数据采集、输出控制、LCD显示、通信及电源模块等组成。如图1所示,系统具有对外界温度信号进行采集的能力,采集的模拟信号经A/D模块转换为相应的数字量,送入微处理器进行处理。采集到的每一路温度都要与系统此路的温度设定值进行比较,然后根据结果调用合适的控制算法,并通过控制相应的继电器的占空比实现对温度的调节。

  考虑到系统实际应用,在硬件设计方面,微控制器选用了台湾Syncmos公司生产的8位微控制器SM5964, 它是80C52 微控制器家族的派生产品,其强大的片内资源,只需添加少量的外围器件即可实现系统的要求。温度测量利用Pt(100Ω)热敏电阻,测量的模拟信号经A/D模块转换后送入微处理进行处理。模数转换器选用凌特公司(Linear Technology)推出的20位无延迟模数转换器LTC2430,此模块可直接对测量的毫伏级信号进行处理,并能够满足精度要求。其它也选用了与通信和输出控制相关的器件。


图1 系统结构框图

  由于篇幅关系,只介绍本系统通信部分的电路原理。由于标准的ModBus物理层采用了RS-232串行通信标准,在PC机上模拟MODBUS通信通过使用RS-485插卡或者RS-232/ RS-485转换模块,实现多点通信,这里选用的是RS-232/RS-485转换模块。电路图如图2所示:


图2 通信电路原理图

  SM5964的串行发送端口TXD和接收端口RXD经MAX232芯片进行电平转换后,分别与PC机的数据接收端口RXD和数据发送端口TXD相连接。SM5964串行通信的发送端TXD连接到的11引脚,发出的数据信号经过MAX232芯片转换后,由0~5V的TTL电平变为-12~+12V的RS232电平,从14引脚输出到PC机串行口的第二引脚。按RS232通信协议规定,PC机串行口的第二引脚为数据输入端,这样,发出的数据就可被PC机接收到。由PC机串行口的发送端TXD(PC机串行口的第三引脚)传输来的数据,作为RS232电平的信号输入到MAX232芯片的第13引脚,经过MAX232芯片进行电平转换后变为TTL电平,再由MAX232的12引脚输出到SM5964串行口的接收端口RXD。从而完成数据的双向传输。

  在设计中,使用了两个发光二极管D7和D8监视通信的工作状态。

  3.2 系统的软件设计

  本系统的软件设计是基于软件开发平台μC/OS-II,它是由Labrosse先生编写的一个开放式内核,最主要的特点就是源码公开,清晰明了。在单片机系统中嵌入μC/OS-II将增强系统的可靠性,并使得调试程序变得简单起来。但由于它没有功能强大的软件包,基于具体应用需要自己编写驱动程序,对内核进行扩充。为使其能够正常工作,要根据具体的硬件平台完成相应的移植工作。μC/OS-II是一个占先式的内核,即已经准备就绪的高优先级任务可以剥夺正在运行的低优先级任务的CPU使用权。这个特点使得它的实时性比非占先式的内核要好。根据要实现的功能,我将系统划分为如下6个任务:按键处理、LCD显示、串行通信、输出任务、控制运算、信号采集处理。这里只介绍和ModBus总线协议相关的部分。

  当选用的是ModBus的RTU模式时,一帧报文中字节与字节之间的时间间隔比帧与帧之间的时间间隔小得多,因此主要的难点在于如何判断一帧报文接收结束与否,这可以利用单片机内置的定时器来进行判断。若实际实现时,我们选择了19200的传输速率,那么空闲间隔时间T≥1/19200*8*3.5=1.5ms。每当接收到一个新的字节,就启动定时器开始计时,定时器的时间设定为帧与帧之间的最小时间间隔(上面提到的例子中是1.5ms)。波特率不同,该时间的间隔也不同。若不到预定时间又接收到下一个字节,则说明一帧报文尚未结束,定时器重新开始计数;若定时器顺利计数到预定时间,就会触发相应的中断,在该定时中断服务程序中设定帧结束标志字节,表明一帧报文接收完毕。这样就可以防止报文接收不完整,导致该帧通讯任务无法结束而影响下一帧的接收。


图3 接收程序流程图

  如图3所示,在一个帧开始接收时判断接收的第一个字节是否为本机地址,如果是则保存到接收缓冲区中,不是则继续等待下一帧报文的到来,这样节省了保存数据的时间,接收中断服务程序只是保存数据而不处理数据,只是在一帧新的报文接收结束后,通知系统(通过发出信号量来实现);ModBus协议还规定了从方接收报文不正确时发问的出错帧。考虑到装置内部通信的过程不是很复杂,在实际应用中如果从方收到的报文校验不正确,采取不作应答的方式。主方若在规定时间内未收到从方的应答报文时,将重发请求报文;若多次末收到从方应答报文,则报通讯故障。上面的措施大大缩短了中断服务程序的执行时间,防止了系统资源的无谓浪费。

  在数据处理方面设计了一个环形的缓冲区,用来存放接收到的数据,这个缓冲区是一个两维数组。假设一个帧不超过12个字节,可以定义了一个5*12的二维数组。数组的第一个元素是标志位,前四位用来表示数据是否已经处理,后四位存放接收的数据的个数;每接收一个帧的数据,数组下移一个。当接收的数据要覆盖未处理数据时系统报警,这种情况一般不会发生,因为数据处理程序在本系统中被设成优先级最高。

  在ModBus协议中另外一个问题就是CRC校验和的计算问题,一般情况下它是由硬件电路直接产生的,这样速度比较快,系统负载小;但是在本文中介绍的单片机中没有这种专用电路,而且一般的中低端的单片机一般也不具有这种专用电路。这里我们只有充分利用现有的资源,如果直接计算的话,单片机负载很大,而且浪费了大量的系统时间,影响系统的实时性,考虑到我所使用的MCU的Flash ROM比较大,可以存储大量的常量线性表数据,利用查表方式可以非常方便的计算出CRC校验码。

四、结束语

  在本文中比较详细地介绍了ModBus总线协议,并最终设计了一个实现多点温度测量和控制的使用系统,希望本系统对类似的通讯应用有所帮助。

1楼 0 0 回复