做工控上位机,Modbus TCP 通讯是避不开的话题。
每个设备的站号、寄存器地址、数据格式都要手动配置一遍。通信中断之后还要自己写重连逻辑。
报警阈值下发、历史数据存储、实时趋势图等每一项工作都是需要耗费大量的时间调试。
最近在 GitHub 刷到一个叫 DeviceMonitor 的项目,已经把它们都封装好了。
自带 Modbus 模拟器。
它不只是一个 Demo,从通信到 UI 到数据库,全套都搭好了。
01 项目简介
它是一套工业设备监控上位机模板。

技术栈一水儿的微软系:.NET 8 做框架,WPF 做桌面界面,MVVM 做架构分层。
让我印象比较深的是,它并不是东拼西凑的程序。通信、数据、UI、测试等都选了相对成熟的库。
NModbus 做通信,EF Core + SQLite 做持久化,LiveCharts2 画趋势图,Serilog 写日志,xUnit 跑测试。
仓库结构也很整洁:App 是上位机主体,Core 负责通信,业务逻辑单独存在。Simulator 模拟 Modbus 设备,Tests 运行单元测试。
四层拆开,彼此之间没有耦合,拿出来修改一下就可以用了。
我觉得在工控上位机领域,这种结构清晰的 .NET 模版不多见。
02 几个核心亮点
① Modbus TCP+自动重连,不需要自己写通信层
做过的人都知道,最难搞的是不是发命令,而是在断开连接之后再重新连接的容错处理。
设备掉线怎么检测、重连间隔设多少、连不上怎么告警等等细节非常耗时间。

DeviceMonitor 用 NModbus 来实现连接、读写等功能的封装。断开后会自动重新连接,不需要自己写重试逻辑。
寄存器地址映射表也写得很明白。更换设备只用修改配置就行。
也就是说,在通信这一块,它已经帮你把大部分的坑都填上了。
② 有自带模拟器,没有设备也可以运行
我比较关注的是它自带的 Simulator。
做上位机开发最尴尬的就是——代码写好了,设备没到位。
我以前做过类似的工作,不是蹲在车间里研究真PLC,就是自己写个脚本模拟数据,两边都不舒服。
DeviceMonitor 用 Simulator 直接模拟出一个 Modbus TCP 设备。温度、压力、产量等都可以模拟出来。
先在 VS 中跑通Simulator,再打开App连接到127.0.0.1:1502。

报警逻辑、趋势图、CSV导出等所有的流程都在本地调试完毕之后再带到现场。
比蹲车间联调节节省了很多时间。
③ 四层分离,修改的时候不会牵一发动全身
项目结构为App、Core、Simulator、Tests四层分离,这是架构上的一种加分项。

通信、业务、UI 之间没有耦合。要更换通信协议就只改 Core 就行,要改界面布局就只改 App 的 XAML。
比如说你要做产线监控,设备是Modbus TCP的,就拿这个模板改一改寄存器映射表就可以了。
将来设备换成 OPC UA,只需要改通信层的部分内容,UI和报警逻辑不用改。
对于需要长期维护的项目而言,分层结构比把所有的内容都塞到一个Form里面要容易维护得多。
④ 报警、趋势、导出,一个闭环都不缺
报警阈值可以下发到设备上,报警记录会自动写入到SQLite中。
温度、压力的变化趋势用 LiveCharts2 来实时展示,还可以一键导出为CSV格式的数据。

EF Core Migration 管理数据库版本,Serilog 负责日志记录。
从采集、存储、展示到导出,全部覆盖监控闭环。
我觉得闭环意识很难得。
很多开源项目只做通信,其它功能完全不能用。DeviceMonitor 将它们连接在一起。
03 本地跑起来也很容易
先下载代码。
git clone https://github.com/agentthink/device-monitor.git用 VS2022 打开.sln,先运行Simulator,然后再运行App。
输入 127.0.0.1:1502、站号 1,连上之后就可以看到实时的温度和压力。
04 注意事项我也提一下
目前只支持Modbus TCP,不支持OPC UA。还没有做多设备批量配置,一次只连一个。
Web 端界面没有,纯桌面 WPF。没有 License 声明,商用前最好先跟作者确认。
模板性质,并不是成品系统。可以作为骨架进行二次开发,不适合直接部署到产线。
不过话说回来,做个工控上位机模版本就不容易。协议、UI、数据库全套撸下来,还带测试和模拟器,已经很不赖了。
05 写在最后
工控开源这几年来逐渐升温,但是高质量的.NET上位机项目却很少。
要么是 Python 写的脚本型工具,灵活但不够工业级。要么是闭源组态软件,功能强但锁死。
DeviceMonitor 这种定位我觉得很有趣,它是一个骨架,并不是成品。
把 Modbus 通信、报警、趋势图、CSV 导出这些刚需模块都搭好,剩下的留给工程师按项目去改。
不求大而全,只求拿来就能用。
有兴趣的朋友可以试试。
开源地址:https://github.com/agentthink/device-monitor
夜雨聆风