上位机技术栈怎么选?
C# WinForm/WPF vs Web vs 组态
💡 新上位机项目到底用啥?WinForm 过时了吗?Web 上位机性能够吗?20 年 C# 老兵一次说清。
这是工控人最纠结的一道选择题。我做了 20 年 C# WinForm/WPF 上位机,这两年也在向 Web 和 Linux 迁移。这篇不站队,把桌面 C#、Web(Vue3)、组态软件/FUXA三条路线放在 10 个维度上比一遍,再按你的项目场景直接对号入座——小设备怎么选、要远程怎么选、要标准监控怎么选。
不存在“最好的技术栈”,只存在“最适合你当前项目的”。单机小设备、操作密集、要快速交付——C# WinForm 依然是性价比之王,两周交活;要手机/远程看、多工厂统一、免安装——上 Web(Vue3);只要标准监控画面、拖拽画图、不想写业务代码——组态软件,中小项目用开源 FUXA 更省。现实里成熟系统往往是三者组合,而不是押注某一个。
01 先搞清楚:上位机的“三条路”到底差在哪
很多人纠结“用啥技术”,其实没先想清楚自己做的是哪类上位机。三种需求对应三条完全不同的路:
- 桌面派(C# WinForm/WPF):跑在车间工控机上,Windows 独占,操作密集、接 PLC、做本地业务。我 20 年主要干这个。
- Web 派(Vue3 + 后端):浏览器打开即用,天然跨平台、远程、多用户,这两年因为手机看和数字化转型越来越热。
- 组态派(WinCC/iFIX/组态王/FUXA):拖拽画监控画面,点位绑定即出图,标准 SCADA 场景最快,但做复杂业务别扭。
下面 10 个维度,把这三条路放在一起比。
02 10 个维度逐项对比
| 对比维度 | C# WinForm/WPF | Web 上位机 (Vue3) | 组态软件 / FUXA |
|---|---|---|---|
| 开发效率 | WinForm 拖拽控件、.NET 生态成熟,中小界面极快;WPF XAML 灵活但学习曲线陡 | Vue3 + 组件库(Element/Naive)开发快,但要前后端两套栈,调试链路长 | 拖拽画图、绑定点位即出画面,标准监控最快;复杂业务逻辑要写脚本/外部接口 |
| UI 表现力 | WinForm 朴素;WPF 数据绑定+样式,可做到很炫 | 最灵活,大屏、动画、响应式都能做,生态组件最多 | 标准监控风格统一,做仪表盘直观;个性化界面受限于软件能力 |
| 通讯/协议 | OPC UA/Modbus/S7 库极多(OPCFoundation、S7.NET、HslCommunication),C# 工控生态最厚 | 浏览器不能直连 PLC,要靠后端(.NET/Node/网关)转发 WebSocket/MQTT | 协议驱动内置最全,拖拽配置即连 PLC,不用写通讯代码 |
| 业务扩展 | 强,WinForm/WPF 直接接数据库、做追溯、报表、复杂表单业务 | 强,天然适合多用户、权限、报表、和 MES/ERP 集成 | 弱,组态软件擅长监控画面,做复杂工单/追溯/业务流程很别扭 |
| 部署分发 | 要打包安装包、客户机装 .NET 运行时,升级要逐台更新 | 浏览器打开即用,服务器一处升级全员生效,免安装 | 装客户端+授权 dongle,大项目 C/S 或 Web 版另算授权 |
| 跨平台 | Windows 独占(MAUI 可跨但工控生态不成熟) | 全平台,Windows/手机/平板/大屏都能看 | 主要 Windows,少数有 Web 客户端(通常加价) |
| 远程/多端 | 要自己做内网穿透/远程桌面,手机基本看不了 | 天然远程,手机/出差/总部直接浏览器访问 | Web 版通常要额外加钱,移动端体验一般 |
| 成本 | 开发工具免费(VS Community),运行免费,零授权费 | 前后端框架全开源免费,服务器成本可控 | 软件授权贵(WinCC/iFIX 按点/驱动收费,几万到几十万);开源 FUXA 免费 |
| 招人难度 | 工控圈 C#/WinForm 工程师好找,但年轻一代在减少 | 前端/全栈人多,但懂工业协议的少 | 组态工程师好找,但只会画图、不懂业务和代码 |
| 长期维护 | 老项目多,.NET Framework 4.8 仍稳定;WPF MVVM 可维护性好 | 前端技术迭代快,要持续跟进;但架构现代、易扩展 | 画面维护靠工程师,改业务要二次开发或脚本,复杂项目后期笨重 |
03 按项目场景对号入座
| 项目类型 | 特点 | 关键诉求 | 典型工期 | 数据存储 | 建议路线 |
|---|---|---|---|---|---|
| 单机设备 / 小工装 | 3~10 个画面 | 操作密集、离线为主 | 1 人 1~4 周 | SQLite 本地库即可 | C# WinForm |
| 产线监控 + 业务 | 追溯/报表/工单 | 复杂业务逻辑 | 中等复杂度 | MySQL/时序库 | WPF MVVM 或 C#+Web |
| 多工厂 / 远程 | 手机/总部要看 | 免安装、跨平台 | 中大型项目 | Web 后端 + 时序库 | Web 上位机(Vue3) |
| 标准 SCADA 监控 | 拖拽画图为主 | 少写业务代码 | 成熟监控场景 | 软件授权费 | 组态软件 / FUXA |
04 三种决策,帮你拍板
- 单机设备、小工装、检测台,3~10 个画面
- 操作密集,客户就在工控机前用
- 要复杂业务逻辑、追溯、报表
- 要最快交付、最低成本
- 团队熟 C#,不想碰前端
- 手机/平板/总部要看,要远程访问
- 多工厂、多用户、要权限体系
- 客户不想装软件,浏览器即用
- 要和 MES/ERP/公众号打通
- 要做 SaaS、长期迭代
- 70% 是监控画面,拖拽画图为主
- 不想写代码,快速出标准 SCADA
- 协议多但业务逻辑简单
- 中小项目要省授权费 → 选 FUXA
- 大型标准 SCADA → WinCC/iFIX
05 丁丁的实战建议
我做了 20 年 C# WinForm,冲床监控、能源管理、条码追溯、OEE、安灯、机器人上下料都是这么过来的。说几句掏心窝的:
第一,别为了“技术先进”推翻自己的吃饭手艺。WinForm 在单机交付上仍然没有对手——你 C# 熟、库全、两周交活,这就是竞争力。小客户要的是“赶紧能用、别出问题”,不是炫酷架构。
第二,Web 是趋势,但要跟着真实需求走。当客户开始问“能不能手机看”“能不能总部也看”“能不能别装软件”,就是上 Web 的信号。我现在的做法是:采集层用 ThingsGateway/Neuron/Node-RED,消息走 EMQX,存储走 TDengine,展示层根据场景选——车间本地继续 WinForm,远程和看板用 Web/Grafana。
第三,组态和自研不是对立。标准监控画面交给组态(或开源 FUXA),把你的精力放在别人抄不走的业务逻辑、追溯、数据模型上——那才是价值,也是客户愿意付费的部分。
常见问题 FAQ(选型时最常被问)
Q:新上位机项目,到底用 WinForm 还是 Web?
A:先看三个问题:要手机/远程看吗?要多用户权限/和 MES 集成吗?要免安装、客户机零配置吗?三个里有一个“是”,倾向 Web;如果是单机设备、操作密集、要快速交付、客户只在车间电脑前用,WinForm 仍然是性价比最高的选择。我自己做了 20 年 C# WinForm,小设备依然首选它——没有比拖拽几个控件、连个 PLC、两周交活更快的方案。
Q:WinForm 是不是过时了?要不要马上转 Web?
A:没有过时,但在“退潮”。Windows 桌面工控软件里,WinForm/WPF 依然占大头,大量在用系统、客户 IT 环境都是 Windows,短期内不会消失。但趋势是明确的:新需求越来越多要远程、要手机看、要多工厂统一。务实做法不是全盘推翻,而是“老系统继续维护,新项目按场景选”——单机交付用 WinForm,要联网/远程就上 Web。
Q:WPF 比 WinForm 好在哪,值不值得学?
A:WPF 的核心优势是数据绑定(MVVM)和样式灵活性:界面和逻辑分离,复杂工业界面(多状态、动画、主题切换)好做得多,可维护性比 WinForm 强一个档次。代价是 XAML 学习曲线陡、入门慢。如果是简单工具、几个人用,WinForm 足够;如果要做长期维护、界面复杂、要美化,值得用 WPF 并坚持 MVVM。
Q:Web 上位机怎么做实时通讯?性能够吗?
A:浏览器不能直连 PLC,标准架构是:PLC → 边缘采集网关(ThingsGateway/Neuron/Node-RED)→ MQTT/OPC UA → 后端服务(.NET/Node)→ WebSocket/SignalR 推到浏览器。几百到几千点、秒级刷新完全够;万点级要做数据分片和节流。Grafana + 时序库本身就是这套架构的成熟范本。性能瓶颈通常不在浏览器,而在采集侧和后端推送频率。
Q:组态软件和自己写 C# 怎么选?
A:看你要“监控画面”还是“业务系统”。组态软件(WinCC/iFIX/组态王)擅长拖拽出标准监控、协议内置、快速上线,但做复杂工单、追溯、配方管理、和 MES 对接就很别扭,授权还贵。如果你 70% 是监控画面、30% 业务,用组态;如果业务逻辑重、要定制、要长期迭代,C#/Web 更划算。很多成熟系统是组态做监控画面 + 自己写 C#/Web 做业务,分工组合。
Q:FUXA 这类开源组态能替代 WinCC/组态王吗?
A:能覆盖中小项目和国产替代场景。FUXA 是开源 Web 组态,拖拽画图、接 Modbus/OPC UA/MQTT、浏览器看,零授权费,适合中小企业、快速验证、和开源技术栈(Node-RED/EMQX/TDengine/Grafana)天然配合。但它在超大型 SCADA、复杂权限体系、和 PLC 厂商深度功能上,还比不过 WinCC/iFIX。中小项目首选,大型项目评估后用。
Q:老的 WinForm 系统要重构成 Web 吗?
A:不要为了技术时髦重构。WinForm 系统稳定在跑,说明它满足了现场需求。只有出现这些信号才动:客户要手机看/远程访问、多工厂要统一平台、要和新 MES 打通、老机器系统要淘汰。重构优先“旁路增量”:新功能用 Web 做,老 WinForm 继续跑,数据通过统一接口汇聚,而不是一次推翻重写。
Q:一个人/小团队,怎么选最省力?
A:单机小项目:C# WinForm + SQLite,最快最省。要联网看:C#/Node 后端 + Vue3 前端,或者干脆直接用 Node-RED + FUXA + Grafana 这套开源组合,几乎不用写界面代码。我的建议是别贪大:先用最熟的技术把项目交付、把客户服务好,技术栈升级跟着真实需求走,而不是跟着潮流走。