大数跨境

.NET 8 机器人上位机控制系统:AGV调度、机械臂控制及规则匹配方案

.NET 8 机器人上位机控制系统:AGV调度、机械臂控制及规则匹配方案 dotNET跨平台
2026-08-01
1
导读:前言消防机器人上位机控制系统,就是想把中间这些"人传人"的环节压缩到最短。火警来了,系统自己判断该做什么,然

前言

消防机器人上位机控制系统旨在将“人传人”的中间环节压缩至最短。当火警发生时,系统自动研判并直接指令 AGV 导航及机械臂动作,值班员仅需监控执行过程。

系统摒弃了以往“报警即执行固定配方”的硬编码模式,升级为“事件输入→规则匹配→执行配方”的动态机制。规则支持随时修改与测试,无需重新编译代码。

项目介绍

本项目是一套基于 C# 开发的上位机控制软件,统一管理消防场景下的三类核心设备:用传装置(接收火警信号)、AGV(无人搬运车,负责导航至火源)及机械臂(执行按压、旋转等物理操作)。

系统核心为事件驱动的规则匹配引擎。用传装置依据国标 GB/T 26875.3-2011 协议上报数据,后台线程接收后交由引擎处理,根据预设规则匹配对应处置配方,自动调度 AGV 与机械臂协同作业。从报警到动作触发的全流程控制在秒级以内。

项目采用 MVVM 分层架构,设备接入利用.NET 反射机制实现插件化,便于扩展新硬件类型。配置与规则数据分别存储于 SQLite 和 JSON 文件中,无额外数据库依赖,部署便捷。

项目功能

功能模块
具体说明
消防监控
实时接收用传装置火警信号,解析 GB/T 26875.3-2011 协议,展示火警状态、设备位置和报警时间
事件规则引擎
可视化配置事件 - 响应规则,支持 5 种匹配条件(包含、完全等于、开头是、结尾是、正则匹配),可随时启用/禁用/测试
AGV 调度
通过 HTTP API 控制 AGV 锁定、解锁、导航至指定坐标位置
机械臂控制
基于 TCP Socket 协议,控制机械臂执行按压、旋转、复位等动作
配方管理
流程化编排处置步骤(导航→延时→按压→旋转),支持一键执行和步骤拖拽排序
操作面板编辑器
可视化配置消防主机操作面板的按钮布局和样式,适配不同型号设备
Web API
暴露 HTTP 接口,支持外部安防系统或指挥平台集成调用

项目特点

事件驱动响应:后台线程独立处理火警事件,不阻塞 UI 界面,报警触发到动作执行链路短

规则可配置化:规则存储在 JSON 文件中,修改后热加载生效,无需重新编译程序

插件式设备接入:用传装置等硬件通过.NET 反射动态加载,新增设备类型只需实现接口并放入插件目录

多协议兼容:同时支持 HTTP API、TCP Socket、WebSocket 三种通讯方式,适配不同设备的通信需求

操作留痕:所有事件匹配记录和执行日志都保存到 SQLite,方便事后追溯

轻量部署:无外部数据库依赖,单机运行,适合消防值班室现场环境

项目技术

技术项
选型
界面框架
WPF (XAML) + MVVM 模式
开发语言
C# / .NET 8.0
通讯协议
HTTP API、TCP Socket、WebSocket
数据存储
SQLite(配置/配方/模板)、JSON(事件规则)
插件机制
.NET Reflection 动态加载程序集
开发环境
Visual Studio 2022、Windows 11

协议层面,AGV 控制采用 HTTP 请求 - 响应模式,机械臂使用 TCP 长连接维持会话,消防数据通过 WebSocket 实时推送,用传装置则通过 TCP 7799 端口解析国标协议。各模块独立运行,互不干扰。

项目代码

事件规则模型定义如下,包含了匹配条件和目标配方的映射关系:

