基于MODBUS_RTU总线的远程I/O模块的设计*

2019-01-04 01:58徐亮
科技与创新 2018年24期
关键词:功能测试寄存器数据包

徐亮



基于MODBUS_RTU总线的远程I/O模块的设计*

徐亮

(江苏信息职业技术学院机电工程学院,江苏 无锡 214153)

针对目前在工控领域各种品牌远程I/O模块形成的技术垄断现状,提出了一种基于MODBUS_RTU总线的远程I/O模块的设计方案。该模块以STM32为核心控制器,具备4路开关量输入与4路开关量输出,可与目前各种主流PLC配合使用。实践证明,该模块具有使用方便、成本低廉、性能稳定、抗干扰强等优点,方案具有一定的推广价值。

远程I/O;MODBUS_RTU;STM32;RS-485

远程I/O模块是分布式控制系统中较为常见的模块之一[1],通过远程I/O模块,可将PLC的I/O触点经总线延伸至较远距离。目前世界上主流的PLC生产厂家都有各自的远程I/O模块,文献[1]介绍了一种由西门子S7-300 PLC与FB远程I/O模块构成的用于港口码头的桥式起重机控制系统,PLC与远程I/O模块之间通过PROFIBUS总线连接;文献[2]介绍了一种由三菱Q系列PLC及AJ65BTB1远程I/O模块构成的自动灌装生产线,PLC与远程I/O模块之间通过CC-Link总线连接;文献[3]介绍了一种由施耐德Premium系列PLC与Advantys远程I/O模块构成的物流滚道控制系统,PLC与远程I/O模块之间通过Fipio总线连接;文献[4]介绍了一种由Rockwell ControlLogix 5000 PLC与其品牌远程I/O模块构成的气力输煤装置,PLC与远程I/O模块之间通过工业以太网连接。

虽然各PLC生产厂家都有相应的远程I/O模块产品,但仅限于与自家生产的PLC配合使用,不具备开放性,形成了技术垄断。本文将介绍一种以STM32单片机为控制单元,遵循MODBUS_RTU总线协议的通用型远程I/O模块(下文简称“模块”)的设计方法,可与任意支持MODBUS_RTU总线协议的PLC配合使用。

1 电路设计

模块电路除了电源及接插件之外,其余部分如图1所示,由核心控制器(左上)、RS-485电平转换电路(左下)、4路光耦输入电路(右上)及4路继电器输出电路(右下)四部分构成。

模块采用工业现场常见的直流24 V作为输入电压,稳压后形成直流3.3 V供模块各部分工作。单片机采用了基于ARM Cortex-M3内核的STM32F103C6T6A,该单片机采用8 MHz无源晶振,通过内部锁相环可将系统主频最高倍频至72 MHz,单片机快速的处理能力保证了模块对总线指令执行的高效性[5]。模块与RS-485总线之间采用了MAX3485进行电平转换,RS-485总线可以实现PLC与模块之间的远距离通信,理论上最远可达1 200 m。模块支持4路开关量输入与4路开关量输出,分别通过光耦、继电器将单片机引脚与外电路隔离。

图1 模块主体电路

2 程序设计

模块遵循MODBUS_RTU通信协议[6],一个或多个模块可作为总线从站被主站轮询。主站通常是指PLC,也可以是计算机,但计算机通常仅对模块参数设定及测试。

2.1 通信协议

模块严格遵守MODBUS_RTU通信协议,线圈与寄存器地址分别如表1和表2所示。

模块可解析4条命令并响应:①读输入开关量线圈;②写输出开关量线圈;③读寄存器;④写寄存器。以命令①举例说明,其命令与响应数据包格式如图2所示。

表1 线圈地址

只读线圈只写线圈 线圈地址对应开关量线圈地址对应开关量 0000HDI10004HDO1 0001HDI20005HDO2 0002HDI30006HDO3 0003HDI40007HDO4

表2 寄存器地址

寄存器地址含义 0000H波特率 0001H校验方式/站号

图2 命令①及响应数据包格式

不妨假定从站站号为1,DI1~DI4的状态分别为ON、OFF、OFF、ON,主站发出的命令数据包为“01 01 00 00 00 04 3D C9”(HEX格式),从站返回的数据包为“01 01 01 09 91 8E”(HEX格式)。

2.2 单片机程序

单片机程序流程如图3所示。

图3 单片机程序流程

