0
虚拟仪器软件设计中LABVIEW和C语言的混合编程
2008-12-22 20:26:25 admin 浏览:6069次 【

摘要虚拟仪器软件设计中以图形化语言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为主,LABVIEWC语言混合编程的方法。

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语言的接口图标来调用CLABVIEWC语言的接口图标是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 <stdio.h>

#include <string.h>

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<lg1;i++)

         {

                  string[i]=string[i]^string1[i];

                  string[i]=0x30+string[i];

         }

         printf("%s\n",string);

         strncat(string,string2,(lg-lg1));//stringn0

         char_ptr=strchr(string,'1');

         strcpy(string,char_ptr);//去掉1前面的0

    printf("%d\n",strlen(string));

         lg=strlen(string);

    printf("%s\n",string);

    printf("%d\n",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.lsb文件,然后单击“打开”,crc.lsb文件装入CIN图标中。

3.5运行程序。

输入String=0111000000010000011110,理论计算输出应为110011011运行程序得到输出为110011011,与理论计算输出相同。

4 LABVIEW实现CRC校验和通过LABVIEWCIN节点实现CRC校验的比较

4.1通过LABVIEWCIN节点实现对C代码调用的CRC校验LABVIEW程序如图2

2

4.2 LABVIEW实现的CRC校验程序

CRC校验程序的1/3部分如图3所示

3

4.3通过LABVIEWCIN节点实现对C代码调用的CRC校验LABVIEW程序效率和用LABVIEW直接实现CRC校验程序效率比较如图4所示。

从上例中我们可以看出,在LABVIEW中通过调用C语言来实现图形化语言LABVIEW本身较难实现的功能,大大简化了程序的复杂度,在程序复杂度增加到一定程度时,LABVIEW中调用CIN接点的效率远大于LABVIEW直接编程的效率。采用LABVIEWC语言的混合编程,充分利用

4

两种语言的优点是虚拟仪器软件设计的一种较好的选择.

5结束语

本文阐述了LabVIEWC语言接口的方法,并给出了应用实例。由于在LabVIEW中引入了C语言的强大功能,从而提高了LabVIEW的数据处理能力,并极大地增强了LabVIEW与其Windows应用程序之间的数据共享能力。

在我单位开发的基于VXI总线的自动测试系统虚拟仪器软件设计中,成功的运用了LABVIEWC语言混合编程的方法,较好的解决了图形化语言在软件设计中的局限,取得了很好的效果。

参考文献:

[1]刘军华。《基于LABVIEW》的虚拟仪器设计。电子工业出版社。20031月。

[2] 刘军华。《虚拟仪器图形化编程语言LABVIEW教程》。西安电子科技大学出版社。20018月。

[3] David J.Kruglinski , Scot Wingo , George Shepherd.Visual C++6.0技术内幕》北京希望电子出版社。20011月。
0 条评论
查看更多评论
  • 附件包括开题报告、论文、源程序1本选题的意义及国内外发展状况1.1研究目的和意义    随着工业自动化程度不断发展,对位移测量的精准度、效率以及..

    浏览:3991次 评论:0
    2020-02-21 09:30:14
浏览:5525次 评论:0
2018-05-13 22:08:20
浏览:8087次 评论:1
2018-04-14 20:41:34
  • 摘 要:探讨在MATLAB中使用FIS编辑器与Simulink相结合的方法构造模糊推理结构,并通过MATLAB Script Node实现LabVIEW与MATLAB的混合编程,设计出具有模糊自整..

    浏览:4552次 评论:0
    2017-07-28 15:43:26
  • 摘要:针对现代工业过程控制中实时通讯要求和现场总线存在的缺点,用现在流行的开放式标准接口技术OPC规范,设计了一种基于LabV IEW的PC与PCC实时数据通讯方..

    浏览:4588次 评论:0
    2017-07-28 15:27:50
作者专栏
  • sltang

    注册时间:2024-12-21 15:45:59

  • samhuang63

    注册时间:2024-12-20 09:42:58

  • csq663347

    注册时间:2024-12-05 16:34:39

  • guohuiming

    注册时间:2024-11-14 08:49:44

  • 机飞弹打

    注册时间:2024-11-11 13:46:27

Copyright@http://nilab.com.cn all rights reserved 备案号:京ICP备12043750号-1
Powered by qibosoft V9.0 Code © 2003-2017 qibosoft
LABVIEW之家 QQ:181237912; email:Labviewzj@qq.com 项目合作 微信及手机:18510627229