孙 硕 倪建云 陈在平
(天津理工大学 a.天津市复杂系统控制理论及应用重点实验室;b.自动化学院,天津 300384)
基于STC15单片机的ModbusI/O模块的设计
孙 硕a,b倪建云a,b陈在平a,b
(天津理工大学 a.天津市复杂系统控制理论及应用重点实验室;b.自动化学院,天津 300384)
基于STC15单片机构建具有Modbus通信功能的8路I/O模块,给出模块的硬件组成和软件流程。该模块不仅满足基本I/O量数据的传输,而且利用STC15单片机的EEPROM可保存模块的重要参数。模块工作电压+3.3V,具有低功耗、低成本、经济可靠及电路设计简单等优点。测试结果证实:该模块能够正常稳定工作,并且实现了重要参数(如设备地址)的掉电保护。
ModbusI/O模块 重要参数掉电保护 STC15单片机
Modbus作为多现场总线中的一种,具有协议开发简单、透明度高等优点,被广泛应用于制造业、工业过程控制、交通、电力及楼宇等自动化领域[1,2]。而基于Modbus协议的I/O模块,可以实现总线、电源和I/O现场设备全部以接插件方式连接,具有连接快速方便的优点。目前国内使用该类I/O模块常见的品牌有美国的WOODHEAD、德国的TURCK和PHOENIX,但是存在价格昂贵、维修困难和不适应国内工业生产环境等问题[3]。因此设计一种经济可靠的Modbus I/O模块具有广阔的市场前景。
笔者介绍的ModbusI/O模块,以STC15W4K48S4单片机为核心,采用标准Modbus协议(传输模式为远程终端设备(RTU)),不仅满足基本I/O量数据的传输,而且实现了模块重要参数的掉电保护功能。
ModbusI/O模块包括Modbus输入模块和Modbus输出模块,两种模块硬件电路结构相同,笔者只介绍Modbus输入模块。
Modbus输入模块的硬件结构框图如图1所示,主要包括RS-485驱动电路、ADuM1402数字隔离电路、STC15W4K48S4芯片、PC847光电隔离电路及电源转换电路等。
1.1RS-485驱动电路和ADuM1402数字隔离电路
RS-485驱动电路选用了符合RS-485和RS-422串行协议的+3.3V低功耗半双工收发器系列的SP3485芯片,单片机的P3.6、P3.7和P0.5口经过ADuM1402数字隔离电路与SP3485连接,单片机的P0.5可使SP3485在接收和发送之间切换,空闲状态下芯片处于接收状态。
图1 Modbus输入模块的硬件结构框图
ADuM1402数字隔离器的一端连接STC15W4K48S4单片机,另一端连接SP3485芯片。该数字隔离器为双电源供电,相对于其他光电耦合器,具有集成度高、功耗低及数据传输速率高等优点,为通信提供更稳定可靠的环境。
1.2STC15W4K48S4单片机
STC15W4K48S4内部集成了高精度R/C时钟和高可靠复位电路,因而彻底省掉了外部昂贵的晶振和外部复位电路,可配置时钟范围5~35MHz,本系统设置时钟工作在11.059 2MHz。同时,该单片机还设有4个超高速串口、容量10KByte的片内EEPROM及7个定时器/计数器等硬件资源[4,5],为实现ModbusI/O模块快速可靠的工作提供了有力保证。
1.3PC847光电隔离电路和电源转换电路
在工业现场控制系统中,由于被控对象往往处在较强的噪声环境中,设备产生的信号不能直接供单片机采集。因此PC847光电隔离电路用来隔离外部的干扰信号,并避免接地环路的产生。现场设备供电往往采用24V(DC),而该模块的工作电压为+3.3V,所以需要电源转换电路。系统采用双电源供电方式,一路是工作电压24VB,经LM2674M3.3芯片将电压转换成3.3V为模块供电;一路是负载电压24VL,既为模块提供工作电压又为现场设备提供负载电压。
ModbusI/O模块作为Modbus通信中的从机,并且模块未使用硬件(拨码开关等)设置模块地址,而是使用单片机内部的EEPROM来保存模块地址,地址的有效范围规定为1~250,故从机程序设计包括主程序和写EEPROM程序两部分。
ModbusI/O模块的主程序流程如图2所示。其中初始化包括设置单片机相应IO口为准双向口,设置串口位置在P3.6、P3.7(参考STC15手册),串口工作模式,设置定时器2初始值,以及设置定时器2作为串口的波特率发生器等,然后设定模块地址,等待主站发送请求命令。
图2 ModbusI/O模块的主程序流程
在主程序完成初始化后,紧接着读取EEPROM中存放设备地址的寄存器,然后判断EEPROM中存放的设备地址是否非法(非法地址指的是超出1~250范围的),若为非法地址,则进入写EEPROM程序。另外,在主站发送设置设备地址数据帧时,程序也会进入写EEPROM程序。写EEPROM程序流程如图3所示。
Modbus从节点功能的测试主要是对其主要功能码的测试。在测试平台的搭建上,选用串口助手软件作为模拟主站,该软件能对Modbus的几个常用功能码进行测试,并能实现数据的连续收发。
本次测试选取了Modbus的两个关键功能码“06”、“01”,即写寄存器(设置设备地址)和读取多个线圈状态,进行连续收发功能测试。
图3 写EEPROM程序流程
首先测试功能码“06”,通过串口助手向从站发送写寄存器指令,发送时间间隔300ms,从站能够周期性地回复响应数据帧。写寄存器指令测试结果如图4所示。功能码“06”的请求/响应报文的解析见表1。
图4 写寄存器指令测试结果
参数主机请求从机响应数据长度Byte数据长度Byte设备地址001001功能码061061寄存器地址0000200002写入数据0003200032CRC校验C81A2C81A2
测试功能码“01”时,将一开关量为闭合的输出值输入到8路输入模块的第二路。读取多个线圈状态的测试结果如图5所示。功能码“01”的请求/响应报文的解析见表2。
图5 读取多个线圈状态测试图
参数主机请求从机响应数据长度Byte数据长度Byte设备地址031031功能码011011寄存器地址00002011数据的数量00082021CRC校验3C2E2D1F12
笔者详细介绍了以STC15W4K48S4单片机为核心的ModbusI/O模块的软硬件设计,以及测试方案和结果。该ModbusI/O模块的工作电压为+3.3V,不需要外扩EEPROM或拔码开关,即可实现掉电保存设备重要参数的功能,并且有很强的抗干扰能力,因此该模块具有低功耗、低成本、经济可靠及电路设计简单等优点。
[1] 孙进生,施宝酉.基于CPLD的Modbus远程I/O模块设计[J].制造业自动化,2008,30(7):47~51.
[2] 聂冰.基于Modbus通信协议的ScatterI/O优化方法[J].工业仪表与自动化装置,2006,(6):62~64.
[3] 朱嵘涛,徐爱钧,叶传涛.基于STC15单片机的无线遥控智能小车的设计[J].电脑知识与技术,2014,10(14):3445~3447.
[4] 王佳承,费敏锐,王海宽.基于Modbus的多现场总线集成测控系统设计[J].自动化仪表,2009,30(6):20~22.
[5] 史运涛,孙德辉,李志军,等.基于Modbus协议的通信集成技术研究[J].化工自动化及仪表,2010,37(4):67~72.
TH862+.7
A
1000-3932(2016)06-0662-03
2016-03-24(修改稿)基金项目:科技部中小企业创新基金项目(09C262112022954);天津市自然科学基金重点项目(07JCZDJC09600);天津市科技支撑计划重点项目(10ZCKFGX03000);天津市高等学校科技发展基金计划项目(20120705);天津理工大学教学基金项目(YB11-62)