摘要:西门子 SITRANS FUS 超声波流量的表头支持 4-20mA 电流信号输出和 RS232 文本日志输出,都无法与水利部门采 用 Modbus 协议的取水监测设备进行通信。针对此问题,本文自主设计并实现了一种支持Modbus 协议的通讯模块,能够实时解析 流量计表头 232 端口输出的文本信息,并将其转换成 Modbus 协议报文,与取水监测设备进行通信。该通讯模块具有结构简单、可 拓展性强、成本低的优点。
1 概述
西门子 SITRANS FUS 外夹式水煤气流量计的标准表头支 持 4- 20mA 电流信号输出,而水利部门的取水监测设备应用层 采用的是 Modbus 协议,物理层采用的是 RS485 标准,无法与SITRANS FUS 流量计的表头通信。针对这一问题,本文自主设 计并实现了一种支持 Modbus 协议的通信模块,使得超声波流量计表头与取水监测设备可以以 Modbus 协议进行通讯。
2 系统架构
图 1 为本文设计的 Modbus 通讯模块与取水流量监测设备、 水煤气流量计表头组成的系统架构示意图。该模块通过SITRANS FUS水煤气流量计表头的 232 接口与流量计表头通信;通过 485 接口,以 Modbus 协议与水利部门的取水监测设备通信。通讯模块将水煤气流量计的信息解析并封装成 Modbus报文,提供给取水监测设备读取。硬件方面,采用成熟的STM32F407 开发板,带有 232 接口和 485 接口,本文主要实现软件部分的功能。
3 软件设计
3.1 软件架构
Modbus 通讯模块的软件架构如图 2 所示,分为硬件层、硬件抽象层,中间层和应用层。中间层包括一个实时操作系统FreeRTOS 和一个针对嵌入式环境开发的轻量级 Modbus 协议库Freemodbus。在应用层,主要创建了三个任务,232_Task 负责读 取和解析流量计表头输出的文本信息,Modbus_Task 负责存储 解析后的流量计数据到 Modbus 寄存器表,以及以 Modbus 协议与取水监测设备通信,LED_Task 是一个辅助任务,主要用来提示程序运行状态。
3.2 软件流程图
图 3 为 Modbus 通讯模块的软件流程图,创建的三个任务都是以 FreeRTOS 系统的消息(Message)来驱动。
4 测试与通讯联调
Modbus 通讯模块如图 4 所示。为保证供电稳定,使用了电源切换装置给主板供电,共有主副两路 5V 电源。
在 PC 上使用权威工具测试软件 Modbus poll,作为 Modbus主机对通讯模块进行测试。通讯模块作为 Modbus 从机响应Modbus Poll 软件发出的请求。通讯模块内部使用Modbus 的输入寄存器(Input Register)存储流量计数据。Modbus Poll 发送的测试命令字节流为:01 04 00 00 0014 F0 05。其中 0x01 为 Modbus 从机地址,0x04 功能码为读取 输入寄存器命令,0x0000 为读取寄存器的起始地址,0x0014(20)为读取寄存器的个数,0xF0 0x05 为 CRC 校验码。
Modbus Poll 通讯测试结果如图 5 所示:Tx = 24140,Err =0,ID = 1,F = 04,SR = 1000ms,Log = on。 其中 ,Tx 为Modbus Poll 发送命令次数,也就是说在测试期间 Modbus Poll软件共发送读输入寄存器命令 24140 次(发送间隔为 1s,测试时间为 6.7 小时);Err 为通讯错误数,Err = 0 表明 Modbus 通讯模块正确响应次数为 24140 次(错误数为 0)。
5 结论
本文针对 FUS 水煤气流量计无 Modbus 通讯接口,无法与取 水监测设备通讯的问题,自主设计并实现了一种基于微处理器STM32F407 的低成本 Modbus 通讯模块。在通讯模块的主控芯 片 上 移 植 了 开 源 代 码 库 FreeModbus 和 开 源 操 作 系 统FreeRTOS,实现了对流量计表头输出文本的解析,以及与Modbus 主机的通讯,从而实现了给 FUS 水煤气流量计表头增加Modbus 通讯的功能。测试结果表明,该通讯模块工作稳定可靠,具备了在较高通讯频率下正确响应 Modbus 主机请求的能力,达到了实用要求。该通讯模块也具备一定的可拓展性,可应用 在公司其它 FUS 水煤气流量计上,并且很容易通过 485 总线与DCS 系统或 PLC 进行通讯。