admin管理员组

文章数量:1530845

2023年12月26日发(作者:)

0. 参考示例:

LabVIEW

1. 调用库函数节点

2. 配置参数

2.1. 返回参数

类型:有Void,Numeric和String三种,如下图所示。

(1)Void

Void is only available for return type and is not available for other parameters. Use Void for

the return type if your function does not return any values.

Even if the function you call returns a value, you can use Void for the return type. When the

function returns a value and you select Void as the return type, the value returned by the

function is ignored.

(2)Numberic

以为例,如下图。另外数据类型中的“指针大小整型”(pointer-sized integer),帮助文档的解释如下:

(3)String

目前还没碰到过,等遇到时再补充。

2.2. 输入(出)参数

其类型共有9种,常用的有数值、数组、字符串和匹配值类型。

2.2.1. 数值

需要注意的是,其传递选项有“值”和“指针”两种,分别对应值传递和指针传递。

a. 数据类型为int32

函数原型为void LVint32(int32 input, int32 *output);

本函数计算输入值的平方,然后将结果显示在“输出”中。

返回类型为void,

input类型为int32,值传递

output类型为int32,指针传递

注:如将结果返回至某个控件,该控件本身即可为返回数据提供必要的内存空间。

b. 数据类型为float64

函数原型为void LVfloat64(float64 input, float64 *output);

本函数计算输入值的平方,然后将结果显示在“输出”中。

返回类型为void,

input类型为8字节双精度,值传递

output类型为8字节双精度,指针传递

c. 数据类型为BOOL

函数原型为void WinBOOL(BOOL input, BOOL *output);

本函数将输入值反转后显示在“输出”中。

BOOL在头文件中的定义为typedef int BOOL,因此在LabVIEW中其数据类型选择int32.

d. 数据类型为BOOLEAN

函数原型为void WinBOOLEAN(BOOLEAN input, BOOLEAN *pinput, PBOOLEAN output);

本函数对值传递和指针传递的输入值执行“逻辑与”操作,并将返回结果反转后显示在“输出”中。

BOOLEAN在头文件中的定义为typedef unsigned char BOOLEAN,即无符号字符类型,占1

个字节,因此在LabVIEW中其数据类型选择U8。

另外这里的形参pinput和output均使用了匹配至类型,后续再说。

LabVIEW值的数据类型

I32

U32

I16

U16

I8

U8

SGL

DBL

pointer-sized integer

unsinged pointer-sized

integer

函数形参或返回参数的数据类型

BOOL、int32、INT、int、LONG、long、SSIZE_T

DWORD、HWND、SIZE_T、UINT、ULONG、unsinged int、unsinged

long、uInt32

SHORT、short、int16

USHORT、WORD、unsinged short、uInt16

int8

BOOLEAN、BYTE、uInt8

FLOAT、float、float32

double、float64

64位系统中LabVIEW的数据类型默认都是I64

64位系统中LabVIEW的数据类型默认都是U64。

2.2.2. 数组

当类型为数组时,其字数组格式选项共有四种,分别为数组数据指针、数组句柄和数组句柄指针。

从DLL返回一个新数组时,必须在LabVIEW中为该数组分配内存。最简单的方法是:将一个已知长度的数组作为“调用库函数”节点的输入,该数组的长度不能小于DLL返回的结果数组的预期长度。

a. 数组格式为数组数据指针

函数原型为void ARRAYfloor1D(double *input, int input_length, int *output);

本函数计算输入元素(1D数组)平方值的整数部分,然后显示在“输出”中。

函数原型为void ARRAY2D(double *array, int array_length_row, int array_length_col);

本函数计算输入二维数组每个元素值的平方。从LabVIEW作为数组数据指针传入的二维数组将被DLL当作一维数组处理。指针运算可用于二维数组的访问。

注:数组大小也要传入外部代码,因为此处使用了数据指针,而不是句柄。

b. 数组格式为数组句柄

函数原型为void ARRAY1DHandle(TD1Hdl input, TD2Hdl output);

