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

时间:2012-06-19来源:网络

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

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

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

四、结束语

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

参考资料

  1. Modicon ModBus Protocol Reference Guide.PI一MBUS一300 Rev. J

  2. Mark Nelson著.串行通讯开发指南. 北京:中国水利水电出版社,2000

  3. 王田苗主编.嵌入式系统设计与实例开发. 北京:清华大学出版社,2002

1 2 3

关键词: 现场总线 ModBus协议 工业控制系统

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版