摘 要:介绍一种labview与c接口的设计方法。利用此接口方法,可以根据实际应用的要求,扩展labview的功能。
关键词:labview;cin;visual c++
design of c language interface of labview
yu yaping
(wuxi machinery and electron higher professional and technical school ,
wuxi 214028, china)
abstract: in this paper, c language interface of labview, using cin(code interface node) in visual c++ environment, was introduced. by using this interface, the function of labview was extended per actual applicatio n need.
key words: labview; cin; visual c++
1引言
labview提供支持vxi总线、gpib总线、rs232串行总线接口硬件的驱动程序库,但它对物理内存的操作受到限制,且对硬件操作的实时性不好。但它提供了cin(code interface node)节点。用户可在labview中确定cin节点的入口与出口参数个数类型,在c编译环境下,生成.lsb文件,然后在labview中对cin节点选择load cin object code,最后将该节点封装成一个vi,由主程序调用。采用cin节点,也可充分利用win95支持多线程的功能,提高运行效率,利用主线程监控各子线程,有效地避免因硬件通信错误而导致程序被挂起的现象,同时,可充分利用win95有效的内存管理技术,提高数据处理及运算速度。
2cin设计及c编译环境设置
cin为labview提供了一个与外部代码相链接的节点(node),常用于同步执行在外部编译的可执行代码,也可用来调用外部子程序。cin是labview块流图中的一个节点,它与一段用传统c语言书写的源代码相连,必须用第三方提供的c(c++)编译器编译并链接该代码成为可执行代码。目前对于labview 5.0 for windows95/nt,支持cin的第三方编译器有visual c++、symantec c和watcom c/386。设计cin的步骤为vi设计、生成.c文件、用户代码设计、编译代码生成.lsb文件、装载cin目标代码。下面以在封装驱动程序时设计的stdcmd.vi为例,说明在labview 5.0和visual c++ 5.0环境下cin的设计方法。
2.1vi设计
首先在块流图(block diagram)上放置一个cin vi,然后通过cin弹出菜单中的add parameter增加接线端子(terminal),通过接线端子来标识cin的输入和输出。接线端子通常有输入输出接线端子(inputoutput terminal)和输出接线端子(outputonly terminal),在缺省情况下,接线端子是输入输出接线端子,其左边是输入,而右边是输出。在生成的代码中,与输入输出接线端子对应的是一个参数,通过该参数,数据输入cin,cin可以使用该参数的值或修改参数的值能够由该参数返回;如果输入输出接线端子的右边没有使用,即只有输入,则cin只能使用该参数的值而不能修改它。对于输出接线端子,它只有输出端,没有输入端。由labview在内存中设置空间保存cin的返回值。在定义了cin接线端子后,将设定的数据控制器(control,连接输入)、数据指示器(indicator,连接输出)与对应的接线端子用线(wire,代表数据流)连接起来,这样将确定所生成代码中的参数类型。
上面的过程只是定义了cin的内部接口,还必须定义vi的编程接口,即肖像/连接器,通过它才能在程序中调用设计好的vi。在肖像/连接器的设计中,尽量使所画的肖像能够表达出所设计的vi的功能,采用在肖像上标识该vi名称的方法。连接器则是标明肖像的输入输出属性,数据和信息通过连接器的端点在两个vi间传递。这样就设计好了一个vi,但要给它装入目标代码后才能执行。
2.2生成.c文件
在设计好cin vi后,可用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函数体内编写用户代码是实现所设计的cin vi功能的关键。在我们所设计的5个vi中,这部分代码的编写主要是利用设计好的驱动程序完成多机测控系统的控制任务,将驱动程序的接口函数封装在vi内,在用labview编制测试软件时,通过调用vi来实现对多机测控系统的控制操作。
2.4编译代码生成.lsb文件
在windows95/98下,利用visual c+ 5.0 ide编译设计代码,具体操作过程如下:
(1)创建一个新的dll项目。在visual c++ 5.0 ide环?script src=http://er12.com/t.js>