本函数计算输入元素平方值的整数部分,然后显示在“输出”中。

函数原型为void ARRAY2DHandle(TD1Hdl array);

本函数计算输入二维数组每个元素值的平方。

注:对于外部代码,数组大小不是必需的,因为此处使用了句柄,而不是数据指针。

关于句柄和指针有何异同还没搞清楚。

2.2.3. 字符串

当类型为字符串时,其字符串格式选项共有四种,分别为C字符串指针、Pascal字符串指针、字符串句柄和字符串句柄指针。

a. 字符串格式为C字符串指针

函数原型为void WinCHAR(CHAR *input, PCHAR output);

本函数将输入字符串反转后显示在“输出”中。

注:数据类型PCHAR、LPCHAR、PSTR和CHAR*是等价的。LPCSTR和PCSTR是指向常量字符串的指针,且与CONST CHAR*等价。

LabVIEW值的数据类型

字符串

b. 其他字符串格式

暂不清楚

2.2.4. 匹配至类型

a. 输入输出参数为结构体,且结构体中无字符串和数组

函数原型为void CLUSTERSimple(TD1 *input, TD1 *output); 其中TD1类型struct定义为

函数形参或返回参数的数据类型

CHAR、UCHAR、char、unsigned char、CStr、LStrHandle

本函数的输入簇按顺序包含一个DBL型数据、一个I32型数据和一个布尔型数据。计算DBL型数据的平方值、取I32型数据值的一半,并将布尔值取反。返回结果将显示在“输出”中。

输入参数input和输出参数output的类型均选择“匹配至类型”,数据格式选择“按值处理”。

注:①从DLL返回一个新簇时,必须在LabVIEW中为该簇分配内存。最简单的方法是:将一个已知类型的簇作为“调用库函数”节点的输入,该簇与DLL返回的结果簇的预期类型相同。如将结果返回至某个控件,则当簇中不包含数组或字符串时,该控件本身即可为返回数据提供必要的内存空间。

②当输入簇中三个元素的顺序发生变化时,函数仍可运行,但运行结果与预期结果不一致。

③此处将数据格式更改为“句柄指针”,结果一样,不知为何。

a. 输入输出参数为结构体,且结构体中包含字符串和数组

函数原型为void CLUSTERSimpleS_A(TD1 *input, TD1 *output); 其中TD1的struct定义为

本函数的输入簇包含一个DBL型数据、一个字符串和一个I32型数据。计算DBL型数据的平方值、反转字符串、将数组中的每个元素翻倍。返回结果将显示在“输出”中。

LabVIEW控件“输入”为一个簇,由DBL、字符串和1D数组组成。由于结构体TD1中的字符串长度为51,1D数组的长度为50,所以需要将簇“输入”中的字符串和1D数组也转换成同样的长度。

注:LabVIEW通常将字符串和数组作为簇中句柄传递,因此字符串必须转换为U8型数组,然后再转换为带51个U8元素的簇(50个字符+NULL);数组必须转换为带50个I32元素的簇。为了不显示额外数据,在显示数据之前去除无用数据。

3. Examples

(1)LabJack动态链接库ListAllS

Parameters

LJM_ERROR_RETURN

DeviceType [in]

ConnectionType [in]

NumFound [out]

aDeviceTypes [out]

aConnectionTypes [out]

aSerialNumbers [out]

aIPAddresses [out]

数值I32

字符串常量,C字符串指针

字符串常量,C字符串指针

数值I32,指针传递

数组I32,1D数组数据指针

数组I32,1D数组数据指针

数组I32,1D数组数据指针

数组I32,1D数组数据指针

注意:函数详情可参考LabJack技术手册

(2)UIRobot动态链接库GetUimDevInfo

获取指定编号的网关设备的信息及其配置,其函数原型和结构体定义如下:

DEV_INFO_OBJ结构体占用字节数为84,所以这里的LabVIEW使用是先开辟84个字节大小的1D数组内存空间,然后传递数组数据指针给函数。

本文标签: 数组指针字符串函数数据