完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
摘要:虚拟仪器软件设计中以图形化语言labview为主,但在遇到LABVIEW不易实现的功能时,可通过在LABVIEW中调用C来实现。本文介绍了在LABVIEW中调用C的方法和配置CIN节点的原则,并用一个例子详细说明了实现LABVIEW和C混合编程的过程。
关键词:虚拟仪器,LABVIEW, CIN 引言 随着测试技术和总线技术的发展,以虚拟仪器为标志的自动测试系统开始出现。所谓虚拟仪器就是在以计算机和总线系统设备为硬件平台的基础上,由软件来实现原来需要用硬件来完成的功能,使用者只需用鼠标点击计算机的虚拟面板来操作,即可实现对被测对象测试的自动测试系统,因此,在测试领域有“软件即是仪器”的说法。 1图形化语言LABVIEW LABVIEW(Laboratory Virtual Instrument Engineering Workbench)是美国NI(National Instrument Company)公司推出的一种基于G语言(Graphics Language)的虚拟仪器软件开发工具。是目前应用最广、发展最快、功能最强的图形化软件开发集成环境。 一个LabVIEW程序分为3部分:前面板、框图程序、图标/接线端口。前面板用于模拟真实仪器的前面板;框图程序则是利用图形语言对前面板上的控件对象(分为控制量和指示量两种)进行控制;图标/接线端口用于把LabVIEW程序定义成一个子程序,从而实现模块化编程。利用LABVIEW设计者可以向搭积木一样,轻松组建一个虚拟仪器软面板。但图形化语言在软件设计中有一定的限制,因此,在虚拟仪器软件设计中可采用以LABVIEW为主,LABVIEW和C语言混合编程的方法。 2 LABVIEW中调用C的方法和CIN节点的配置 2.1 CIN概述 CIN是一个位于LabVIEW框图程序窗口的带有输入输出端口的图标。用户可将需调用的外部代码编译成LabVIEW所能识别的格式后与此结点相连,当此结点执行时,LabVIEW将自动调用与此结点相连的外部代码,并向CIN传递特定数据结构。使用CIN技术,用户可向CIN传递任意复合的数据结构,并且通常情况下,使用CIN可 获得较高的程序效率,因为LabVIEW中数据的存储格式遵循了C语言中数据的存储格式,二者完全相同。 CIN源代码对编译器有严格的限制,且因LabVIEW用于不同的操作系统平台而异。LabVIEW支持Windows95,WindowsNT, HP-UX等多种操作系统平台。 LABVIEW中通过与C语言的接口图标来调用C,LABVIEW与C语言的接口图标是CIN节点。其调用路径为:Function>>Advanced>>CIN(Code Interface Node).如图1所示。 2.2 CIN的设计方法 确定CIN节点的输入、输出个数和参数类型。CIN输入(输出)口参数的数据类型由连接在输入(输出)口上的控件的数据类型决定。 (1) 生成C源代码编辑格式文件。 (2) 在C源代码编辑格式文件的规定位置添加C源代码。 (3) 编辑*.C文件源代码,生成可执行文件。 (4) 装载编译好的可执行文件,这样就基本上形成了一个具备一定功能的CIN图标。 图1 3应用例子 通信系统中,CRC编码是非常常用的一种编码方式。在LABVIEW中实现比较复杂和困难。因此,采用C语言编写CRC校验码,在LABVIEW中利用CIN节点进行调用。 3.1生成C源代码编辑格式文件(*.c文件)的代码框架 生成C源代码编辑格式文件(*.c文件)的代码框架的步骤如下所述。 首先,从CIN图标的快捷菜单中选择Create.c File项,弹出一个文件存储对话框,键入文件名(本例中文件名设为“crc.c”),则生成C语言代码框,然后打开。该C语言代码框为: /* Call Library source file */ #include "extcode.h" void funcName(void); void funcName(void) { /* Insert code here */ } 3.2添加C源代码 在/* Insert code here */处填入C源代码。本例中的部分C源代码为: #include #include void main(void) { int index,lg,lg1,i;//定义字符串string的长度为lg,定义字符串string1的长度为lg1 char string1[256]="1100000001111"; char string[256]; char *char_ptr; char string2[256]="000000000"; printf("Type a string of characters and press Enter:n"); 以上这部分定义了字符数组,并对字符数组和指针变量行进行了初始化。 gets(string);//得到输入字符串 strcat(string,"000000000000");//把字符串"000000000000"加到string上 char_ptr=strchr(string,'1'); strcpy(string,char_ptr);//去掉1前面的0 lg=strlen(string); lg1=strlen(string1); 这部分对输入字符串进行预处理,得到string1的长度。 while((lg-lg1)>0) { for(i=0;i string=string^string1; string=0x30+string; } printf("%sn",string); strncat(string,string2,(lg-lg1));//string加n个0 char_ptr=strchr(string,'1'); strcpy(string,char_ptr);//去掉1前面的0 printf("%dn",strlen(string)); lg=strlen(string); printf("%sn",string); printf("%dn",strlen(string)); } 这部分按模2除法进行运算,并对运算结果进行循环处理。 } 3.3*.C文件源代码的编辑 必须将CIN源代码编译成LabVIEW所能识别的格式。由于,在VC++中对*.C文件源代码进行编辑的方法因用户所用操作系统平台和编译器而异。在此不做详细介绍,如不熟悉如何在VC++中进行编辑,可参考有关VC++的书籍(参考文献3) 3.4装载编译好的可执行文件 从CIN图标的快捷菜单中选择Load Code Resource项,弹出一个Choose a code resource file对话框,按照crc工程文件存入的路径寻找Debuge目录下的crc.l***文件,然后单击“打开”,crc.l***文件装入CIN图标中。 3.5运行程序。 输入String=0111000000010000011110,理论计算输出应为110011011运行程序得到输出为110011011,与理论计算输出相同。 4用 LABVIEW实现CRC校验和通过LABVIEW中CIN节点实现CRC校验的比较 4.1通过LABVIEW中CIN节点实现对C代码调用的CRC校验LABVIEW程序如图2: 图2 4.2用 LABVIEW实现的CRC校验程序 CRC校验程序的1/3部分如图3所示 图3 4.3通过LABVIEW中CIN节点实现对C代码调用的CRC校验LABVIEW程序效率和用LABVIEW直接实现CRC校验程序效率比较如图4所示。 从上例中我们可以看出,在LABVIEW中通过调用C语言来实现图形化语言LABVIEW本身较难实现的功能,大大简化了程序的复杂度,在程序复杂度增加到一定程度时,LABVIEW中调用CIN接点的效率远大于LABVIEW直接编程的效率。采用LABVIEW和C语言的混合编程,充分利用 图4 两种语言的优点是虚拟仪器软件设计的一种较好的选择. 5结束语 本文阐述了LabVIEW和C语言接口的方法,并给出了应用实例。由于在LabVIEW中引入了C语言的强大功能,从而提高了LabVIEW的数据处理能力,并极大地增强了LabVIEW与其他Windows应用程序之间的数据共享能力。 在我单位开发的基于VXI总线的自动测试系统虚拟仪器软件设计中,成功的运用了LABVIEW和C语言混合编程的方法,较好的解决了图形化语言在软件设计中的局限,取得了很好的效果。 参考文献: [1]刘军华。《基于LABVIEW》的虚拟仪器设计。电子工业出版社。2003年1月。 [2] 刘军华。《虚拟仪器图形化编程语言LABVIEW教程》。西安电子科技大学出版社。2001年8月。 [3] David J.Kruglinski , Scot Wingo , George Shepherd.《Visual C++6.0技术内幕》北京希望电子出版社。2001年1月。 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
有没有大佬知道labview中使用Halcon拍照算子采集图像后,如何把图像传入调用的Halcon算子?
3725 浏览 0 评论
LabVIEW对51单片机电压的采集,用VISA写入函数发送字符串voltage,VISA读取函数也是字符串?
2094 浏览 1 评论
1820 浏览 0 评论
7067 浏览 1 评论
2462 浏览 0 评论
3024浏览 1评论
4270浏览 0评论
有没有大佬知道labview中使用Halcon拍照算子采集图像后,如何把图像传入调用的Halcon算子?
3739浏览 0评论
2513浏览 0评论
2454浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 00:56 , Processed in 0.672931 second(s), Total 57, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号