一种基于Modbus协议的工业控制模块
2019-09-17万伟军吴一鸣
万伟军, 吴一鸣
1.江苏联合职业技术学院 无锡机电分院 江苏无锡 214000 2.中国船舶重工集团公司 第七○三研究所无锡分部 江苏无锡 214000
1 设计背景
传统工业控制系统中,常用可编程序控制器控制步进驱动器或伺服驱动器,进而实现运动控制。但是,可编程序控制器较难实现复杂的运动轨迹控制。随着嵌入式技术日趋完善,各类ARM处理器在工业控制中被广泛应用。笔者应用ARM STM32F407芯片,基于Modbus协议设计了一种工业控制模块[1-2]。这一模块具有数字量输入采集、数字量输出控制和高速脉冲输出功能,能够通过内部程序来控制步进驱动器或伺服驱动器,实现复杂的运动轨迹控制。
2 硬件设计
所设计的工业控制模块结构如图1所示,采用ARM STM32F407芯片作为控制核心,应用MAX485芯片实现RS485通信[3],应用EL357芯片实现输入信号和输出信号的隔离[4]。这一工业控制模块可以接收16位开关型输入信号,控制7路输出,能够实现4路高速脉冲控制。
图1 工业控制模块结构
2.1 RS485接口电路
所设计的工业控制模块有两路RS485通信接口。RS485接口电路采用MAX485芯片,如图2所示。电路不发送数据时,TXD1为高电平,三极管Q1导通,RE为低电平使能,RO端接收数据,MAX485芯片处于接收状态。电路发送数据时,TXD1由高电平变为低电平,时间长短与通信速率有关,三极管Q1截止,MAX485芯片处于发送状态。
图2 RS485接口电路
2.2 输入输出口
输入信号电路如图3所示。EX0为工业控制模块的开关量输入信号端。EX0输入信号经过电路处理后,产生输出信号X0。X0接ARM STM32F407芯片的引脚,为工业控制模块内部程序提供输入信号。采用EL357芯片完成外部设备输入信号与ARM STM32F407芯片接口信号之间的隔离,提高模块的抗干扰能力。
图3 输入信号电路
输出信号电路如图4所示。Signal_Y0为ARM STM32F407芯片引脚所产生的输出信号。Signal_Y0信号经过电路处理后,变为Out_Y0信号。Out_Y0信号连接输出驱动电路,产生实际的输出控制信号。输出端也采用EL357芯片进行信号隔离。
图4 输出信号电路
2.3 高速脉冲信号
所设计的工业控制模块,其高速脉冲信号直接由ARM STM32F407芯片生成,通过接线端子与外部电路相连。
3 通信方式
这一工业控制模块基于Modbus 协议的远程终端(RTU)模式设计,按客户端模式进行工作。上位机包括触摸屏、工控机等,可以发送0X01~0X04指令,使输入端口(X端口)、输出端口(Y端口)的状态数据反馈至上位机。上位机也可以使用0X05、0X06、0X0F和0X10指令实现输出端口通断控制和模块内部寄存器数据设定功能。上位机与模块之间的数据通信采用串口通道接发数据帧来实现。每一个指令都有特定的符合Modbus协议的数据帧格式,数据帧采用Hex编码。
4 软件设计
所设计的工业控制模块,其内部程序可以分为四部分——系统初始化、数据接收、数据分析与执行、数据反馈,其中系统初始化包括端口初始化和通信口初始化[5-7]。
内部程序结构如图5所示。
模块通电后,自动进入系统初始化程序,初始化ARM STM32F407芯片各引脚状态,读取芯片存储数据,恢复至前一次断电前状态。同时完成模块的通信参数设置,如将传输速率设置为19 200 bit/s等,并开始连续监听通信口,等待上位机发送控制指令。当上位机发送控制指令数据帧后,模块读取数据帧。接收数据帧后,通过循环冗余校验码判断数据是否有效。如果无效,那么程序返回通信口监听状态。如果接收数据有效,那么对数据的地址进行判断。如果发送来的地址与模块设置的地址不相同,那么程序返回通信口监听状态。如果发送来的地址与模块设置的地址相同,那么模块程序对发送来的数据帧进行数据分析与提取,对比模块内部芯片内存中的指令库,按对比结果执行相应的功能。执行功能完成后,模块程序将执行结果数据通过通信口以数据帧的格式反馈至上位机。
5 测试
Modbus Poll是一种基于Modbus协议的服务端模拟器[8],可以作为上位机测试和调试客户端,支持远程终端模式、美国信息交换标准码,以及传输控制协议和网际协议[9]。笔者将Modbus Poll作为上位机对所设计的工业控制模块进行测试。模块接线如图6所示,通过这一接线,可以实现两路输入信号采集和中间继电器控制。
5.1 输入测试
二线制传感器和三线制传感器都处于工作状态时,模块的X0端口和X1端口有高电平输入。其余X2~X15端口都处于低电平状态。此时,使用Modbus Poll的Test Center界面输入数据帧01 02 00 00 00 10 79 C6。其中,01为模块地址,02表示读取X端口状态指令,00 00表示读取端口起始地址,即X0端口地址,00 10表示一次性读取16位X端口状态,79 C6为循环冗余校验码[10]。接收到以上数据帧,模块在执行0X02指令后返回数据帧01 02 02 03 B9 48,其中,01为模块地址,前一个02表示X端口状态指令,后一个02表示两个字节,03表示X0和X1端口有信号,B9 48为循环冗余校验码。
图5 内部程序结构
图6 模块接线
5.2 输出测试
模块控制中间继电器KA1线圈通电时,使用Modbus Poll的Test Center界面输入数据帧01 05 00 00 FF 00 8C 3A,Y0端口输出高电平,其余Y1~Y6端口为低电平,模块返回数据帧01 05 00 00 FF 00 8C 3A。返回的数据帧中,01为模块地址。05表示执行0X05指令,即控制单个输出端口。00 00表示控制端口为Y0,如需要控制Y1,则数据帧为00 01,依次类推。FF 00表示设置端口为有输出,如果需要设置端口为无输出,则数据帧为00 00。8C 3A为循环冗余校验码。执行Y0输出指令后,中间继电器KA1线圈得电,其触点状态发生改变。如果模块控制KA1线圈失电,则所发送的数据帧为01 05 00 00 00 00 CD CA。
5.3 高速脉冲控制
当需要有高速脉冲时,上位机使用0X06或0X10指令设置数据。发送和接收数据的过程与使用0X02、0X05指令过程类似,此处不再详述。
6 应用案例
应用所设计的工业控制模块进行十字滑台电气控制,电气控制原理如图7所示。将所设计的工业控制模块作为核心控制器件,采集十字滑台传感器信号、按钮信号,控制步进驱动器,进而完成对步进电机的控制。十字滑台X轴、Y轴的前后端限位传感器信号与模块的X0、X1、X2、X3输入端口相连,防止滑台机械行程超限。-S1启动按钮和-S2停止按钮与模块的X16、X17输入端口相连,为模块提供启动和停止信号。模块的Y0输出端口与十字滑台X轴步进驱动器的EN+端相连,控制X轴步进驱动器工作。模块的Y1输出端口与十字滑台Y轴步进驱动器的EN+端相连,控制Y轴步进驱动器工作。模块的A_DIR和A_PUL高速脉冲输出端口向X轴步进驱动器提供控制信号,实现十字滑台X轴的运动控制。模块的D_DIR和D_PUL高速脉冲输出端口向Y轴步进驱动器提供控制信号,实现十字滑台Y轴的运动控制。模块具有两路RS485通信总线,一路与触摸屏相连。通过触摸屏,可以设置步进驱动器的X轴、Y轴行程,实时显示X轴和Y轴前后端传感器状态、电机运行距离、运行次数等参数。通过触摸屏上的启动和停止按钮,能够控制十字滑台启动和停止。另一路RS485通信总线可与其它设备相连,用于实现功能扩展。
图7 十字滑台电气控制原理
进行十字滑台电气控制时,点击触摸屏上的启动按钮或按下-S1按钮,工业控制模块根据触摸屏设定的轨迹来控制单个步进驱动器或协调控制两个步进驱动器实现十字滑台的复杂轨迹运行。点击触摸屏上的停止按钮或按下-S2按钮,工业控制模块通过内部程序使十字滑台停止运行。
7 结束语
笔者应用ARM STM32F407芯片,基于Modbus协议设计了一种工业控制模块。ARM STM32F407芯片具有强大的逻辑运算能力,通过编写不同程序能快速实现出入与输出之间复杂的逻辑控制,适用于较为烦琐的控制场合。通过十字滑台电气控制应用案例分析,确认所设计的工业控制模块具有较高的实用价值。