大数跨境
0
0

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

WPF 轻量级工业边缘网关:支持 PLC 数据采集、条件触发与 HTTP 上报 dotNET跨平台
2025-12-12
7
导读:前言工业自动化领域,设备数据的采集、处理与上传是开发智能监控系统的基础。面对不同品牌 PLC、协议不统一、开

前言

工业自动化领域,设备数据的采集、处理与上传是开发智能监控系统的基础。面对不同品牌 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

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