20世纪90年代,北京中科泛华科技有限公司成为NI当时公司的联盟合作伙伴,NI无论公司的技术支持走到哪里,都会带来中科泛华的技术支持。我认识最早的CP是NI周志祥和泛华霍文雄。中科泛华在高校中力推LabView和LabWindows/CVI,虚拟仪器的概念非常流行。记得当时发表论文的时候,一般都是从软件就是仪器开始,感觉只要从这句话开始,文章的录用基本上就成功了一半以上。
1.数据采集卡的发展历史
当时市场上几乎所有的数据采集卡都是NI公司的世界,NI公司采集卡最大的优势是提供硬件和硬件VC、Delphi、VB、LabView、LabWindows/CVI仪器驱动程序,国内数据采集卡基本上只提供C语言仪器驱动程序(包括H文件和H文件LIB文件和一个DLL文件),提供更好的文件Win32 Application示例程序。由于示例程序例程序都是关于用户界面构建的代码,因此Windows编程能力弱的初学者看了很久都找不到线索。由于示例程序例程序都是关于用户界面构建的代码,因此Windows编程能力弱的初学者看了很久都找不到线索。此外,国内数据采集卡经常出现莫名其妙的问题——比如某公司AD采集卡,采集到一定次数后,总会莫名其妙的程序崩溃。在那个时代,我们只能使用进口仪器和采集卡,同时对国内制造商感到愤怒。当然,对于个别性能要求相对较低的场合,我们仍然会使用国内仪器,这里需要提到两家公司:一家是北京阿尔泰,另一家是四川成都。
北京阿尔泰在中国投资较早USB其中一家数据采集卡公司的产品基本上是外国公司产品价格的一半,但在满足用户需求方面总是感几乎——例如,AD采集卡设置半缓冲区(semi-buffer)但是,当用户需要使用时,手动安装回调函数,半缓冲区没有详细介绍其提供的说明文件(semi-buffer)在模式的具体使用场景中,例子程序没有详细介绍如何安装回调函数,导致程序员在编写程序时进入盲区。
应该说,四川成都的纵横生产在中国比较早VXI该模块的产品基本上与当时的安捷伦公司相匹配。当然,性能指标会稍差。然而,由于其对驱动程序开发的投资不高,用户很难开发应用程序。举个典型的例子,我们学校有一不抽烟也不喝酒。他唯一的爱好是制作电路板和编写程序。当时他自学了LabView,用NI板卡,可以很快开始,但是用纵横VXI板卡时,被困惑了很久。后来,成都纵横测控部的人员独立成立了成都天奥测控技术有限公司。2017年,我买了一批PXI安装驱动板卡后,仪器软面板(Software Function Panel,简称SFP)经过我的反汇编调试反汇编调试,并与厂家的技术支持沟通,发现安装过程中少包装了动态链接库——这也说明国内公司在调试上做得不太好。
截至前为止,我在网上查询了排名123网,依托全网大数据,根据品牌评价和销量,选出了2021年数据采集卡十大品牌排名,前十名分别是研旭和美乐威MAGEWELL、光帆,阿卡西斯/ACASIS、酷酷尔/UKKUER、聚英、阿尔泰、艾索信息TUONUO、剑通信息(更新时间:2020年12月1日)。阿尔泰还是可以看到的,但是其他大部分公司我都没听说过,心里颇有感触。
2.虚拟仪器软件开发环境的发展历史
当时市场上的虚拟仪器开发软件主要包括HP VEE、LabView、LabWindows/CVI和VC,其中使用HP VEE用户必须在早期购买HP公司产品,入门就是用HP VEE,一直不愿转型的;使用LabView大部分用户都会提倡如何方便简单,强调积木编程,学习过Matlab Simulink软件用户,学习LabView很容易。两者都是图形编程。NI公司也是力推LabView,一般技术支持随身携带LabView试用光盘,然而,它的缺点是,如果你想看到特定程序的设计,你通常需要从一个框中点击几个级别来看到你想看到的程序,这通常被那些习惯了VC的右键“Go to Definition用户看不起; 1987年,NI发布第一款LabWindows/CVI软件,用于DOS操作系统,LabWindows/CVI基于ANSI C因此,语言对C语言用户没有障碍,并提供了大量的仪器控制器,以便轻松开发仪器界面。因此,有大量的粉丝学习C语言虚拟仪器开发者;VC用户群基本都是编程大佬,一般都是觉得自己会独孤九剑的用户。VC6中自己定制开发很多仪表控件,即使我开发的控件不够漂亮,我总觉得我开发的很酷。我写了一条曲线,可以缩放ActiveX控件,虽然比较简陋,但还是自得其乐。
3、LabWindows/CVI的发展历史
从CNKI在搜索标题中包含LabWindows/CVI从相关文献中可以看出,第一篇文献于1998年4月在电子测试上发表《LabVIEWTM和LabWindowsTM/CVI新版本的测试执行软件,文章提到国家仪器公司(NI)最近推出了用途LabVIEW和LabWindows/CVI测试开发仪器软件的新测试执行软件,软件提供多种新功能;模块化结构使用户能够轻松客户化测试;先进的序列和子序列能力确保软件工程师能够在可再利用的子序列中包装常用的测试集;序列级的断点和单步调试能力;测试方案文档和ISO9000需要的ASCII序列文件生成/装入功能。
2001年关于LabWindows/CVI相关论文迎来了小爆发期,如下表所示:
序号 |
题目 |
作者 |
期刊/会议名称 |
发表时间 |
期刊/会议 |
被引频次 |
下载次数 |
1 |
LabWindows/CVI5.0积分函数在动态数据采集中的应用 |
吴曦 |
测控技术 |
2001-03-18 |
期刊 |
4 |
62 |
2 |
基于LabWindows/CVI5.8通道数据采集系统0平台 |
吴曦 |
计算机自动测量和控制 |
2001-04-20 |
期刊 |
9 |
76 |
3 |
用LABWINDOWS/CVI实现分布式数据采集系统 |
蔡宁果 |
2001-04-25 |
期刊 |
19 |
137 |
|
4 |
运用LabWindows/CVI模拟电子线路实验 |
白凤山 |
实验室研究与探索 |
2001-04-25 |
期刊 |
0 |
32 |
5 |
LabWindows/CVI5.0在平显模拟系统中的应用 |
杨建新 |
计算机自动测量与控制 |
2001-06-20 |
期刊 |
3 |
43 |
6 |
基于LabWindows/CVI5.0的程控锁相放大器研制 |
郝学元 |
中国仪器仪表学会第三届青年学术会议论文集(上) |
2001-08-01 |
中国会议 |
0 |
44 |
7 |
基于Labwindows/CVI平台数字信号处理实验软件的研制 |
章小梅 |
中国仪器仪表学会第三届青年学术会议论文集(下) |
2001-08-01 |
中国会议 |
0 |
29 |
8 |
基于LabWindows/CVI和VISA库频谱分析仪程控测量方法 |
张秋华 |
电子测量技术 |
2001-08-15 |
期刊 |
3 |
67 |
9 |
基于LabWindows/CVI的测试引擎设计与实现 |
杨锁昌 |
全国第二届总线技术与测控系统工程学术报告会论文集 |
2001-09-01 |
中国会议 |
0 |
33 |
10 |
基于Labwindows/CVI的步进电机高精度控制 |
李顶根 |
电机电器技术 |
2001-11-15 |
期刊 |
4 |
170 |
11 |
利用VISA Assistant和Labwindows/CVI实现对虚拟仪器源程序的联合调试 |
何英 |
今日电子 |
2001-11-15 |
期刊 |
0 |
36 |
12 |
LabWindows/CVI软件中功能树的开发 |
许金勇 |
现代电子技术 |
2001-11-25 |
期刊 |
0 |
39 |
13 |
基于LabWindows/CVI5.0的程控锁相放大器研制 |
郝学元 |
仪器仪表学报 |
2001-12-30 |
期刊 |
0 |
173 |
14 |
基于Labwindows/CVI平台数字信号处理实验软件的研制 |
章小梅 |
仪器仪表学报 |
2001-12-30 |
期刊 |
7 |
12 |
随着LabWindows/CVI 7.0的横空出世,其最大的便利应该说是引入了Windows explorer样式的工程管理功能,这对于当时的程序开发者简直是“喜大普奔”,这一点在“国外电子测量技术”2003年第5期上发表的论文《NI宣布推出最新版LabWindows/CVI 7.0 新的集成式工作平台(Workspace),代码生成IO以及DAQ Assistant(助手)简化了ANSI C的开发》中介绍如下:“2003年8月14日NI宣布推出NI LabWindows/CVI 7.0版,这是NI的ANSI C测试测量开发环境LabWindows/CVI 年来最重要的一次升级。LabWindows/CVI 7.0的引人注目之处在于其完全集成的工作平台(Workspace)、可生成代码的硬件配置助手以及经重新设计的数据采集界面,此三大特性不仅为广大用户提供更灵活、高效又长期稳定的ANSI C编程,还大幅增加了开发速度。”
后来LabWindows/CVI逐渐发展,直到如今的LabWindows/CVI 2020版,利用CNKI搜索介绍文章标题中同时包含“NI”和“CVI”的搜索到介绍新版本的文章如下表所示,可以看出NI公司在后来陆续推出了LabWindows/CVI,但是到LabWindows/CVI 2013版本之后,NI公司就不再花功夫去推广LabWindows/CVI了,记得当时NI的技术支持和我们说公司以后要聚焦到LabVIEW软件上了,
序号 |
题目 |
作者 |
期刊/会议名称 |
发表时间 |
期刊/会议 |
被引频次 |
下载次数 |
1 |
NI推出LabWindows/CVI7.1软件 |
世界电子元器件 |
2004-10-01 |
期刊 |
0 |
36 |
|
2 |
NI Lab Windows/CVI 8.0加速测试的执行和发布 |
国外电子测量技术 |
2005-12-20 |
期刊 |
0 |
29 |
|
3 |
NI LabWindows/CVI 8.0加速测试的执行和发布业界领先的ANSI C开发环境现为测试任务提供全新实时的集成功能 |
电子测量技术 |
2005-12-14 |
期刊 |
0 |
26 |
|
4 |
NI LabWindows/CVI和Measurement Studio软件现可兼容Windows Vista操作系统 |
微计算机信息 |
2007-07-25 |
期刊 |
0 |
28 |
|
5 |
NI LabWindowsTM/CVI 2010提高基于ANSIC的开发效率,简化FPGA通信 |
电子测量技术 |
2011-03-15 |
期刊 |
0 |
15 |
|
6 |
NI LabWindowsTM/CVI 2010提高基于ANSI C的开发效率,简化FPGA通信 |
测控技术 |
2011-03-18 |
期刊 |
0 |
29 |
|
7 |
NI LabWindows/CVI 2010提高基于ANSI C的开发效率,简化FPGA通信 |
国外电子测量技术 |
2011-03-22 |
期刊 |
0 |
25 |
|
8 |
C语言开发者使用NI Lab Windows/CVI 2013提升硬件速度 |
国外电子测量技术 |
2013-10-15 |
期刊 |
0 |
9 |
4、我对LabWindows/CVI的认识
我是2002年9月开始读硕士研究生的,2003年开始学习LabWindows/CVI时,其主流版本还是5.5,其工程管理界面比较麻烦,感觉和C ++ Builder差不多的感觉,对于当时的VC6用户来说会感觉界面不太友好,怎么看都不像一个IDE,后来发展到6.0版本没有太大变化。但是后来用过LabWindows/CVI 7.0后感觉非常好用,做数据采集相关的软件时首选肯定时LabWindows/CVI,而且在课堂上教学也采用LabWindows/CVI。
LabWindows/CVI的优点:
(1)提供了丰富的仪器仪表控件。对于VC用户如果需要制作仪器仪表控件,通常有两种选择,一是利用GL Studio制作仪表控件,导出给VC使用;二是自己定制开发ActiveX控件。这两种方法对于用户的编程水平都有一定的要求。而正如王建新老师在《大话虚拟仪器——我与LabWindows/CVI十年》一书中提到的“在LabWindows/CVI中只要拖拽一下控件,设置几个参数就可以轻松实现了。”
(2)提供了强大的代码自动生成功能。对于VC用户习惯了利用向导(Wizard)生成程序框架,然后手动添加或利用IDE生成函数框架,其能够很轻松的接受LabWindows/CVI中的代码自动生成功能,尤其是对于面板中的按钮设置回调函数名称为“quit”,则自动默认其调用Quit User Interface这一点由衷点赞,说明LabWindows/CVI的开发者是真正站在用户角度考虑了的。
(3)提供了大量的信号处理函数库。这一点对于虚拟仪器开发是非常重要的,以前在VC下开发程序,为了实现一个数据排序,都需要自己编写算法实现,而LabWindows/CVI提供了小到排序函数,大到功率谱分析等实用的信号处理函数,大大简化了开发者的工作。
(4)提供了完善的调试功能。LabWindows/CVI虽然没有提供汇编语言下的动态调试功能,有点缺憾,但是对于绝大多数情况来说,已经够用了,而且其提供的曲线方式(Graphical Array View)查看变量数据功能,绝对是对程序来说非常实用的一个功能。
LabWindows/CVI的不足:
(1)由于NI公司重视LabVIEW软件的迭代开发,而轻视LabWindows/CVI的版本更新,导致许多新控件,新功能都是在LabVIEW中先推出的,LabWindows/CVI只能耐心等待。
(2)LabWindows/CVI没有汉化版本,LabVIEW有汉化版本,这一点可能是LabWindows/CVI水土不服吧,其实王建新老师在《大话虚拟仪器——我与LabWindows/CVI十年》一书中也说过,要想汉化LabWindows/CVI也不是难事,但这主要还是公司的态度吧。
(3)COM组件支持的比较鸡肋,COM,即组件对象模型,利用C++语言的纯虚类来描述COM接口是最方便的,但是由于LabWindows/CVI是基于ANSI C的,只能利用函数指针结构体来手工构造COM接口,因此这一块支持的比较鸡肋。
(4)LabWindows/CVI通过ActiveX技术与第三方程序交互,例如Excel、Word等等,实际就是COM组件接口的调用,但估计是内存分配这一块测试的不够充分,经常会出现在调用Word时,插入表格数据大到一定程度时,出现异常错误,我为此自己用VC调用COM接口实现同样功能则没有任何问题。
细细算来,从2003年接触LabWindows/CVI,如今已过17年了,这其中用LabWindows/CVI也开发过不少应用程序,在这过程中,有为做出一个漂亮界面洋洋自得,有为某一功能实现拍案叫绝,有反汇编弄明白工作机理窃窃自喜,有为莫名的错误郁闷不已,总结来说就是对LabWindows/CVI爱恨交加吧。