public class EventRule
{
    public string Id { getset; }
    public string RuleName { getset; }
    public bool IsEnabled { getset; }
    public string EventType { getset; }      // 火警报警器/远端命令/设备状态/自定义
    public string MatchField { getset; }     // 匹配字段名称
    public string MatchCondition { getset; } // 包含/完全等于/开头是/结尾是/正则匹配
    public string MatchValue { getset; }
    public string TargetRecipeId { getset; }
    public int Priority { getset; }
    public string Description { getset; }
}

匹配引擎的核心逻辑是遍历所有已启用的规则,根据匹配条件类型执行不同的判定策略:

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 == nullcontinue;

            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#

最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

作者:小码编匠

出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!



END





推荐阅读






手头没有 PLC?用 WPF 做的虚拟 PLC 照样调程序

基于 WPF 的运控视觉流程编辑器

C# 多通道温湿度数据采集与实时监控上位机

C# + OpenCVSharp 工业视觉检测上位机(采集、判定、追溯、PLC 通信)

WinForm 实现电池监控上位机:Modbus RTU 通信 + SQLite 存储 + 实时曲线

.NET 8 的 PLC 上位机监控软件(轻量级 HMI/SCADA)

WPF 工业上位机调试工具(Modbus 双协议 + 实时监控)

WPF + OpenCvSharp + Modbus TCP 的工业视觉检测上位机

C# 项目安装包总是翻车?这套方案挺稳的

C# + GDI+ 绘制体温图表,不依赖任何图表库的纯原生方案

.NET 8 + YOLOv8 + ArcFace 高性能人脸识别追踪服务

WPF + MVVM 上位机控制系统开发实践

基于 WPF + Tesseract 的离线 OCR 文字识别工具

一套 WinForm 开箱即用的工业数据采集与监控方案

.NET 10 + YOLO 的标注训练检测一体化工具(智能图像标注工具)

WinForm + SunnyUI 实战:Socket 实现 TCP 客户端与服务器通信

C# + YOLOv8 + NCNN 一个轻量级桌面推理方案

.NET 8 / WPF + MVVM 多功能电能表通信调试上位机

一套可复用的 WPF 上位机 UI 模板(SCADA-HMI 风格)

手写一套 HMI 组态软件需要什么?.NET 8 + Avalonia 模块方案

C# + OPC UA 的工业上位机 / HMI 组态平台(带拖拽设计器 + 运行态隔离)
一个 PLC 风格的上位机开发框架
WPF + MVVM 实现工业示波器界面与波形生成
一套现代化 WPF 控件生成器(附 16 款常用控件,一键导出可用的 DLL)

.NET 8 + Cursor 编写的工业 Web SCADA 系统

.NET 9.0 工业设备数据采集与监控平台

.NET 8 + WPF + Material Design 开发的工业传感器实时数据监控系统

.NET 8 + WPF 开发的工业设备日志 AI 分析工具

.NET 工业上位机 20 篇实战精选(SCADA/Modbus/视觉/运动控制)

.NET 8 开发的工业自动化上位机监控系统

WPF 搭建的现代化工业级数据采集与监控终端 (SCADA/HMI) 系统

.NET 技术栈全攻略后端、前端与部署运维

WPF + Modbus RTU 一套 SCADA 监控系统的实现

WPF 工业级标签打印库,支持零件/二维码/条码自定义设计

WinForm 温湿度传感器数据采集与监控系统

工业上位机开发没头绪?这个 WPF 模板把 SCADA 和大屏都给整明白了

WPF + ONNX Runtime 实现 YOLOv5 目标检测桌面应用

C# 工控上位机必备:数据转换工具类与十个核心模块


觉得有收获?不妨分享让更多人受益


收藏
点赞
分享
在看

【声明】内容源于网络
0
0
dotNET跨平台
专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,
内容 2318
粉丝 0
dotNET跨平台 专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,
总阅读62.2k
粉丝0
内容2.3k