雷俊峰(襄阳职业技术学院汽车工程学院,湖北襄阳,441050)
单片机MODBUS通讯程序开发
雷俊峰
(襄阳职业技术学院汽车工程学院,湖北襄阳,441050)
本文主要介绍单片机与计算机之间的串行通讯程序的功能结构和部分源代码,使用MODBUS RTU通讯协议实现两者之间的工程数据交换,单片机作为从站,对主站的通讯操作要求进行应答,返回操作结果,实现现场数据的采集。
单片机;MODBUS协议;通讯应答程序
某水处理公司希望为其产品添加远程监控设备关键状态的功能,笔者为其开发一款通讯模块,鉴于产品的功能要求较为简单,而成本控制较为严格,因而选择采用计算机和单片机组成上下位机系统,计算机放置于中控室,安装组态监控软件,下位机就近装设在水处理产品上,与现场传感器相连,上下位机通过串行通讯实时交换数据,本文重点探讨下位机单片机的通讯应答程序的开发。
在确定采用串行通讯方式之后,可以保证数据的双向传送,但传送的数据内容的含义则需要通过通讯协议约定。经过对比,通讯协议选择MODBUS通讯协议,该协议具有标准、开放、通俗易懂、适应性好等特点,应用开发较为简单。具体又分为RTU和ASCII两种传输方式,性能区别主要在于,RTU方式通讯效率较高,ASCII方式可直接传送ASCII字符,较为直观,鉴于本应用中无需显示字符,故而选择RTU方式,上位机的通讯程序集成在组态软件中,可直接在软件的通讯方式中选择,下位机的通讯程序则需要自行开发。
MODBUS RTU协议采用主、从站工作方式,规定了功能、数据帧格式,我们以上位机为主站,下位机为从站,从站只需要应答主站的读写操作指令,返回相应的读写结果,这样设计可以减少程序开发工作量。站在从站视角,以主站读取数据为例,MODBUS RTU通讯模式的数据帧格式为:
表1 主站操作命令发送帧(8个字节)
表2 从站操作结果返回帧(6+N个字节)
主站发送读指令后,从站返回读取结果,在这一问一答过程中,完成数据的交换,因此单片机端的开发主要是通讯应答程序的编写。
单片机上的通讯程序主要完成以下任务:串行通讯初始化、接收主站数据帧、校验数据帧是否合法完整、执行主站读写操作命令、发送结果返回帧到主站。
图1 流程图
可以在单片机里面设置接收和发送缓冲区,该区域是上位机和下位机共享的,均可以向该区域读取或写入值,所有的通讯指令都是针对该快区域的操作,下位机也是根据这块区域的值做相应的操作。
程序的结构为main函数、串行中断处理程序(接收主站数据帧,发送从站返回帧)、串口初始化子函数等。
为叙述简便,在头文件中已将8位无符号整形变量预定义为Uint8,16位无符号整形变量预定义为Uint16。
3.2 串行通讯初始化函数
3.3 串行中断处理程序
单片机侧通讯程序通常需要自行开发,调试工作量比较大,通讯程序目前可以实现数据交换,下一步计划进一步提高通讯的稳定性和传输效率,希望笔者的开发经历能够给读者提供借鉴和启发。
[1] http://blog.gkong.com/jiayoua_65051.ashx.
[2] 刘杰.王慧组态王与单片机多机串口通信的设计[J].电子设计工程 2009(7).
[3] http://blog.csdn.net/tiemufeng1122/article/details/17791903.
SCM MODBUS communication program development
Lei Junfeng
(School of automotive engineering,Xiangyang Vocational and Technical College,Xiangyang Hubei,441050)
This paper mainly introduces the serial communication between SCM and computer program of the function structure and part of the source code, using the MODBUS RTU communication protocol engineering data exchange between them. The single chip microcomputer as from the station, the main station communication operation request response, return the results of the operation, realize data acquisition.
single chip microcomputer;MODBUS protocol;communication answering program