当前位置:首页 期刊杂志

基于Modbus通信控制器的设计与实现

时间:2024-08-31

陈俊炜,周政,李宇翔,缪文南

(广州城市理工学院电子信息工程学院,广东广州,510800)

0 引言

随着中国科技的快速发展,工业控制系统在各个行业中应用非常广泛,例如农业、矿山、油田等领域发挥着巨大的作用。在工业现场中,通常是采用一个主节点对多个子节点进行控制或数据采集。在传输介质方面可以利用无线技术,相对于有线通讯网络,无线通讯网网络具有极高的灵活性的移动性,且传输范围广。因此,在工业现场的设计中,对主节点和子节点的通信方式和通信协议的设计就显得至关重要。针对控制器通信问题,本文将Modbus技术与无线技术相结合,设计一套低成本,高安全性,高快捷且基于Modbus协议的无线控制系统。通过无线Modbus通信网络,主机可以根据地址调用设备,随时读取设备的场数据和控制设备的工作状态。

1 系统方案设计

系统主要由STM32最小系统、SX1268无线模块、RS-485通信模块、稳压模块、继电器电路、电压采集模块、拓展模块、LED电路组成。系统方案如图1所示。其中电源供电使用了LM2596开关电源电路和AMS1117线性低压差稳压电源电路。继电器电路使用TPL521可控制的光耦合器件和ULN2003大电流驱动阵列驱动继电器。TPL521负责强电和弱电的隔离,增强系统稳定性。ULN2003是高压大电流达林顿晶体管阵列,STM32主控器内置的模数转换器(ADC)进行电压采集。

图1 系统硬件框图

2 系统硬件模块设计

2.1 STM32最小系统设计

STM32的最小系统的电路图如图2所示,主要由复位电路、下载接口、BOOT选择电路、滤波电路组成。选用STM32G070芯片,内置了16MHZ的晶振,经过PLL倍频器,可以得到64M的时钟频率。在STM32G0x0中,通过BOOT0引脚和引导配置位nBOOT1、BOOT_SEL和nBOOT0来选择三种不同的引导模式,我们禁用BOOT0引脚功能,然后软件将所有bit置1,将用户闪存作为启动区。选用SW调试接口。使用的j-link仿真器,最高可以达到50M的调试速度。结合RC电路,当按键按下时,复位引脚处于低电平,单片机进入复位状态。

图2 STM32最小系统工作电路原理图

2.2 稳压电源电路设计

系统供电部分输入电压为12V,通过开关电源电路将电压降到5V,再利用低压差线性稳压电源将电压降到3.3V,分别给各个模块供电。开关电源的供电接口采用了常用的DC接口,使用方便,而电源芯片则采用了贴片的LM2596-5.0。LM2596集成芯片是一个开关电源的芯片,开关频率为150khz,最大输出电流可以达到3A,电源工作原理图如图3所示。图中输入12V电压经过一个二极管,利用二极管的正向导通特性,可以有效的防止电源反接。输入电容C5具有滤波的作用,可以使输出电压平稳。

图3 开关电源电路

同时输出3.3V的低压差线性采用TPS73733DCQR线性电源芯片,为系统提供稳定的3.3V的工作电压,在TPS73733DCQR的输入端口和输出端口都放置了1uF的滤波电容,用于滤除干扰,提高了系统的稳定性。

2.3 继电器电路设计

继电器的控制电路如图4所示,本次设计选用了欧姆龙的两开两闭电磁式继电器,最大可以承受5A的电流,触发电压12V,为了驱动继电器,使用ULN2003ADR高压大电流达林顿晶体管阵列进行电流放大,使用TPL521可控制的光耦合器件对强电和弱电进行隔离,防止高压冲击损坏单片机。

图4 继电器电路

3 软件部分实现

本文使用RTX实时操作系统对系统创建了3个任务,分别用于无线模块数据处理、RS-485模块数据处理、用户输入检测。其中串口的数据使用了中断+FIFO队列的方式进行传输,收到数据之后将数据存放到消息邮箱中,然后任务会对邮箱中的数据进行处理解析,使用全局标志位标记表示各个模式,并在模式切换时清除旧数据,初始化新数据,系统软件流程图如图5所示。

