AC6111(SDK2.0)LabVIEW开发说明
本公司已在早期提供了一套完整的LabVIEW示例程序,其中包括了DA、I/O和AD所包含的各项函数的详细使用方法。
在LabVIEW中,提供了一个名为Call Library Function Node的节点来实现对动态连接库的调用。该节点位于Functions模板中的Advanced字模板中。 如图1所示。
图1 LabVIEW中的Call Library Function Node节点用户只需找到动态连接库文件并将其加载进来,并选择函数名称、添加相应参数即可。如图2所示。
图2 Call Library Function Node节点设置其中VC DLL中的变量和LabVIEW变量的对应关系如下:
Visual C/C++:LabView
HANDLE:U32 Type:Numeric; Data type:Unsigned 32-bit Integer; Pass:Value)
*unsigned short:U16数组(Type:Array; Data type:Unsigned 16-bit Integer; Array Format:Array Data Pointer)
*short,I16数组(Type:Array; Data type:Singled 16-bit Integer; Array Format,Array Data Pointer)
*unsigned long:U32数组(Type:Array; Data type:Unsigned 32-bit Integer; Array Format,Array Data Pointer)
*long:I32数组(Type:Array; Data type:Singled 32-bit Integer; Array Format,Array Data Pointer)
*int:I32数组(Type,Array; Data type:Singled 32-bit Integer;Array Format,Array Data Pointer)
*char:String
struct:Cluster(Type:Adapt to Type; Data Format:Handles By Value; Function Prototype:void*)
目前,本公司在原有基础上将所有DLL函数的调用全部编译为Sub VI的形式,用户只需通过Functions模板中左下角的Select a VI(如图3所示)将所需Sub VI添加到Block Diagram中。无需用户使用Call Library Function Node节点自己设置DLL函数,并可避免用户在使用中的不必要的错误。
图3 Select a VI
各Sub VI说明如下:
I、驱动操作
AC6111_CreateDevice.vi
功能:获得AC6111采集卡驱动句柄。
参数:
instance :AC6111板卡的序号,如0、1、2;
pError :错误代码;
返回值:
hDevice(out),AC6111板卡驱动句柄备注:一般在用户程序启动后,可获取板卡句柄;其他Sub VI的使用都根据句柄来识别AC6111。
AC6111_CreateDevice.vi
功能:关闭AC6111驱动句柄。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值:
备注:当用户程序退出之前,请关闭驱动句柄。
AC6111_Version.vi
功能:读取驱动程序软件版本信息。
参数:
hDevice(in),输入端驱动句柄(驱动句柄由此输入);
pVersion,版本信息字符串;
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值:
备注:该函数为厂家保留使用。
II、模数转换 (AD)
AC6111_INI.vi
功能:初始化板卡,如设置相关参数,设置中断允许、事件通知等等。
参数:
hDevice(in),输入端驱动句柄(驱动句柄由此输入);
TRSL,0:软件触发 / 1:硬件触发
CLKSL,0:转换应用内部时钟 / 1:外部时钟
TRPOL,0:触发上升边沿触发 / 1:下降边沿触发
CLKPOL,0:外部时钟上升边沿触发 / 1:下降边沿触发
SAMMODE,0:采样模式为NORMAL / 1:SH模式
start_ channel,采样起始通道0 ~ 15
end_ channel,采样停止通道0 ~ 15
ad_timer,采样时钟控制字10 ~ 65535(见注释1)
da_mode,DA输出模式控制字(见注释2)
kFifo_Notify_Length,内核缓冲门限通知控制字;(小于内核缓冲的容量,缓冲的容量2000000)(保留为今后扩展使用)
Irq_Enable, 中断允许控制字;(0-禁止/1-允许)
Event_Enable,事件通知允许控制字;(0-禁止,为今后扩展使用)
Event, 缓冲门限事件句柄;(保留为今后扩展使用)
EventFifoFull,缓冲溢出事件句柄;(保留为今后扩展使用)
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值:
备注:所有的参数都是由此Sub VI设定的。
注释1:ad_timer范围 12-65536,4M的时基,每个数表示0.25uS的时间长度。
例:ad_timer=12,当AD采样模式为NORMAL模式时,每个通道的采样频率=[1/(12*0.25)]/通道数。
注释2:da_mode 范围 0-3
0:ch0、ch1 10V
1:ch0 (10V,ch1 10V
2:ch0 10V,ch1 (10V
3:ch0、ch1 (10V
AC6111_STATE.vi
功能:查询硬件状态、缓冲状态。
参数:
hDevice(in) ,输入端驱动句柄(驱动句柄由此输入);
HardwareState,板卡硬件状态字;(见注释3)
Irq_Enable,中断允许状态字;(0-禁止/1-允许)
Event_Enable,事件通知状态字;(0-禁止/1-允许)
SoftFifoCapacity,缓冲区容量;(按采样点数)
SoftFifoItemForRead,缓冲区中已经存在的数据长度;(按采样点数)
SoftFifoItemForWrite,缓冲区中的剩余空间。(按采样点数)
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值:
备注:
注释3:
D0,=0,FIFO空
D1,=0,FIFO半满
D2,=0,FIFO溢出
D3,0
D4:cntov:=1,计数器溢出例:HardwareState & 02H = 0,即半满;HardwareState & 04H = 0,即溢出。(“H”代表十六进制数值)
AC6111_RUN.vi
功能:启动AD采样。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_STOP.vi
功能:停止AD采样,停止中断。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_READ_HARD_FIFO.vi
功能:从板载FIFO中读取数据。
参数:
hDevice(in),输入端驱动句柄(驱动句柄由此输入);
ADData ,输入端采样数据(数组);
length,读取的长度。长度应小于4096。
ADData(out),输出端采样数据(数组);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_READ_KFIFO.vi
功能:从中内核缓冲中读取数据。
参数:
hDevice(in),输入端驱动句柄(驱动句柄由此输入);
ADData ,输入端采样数据(数组);
length,读取的长度。长度应小于缓冲中可以读取的数据长度(该长度由AC6111_STATE函数获得)。
ADData(out),输出端采样数据(数组);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
III、数模转换 (DA)
AC6111_DA_Mode.vi
功能:设置DA电压输出模式字。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
mode :DA模式字(见注释2)
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_DA0.vi
功能:DA 0通道电压输出。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
da_data :DA 0通道输出数据;(0-4095);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_DA1.vi
功能:DA 1通道电压输出。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
da_data :DA 1通道输出数据;(0-4095);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值:
备注:
IV、数字量输入、输出函数(DIO)
AC6111_IO_MODE.vi
功能:设置数字量模式控制字。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
iomode :模式字(见注释4)
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
注释4,da_mode 范围 0-3
0:低8位、高8位均为输入
1:低8位输出、高8位输入
2:低8位输入、高8位输出
3:低8位、高8位均为输出
AC6111_DI.vi
功能:数字量输入;
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
DIData :数字量输入数据
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值:
备注:
AC6111_DO.vi
功能:数字量输出。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
do_data :数字量输出数据。
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
V、定时器、计数器函数(Timer Counter)
AC6111_RCOUNTER.vi
功能:读取计数器的数值;
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
counter_data :读取的计数器值0-65535;
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_WCOUNTER.vi
功能:设置计数器初值。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
counter_data :计数器初值数据0-65535;
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_RTIMER.vi
功能:读取定时器的数值参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
timer_data :定时器数值;
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
本公司已在早期提供了一套完整的LabVIEW示例程序,其中包括了DA、I/O和AD所包含的各项函数的详细使用方法。
在LabVIEW中,提供了一个名为Call Library Function Node的节点来实现对动态连接库的调用。该节点位于Functions模板中的Advanced字模板中。 如图1所示。
图1 LabVIEW中的Call Library Function Node节点用户只需找到动态连接库文件并将其加载进来,并选择函数名称、添加相应参数即可。如图2所示。
图2 Call Library Function Node节点设置其中VC DLL中的变量和LabVIEW变量的对应关系如下:
Visual C/C++:LabView
HANDLE:U32 Type:Numeric; Data type:Unsigned 32-bit Integer; Pass:Value)
*unsigned short:U16数组(Type:Array; Data type:Unsigned 16-bit Integer; Array Format:Array Data Pointer)
*short,I16数组(Type:Array; Data type:Singled 16-bit Integer; Array Format,Array Data Pointer)
*unsigned long:U32数组(Type:Array; Data type:Unsigned 32-bit Integer; Array Format,Array Data Pointer)
*long:I32数组(Type:Array; Data type:Singled 32-bit Integer; Array Format,Array Data Pointer)
*int:I32数组(Type,Array; Data type:Singled 32-bit Integer;Array Format,Array Data Pointer)
*char:String
struct:Cluster(Type:Adapt to Type; Data Format:Handles By Value; Function Prototype:void*)
目前,本公司在原有基础上将所有DLL函数的调用全部编译为Sub VI的形式,用户只需通过Functions模板中左下角的Select a VI(如图3所示)将所需Sub VI添加到Block Diagram中。无需用户使用Call Library Function Node节点自己设置DLL函数,并可避免用户在使用中的不必要的错误。
图3 Select a VI
各Sub VI说明如下:
I、驱动操作
AC6111_CreateDevice.vi
功能:获得AC6111采集卡驱动句柄。
参数:
instance :AC6111板卡的序号,如0、1、2;
pError :错误代码;
返回值:
hDevice(out),AC6111板卡驱动句柄备注:一般在用户程序启动后,可获取板卡句柄;其他Sub VI的使用都根据句柄来识别AC6111。
AC6111_CreateDevice.vi
功能:关闭AC6111驱动句柄。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值:
备注:当用户程序退出之前,请关闭驱动句柄。
AC6111_Version.vi
功能:读取驱动程序软件版本信息。
参数:
hDevice(in),输入端驱动句柄(驱动句柄由此输入);
pVersion,版本信息字符串;
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值:
备注:该函数为厂家保留使用。
II、模数转换 (AD)
AC6111_INI.vi
功能:初始化板卡,如设置相关参数,设置中断允许、事件通知等等。
参数:
hDevice(in),输入端驱动句柄(驱动句柄由此输入);
TRSL,0:软件触发 / 1:硬件触发
CLKSL,0:转换应用内部时钟 / 1:外部时钟
TRPOL,0:触发上升边沿触发 / 1:下降边沿触发
CLKPOL,0:外部时钟上升边沿触发 / 1:下降边沿触发
SAMMODE,0:采样模式为NORMAL / 1:SH模式
start_ channel,采样起始通道0 ~ 15
end_ channel,采样停止通道0 ~ 15
ad_timer,采样时钟控制字10 ~ 65535(见注释1)
da_mode,DA输出模式控制字(见注释2)
kFifo_Notify_Length,内核缓冲门限通知控制字;(小于内核缓冲的容量,缓冲的容量2000000)(保留为今后扩展使用)
Irq_Enable, 中断允许控制字;(0-禁止/1-允许)
Event_Enable,事件通知允许控制字;(0-禁止,为今后扩展使用)
Event, 缓冲门限事件句柄;(保留为今后扩展使用)
EventFifoFull,缓冲溢出事件句柄;(保留为今后扩展使用)
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值:
备注:所有的参数都是由此Sub VI设定的。
注释1:ad_timer范围 12-65536,4M的时基,每个数表示0.25uS的时间长度。
例:ad_timer=12,当AD采样模式为NORMAL模式时,每个通道的采样频率=[1/(12*0.25)]/通道数。
注释2:da_mode 范围 0-3
0:ch0、ch1 10V
1:ch0 (10V,ch1 10V
2:ch0 10V,ch1 (10V
3:ch0、ch1 (10V
AC6111_STATE.vi
功能:查询硬件状态、缓冲状态。
参数:
hDevice(in) ,输入端驱动句柄(驱动句柄由此输入);
HardwareState,板卡硬件状态字;(见注释3)
Irq_Enable,中断允许状态字;(0-禁止/1-允许)
Event_Enable,事件通知状态字;(0-禁止/1-允许)
SoftFifoCapacity,缓冲区容量;(按采样点数)
SoftFifoItemForRead,缓冲区中已经存在的数据长度;(按采样点数)
SoftFifoItemForWrite,缓冲区中的剩余空间。(按采样点数)
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值:
备注:
注释3:
D0,=0,FIFO空
D1,=0,FIFO半满
D2,=0,FIFO溢出
D3,0
D4:cntov:=1,计数器溢出例:HardwareState & 02H = 0,即半满;HardwareState & 04H = 0,即溢出。(“H”代表十六进制数值)
AC6111_RUN.vi
功能:启动AD采样。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_STOP.vi
功能:停止AD采样,停止中断。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_READ_HARD_FIFO.vi
功能:从板载FIFO中读取数据。
参数:
hDevice(in),输入端驱动句柄(驱动句柄由此输入);
ADData ,输入端采样数据(数组);
length,读取的长度。长度应小于4096。
ADData(out),输出端采样数据(数组);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_READ_KFIFO.vi
功能:从中内核缓冲中读取数据。
参数:
hDevice(in),输入端驱动句柄(驱动句柄由此输入);
ADData ,输入端采样数据(数组);
length,读取的长度。长度应小于缓冲中可以读取的数据长度(该长度由AC6111_STATE函数获得)。
ADData(out),输出端采样数据(数组);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
III、数模转换 (DA)
AC6111_DA_Mode.vi
功能:设置DA电压输出模式字。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
mode :DA模式字(见注释2)
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_DA0.vi
功能:DA 0通道电压输出。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
da_data :DA 0通道输出数据;(0-4095);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_DA1.vi
功能:DA 1通道电压输出。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
da_data :DA 1通道输出数据;(0-4095);
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值:
备注:
IV、数字量输入、输出函数(DIO)
AC6111_IO_MODE.vi
功能:设置数字量模式控制字。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
iomode :模式字(见注释4)
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
注释4,da_mode 范围 0-3
0:低8位、高8位均为输入
1:低8位输出、高8位输入
2:低8位输入、高8位输出
3:低8位、高8位均为输出
AC6111_DI.vi
功能:数字量输入;
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
DIData :数字量输入数据
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值:
备注:
AC6111_DO.vi
功能:数字量输出。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
do_data :数字量输出数据。
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
V、定时器、计数器函数(Timer Counter)
AC6111_RCOUNTER.vi
功能:读取计数器的数值;
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
counter_data :读取的计数器值0-65535;
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_WCOUNTER.vi
功能:设置计数器初值。
参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
counter_data :计数器初值数据0-65535;
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注:
AC6111_RTIMER.vi
功能:读取定时器的数值参数:
hDevice(in) :输入端驱动句柄(驱动句柄由此输入);
timer_data :定时器数值;
hDevice(out),输出端驱动句柄(输出与输入端驱动句柄相同的驱动句柄,可将此输出端驱动句柄传递给下一Sub VI的输入端驱动句柄);
返回值,
备注: