news 2026/6/15 20:16:47

工业级零丢失、高并发 PLC 数据采集系统(支持 .NET 8/10)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
工业级零丢失、高并发 PLC 数据采集系统(支持 .NET 8/10)

前言

工业级 PLC 数据采集系统

项目简介

一个基于 .NET 开发的高性能、高可靠工业数据采集系统,专为 PLC(可编程逻辑控制器)场景设计。支持 .NET 8.0 和 .NET 10.0 两个 LTS 版本,采用 WAL-first(Write-Ahead Logging)架构,确保数据零丢失,并提供多 PLC 并行采集、条件触发、批量读取等高级功能。

核心特性

WAL-first 架构:先写本地 Parquet 日志,再写入时序数据库,保障数据不丢

多 PLC 并行采集:支持 Modbus、Beckhoff ADS、汇川、三菱、西门子等主流协议

条件触发采集:支持边沿触发(Rising/Falling Edge)、值变化触发等智能模式

批量读取优化:减少网络往返,提升吞吐效率

配置热更新:JSON 配置 + 文件监听,无需重启服务

实时监控:内置 Prometheus 指标 + Vue3 可视化界面

双存储策略:InfluxDB(主存) + Parquet(本地 WAL)

自动重试机制:网络异常自动重连,失败数据由 RetryWorker 重传

系统架构

整体架构

PLC Device │ ▼ Heartbeat Monitor Layer │ ▼ Data Acquisition Layer (ChannelCollector) │ ▼ Queue Service Layer (LocalQueueService) │ ▼ Storage Layer → WAL (Parquet) → InfluxDB │ ▲ └── RetryWorker ←┘ (失败重试)

核心数据流

1、采集:PLC → ChannelCollector

2、聚合:LocalQueueService 按 BatchSize 缓存

3、持久化:立即写入 Parquet WAL 文件、同步写入 InfluxDB

4、清理:两者成功 → 删除 WAL;任一失败 → 保留 WAL,由 RetryWorker 重试

项目结构

├── Application/ # 应用层(接口定义) ├── Domain/ # 领域模型(数据结构、事件) ├── Infrastructure/ # 基础设施(PLC 客户端、存储、指标) ├── Gateway/ # Web 网关(API + 配置 + 前端) ├── Simulator/ # PLC 模拟器(用于测试)

项目使用

环境要求

  • .NET 8.0 或 .NET 10.0 SDK(LTS 版本)

  • InfluxDB 2.x(可选,用于时序存储)

  • 支持的 PLC(或使用内置模拟器)

版本建议

.NET 10.0:最新 LTS,支持至 2028 年(推荐新项目)
.NET 8.0:稳定 LTS,支持至 2026 年(推荐生产环境)

安装与运行

# 克隆项目 # 恢复依赖 dotnet restore # 运行(默认框架) dotnet run --project xx.Gateway # 指定框架运行 dotnet run -f net10.0 --project xx.Gateway

使用 PLC 模拟器(无需真实设备)

# 启动模拟器(模拟三菱 PLC) cd xx.Simulator dotnet run

模拟器提供:

  • 心跳寄存器(D100 自增)

  • 7 个传感器指标(温度、压力、电流等)

  • 条件触发测试(基于生产序号)

  • 交互式命令(set/get/info)

配置说明

设备配置示例 (M01C123.json)

{ "IsEnabled": true, "PLCCode": "PLC01", "Host": "192.168.1.100", "Port": 502, "Type": "Mitsubishi", "Channels": [ { "Measurement": "temperature", "ChannelCode": "PLC01C01", "AcquisitionInterval": 100, "AcquisitionMode": "Conditional", "EnableBatchRead": true, "BatchReadRegister": "D200", "BatchReadLength": 20, "DataPoints": [ { "FieldName": "temp_value", "Register": "D200", "Index": 0, "DataType": "short", "EvalExpression": "value * 0.1" } ], "ConditionalAcquisition": { "Register": "D210", "DataType": "short", "StartTriggerMode": "RisingEdge", "EndTriggerMode": "FallingEdge" } } ] }

注意:RisingEdge/FallingEdge指数值增减变化(非 0/1 跳变),适用于计数器、状态码等场景。

InfluxDB 映射规则

配置项

InfluxDB 结构

示例

Measurement

Measurement

sensor

PLCCode

Tagplc_code

M01C123

ChannelCode

Tagchannel_code

M01C01

FieldName

Field

up_temp=250i

采集时间

Timestamp

1705312200000000000

条件周期 ID

Fieldcycle_id

"guid-xxx"

Line Protocol 示例:

sensor,plc_code=M01C123,channel_code=M01C01,event_type=Start up_temp=250i,cycle_id="..." 1705312200000000000

