2026/4/6 9:36:50
网站建设
项目流程
html5旅游网站源码,网页设计图片边框怎么设置,中国铁建网站,软件开发平台培训前言工业级 PLC 数据采集系统项目简介一个基于 .NET 开发的高性能、高可靠工业数据采集系统#xff0c;专为 PLC#xff08;可编程逻辑控制器#xff09;场景设计。支持 .NET 8.0 和 .NET 10.0 两个 LTS 版本#xff0c;采用 WAL-first#xff08;Write-Ahead Logging专为 PLC可编程逻辑控制器场景设计。支持 .NET 8.0 和 .NET 10.0 两个 LTS 版本采用 WAL-firstWrite-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 → ChannelCollector2、聚合LocalQueueService 按 BatchSize 缓存3、持久化立即写入 Parquet WAL 文件、同步写入 InfluxDB4、清理两者成功 → 删除 WAL任一失败 → 保留 WAL由 RetryWorker 重试项目结构├── Application/ # 应用层接口定义 ├── Domain/ # 领域模型数据结构、事件 ├── Infrastructure/ # 基础设施PLC 客户端、存储、指标 ├── Gateway/ # Web 网关API 配置 前端 ├── Simulator/ # PLC 模拟器用于测试项目使用环境要求.NET 8.0 或 .NET 10.0 SDKLTS 版本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 结构示例MeasurementMeasurementsensorPLCCodeTagplc_codeM01C123ChannelCodeTagchannel_codeM01C01FieldNameFieldup_temp250i采集时间Timestamp1705312200000000000条件周期 IDFieldcycle_idguid-xxxLine Protocol 示例sensor,plc_codeM01C123,channel_codeM01C01,event_typeStart up_temp250i,cycle_id... 1705312200000000000API 使用示例# 获取 Prometheus 指标 curl http://localhost:8000/metrics # 获取 JSON 格式指标 curl http://localhost:8000/api/metrics-data # 查询 PLC 连接状态 curl http://localhost:8000/api/xx/GetPLCConnectionStatusC# 写入示例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倍福 ADSBeckhoffAdsPLCClientService西门子SiemensPLClientService关键服务ChannelCollector负责按通道采集数据支持条件/持续模式InfluxDbDataStorageService批量写入 InfluxDB带错误回调与重试MetricsCollector暴露采集延迟、队列深度、写入成功率等指标数据处理流程正常路径采集 → 队列聚合 → WAL 写入 → InfluxDB 写入 → WAL 清理异常路径网络断开 → 心跳监控 自动重连存储失败 → WAL 保留 → ParquetRetryWorker 定期重试性能建议参数推荐值说明BatchSize10–50平衡吞吐与延迟AcquisitionInterval100–500 ms根据 PLC 负载调整HeartbeatPollingInterval5000 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