智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案

智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案 智能矿井沙盘模型涉及环境感知系统甲烷/一氧化碳/风速/温度/粉尘/矿压等多类型传感器、智能控制中心、井下通信网络5G/WiFi6/UWB定位基站、煤矿工作面实训装备等多个子系统的协同控制。一套完整的智能矿井沙盘控制系统需要实现“环境感知层采集数据→网络传输层实时回传→智能控制层分析决策→执行层自动响应”的完整闭环。与煤矿设备模型聚焦单体设备动作不同智能矿井沙盘控制系统的核心是多层协同与双向联动——地面调度中心指令下发、井下设备状态反馈、传感器数据实时映射每个环节的控制逻辑必须与实际智能矿井系统一致。本文结合筑城世纪模型在工业模型控制系统开发中的项目经验2008年成立2000㎡制作工厂控制系统自主研发已为华北电力大学、国机集团、巴斯夫、国家电网、清华大学等500企事业单位提供服务梳理智能矿井沙盘模型多系统协同控制系统的设计与实现方案涵盖系统架构、硬件选型、多类型传感器信号采集与模拟、Modbus RTU寄存器映射、多路执行器协同控制代码实现及数字孪生数据对接要点。一、为什么智能矿井沙盘必须用STM32Modbus RTU方案智能矿井沙盘的控制系统有几个特殊要求第一多类型传感器信号采集与模拟要求高。 矿井环境感知系统涉及甲烷、一氧化碳、风速、温度、粉尘、矿压等多种传感器部分传感器需采集真实信号如温度、风速部分需模拟信号如甲烷浓度、矿压数据。STM32的多通道ADC、数字接口和DAC输出可满足混合信号处理需求。第二多子系统协同控制逻辑复杂。 智能矿井沙盘涉及感知层、传输层、控制层、执行层四个层面的协同——传感器数据变化触发通信链路状态更新通信状态影响控制中心决策控制指令驱动执行层设备动作。各层之间的联动逻辑需通过状态机精确调度。第三地面-井下双向联动是核心演示功能。 地面调度中心发出的控制指令需通过模拟通信网络传输至井下执行设备井下设备状态需实时反馈至地面调度中心。这要求控制系统支持双向数据流和异步事件处理。第四后期修改频繁。 智能矿井沙盘的控制逻辑经常根据客户需求调整如新增“故障模拟”模式、调整传感器报警阈值。自主研发的控制系统通过寄存器在线修改参数即可完成调整。STM32 vs PLC 选型对比对比项 PLC方案 STM32方案硬件成本 8000-15000元 800-1500元混合信号处理 需专用模拟量/数字量模块 ADC/DAC/GPIO直接处理多子系统协同 梯形图实现困难 C语言状态机灵活可控双向联动逻辑 实现困难 中断状态机精确调度后期修改 需编程软件授权工程师到场 寄存器在线修改无需重编译为什么用RS485/Modbus RTU智能矿井沙盘模型内部传感器和执行器分布广泛井下巷道、地面调度中心、通信基站等多区域RS485总线支持多点通讯理论32个节点一线串接所有设备布线简洁。Modbus RTU是工业标准协议支持接入触摸屏、云平台网关、数字孪生系统等第三方设备。二、系统架构设计2.1 总体架构text┌─────────────────────────────────────────────────────────────┐│ 数字孪生大屏/云平台数据可视化 远程控制 ││ 实时数据展示 井下三维地图 远程指令下发 │└─────────────────────────┬───────────────────────────────────┘│ MQTT/HTTP4G/WiFi网关┌─────────────────────────▼───────────────────────────────────┐│ 触摸屏/中控平板Modbus RTU 主站 ││ 本地监控 手动控制 参数设置 模式切换 │└─────────────────────────┬───────────────────────────────────┘│ RS4859600,8N1,120Ω终端电阻┌─────────────────────────▼───────────────────────────────────┐│ STM32F103RCT6 从站边缘计算网关 ││ 传感器采集 → 逻辑判断 → 执行器驱动 → 数据上报 │└───────┬─────────┬─────────┬─────────┬───────────────────────┘│ │ │ │┌───▼───┐ ┌───▼───┐ ┌───▼───┐ ┌───▼───┐│传感器 │ │通信 │ │控制 │ │执行器 ││采集 │ │链路 │ │中心 │ │驱动 ││(环境 │ │指示 │ │联动 │ │(电机/ ││感知) │ │(5G/ │ │(地面- │ │灯带/ ││ │ │UWB) │ │井下) │ │指示灯)│└───────┘ └───────┘ └───────┘ └───────┘2.2 硬件选型组件 选型 数量 选型理由主控MCU STM32F103RCT6 1 256KB Flash51个GPIO3个USART温湿度传感器 DHT22 2-3 数字输出精度±0.5°C风速传感器 热膜式风速传感器 1-2 模拟输出0-5V气体传感器 MQ系列甲烷/CO模拟 2-3 模拟输出浓度模拟粉尘传感器 GP2Y1010AU0F 1-2 模拟输出PWM驱动通讯接口 MAX485ESA 1 RS485收发器执行器驱动 DRV8833/继电器模组 依执行器数 驱动微型电机/电磁阀灯带 WS2812B60灯/米 依链路数 单总线控制通信链路指示数据网关 ESP8266/4G模块 1 WiFi/4G上云2.3 GPIO分配表端口 功能 信号类型 说明PA9/PA10 USART1 通讯 与触摸屏RS485通讯PA2/PA3 USART2 通讯 预留与4G/WiFi网关通讯PB0 温湿度传感器1 单总线 DHT22井下巷道PB1 温湿度传感器2 单总线 DHT22地面调度中心PA0 风速传感器 ADC输入 0-5V模拟量PA1 甲烷传感器 ADC输入 模拟浓度信号PA4 一氧化碳传感器 ADC输入 模拟浓度信号PA5 粉尘传感器 ADC输入 模拟浓度信号PB3 采煤机电机 PWM输出 滚筒旋转控制PB4 刮板输送机电机 PWM输出 链轮驱动控制PB5 液压支架电机 PWM输出 升降柱控制PB6 5G基站指示灯 GPIO输出 通信覆盖指示PB7 UWB定位指示灯 GPIO输出 定位信号指示三、Modbus寄存器映射设计以下为智能矿井沙盘控制系统的寄存器定义共40个保持寄存器3.1 系统控制寄存器40001-40008寄存器地址 偏移地址 功能 数据类型 读写 取值范围 说明40001 0x0000 系统启停 bit R/W 0/1 0停止1启动40002 0x0001 运行模式 uint16 R/W 1-3 1自动演示2手动控制3故障模拟40003 0x0002 当前场景 uint16 R 0-4 0待机1感知层2传输层3控制层4全场景40004 0x0003 采集周期 uint16 R/W 1-60 传感器采集周期秒40005 0x0004 系统状态 uint16 R 0-3 0停止1运行2告警3故障40006 0x0005 故障代码 uint16 R 0-99 0无故障40007 0x0006 数据上报 bit R/W 0/1 0不上报云端1上报云端40008 0x0007 固件版本 uint16 R — 只读3.2 环境感知传感器数据寄存器40009-40018只读寄存器地址 偏移地址 功能 数据类型 单位 说明40009 0x0008 井下温度 uint16 0.1°C 如25525.5°C40010 0x0009 井下湿度 uint16 0.1%RH40011 0x000A 风速 uint16 0.1m/s40012 0x000B 甲烷浓度 uint16 0.01% 0-100%LEL40013 0x000C 一氧化碳浓度 uint16 ppm40014 0x000D 粉尘浓度 uint16 mg/m³40015 0x000E 矿压数据 uint16 MPa 模拟值40016 0x000F 地面温度 uint16 0.1°C40017 0x0010 地面湿度 uint16 0.1%RH3.3 通信与定位系统寄存器40019-40028寄存器地址 偏移地址 功能 数据类型 读写 说明40019 0x0012 5G基站状态 uint16 R/W 0离线1在线2故障40020 0x0013 WiFi6基站状态 uint16 R/W 同上40021 0x0014 UWB定位状态 uint16 R/W 同上40022 0x0015 井下人员定位数 uint16 R 当前井下人员数量40023 0x0016 井下车辆定位数 uint16 R 当前井下车辆数量40024 0x0017 通信覆盖率 uint16 R 0-100%40025 0x0018 信号强度指示 uint16 R 0-10040026 0x0019 应急广播状态 bit R/W 0关闭1开启3.4 执行器控制与阈值寄存器40029-40040寄存器地址 偏移地址 功能 数据类型 读写 说明40029 0x001C 采煤机启停 bit R/W 0停止1启动40030 0x001D 采煤机速度 uint16 R/W 0-100%40031 0x001E 刮板输送机启停 bit R/W 0停止1启动40032 0x001F 液压支架动作 uint16 R/W 1降架2移架3升架4推溜40033 0x0020 甲烷报警阈值 uint16 R/W %LEL40034 0x0021 一氧化碳报警阈值 uint16 R/W ppm40035 0x0022 风速下限阈值 uint16 R/W m/s40036 0x0023 温度上限阈值 uint16 R/W 0.1°C40037 0x0024 地面-井下联动 bit R/W 0关闭1开启40038 0x0025 故障模拟类型 uint16 R/W 1传感器故障2通信中断3设备故障40039 0x0026 演示速度 uint16 R/W 1-5档四、核心代码实现4.1 系统初始化与多类型传感器采集cpp#include “ModbusRTU.h”#include “DHT.h”#include Wire.h#define SLAVE_ID 1#define BAUD_RATE 9600// 传感器GPIO定义#define DHTPIN1 PB0 // 井下温湿度#define DHTPIN2 PB1 // 地面温湿度#define DHTTYPE DHT22#define ADC_WIND_SPEED PA0 // 风速传感器#define ADC_METHANE PA1 // 甲烷传感器#define ADC_CO PA4 // 一氧化碳传感器#define ADC_DUST PA5 // 粉尘传感器// 执行器GPIO定义#define MOTOR_SHEARER PB3 // 采煤机电机PWM#define MOTOR_CONVEYOR PB4 // 刮板输送机电机PWM#define MOTOR_SUPPORT PB5 // 液压支架电机PWM#define LED_5G PB6 // 5G基站指示灯#define LED_UWB PB7 // UWB定位指示灯ModbusRTU mb;uint16_t holdingRegs[40] {0};// 传感器数据结构struct SensorData {float temp_underground;float hum_underground;float wind_speed;float methane;float co;float dust;float pressure;float temp_ground;float hum_ground;};SensorData sensor;DHT dht1(DHTPIN1, DHTTYPE);DHT dht2(DHTPIN2, DHTTYPE);// 滑动平均滤波器#define FILTER_SIZE 5float filterBuffer[FILTER_SIZE];int filterIndex 0;float movingAverage(float newValue) {filterBuffer[filterIndex] newValue;filterIndex (filterIndex 1) % FILTER_SIZE;float sum 0;for (int i 0; i FILTER_SIZE; i) sum filterBuffer[i];return sum / FILTER_SIZE;}void setup() {SystemClock_Config(); // 72MHzSerial1.begin(BAUD_RATE);mb.begin(Serial1);mb.slave(SLAVE_ID);mb.addHreg(0, holdingRegs, 40);mb.onGet(handleRead); mb.onSet(handleWrite); dht1.begin(); dht2.begin(); pinMode(MOTOR_SHEARER, OUTPUT); pinMode(MOTOR_CONVEYOR, OUTPUT); pinMode(MOTOR_SUPPORT, OUTPUT); pinMode(LED_5G, OUTPUT); pinMode(LED_UWB, OUTPUT); Timer1.initialize(1000000); Timer1.attachInterrupt(sensorCollectTick);}void loop() {mb.task();}4.2 多传感器数据采集与报警逻辑cppvoid sensorCollectTick() {// 采集井下温湿度sensor.temp_underground dht1.readTemperature();sensor.hum_underground dht1.readHumidity();// 采集地面温湿度 sensor.temp_ground dht2.readTemperature(); sensor.hum_ground dht2.readHumidity(); // 采集风速模拟量转工程值0-5V对应0-20m/s int windADC analogRead(ADC_WIND_SPEED); sensor.wind_speed (windADC / 4095.0) * 20.0; // 采集甲烷浓度模拟量转0-100%LEL int methADC analogRead(ADC_METHANE); sensor.methane (methADC / 4095.0) * 100.0; // 采集一氧化碳浓度 int coADC analogRead(ADC_CO); sensor.co (coADC / 4095.0) * 500.0; // 采集粉尘浓度 int dustADC analogRead(ADC_DUST); sensor.dust (dustADC / 4095.0) * 50.0; // 更新寄存器 holdingRegs[8] (uint16_t)(sensor.temp_underground * 10); holdingRegs[9] (uint16_t)(sensor.hum_underground * 10); holdingRegs[10] (uint16_t)(sensor.wind_speed * 10); holdingRegs[11] (uint16_t)(sensor.methane * 100); holdingRegs[12] (uint16_t)(sensor.co); holdingRegs[13] (uint16_t)(sensor.dust * 10); holdingRegs[15] (uint16_t)(sensor.temp_ground * 10); holdingRegs[16] (uint16_t)(sensor.hum_ground * 10); // 报警逻辑 uint16_t methThreshold holdingRegs[32]; uint16_t coThreshold holdingRegs[33]; if (sensor.methane methThreshold || sensor.co coThreshold) { holdingRegs[4] 2; // 系统状态告警 // 触发报警灯闪烁 digitalWrite(LED_5G, HIGH); delay(100); digitalWrite(LED_5G, LOW); } else { holdingRegs[4] 1; // 系统状态运行 } // 自动演示模式 if (holdingRegs[1] 1) { autoDemo(); }}4.3 地面-井下双向联动控制cppvoid autoDemo() {uint8_t scene holdingRegs[2];uint8_t 联动状态 holdingRegs[36];switch(scene) { case 1: // 感知层演示 simulateSensorTrend(); break; case 2: // 传输层演示 simulateCommunication(); break; case 3: // 控制层演示 if (联动状态 1) { groundToUndergroundControl(); } break; case 4: // 全场景演示 fullSceneDemo(); break; }}void simulateSensorTrend() {// 模拟甲烷浓度缓慢上升展示报警触发static float trend 0;trend 0.1;if (trend 20) trend 0;sensor.methane 10 trend;holdingRegs[11] (uint16_t)(sensor.methane * 100);}void simulateCommunication() {// 模拟5G基站覆盖范围static int coverage 0;coverage (coverage 1) % 100;holdingRegs[23] coverage;// 灯带动态显示通信链路状态 if (coverage 70) { digitalWrite(LED_5G, HIGH); } else if (coverage 40) { digitalWrite(LED_5G, HIGH); delay(500); digitalWrite(LED_5G, LOW); delay(500); } else { digitalWrite(LED_5G, HIGH); delay(200); digitalWrite(LED_5G, LOW); delay(200); }}void groundToUndergroundControl() {// 地面调度中心发出指令 → 井下设备响应if (holdingRegs[28] 1) { // 采煤机启动指令analogWrite(MOTOR_SHEARER, holdingRegs[29]);holdingRegs[28] 0;}if (holdingRegs[30] 1) { // 刮板输送机启动指令 analogWrite(MOTOR_CONVEYOR, 180); holdingRegs[30] 0; }}void fullSceneDemo() {// 完整闭环感知→传输→控制→执行static int step 0;step (step 1) % 4;switch(step) { case 0: sensorCollectTick(); break; case 1: digitalWrite(LED_5G, HIGH); break; case 2: holdingRegs[36] 1; break; case 3: groundToUndergroundControl(); break; }}4.4 寄存器读写回调cppuint16_t handleRead(uint16_t offset, uint8_t index) {return holdingRegs[offset];}void handleWrite(uint16_t offset, uint8_t index, uint16_t value) {switch(offset) {case 0: // 系统启停holdingRegs[0] value;break;case 1: // 运行模式切换holdingRegs[1] value;break;case 2: // 场景切换holdingRegs[2] value;break;case 28: // 采煤机启停if (value 1) analogWrite(MOTOR_SHEARER, holdingRegs[29]);else analogWrite(MOTOR_SHEARER, 0);holdingRegs[28] value;break;case 29: // 采煤机速度if (holdingRegs[28] 1) analogWrite(MOTOR_SHEARER, value);holdingRegs[29] value;break;case 30: // 刮板输送机启停if (value 1) analogWrite(MOTOR_CONVEYOR, 180);else analogWrite(MOTOR_CONVEYOR, 0);holdingRegs[30] value;break;case 32: case 33: case 34: case 35:holdingRegs[offset] value;break;case 36: // 地面-井下联动开关holdingRegs[36] value;break;case 37: // 故障模拟if (value 1) simulateFault();holdingRegs[37] value;break;default:holdingRegs[offset] value;break;}}五、关键技术细节5.1 多类型传感器混合信号采集智能矿井沙盘涉及数字传感器DHT22温湿度、模拟传感器风速、气体浓度、粉尘和模拟信号发生器矿压。STM32的ADC支持多通道扫描模式可同时采集多路模拟信号。注意事项 气体传感器MQ系列需预热3-5分钟才能输出稳定信号粉尘传感器GP2Y1010AU0F需PWM驱动典型驱动周期10ms占空比0.32ms。传感器数据存在噪声建议在软件中做滑动平均滤波。5.2 通信链路状态模拟智能矿井沙盘的通信网络演示需要通过灯带或指示灯展示5G基站覆盖范围、信号强度、定位精度等信息。WS2812B灯带支持独立控制每个灯珠可用不同颜色表示信号强度绿色强黄色中红色弱用灯珠点亮数量表示覆盖范围。5.3 地面-井下双向联动的异步事件处理地面调度中心与井下设备之间的双向联动涉及异步事件处理——地面指令下发后需等待井下设备响应井下状态变化后需主动上报地面。建议采用状态机事件队列的设计模式地面指令入队→状态机逐条处理→执行完成后生成响应事件→上报地面。5.4 故障模拟与应急演练智能矿井沙盘通常需要支持故障模拟功能传感器故障、通信中断、设备故障用于安全培训和应急演练。建议设计独立的故障注入寄存器40037写入不同故障码触发对应的故障模拟场景。以“传感器故障模拟”为例当40037写入1时控制系统将指定传感器的读数强制置零或置为异常值如甲烷浓度突变为0或100%同时触发系统状态切换为“故障”并点亮报警灯。在煤矿安全培训场景中学员需要根据沙盘上的异常指示判断故障类型并执行应急预案这比单纯的理论培训直观得多也是智能矿井沙盘区别于普通展示沙盘的核心价值。5.5 通讯异常处理策略 实现方式 适用场景保持当前状态 不改变输出等待通讯恢复 展厅演示自动切换应急模式 切换至预设安全状态 安全要求较高状态上报 向上位机发送故障码 远程监控六、现场调试要点6.1 传感器异常排查现象 排查方向 解决方案温湿度读数异常 接线/时序 确认DHT22供电3.3-5V数据线接上拉电阻气体浓度读数跳变 ADC噪声/预热不足 增加软件滤波预热3-5分钟风速传感器无数据 供电/信号 确认传感器供电正常检查信号线粉尘传感器无输出 PWM驱动 确认PWM驱动信号正确10ms周期0.32ms高电平6.2 通信链路指示异常排查现象 排查方向 解决方案灯带全亮或全灭 数据线虚接 重新焊接确认GPIO输出电平灯带颜色错误 数据时序 确认系统时钟72MHzWS2812B时序正确灯带供电不足 电源 测量末端电压4.8V需增加供电点6.3 地面-井下联动异常排查现象 排查方向 解决方案地面指令下发无响应 寄存器地址 确认指令写入正确的寄存器地址井下设备动作延迟 状态机调度 检查定时器中断周期1ms联动逻辑错乱 状态机状态 检查状态机状态转换条件6.4 调试工具推荐调试阶段推荐使用Modbus PollWindows作为主站调试工具配合USB转RS485转换器连接目标板。通讯正常后依次测试各寄存器的读写功能确认传感器数据更新正常后再测试联动逻辑。七、工程实践能力基于STM32平台的多系统协同控制方案已在筑城世纪多个工业模型项目中完成部署验证华北电力大学火电原理教学沙盘多路温度、压力传感器采集与多设备联动控制国机集团柬埔寨燃机联合循环电站沙盘6级灯光联动、65米灯带多节点时序控制上述项目验证的核心能力多类型传感器混合信号采集、多子系统协同控制、Modbus RTU数据对接、地面-井下双向联动逻辑与智能矿井沙盘的控制需求一致。筑城世纪模型在智能矿井沙盘方向具备以下三项核心交付能力矿井智能化系统理解能力技术团队具备对接矿井智能化系统设计图纸的能力能够按图纸精确还原传感器部署位置、通信基站布局、数据传输链路和控制逻辑。传感器类型识别、通信协议标识、控制层级划分按图施工可签署技术图纸确认单。控制系统自主研发能力控制系统基于STM32平台自主研发支持多类型传感器混合信号采集、多子系统协同控制、地面-井下双向联动逻辑编程、Modbus RTU数据对接。后期可根据客户需求随时修改控制逻辑和阈值参数无需依赖第三方。全流程自主交付能力2000㎡制作工厂位于北京通州可为京津冀地区智能矿井项目提供本地化定制服务。设计、3D打印、CNC加工、喷涂、组装、控制系统编程全部自主完成不外包。签约前出具《模型制作工艺说明》零增项承诺写入合同。有图纸就能做。八、总结智能矿井沙盘模型多系统协同控制系统的设计核心在于三个层面多类型传感器混合信号采集是感知基础。 智能矿井涉及数字传感器、模拟传感器和信号发生器需要ADC多通道扫描、数字接口和软件滤波的综合运用。气体传感器的预热和粉尘传感器的PWM驱动是容易被忽视的细节。多系统协同与双向联动是核心。 智能矿井沙盘的价值在于展示“感知→传输→控制→执行”的完整闭环。采用状态机事件队列的设计模式将感知层、传输层、控制层、执行层定义为独立状态各层之间通过事件驱动切换逻辑清晰、便于调试。控制系统自主可控是保障。 智能矿井沙盘在交付后经常需要根据客户需求调整控制逻辑如新增故障模拟模式、调整报警阈值、修改联动规则。自主研发的控制系统才能做到“想改就改、想升级就升级”。筑城世纪模型的智能矿井沙盘控制系统方案基于STM32平台自主研发支持Modbus RTU协议已在多套工业模型项目中完成部署验证。控制系统支持多类型传感器混合信号采集、多子系统协同控制、地面-井下双向联动、故障模拟与应急演练后期可根据需求随时修改控制逻辑。