图5 系统软件流程

3.1 Modbus从机处理框架及功能实现

当无线控制器被设置为从机时,根据Modbus协议,从机不会主动与主机进行通信,也不会和其他的子节点进行通信。所以从机的程序以对主机的请求做出判断并作出响应的应答为主。其运行的流程图如图6所示。

图6 从机软件框架流程图

其中Modbus根据数据模型的不同定义了许多的功能码,其中比较常用的有:01H、02H、03H、04H、05H、10H。功能码01H的作用是读取线圈状态,其请求的协议格式为子节点的地址+功能码+寄存器地址的高字节和低字节+寄存器数量的高字节和低字节+ CRC校验的高字节和低字节,从机的应答格式为子节点的地址+功能码+返回数据长度+返回数据1到n,CRC校验的高字节和低字节。响应处理的流程图如图7所示。

图7 功能码01H软件处理流程图

功能码05H和0FH功能都是写线圈,区别在于05H是对单个线圈操作,0FH是对多个线圈操作,0FH的用法和01H差不多,而且用的不多,这里不详细介绍。Modbus数据帧的地址域、功能码和CRC域的定义都是相同的,区别主要在于数据域,所以05H其请求的协议数据域为寄存器地址的高低字节+数据的高低字节,从机的数据域为:寄存器地址高字节:1,寄存器地址低字节:1,被读取寄存器值的高低字节,数据段处于FF00表示设置ON状态,0000H表示设置OFF状态。响应处理的流程图如图8所示,先读取寄存器号和数据,然后设置寄存器的值,完成之后返回应答,最后计算CRC检验之后发送给主机。

图8 功能码05H软件处理流程图

功能码02H的作用是读取离散寄存器的状态,离散寄存器的状态是只读的,不可以改写。功能码04H的作用是读输入寄存器,输入寄存器的数据支持16位的宽度,只读。功能码03H是用于读保持寄存器,06H是写单个保持寄存器,10H是写多个保持寄存器,保持寄存器的数据格式和输入寄存器一样都是16位字节,但可以进行读写。

4 系统测试

系统测试采用需要两套无线控制器进行测试。主机使用电脑的上位机作为主机,通过USB转RS485连接到无线控制器,该控制器工作在转发模式的主机模式下,用于将主机发送的指令通过无线模块发送给从机。采用另一个无线控制器作为从机,使其工作在从机模式下。配置完成之后就可以开始进行调试。

功能码01H用于读线圈,本设计的从机一共有6个线圈寄存器,从机地址为1,寄存器首地址为0x0101,提前设置6个寄存器的值为110101,测试结果如表1所示。

表1 功能码01H测试数据表

功能码02H用于读离散输入寄存器,本设计的从机有1个离散输入寄存器,用于采集按键2的状态,寄存器首地址为0x0201,默认情况值为0,按键按下值为1,测试结果如表2所示。

表2 功能码02H测试数据表

功能码03H用于读保持寄存器,本设计的从机有4个保持寄存器,通常保持寄存器可用于存储版本号等信息,提前设置保持寄存器的值为0x2020, 0x0507, 0x1240, 0x0000,寄存器首地址为0x0301,测试结果如表3所示。

表3 功能码03H测试数据表

以此类推,功能码04H(输入寄存器)、功能码05H(单个线圈寄存器)、功能码06H(保持寄存器)的结果表明可以一次寻址可实现多通道数据采集,具有良好的可扩展性。

5 结论

本文将Modbus技术与无线技术相结合,设计了一款Modbus控制系统进行设计,通过方案设计,模块电路设计,软件设计以及Modbus报文从机分析,较好实现了人机交互功能,通过系统测试表明,主机采集的数据与从机屏幕显示的数据完全一致,一次寻址可实现多通道数据采集,数据发送出错率低,稳定性高,因此本系统的实现为各自工业环境的数据传输及无线通信具有一定的研究价值。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!