基于ModBus协议的STM32单片机与MCGS通信设计

2023-09-25 03:39钱宗斌
电脑知识与技术 2023年22期
关键词:通信协议触摸屏组态

钱宗斌

(安徽工业经济职业技术学院,安徽 合肥 230051)

0 引言

现代农业需实时掌握农作物的环境信息[1]。研究以农业大棚环境数据采集项目为背景,传感器采集到大棚内环境数据后发送至上位机,上位机由MCGS 组态技术实现,数据采集处理平台则由STM32单片机和ZigBee协调器组成,负责从ZigBee网络中读取不同位置的传感器数据。

MCGS 和STM32 单片机可以通过串口进行数据传输,但是存在两个问题,一是MCGS 通信接口电平信号与单片机的串口模块的电平信号不同,不能直接通信,因此需要进行信号转化。二是MCGS 触摸屏常用于工业现场的总线通信,内置了很多通信协议,包括和各种型号的PLC[2],采集板卡等通信的驱动,但是没有集成与51单片机和STM32单片机的串行通信协议,因此需要在单片机系统中开发与上位机匹配的通信协议。本文首先对MCGS 与STM32 单片机的通信接口进行了设计,并基于在工业现场广泛使用的ModBus总线协议,设计了二者的通信协议和消息帧,实现MCGS 触摸屏和单片机模块的通信。

1 通信接口设计

系统选用的TPC7062TX型号MCGS触摸屏作为上位机,其提供通信接口是485接口[3]。与STM32单片机的通信接口不同,二者工作电平不一致,STM32 串口电平为TTL 电平,电压范围是0-3.3V,而组态屏串口电压为-6V 至+6V,因此需要采用转接芯片进行转化才可进行通信。目前常用的转接芯片市场上有多种,本系统采用Sipex的SP30722EEN芯片作为转化芯片,其共有8个接口,该模块应用电路设计如图1所示。

图1 STM32单片机和MCGS触摸屏接口转换电路

在图1中,芯片左侧的引脚与单片机模块连接,其中RO 接口是芯片数据发送引脚,上拉4.7kΩ 的电阻后接入单片机串口模块的接收引脚。芯片的DI 接口是数据接收引脚,直接与单片机的串口发送端连接,在通信之前,需要将芯片的发送引脚(--- -----RE)和接收引脚(DE)使能,因发送和接收需要同时使用,因此本系统将两个引脚连接在一起,直接接入单片机的使能端口,用一个引脚来控制两个端口的使能,可以节约端口资源。芯片右侧A、B引脚与MCGS触摸屏的485接口连接,通过两个引脚的电压差来表示逻辑1或0,其中电阻R2 是B 引脚的下拉电阻,电阻R3 是A 引脚的上拉电阻,这样的设计可以保证在不通信时,信号能维持在1状态,电阻R3是终端电阻,吸收干扰信号。

2 ModBus消息帧的设计

ModBus 协议最早是专门为可编程控制器通信而开发的一种通信协议,目前已经成为主流的工业现场总线协议[3]。在该协议下,MCGS监控平台作为指令发送方,主动发起通信,STM32单片机作为从机,根据指令类型做出不同的响应,从机不能主动给主机发送指令。ModBus 协议消息帧的格式有ACSII 和RTU 两种类型[4],ACSII格式基于字符进行传送,传送时间长,效率较低。RTU 格式基于字符流传送数据,传输速度快。本文采用此种方式进行设计,其消息帧结构见图2。ModBus 协议支持多达255 个功能码,本系统采用的MCGS 组态软件支持01、02、03、04 等4 种功能码。每个功能码执行不同的操作。

图2 ModBus RTU消息帧结构

通过对系统功能进行分析可知,一方面,组态屏需要定期采集单片机系统中存储的温湿度数据、光照数据、二氧化碳浓度数据等环境信息;另一方面,也需要根据收集的信息对单片机发送指令,执行一些操作或者修改工作参数等。二者交互的数据主要有以下几类:

1) 数据读取:读取各个位置传感器采集的数据。

2) 发送指令:发送系统操作指令,比如系统启动、停止、报警等命令。

3) 修改系统工作参数:包括采集周期设定、报警触发条件设定、数据存储参数修改等。

根据上述数据种类可知,MCGS 提供的4 个功能码已经能够满足系统的设计需求,接下来结合功能码对通信数据的消息帧进行设计。

ModBus 通信协议的功能码字段指定系统要执行何种操作,地址字段用来寻找设备。本系统中只有STM32一个下位机,其地址设置可为0x01。对于不同的环境数据信息,则分别设计不同的寄存器地址,对于温湿度数据,寄存器地址配置以0x10 开头,最多可存放16个温湿度传感器数值,光照强度寄存器地址设置以0x20开头,可存放16个传感器,二氧化碳浓度寄存器地址设置以0x30开头,可存放16个传感器,系统操作指令以0x40 开头,修改系统工作参数的命令以0x50开头。具体设置见表1。

