先说结论:没有最好的框架,只有最配场景的框架。测试测量、NI板卡一大堆,选LabVIEW;纯Windows产线、团队C#底子厚,选C#;要跨平台、跑Linux工控机或嵌入式屏、追求部署零依赖,选Qt。选型错了,后面全是补窟窿。

LabVIEW的优势到底在哪,局限又在哪?

LabVIEW的护城河是测试测量生态。NI的数据采集卡、示波器、CAN卡,驱动和示例开箱即用,DAQmx搭个采集通道拖几根线就跑起来了,做实验室台架、自动化测试系统(ATE),开发速度快得离谱。图形化数据流编程对电气、测试工程师友好,不用招专业软件团队。

但坑也明摆着:一是部署成本,LabVIEW运行时授权、应用程序生成器都要钱,设备批量出货时每台都得算这笔账;二是大项目维护,图形化代码到了几万行级别,框图密密麻麻,版本diff基本没法看,人员一离职接手的人想哭;三是版本兼容敏感,LabVIEW 2018存的VI用2015打不开,现场工控机系统老了很被动。拿LabVIEW去做产线级SCADA、对接几十台PLC,属于用锤子拧螺丝。

C#做上位机,凭什么是产线项目的主力?

C#的核心优势是Windows生态和开发效率。工控现场九成上位机跑Windows,Visual Studio拖控件、WinForm做界面一下午出原型;要效果就上WPF,数据绑定、样式模板做现代化界面很顺手。通信生态极其成熟:S7netPlus连西门子、Modbus库、OPC UA官方SDK,NuGet一装即用;对接MES、SQL Server、Web接口,.NET体系内全是现成轮子。人才储备也足,C#程序员好找,人力成本可控。

短板是跨平台。WinForm/WPF本质是Windows技术,虽然.NET Core之后跨平台了,但工控现场的Linux需求基本指望不上WPF;还有个隐性问题,WinForm项目写起来快,但UI逻辑和业务容易搅成一坨,不做架构约束,两三年后代码烂得快。WPF能治这个毛病,但MVVM的学习曲线对传统工控工程师不友好。

Qt的跨平台,是真本事还是噱头?

真本事。Qt一套C++代码,Windows、Linux、嵌入式ARM屏(甚至国产操作系统)都能编译运行,这个我们在跨平台适配那篇里讲过。QSerialPort、QTcpSocket、QModbus模块稳定,工业通信该有的都有;QCustomPlot、QML做实时曲线和界面性能强,7×24小时跑的稳定性有口碑。最实在的一点:静态编译后单个exe就能发,不依赖运行时环境,客户现场不用装.NET Framework——老工控机还是Windows 7的不少,这一条能救命。

代价是C++门槛。内存管理、信号槽机制、构建系统(qmake/CMake)对新手不友好,开发周期比C#长一到两成,招人也比C#难。另外Qt的商业授权要留意——动态链接用开源LGPL协议没问题,静态编译或闭源分发时提前把授权问题捋清楚。

三个框架摆一起,到底怎么拍板?

按这五个问题对号入座:

①硬件是什么? NI采集卡、测试仪器扎堆→LabVIEW;PLC+工业现场总线→C#或Qt。②跑什么系统? 纯Windows→C#最舒服;要上Linux工控机、嵌入式屏、国产系统→Qt,没得选。③设备出货量? 单台实验室设备,授权费无所谓→LabVIEW;批量装机,每台授权成本敏感→Qt/C#。④团队会什么? 已有LabVIEW测试团队做台架,别硬转;软件团队C#为主,产线项目顺势C#。⑤项目活多久? 一两年的测试项目,LabVIEW快进快出;规划五到十年、持续迭代的平台级系统,C#或Qt更扛得住。

选型踩坑,真实教训长什么样?

我前几年接手过一个改造项目,客户原系统用LabVIEW写的,一开始只管一个测试台,后来不断加设备,变成了管理整条产线二十多台仪器的大系统。框图里套框图,加一个功能要先在屏幕上找半小时线,LabVIEW授权费每年交着,最后下决心用Qt重写,跨平台还顺带解决了。说白了,LabVIEW不是不好,是被放到了不属于它的战场。

反过来也有例子:一个纯Windows的产线项目,团队非追求"跨平台"上Qt,开发人员C++经验不足,周期拖了两个月,客户根本没有Linux需求。这又是另一种浪费。所以你看,选型这事儿,别追潮流,先把场景和约束列清楚,答案自己就浮出来了。

还在纠结的话,第一步做什么?

行动建议:花半天时间列张表,把上面五个问题按你的项目逐条填答案,再拿不准,就用最熟悉的框架先做一个通信+数据存储的最小验证。技术选型最大的风险从来不是选错框架,是不写验证代码、光在会议室里拍脑袋。