API 使用示例

# 获取 Prometheus 指标 curl http://localhost:8000/metrics # 获取 JSON 格式指标 curl http://localhost:8000/api/metrics-data # 查询 PLC 连接状态 curl http://localhost:8000/api/xx/GetPLCConnectionStatus

C# 写入示例

var request = new PLCWriteRequest { PLCCode = "M01C123", Items = new[] { new PLCWriteItem { Address = "D300", DataType = "short", Value = 100 } } }; await httpClient.PostAsJsonAsync("/api/xx/WriteRegister", request);

核心模块说明

PLC 客户端支持

协议

实现类

三菱

MitsubishiPLCClientService

汇川

InovancePLCClientService

倍福 ADS

BeckhoffAdsPLCClientService

西门子

SiemensPLClientService

关键服务

ChannelCollector:负责按通道采集数据,支持条件/持续模式

InfluxDbDataStorageService:批量写入 InfluxDB,带错误回调与重试

MetricsCollector:暴露采集延迟、队列深度、写入成功率等指标

数据处理流程

正常路径:采集 → 队列聚合 → WAL 写入 → InfluxDB 写入 → WAL 清理

异常路径

  • 网络断开 → 心跳监控 + 自动重连

  • 存储失败 → WAL 保留 → ParquetRetryWorker 定期重试

性能建议

参数

推荐值

说明

BatchSize

10–50

平衡吞吐与延迟

AcquisitionInterval

100–500 ms

根据 PLC 负载调整

HeartbeatPollingInterval

5000 ms

连接健康检查频率

项目源码

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

总结

一个面向工业自动化场景的高性能 PLC 数据采集系统,基于 .NET 8/10 开发,专为高并发、零丢失的数据采集需求设计。

系统采用 WAL-first(预写日志)架构,确保在任何异常情况下数据不丢失;

支持多种主流 PLC 协议(如三菱、西门子、汇川、倍福 ADS、Modbus),并提供条件触发、批量读取、配置热更新等高级功能。通过双存储策略(InfluxDB + Parquet)与自动重试机制,系统在保障可靠性的同时兼顾性能与可运维性。

内置 Prometheus 指标暴露与 Web 监控界面,便于集成到 DevOps 体系中。

整体采用分层模块化设计,具备良好的扩展性和维护性,适用于智能制造、能源监控、设备物联等工业物联网(IIoT)场景。

关键词

#工业数据采集、#PLC通信、.NET 8、.NET 10、#零丢失、#WAL、#高并发系统、#条件触发采集、#InfluxDB、#Parquet、#工业物联网、#自动重试机制、#配置热更新、#Prometheus、#监控、#模块化设计、#多协议支持、#Modbus

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

Dify平台如何帮助开发者规避大模型幻觉?

Dify平台如何帮助开发者规避大模型幻觉? 在金融报告中出现虚构数据、医疗建议引用不存在的研究、法律咨询援引错误法条——这些并非科幻情节,而是当前大型语言模型(LLM)在真实场景中可能引发的严重问题。随着AI从实验室走向生产环…

作者头像 李华
网站建设 2026/6/15 12:55:43

Dify可视化开发模式对传统编码方式的颠覆

Dify可视化开发模式对传统编码方式的颠覆 在企业AI应用落地仍被高昂成本和复杂流程困扰的今天,一个市场部专员能否不写一行代码就上线一套智能客服系统?答案是肯定的——借助Dify这类新型开发平台,这已不再是设想。 过去构建一个基于大语言模…

作者头像 李华
网站建设 2026/6/15 14:27:54

adb卸载手机app

一、下载adb Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip Mac版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip Linux版本:https://dl.google.com/android/r…

作者头像 李华
网站建设 2026/6/15 15:54:32

基于STM32的智能花盆系统设计与实现

基于STM32的智能花盆系统设计与实现 摘要 本文设计并实现了一种基于STM32F407VET6微控制器的智能花盆系统,通过多传感器融合与智能控制策略,实现了对植物生长环境的全方位监测与精准调控。系统集成DS18B20温度传感器、土壤湿度传感器、光敏电阻、雨滴传…

作者头像 李华
网站建设 2026/6/15 15:58:12

2025年华南师范大学计算机考研复试机试真题(附 AC 代码 + 解题思路)

2025年华南师范大学计算机考研复试机试真题 2025年华南师范大学计算机考研复试上机真题 历年华南师范大学计算机考研复试上机真题 历年华南师范大学计算机考研复试机试真题 更多学校题目开源地址:https://gitcode.com/verticallimit1/noobdream N 诺 DreamJudg…

作者头像 李华