从「一个 WinForm 拖控件」到稳定运行 3 年不宕机的监控系统,差的是一套分层架构。本文分享我们交付数十套 SCADA 系统沉淀的 C# 四层架构:通讯、数据、业务、UI 各自的设计要点与可靠性工程实践。
很多 SCADA 项目从"一个 WinForm 拖控件"开始,前期快,后期痛:设备类型一多通讯代码到处复制、界面和数据耦合改一处崩三处、离线数据丢一堆。问题不在技术选型,而在没有分层。
我们在交付的几十套监控/数据采集系统上沉淀出的分层架构,核心就一句话:通讯、数据、业务、界面四层解耦,层与层之间只通过接口和事件交互。
| 层级 | 职责 | 技术要点 |
|---|---|---|
| 通讯层 | 设备连接、协议解析、数据读写 | 驱动插件化(Modbus/OPC UA/自由口),每驱动独立线程 + 连接池 |
| 数据层 | 实时库、历史库、报警库 | 实时数据内存字典 + 时序库(SQLite/InfluxDB),写入批量异步 |
| 业务层 | 报警规则、统计计算、联动逻辑 | 规则引擎与脚本钩子,业务逻辑不碰通讯细节 |
| UI 层 | 组态画面、趋势、报表 | WPF/WinForm 数据绑定 + MVVM,界面只订阅数据不直接驱动设备 |
我们按这套架构交付的 SCADA 系统最长已连续运行 3 年+无人工重启。如果您有监控/数据采集系统的定制需求,或现有系统面临重构,欢迎联系我们交流。
进程级看门狗监控主程序,通讯线程崩溃自动重建会话;7×24 运行内存占用平稳,无持续增长
结构化日志(通讯/业务/异常分文件),滚动保留 30 天,出问题能按时间轴还原现场
历史库写入失败落本地缓存文件,恢复后续传——断电断网不丢产量数据
程序版本化 + 自动更新服务,远程升级不进车间