波特率、校验方式与站号这三项通信参数被保存在单片机的FLASH中,在单片机上电初始化之时从FLASH读取并更新相应的MODBUS_RTU寄存器,之后便进入无限循环状态。在每一次循环时,单片机首先读取模块的4路输入开关量,并更新相应的MODBUS_RTU线圈值,接着根据通过串口读取来自总线的命令并解析。若为命令①或命令③,则返回相应的线圈或寄存器值;若为命令②,则完成相应的线圈值更新以及输出驱动继电器动作后返回响应数据包;若为命令④,则完成相应的寄存器值更新以及将参数写入FLASH后返回响应数据包。

2.3 模块配置与测试程序

模块配置与测试程序如图4所示。

图4 模块配置与测试程序界面

模块配置与测试程序由C#2013开发而成,具有模块通信参数设定与模块I/O功能测试的作用。在使用该程序时,要求将计算机仅与一个模块通过RS-485总线连接在一起。在I/O测试过程中,若图4中DI-或DO-(=1,2,3,4)对应的方框显示为绿色,表示为状态ON,若为红色,表示为状态OFF,若全部为灰色,表示为通信出错。

3 功能测试

功能测试电路如图5所示,由1台信捷XC3-14 PLC与2只I/O模块构成,将PLC作为RS-485总线主站,模块作为从站。

图5 功能测试电路

功能测试的内容为通过模块1上的按钮SB点动连接在模块2上的指示灯L,将两只模块的通信参数均设为波特率19 200 bps、校验方式偶校验,以上为信捷PLC默认通信参数,站号分别为1,2;编写PLC程序,进行通电测试;PLC程序分为通信程序与点动程序两部分。通信程序的功能为周期性轮询两只I/O模块,读取模块的线圈0~3的值存入PLC映射辅助继电器,将PLC映射辅助继电器值写入线圈4~7,例如可建立如表3所示映射关系。

表3 模块线圈与PLC辅助继电器映射表

PLC辅助继电器模块1线圈PLC辅助继电器模块2线圈 M10000M10080 M10011M10091 M10022M10102 M10033M10113 M10044M10124 M10055M10135 M10066M10146 M10077M10157

测试证实,按钮SB可点动指示灯L,但明显存在延迟,延迟的时间与PLC轮询周期有关,总体测试成功。

4 结束语

远程I/O模块是PLC技术发展过程中出现的重要产物,模块在使用中不需要编程,只需要简单配置参数即可工作,使用方便,成本比PLC低,很适合用于一些控制对象分散的现场。本文介绍的远程I/O模块,由于采用了开放的MODBUS_RTU总线协议,开放了内部线圈和寄存器地址,可与目前各种主流PLC配合使用,使得使用成本进一步降低。而且经反复测试,该模块具有较好的稳定性及较强的抗干扰能力,因此本设计方案具有较好的市场前景以及一定的推广价值。

[1]顾正欢.港口桥式起重机电气控制系统远程IO系统应用探析[J].中国设备工程,2017(12):143-144.

[2]王涛,邝锐彬.基于CC-Link网络的自动灌装生产线控制系统设计[J].电气自动化,2017,39(06):94-95,98.

[3]张春庆.施耐德自动化控制系统在缸体加工线物流滚道上的应用[J].中国高新技术企业,2015(22):50-51.

[4]唐修冬,朱虹,姜文妹.远程I/O控制系统在气力输煤装置中的应用[J].仪器仪表用户,2012,19(05):44-46.

[5]朱瑞昌,林勇.面向电力设备的一体化智能监控系统[J].仪表技术与传感器,2018(03):67-70,121.

[6]印松.基于Labview的动力电池密封性测试系统[J].仪表技术与传感器,2018(04):72-75.

徐亮(1981—),男,江苏无锡人,讲师,硕士,研究方向为控制工程、自动化网络通信。

江苏省高校自然科学研究项目(编号:17KJB510019)

2095-6835(2018)24-0040-03

TP212

A

10.15913/j.cnki.kjycx.2018.24.040

〔编辑:张思楠〕

猜你喜欢
功能测试寄存器数据包
某内花键等速传动轴八功能测试夹具设计
二维隐蔽时间信道构建的研究*
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
常用电子测速法在某数字信号处理器中的应用*
C#串口高效可靠的接收方案设计
飞思卡尔单片机脉宽调制模块用法研究
移位寄存器及算术运算应用