news 2026/10/23 7:41:31

WPF 轻量级工业边缘网关:支持 PLC 数据采集、条件触发与 HTTP 上报

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WPF 轻量级工业边缘网关:支持 PLC 数据采集、条件触发与 HTTP 上报

前言

工业自动化领域,设备数据的采集、处理与上传是开发智能监控系统的基础。面对不同品牌 PLC、协议不统一、开发门槛高、部署复杂等问题,常常让大家不知所措。有没有一种工具,既能图形化配置设备连接,又能灵活定义数据处理逻辑,还能将结果稳定上传到服务器?

本文将要介绍一个 DCS 边缘网关项目,它是一个轻量级、可配置、面向工业边缘场景的数据采集与转发平台。

项目介绍

DCS 是一个运行在 Windows 环境下的边缘网关软件,主要用于连接本地 PLC 设备(如西门子 S7 系列),通过可视化界面配置设备、点位(Tag)和触发流程,并将采集到的数据按条件上传至指定服务器。

整个系统采用模块化设计,核心逻辑与操作系统解耦,支持通过 JSON 配置文件管理项目结构,适合部署在局域网中的工控机或边缘服务器上,作为数据"中转站"使用。

项目功能

设备连接管理:支持添加 S7 协议设备(基于 HSL 库),Modbus 和 OPC UA 正在开发中;

Tag 点位配置:以树形结构组织设备、组、节点,支持无限嵌套分组,节点为最终数据点;

条件触发流程:定时轮询 Tag 值,当满足预设条件(如数值在 10–20 之间)时,自动触发 HTTP 请求;

数据上传机制:将宿主节点下所有一级子节点的值打包成参数字典,通过 HTTP POST 发送给远程服务器;

日志记录:支持文件日志和数据库日志双模式,便于调试与审计;

HTTP 服务扩展:内置 HTTP 接口,允许外部程序手动读取或写入 Tag 值,实现远程控制;

多级节点协同:通过"附加 Tag"和"附加回写"机制,可跨组引用其他节点数据,增强流程灵活性。

项目特点

1、DCS 最大的特点是"配置驱动 + 低代码"。大家无需编写代码,只需在 UI 中创建设备、定义 Tag、设置触发条件,即可完成一套完整的边缘数据采集与上报逻辑。

2、其"宿主节点"概念清晰界定了上下文范围,避免逻辑混乱;同时,JSON 格式的项目配置文件便于版本管理和批量部署。

3、整个系统轻量、专注,不追求大而全,而是牢牢聚焦于"可靠采集 + 按需上传"这一核心场景。

项目说明

软件架构分为四大模块:

Core:核心运行引擎,包含设备通信、任务调度、条件判断等逻辑,与 UI 无关;

UI:WPF 界面层,提供设备管理、Tag 配置、任务编辑等交互功能;

Device:设备驱动层,目前已集成 HSL 的 S7 通信实现;

Server:服务扩展层,当前提供 HTTP 服务,未来计划加入 OPC UA 服务器。

底层依赖 HSL(High-Speed Library)进行 S7 通信,日志通过 NLog 实现,配置文件采用标准 JSON,结构清晰易读。

项目效果

界面概览

程序主界面布局清晰,主要分为四大功能区域

1、设备连接

用于配置 PLC 或其他设备的通信参数;

支持添加多个设备,并在设备下组织组(Group)和节点(Tag);

组可无限嵌套,节点为最终数据点(同一层级名称不可重复)。

2、日志

配置日志输出方式,支持文件日志和数据库日志;

可设置日志级别、存储路径等参数。

3、服务

扩展服务模块,当前已实现HTTP 服务;
通过 HTTP 接口可远程读取或写入 Tag 值,便于外部系统集成;

OPC UA 服务正在开发中。

4、定时任务

定义数据采集与处理流程;

定时轮询指定 Tag 值,根据预设条件触发动作;

满足条件时,自动将数据通过HTTP 请求上报至服务器。

项目所有配置均以JSON 格式存储,便于版本管理与迁移。

快速配置流程

1、创建新项目

点击菜单栏【文件】→【创建】;

系统自动生成初始项目,包含默认的文件日志和HTTP 读写服务。

2、添加设备与 Tag

展开"设备连接"节点,点击【添加设备】,选择设备类型(如test);

在设备下右键 →【新建组】,可创建多级嵌套分组;

在目标组下右键 →【模板】→【创建开工】,快速生成一组预设 Tag 节点。

3、配置定时任务

在"定时任务"节点上右键 →【模板】→【创建开工】;

该任务会定时轮询宿主节点下的所有一级子节点;

根据每个节点的判断条件(如值在 10–20、30–40 或复位)按顺序触发逻辑。

4、理解"宿主节点"概念

宿主节点是定时任务的上下文作用域;

触发条件、回写操作默认只能引用该宿主节点下的 Tag;

若需引用其他组的数据,需使用以下扩展机制:

附加 Tag:将额外 Tag 值加入 HTTP 请求参数;

附加触发条件:跨组组合判断逻辑;

附加回写设置:支持从 HTTP 响应中提取值,或直接读取其他 Tag 进行回写。

5、测试 HTTP 上报

启动一个简易 HTTP 服务器(项目中test/WebTest可直接运行);

示例代码结构如下:

6、启动与验证

保存配置文件后,点击【启动】按钮;

打开【工具】→【节点监视器】;

在 PLC 标志位输入模拟值(如10),观察触发效果;

