做泵站监控,最先头疼的是选组态软件。
WinCC 一套就要几万块钱,组态王也挺贵的。
安装客户端、配置驱动、绘制画面,一个人忙大半天。
想手机上看液位?得再买 Web 发布模块。
报警历史需要自己搭建一套。
Modbus TCP 驱动自己编写,断线重连逻辑从200行开始。
最近在GitHub上看到了一个用.NET 8+Blazor写的Web SCADA。
不需要安装客户端,在浏览器中打开就可以看到监控界面。
IndustrialWebScada 是一个使用 Blazor Server 来实现的 Web SCADA。
基于 .NET 8,接 Modbus TCP 设备,实时推送、报警、历史归档,该有的都有。
纯Web架构,可以在手机、平板以及各种浏览器上打开。比装客户端的组态软件灵活很多。
下面我们看看它有哪些独特功能。
Modbus TCP 驱动可以实现批量读取,并且能自动重连。
每个泵站有71个标签,FC01到FC04全部覆盖。
16 个离散输入、8 个线圈写入、保持寄存器、输入寄存的存在。
4 台泵的远程控制、变频运行、故障信号等全部都在模板中。
NModbus 作为底层通信,可以实现批量读取和地址合并。
一次请求拉多个寄存器,通信效率要比逐个读取高很多。采集周期可以设置为 1 秒、2 秒、5 秒三种模式。
设备断了会自动重连,不需要人工干预。
以前调Modbus TCP的时候,断线重连逻辑都是自己写的。写完之后还要测试半天。
现在驱动层全部都包好了,配置好IP和端口就可以跑了,节省了不少时间。
还支持 MQTT 发布,采集数据能直接推到 Broker。做物联网对接的,不用再写中间层了。
Web 原生 SCADA,在浏览器中打开就可以看到监控画面。
Blazor Server 渲染,不需要写 JavaScript,C# 一气呵成。
UI 组件化开发,共享组件拖拽复用。
PumpStationCard、WaterLevelTank,这些组件做好了直接用。
Dashboard 一眼就可以看到整个站点的状态,在线几台、离线几台、报警几条,液位概览也都有。
泵站详情页上,液位监控、泵组控制、趋势图都放在一个页面里。
比传统的组态画面来回切换要容易得多。
实时推送延迟不到 100ms,比传统轮询快了一个量级。
TagValueNotifier 做 100ms 防抖推送,Blazor 组件收到就刷。
外接客户端走 SignalR 广播,也是 100ms 防抖。还加了个 2 秒兜底定时器,保证不会漏刷。
Modbus 设备 → DataCollectionService (1s 轮询) → TagValueStore → TagValueNotifier (100ms 防抖) → Blazor 组件 StateHasChanged() → SignalR ScadaHub (外部推送)以前组态软件刷新间隔最少 1 秒,液位变化看去是忽高忽低。
现在 100ms 级别,液位曲线平滑,排涝泵站监控这个刷新速度才跟得上。
Serilog 做结构化日志,通讯报文、报警触发、服务状态都有记录,排查问题很方便。
报警判定和历史归档都内置了,不用再搭一套。
AlarmEngine 负责做实时报警判断,并且一旦触发就会把报警推送到 AlarmMonitorService 去处理。
HistoryArchiveService 定时把数据归档到 SQLite 里,用 EF Core 进行持久化,查询历史趋势的时候直接从库里面读。
报警确认页、历史数据查询页已经做好了,可以直接使用。
以前报警逻辑是自己写的,历史库也是自己搭建的,查询页面也是自己绘制的。现在配好点表之后,上面的东西都齐全了。
说实话,报警这块是最容易出 bug 的地方。阈值设错了、推送漏了、历史没记上,出了事全是锅。
它把 AlarmEngine 和 HistoryArchiveService 做成两个独立的服务。分离开来之后,比一把梭的代码更易于维护。
用ECharts的趋势图来展示历史数据,可以进行时间选择。
点表模板化配置,修改一个JSON就可以接入新的站点。
配置文件 devices.json 中包含设备列表,配置文件 device-templates/pump-station.json 中包含点表模板。
修改IP、端口、UnitId就可以连接到不同的PLC。
以前用组态软件配点表的时候,71个标签一个一个地加,手指都酸了。
现在模板一配,所有的站点都共用,新增站点2分钟搞定。不必在点表上浪费时间。
代码分层也很清楚,Core 层放领域模型,Application 层放业务逻辑,Drivers 层放协议驱动。
要增加一个新的协议驱动,只需要实现接口就可以,不需要改动业务代码。
看到这你想装上试试
git clone https://github.com/suwencjp/VibeCodingIndustrialWebScada.gitcd VibeCodingIndustrialWebScadadotnet restoredotnet run --project src/IndustrialWebScada.Web默认监听 http://localhost:5228,浏览器打开就可以看到Dashboard。
感兴趣的朋友可以抓紧试试。
开源地址:https://github.com/suwencjp/VibeCodingIndustrialWebScada 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!