LabVIEW与C接口设计方法
Labview提供支持VXI总线、GPIB总线、RS?232串行总线接口硬件的驱动程序库,但它对物理内存的操作受到限制,且对硬件操作的实时性不好。但它提供了CIN(CODeInterfaceNode)节点。用户可在LabVIEW中确定CIN节点的入口与出口参数个数类型,在C编译环境下,生成.lsb文件,然后在LabVIEW中对CIN节点选择Loadcinobjectcode,最后将该节点封装成一个VI,由主程序调用。采用CIN节点,也可充分利用Win95支持多线程的功能,提高运行效率,利用主线程监控各子线程,有效地避免因硬件通信错误而导致程序被挂起的现象,同时,可充分利用Win95有效的内存管理技术,提高数据处理及运算速度。
2.1VI设计
首先在块流图(BlockDiagram)上放置一个CINVI,然后通过CIN弹出菜单中的AddParameter增加接线端子(Terminal),通过接线端子来标识CIN的输入和输出。接线端子通常有输入输出接线端子(Input?OutputTerminal)和输出接线端子(Output?OnlyTerminal),在缺省情况下,接线端子是输入输出接线端子,其左边是输入,而右边是输出。在生成的代码中,与输入输出接线端子对应的是一个参数,通过该参数,数据输入CIN,CIN可以使用该参数的值或修改参数的值能够由该参数返回;如果输入输出接线端子的右边没有使用,即只有输入,则CIN只能使用该参数的值而不能修改它。对于输出接线端子,它只有输出端,没有输入端。由LabVIEW在内存中设置空间保存CIN的返回值。在定义了CIN接线端子后,将设定的数据控制器(Control,连接输入)、数据指示器(Indicator,连接输出)与对应的接线端子用线(Wire,代表数据流)连接起来,这样将确定所生成代码中的参数类型。
上面的过程只是定义了CIN的内部接口,还必须定义VI的编程接口,即肖像/连接器,通过它才能在程序中调用设计好的VI。在肖像/连接器的设计中,尽量使所画的肖像能够表达出所设计的VI的功能,采用在肖像上标识该VI名称的方法。连接器则是标明肖像的输入输出属性,数据和信息通过连接器的端点在两个VI间传递。这样就设计好了一个VI,但要给它装入目标代码后才能执行。
2.2生成.c文件
在设计好CINVI后,可用LabVIEW生成C语言格式的.c文件。下面是我们设计的StdCMD.VI所生成的StdCMD.c文件:

在所生成的文件中,自动包含了文件extcode.h,它是定义能够被CIN使用的基本数据类型和外部子程序的头文件。如果设计的CIN代码含有系统调用,还必须包含文件hosttype.h。当CIN代码执行时,LabVIEW调用CINRun函数,通过CINRun函数的参数传递VI的输入输出值。LabVIEW定义的程序返回值是MgErr数据类型,在执行完CIN代码后,LabVIEW能够检查返回值并确定代码执行是否有错误。
2.3用户代码设计
在CINRun函数体内编写用户代码是实现所设计的CINVI功能的关键。在我们所设计的5个VI中,这部分代码的编写主要是利用设计好的驱动程序完成多机测控系统的控制任务,将驱动程序的接口函数封装在VI内,在用LabVIEW编制测试软件时,通过调用VI来实现对多机测控系统的控制操作。
2.4编译代码生成.lsb文件
在Windows95/98下,利用VisualC+5.0IDE编译设计代码,具体操作过程如下:
(1)创建一个新的DLL项目。在VisualC++5.0IDE环境中选择菜单命令File

New…..在弹出的对话框中New:域中选择ProjectWorkspace项,按OK键。在接着弹出的对话框中Type:域中选择Dynamic?LinkLibrary项,在Name:域中输入StdCMD(该项目的名称),在Platforms:域中选择Win32(表示将要生成的DLL是32位的),在Location:域中输入(或按Browser…键,选择)源代码文件所在的路径(注:编译过程中生成的中间文件和可执行代码也会产生在这个路径下),按Create…键完成DLL项目的创建。
评论