所有宿主节点下的一级子节点值将被封装进paramDic;

若 Tag 设置了"参数名称",该名称会作为键出现在请求体同级字段中。

配置文件示例

项目提供完整可运行的配置模板,可直接下载测试。配置结构清晰,支持灵活扩展,适合快速验证边缘采集逻辑。

提示:实际部署时,只需将配置文件复制到目标机器,确保 .NET 运行环境和设备网络可达,即可运行边缘网关服务。

项目代码

static S7ValueConvert() { var basetype = typeof(BaseTypeDefine); TypeDic= basetype.Assembly.GetTypes().Where(g => basetype.IsAssignableFrom(g)) .Where(g => !g.IsAbstract) .Select(g => (BaseTypeDefine)Activator.CreateInstance(g)!) .ToDictionary(g => g.ValueType); } public bool CanConvertType(SystemValueTypeEnum source, object param, BaseTagConfig systemConfig, out string err) { err = null; var totype = ConvertDefaultType(param,null,systemConfig); if (totype != source) err = $"无法转换 [{param}]-->[{source}] 失败"; return err == null; } public object Convert2Device(object source, NodeRelationship param, BaseTagConfig systemConfig) { var deviceConfig = param.NodeInfo.Get<S7TagConfig>(NodeInfoDefine.CONNECT_OTHER_TAG_CONFIG); if (!TypeDic.TryGetValue(deviceConfig.DeviceValueType, outvar typeHandler)) thrownew Exception($"[{deviceConfig.DeviceValueType}]未支持"); return typeHandler.Convert2DeviceValue(source, systemConfig); }

项目源码

项目采用 C# 开发,结构清晰,核心逻辑集中在 Core 层,便于理解和二次开发。其设计思路成熟,适合工业现场快速部署。

为了防止丢失,可以在评论区留言关键字「边缘网关」,即可获取完整源码地址。

总结

DCS 并不是一个通用的工业物联网平台,而是一个专注、务实、可落地的边缘网关工具。它没有复杂的云架构,也不强调 AI 分析,而是踏踏实实地解决了"如何把 PLC 数据按规则传出去"这个高频刚需。

对于自动化项目、产线改造或学习来说,它提供了一种低成本、高效率的解决方案。如果大家正为设备协议适配或数据上报逻辑头疼,不妨试试 DCS——或许它就是那个能让你少加班的小帮手。

关键词

#DCS、#边缘网关、#PLC、#S7、#HSL、#数据采集、#HTTP上传、#条件触发、#工业自动化、#低代码、#modbus、#opcua

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 4:45:07

21、时间点与持续时间建模:原理、应用与挑战

时间点与持续时间建模:原理、应用与挑战 1. 获取当前状态 在处理无持续时间和有效性上限,且下一状态会终止其直接前一状态的情况时,准确识别和获取当前有效状态至关重要。可以通过将各个状态分类到由对象形成的分区组中来实现这一目标。 1.1 使用RANK函数获取当前状态 为…

作者头像 李华
网站建设 2026/10/23 0:10:17

如何快速掌握网站下载:WebSite-Downloader 完整使用指南

想要轻松将整个网站保存到本地吗&#xff1f;WebSite-Downloader 就是你的终极解决方案&#xff01;这款基于 Python 开发的网站整站下载工具&#xff0c;能够高效抓取网页内容、CSS 样式、JavaScript 脚本以及各类媒体文件&#xff0c;为你构建完整的本地网站镜像。无论是个人…

作者头像 李华
网站建设 2026/10/23 4:45:54

27、时态数据库概念解析

时态数据库概念解析 1. 面向属性的方法 1.1 基本原理 当数据变化同步且同时发生时,对象级时态解决方案是合适的。若不同步,会出现重复值,导致性能下降和磁盘存储成本上升,这是主键扩展处理时间元素所致。而面向属性的粒度则与属性本身相关,每个属性单独处理,强调变化的…

作者头像 李华
网站建设 2026/10/23 4:45:54

30、数据库镜像重建中的闪回管理与SQL注入防范

数据库镜像重建中的闪回管理与SQL注入防范 1. 闪回技术基础 在数据库管理中,闪回技术是一项强大的工具,用于将数据库恢复到过去的某个状态。要使用闪回技术,首先需要设置归档日志模式。当数据库处于MOUNT模式时,可以使用以下命令设置归档日志模式: ALTER DATABASE ARC…

作者头像 李华
网站建设 2026/10/23 1:11:59

Wan2.2-T2V-5B模型API封装实践:集成到Web应用的步骤详解

Wan2.2-T2V-5B模型API封装实践&#xff1a;集成到Web应用的步骤详解 在短视频内容爆炸式增长的今天&#xff0c;企业与创作者对“快速生成高质量视频”的需求从未如此迫切。传统制作流程依赖专业剪辑师、动画设计师和昂贵渲染设备&#xff0c;从创意到成品往往需要数小时甚至数…

作者头像 李华
网站建设 2026/10/22 15:33:13

Typora支持HTML5音频播放:完美呈现ACE-Step输出效果

Typora支持HTML5音频播放&#xff1a;完美呈现ACE-Step输出效果 在AI生成内容日益普及的今天&#xff0c;如何让听众“听到”一段由文本描述驱动的音乐&#xff0c;而不是仅仅读到它的技术细节&#xff1f;这不仅是创作者的表达需求&#xff0c;更是AI音乐走向大众传播的关键一…

作者头像 李华