前言
消防机器人上位机控制系统旨在将“人传人”的中间环节压缩至最短。当火警发生时,系统自动研判并直接指令 AGV 导航及机械臂动作,值班员仅需监控执行过程。
系统摒弃了以往“报警即执行固定配方”的硬编码模式,升级为“事件输入→规则匹配→执行配方”的动态机制。规则支持随时修改与测试,无需重新编译代码。
项目介绍
本项目是一套基于 C# 开发的上位机控制软件,统一管理消防场景下的三类核心设备:用传装置(接收火警信号)、AGV(无人搬运车,负责导航至火源)及机械臂(执行按压、旋转等物理操作)。
系统核心为事件驱动的规则匹配引擎。用传装置依据国标 GB/T 26875.3-2011 协议上报数据,后台线程接收后交由引擎处理,根据预设规则匹配对应处置配方,自动调度 AGV 与机械臂协同作业。从报警到动作触发的全流程控制在秒级以内。
项目采用 MVVM 分层架构,设备接入利用.NET 反射机制实现插件化,便于扩展新硬件类型。配置与规则数据分别存储于 SQLite 和 JSON 文件中,无额外数据库依赖,部署便捷。
项目功能
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
项目特点
事件驱动响应:后台线程独立处理火警事件,不阻塞 UI 界面,报警触发到动作执行链路短
规则可配置化:规则存储在 JSON 文件中,修改后热加载生效,无需重新编译程序
插件式设备接入:用传装置等硬件通过.NET 反射动态加载,新增设备类型只需实现接口并放入插件目录
多协议兼容:同时支持 HTTP API、TCP Socket、WebSocket 三种通讯方式,适配不同设备的通信需求
操作留痕:所有事件匹配记录和执行日志都保存到 SQLite,方便事后追溯
轻量部署:无外部数据库依赖,单机运行,适合消防值班室现场环境
项目技术
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
协议层面,AGV 控制采用 HTTP 请求 - 响应模式,机械臂使用 TCP 长连接维持会话,消防数据通过 WebSocket 实时推送,用传装置则通过 TCP 7799 端口解析国标协议。各模块独立运行,互不干扰。
项目代码
事件规则模型定义如下,包含了匹配条件和目标配方的映射关系:
public class EventRule
{
public string Id { get; set; }
public string RuleName { get; set; }
public bool IsEnabled { get; set; }
public string EventType { get; set; } // 火警报警器/远端命令/设备状态/自定义
public string MatchField { get; set; } // 匹配字段名称
public string MatchCondition { get; set; } // 包含/完全等于/开头是/结尾是/正则匹配
public string MatchValue { get; set; }
public string TargetRecipeId { get; set; }
public int Priority { get; set; }
public string Description { get; set; }
}
匹配引擎的核心逻辑是遍历所有已启用的规则,根据匹配条件类型执行不同的判定策略:
public class EventMatchEngine
{
public EventRule Match(EventData eventData, List<EventRule> rules)
{
foreach (var rule in rules.OrderByDescending(r => r.Priority))
{
if (!rule.IsEnabled) continue;
var fieldValue = GetFieldValue(eventData, rule.MatchField);
if (fieldValue == null) continue;
bool matched = rule.MatchCondition switch
{
"包含" => fieldValue.Contains(rule.MatchValue),
"完全等于" => fieldValue.Equals(rule.MatchValue),
"开头是" => fieldValue.StartsWith(rule.MatchValue),
"结尾是" => fieldValue.EndsWith(rule.MatchValue),
"正则匹配" => Regex.IsMatch(fieldValue, rule.MatchValue),
_ => false
};
if (matched) return rule;
}
return null;
}
}
事件处理器在后台线程中循环接收用传装置上报的数据,每收到一条就触发匹配流程:
public class EventProcessor
{
private readonly EventMatchEngine _matchEngine;
private readonly EventRuleStore _ruleStore;
private readonly RecipeExecutor _executor;
public void OnEventReceived(EventData eventData)
{
Task.Run(() =>
{
var rules = _ruleStore.LoadRules();
var matchedRule = _matchEngine.Match(eventData, rules);
if (matchedRule != null)
{
Log($"事件 {eventData.EventId} 匹配到规则: {matchedRule.RuleName}");
_executor.ExecuteRecipe(matchedRule.TargetRecipeId);
}
});
}
}
AGV 调度服务通过 HTTP 发送导航指令,机械臂服务走 TCP 协议发送 Dashboard 命令,各自封装在独立的 Service 类中,上层调用无需关心底层细节。
项目效果
主界面采用左右布局,左侧为设备状态总览,右侧为事件日志和控制面板。火警信号到达时,顶部状态栏闪烁红色警示,事件列表自动滚动至最新记录。
规则设计器以表格形式展示所有规则,每行一个条目,右侧设有“测试匹配”按钮。点击测试可弹出对话框,输入模拟事件数据后,系统将高亮显示命中的规则及待执行的配方。该功能在实际调试中极具价值,无需真实触发火警即可验证规则配置的正确性。
配方流程编辑器采用卡片式设计,每个步骤为可拖拽卡片,类型涵盖“导航”、“延时”、“按压”、“旋转”、“复位”等。点击卡片可调整参数(如导航坐标、按压持续时间)。整个流程保存为配方模板,在规则匹配成功后直接调用执行。
实测数据显示,通过模拟器发送火警信号至系统,从信号进入 EventProcessor 到机械臂开始动作,平均耗时约 800 毫秒。其中绝大部分时间为网络传输和机械臂自身响应,规则匹配本身仅在毫秒级完成。
项目源码
├── MainWindow.xaml.cs # 主控制界面
├── FireMonitorWindow.xaml.cs # 消防监控窗口
├── Models/
│ ├── EventRule.cs # 事件规则模型
│ ├── FireMonitorData.cs # 消防监控数据
│ ├── Recipe.cs # 配方数据模型
│ ├── Template.cs # 操作面板模板
│ └── DeviceConfig.cs # 设备配置
├── Services/
│ ├── EventProcessor.cs # 事件处理器
│ ├── EventMatchEngine.cs # 规则匹配引擎
│ ├── EventRuleStore.cs # 规则存储
│ ├── AgvHttpService.cs # AGV HTTP 控制
│ ├── ElibotRobotService.cs # 机械臂 TCP 控制
│ ├── FireDataWebSocketService.cs
│ └── WebApiService.cs # HTTP API 暴露
├── Editors/
│ ├── RecipeFlowEditorWindow # 配方流程编辑器
│ ├── OperationPanelEditorWindow # 操作面板编辑器
│ └── EventRuleDesignerWindow # 事件规则设计器
└── ViewModels/
└── FireMonitorViewModel.cs
Plugin.UserDevice/
└── UserDevicePlugin.cs # 用传装置插件 (GB/T 26875.3)
总结
项目成功将硬编码的“报警 - 配方”映射转变为可配置、可测试、可热加载的规则引擎,使值班人员无需具备编程知识即可调整处置逻辑。
在实际落地应用中,规则测试功能尤为实用。以往验证处置流程需真实触发火警,不仅繁琐且易产生误报;如今通过模拟即可预览效果,显著提升了开发与调试效率。
当然,系统仍有优化空间。例如,当规则数量超过 100 条时,匹配效率可能面临压力,目前尚未进行索引优化;此外,配方执行状态目前仅记录于日志,未来可增加执行轨迹的可视化回放功能。
关键词
#消防机器人、#上位机控制系统、#WPF、#MVVM、#事件规则引擎、#AGV 调度、#机械臂控制、GB/T 26875.3、火警信号、#配方管理、HTTP API、TCP Socket、WebSocket、#规则匹配、C#
作者:小码编匠
C# + OpenCVSharp 工业视觉检测上位机(采集、判定、追溯、PLC 通信)
WinForm 实现电池监控上位机:Modbus RTU 通信 + SQLite 存储 + 实时曲线
.NET 8 的 PLC 上位机监控软件(轻量级 HMI/SCADA)
WPF 工业上位机调试工具(Modbus 双协议 + 实时监控)
WPF + OpenCvSharp + Modbus TCP 的工业视觉检测上位机
C# + GDI+ 绘制体温图表,不依赖任何图表库的纯原生方案
.NET 8 + YOLOv8 + ArcFace 高性能人脸识别追踪服务
基于 WPF + Tesseract 的离线 OCR 文字识别工具
.NET 10 + YOLO 的标注训练检测一体化工具(智能图像标注工具)
WinForm + SunnyUI 实战:Socket 实现 TCP 客户端与服务器通信
C# + YOLOv8 + NCNN 一个轻量级桌面推理方案
.NET 8 / WPF + MVVM 多功能电能表通信调试上位机
一套可复用的 WPF 上位机 UI 模板(SCADA-HMI 风格)
手写一套 HMI 组态软件需要什么?.NET 8 + Avalonia 模块方案
.NET 8 + Cursor 编写的工业 Web SCADA 系统
.NET 8 + WPF + Material Design 开发的工业传感器实时数据监控系统
.NET 8 + WPF 开发的工业设备日志 AI 分析工具
.NET 工业上位机 20 篇实战精选(SCADA/Modbus/视觉/运动控制)
WPF 搭建的现代化工业级数据采集与监控终端 (SCADA/HMI) 系统
WPF + Modbus RTU 一套 SCADA 监控系统的实现
工业上位机开发没头绪?这个 WPF 模板把 SCADA 和大屏都给整明白了
觉得有收获?不妨分享让更多人受益

