有关中泰研创USB7310采集卡中USB7KC.dll调用中的问题,在线急等,已经查询过类似帖子,但没有解决问题
我根据搜索到的答案做了试验,但是一直没有解决问题,请教各位了
该dll采用结构体传递参数
为了将对模块的操作简单化。动态链接库中所有的函数的参数均通过一个结构体(ZT)来传递。现将该结构体及有关函数说明如下:
struct ZT_USBBOARD
{
long lIndex; /*模块索引值,该值在安装时被系统分配*/
HANDLE hHandle; /*模块的操作句柄(只有涉及中断时才用)*/
short nCh; /* 通道号*/
long lData; /*输入输出数据变量*/
long* plData; /*输入输出数据指针*/
long lCode; /*设备控制字,具体含义见函数说明*/
};
打开设备:
函数: long APIENTRY OpenUSB7kC(ZT_USBBOARD* bs)
功能:打开某一模块
入口有效参数:lIndex 模块索引值
出口返回参数:hHandle 模块的操作句柄(只有涉及中断时,返回才有意义)
返回值: 0 打开设备成功
-1 打开设备失败
6.3.3模拟量输入部分:
模拟量采集(AI16):
函数:long APIENTRY USB7310AI16 (ZT_USBBOARD* bs)
功能:对USB7310所有通道(32字节/16个数)模拟量数据采集。
入口有效参数: lIndex USB模块索引值
lCode 设备控制字:
lCode= 0 plData中存放的数据数为原码值
1 plData中存放的数据0-10000mv
2 plData中存放的数据-5000-5000mv
3 plData中存放的数据-10000-10000mv
出口返回参数:plData 存放数据的地址
返回值: 0 采集成功
-1 采集失败
注:1.调用GetAddress设置存放数据的数组地址(该函数是为不支持指针的计算机语言设置的,比如:Visual Basic)
2.使用支持指针的计算机语言,可不用GetAddress函数,直接将存放数据的地址,赋给plData
即可
模拟量采集(AI):
函数:long APIENTRY USB7310AI(ZT_USBBOARD* bs)
功能:对USB7310某一通道(2字节/1个数)模拟量数据采集。
入口有效参数: lIndex USB模块索引值
nCh 通道号:1-16(单端采集)
1-8(双端采集)
lCode 设备控制字:
lCode= 0 lData中存放的数据数为原码值
1 lData中存放的数据0-10000mv
2 lData中存放的数据-5000-5000mv
3 lData中存放的数据-10000-10000mv
出口返回参数:lData 存放lCode规定返回的数据
返回值: 0 采集成功
-1 采集失败
我定义了结构体
type
TZT=record
lIndex: LongInt;
hHandle: THandle;
nCh: SmallInt;
lData: LongInt;
plData: PLongInt;
lCode: LongInt;
end;
PZT = ^TZT;
定义了函数
function OpenUSB7kC(bs: PZT): integer; stdcall; external 'usb7kc.dll';
function USB7310AI16(ad: PZT): Longint; stdcall;external 'usb7kC.dll';
我在
procedure TForm1.FormCreate(Sender: TObject);
var
p:TZT;
begin
P.lIndex:=0;
OpenUSB7kC(@P);
end;
可以成功
但在
procedure TForm1.tmr1Timer(Sender: TObject);
var
p1:TZT;
begin
p1.lIndex:=0;
p1.lCode:=1;
USB7310AI16(@p1);
end;
出错access violation at 0x00000016b
我是新手,我该如何采集数据,我如果定义一个整型变量,怎样把采集到的数据赋值给它,说明书中:使用支持指针的计算机语言,可不用GetAddress函数,直接将存放数据的地址,赋给plData是什么意思,我该如何编写语句,谢谢大家