表1 ModBus通信协议配置表

以上列举了部分操作对应的寄存器地址,该地址是16 位,一个功能码下可满足最多65535 个操作,可根据系统要求进行功能拓展或者修改。

下面以读取节点1 的温湿度数据采集为例,列举出对应的RTU消息帧格式。设备地址为0x01,寄存器地址设置为0x0010。MCGS触摸屏读取温湿度的信息时,其请求通信帧格式见表2。

表2 ModBus通信请求帧格式

当从机收到该帧后,假设此时温度值是25 摄氏度,湿度值是25%,则其响应帧的格式见表3。

表3 ModBus通信响应帧格式

3 ModBus协议控制流程

上位机的协议由组态屏内置的驱动根据操作指令自动生成,ModBus 协议设计的重点是在单片机模块编写响应代码。首先设置STM32 单片机的串口与上位机的串口,接下来设置数据的采集周期。本系统在STM32 单片机中选择定时器2,并且通过定时器中断的方式来接收数据。

当组态端程序发送ModBus 请求帧后,经过电平转换模块,送到单片机的串口缓存中,并产生中断。此时STM32 通过读取函数读取缓存区的数值,进行CRC校验无误后,将请求帧不同字段的数据解析后存放在缓存数组中,单片机根据接收的功能码和操作地址执行不同的响应。系统工作流程见图3。

图3 ModBus协议工作流程

解析ModBus 协议分以下几个步骤:首先,通过STM32的串口接收数据,获得数据长度并存放到数组buffer[]中,然后判断buffer[0]为地址,判断其是否为0x10,若是,则表明是STM32 模块,若不是,则返回错误值。其次,进行CRC 校验,若校验正确,则对buffer[1]字段进行判断,该字段存放的是协议的地址,根据地址来决定进行何种操作,地址码与操作的关系前文已经有表述。否则返回错误。接下来对数组其他部分内容进行读取,主要包括主机要求读取的寄存器数量值。最后,若上述操作完整,则开始执行数据采集或者动作执行等功能,并发送响应帧。在解析了Mod-Bus 协议请求帧的数据之后,根据功能码和地址从STM32的存储区中查找对应节点的数据信息,并填充到发送数组中,通过串口发送给上位机。

4 MCGS软件设计

打开MCGS 软件,在设备管理器中添加“通用串口父设备”,然后再添加具体的子设备,一个父设备可以挂载多个子设备,MCGS 软件内部集成了市场上主流的硬件设备,因此在软件的设备工具箱中,找到对应设备的型号,添加进去即可。接下来再对每一个设备的参数进行设置,确保能够建立通信连接。首先添加通用串口父设备,然后在工具箱中找到“标准Mod-Bus RTU设备”并添加到组态窗口中。如图4所示。

图4 ModBus RTU设备添加窗口

对于父设备要进行工作参数的设置,主要是对采集周期、端口号、波特率、数据长度、校验方式等进行设置。见图5。

图5 ModBus RTU设备参数设置

接下来再进行ModBusRTU 子设备的参数设置,设置采集周期是1000ms,设备地址为1,通讯等待时间200ms,校验方式选择0,见图5(a) 。然后进入内部参数设置,根据前文内容,分别设置设备的通道和地址,建立数据的绑定关系,见图5(b) 。

将触摸屏和单片机端口线接好,在触摸屏内部配置好ModBus 通信协议的参数。启动设备,进入监控主界面,可以看到画面中已经读取出环境数据,以温湿度数据为例,如图6所示。

图6 环境数据采集曲线图

5 结论

文章首先对硬件电路进行设计,将MCGS 上位机和STM32单片机的接口电平进行转化,为硬件间串口通信奠定基础。再基于ModBus 协议,设计针对农业大棚环境数据采集的消息帧和响应帧,上位机的指令发送给STM32单片机,通过解析协议帧,获取指令,再按照响应帧格式将环境数据上传至上位机平台,实现二者通信。结果表明,该设计可以有效解决二者之间通信不匹配的问题,较好地实现农业数据的采集和控制,同时为其他嵌入式模块与上位机通信提供思路。

猜你喜欢
通信协议触摸屏组态
基于PLC及组态技术的恒温控制系统开发探讨
PLC和触摸屏在卫生间控制系统的应用
基于Z-Stack通信协议栈的红外地温采集电路设计
基于PLC和组态的智能电动拧紧系统
基于DMX512通信协议的多路转发器设计与研究
基于NS-3的PLC多频通信协议仿真平台设计与实现
铸造行业三维组态软件的应用
RSSP-I、RSSP-Ⅱ及SAHARA三种安全通信协议实现技术简介
投射式多点触控电容触摸屏
触摸屏项目移植在自动化系统升级中的应用