程式出錯的最主要的代碼如下:
procedure TForm1.Button1Click(Sender: TObject);
var
TaskHandle : Longint;
intErrCode : Integer;
begin
//ErrorNULLPtr = $FFFCF064;
//ErrorInvalidDeviceID = $FFFCF1E4; //-200220
//ErrorInvalidTask = $FFFCF268; //-200088
//c: taskHandle 0x6deb1cc0 void *
//delphi: taskHandle 0x6deb1cc0
//c: &taskHandle 0x0012ff54 void * *
//delphi: @TaskHandle 12f58c
intErrCode := DAQmxCreateTask('' , @TaskHandle);
memo1.Lines.Add('ErrCode: ' + Format('%x' , [intErrCode]));
//c:taskhandle = 0x6deb1cc0
//delphi:taskhandle $6deb1cc0 //1844124864
//c:DAQmx_Val_Cfg_Default -1 ffffffff// Default
//delphi:DAQmx_Val_Cfg_Default = $FFFFFFFF
//c:DAQmx_Val_Volts 10348 286c// Volts
//delphi:DAQmx_Val_VoltageUnits1_Volts = $0000286C
intErrCode := DAQmxCreateAIVoltageChan(taskHandle , 'Dev1/ai0' , '' ,
DAQmx_Val_Cfg_Default , -10.0 , 10.0 , DAQmx_Val_VoltageUnits1_Volts , '');
memo1.Lines.Add('ErrCode: ' + Format('%x' , [intErrCode]));
end;
end.
在運行DAQmxCreateTask時,intErrCode回傳0,表示正常;
在運行到呼叫函式DAQmxCreateAIVoltageChan時,intErrCode回傳FFFCF268,即:-200088,我查了一下,是報ErrorInvalidTask錯誤,原型函式的宣告(XNIDAQmx.pas)宣告如下:
unit XNIDAQmx;
interface
uses
Windows , ActiveX , Classes , Graphics , StdVCL , Variants , SysUtils , XNIDAQmxCAPI_TLB;
//typedef void* TaskHandle;
//int32 __CFUNC DAQmxCreateTask (const char taskName[], TaskHandle *taskHandle);
function DAQmxCreateTask(taskName : PChar; taskHandle : PLongint) : Longint; stdcall ; external 'nicaiu.dll';
//int32 __CFUNC DAQmxCreateAIVoltageChan
//(TaskHandle taskHandle, const char physicalChannel[], const char nameToAssignToChannel[],
//int32 terminalConfig, float64 minVal, float64 maxVal,
//int32 units, const char customScaleName[]);
//DAQmxCreateAIVoltageChan(taskHandle,"WLS-13BC5DC/ai0","",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL))
function DAQmxCreateAIVoltageChan(taskHandle : Longint ; physicalChannel : PChar;
nameToAssignToChannel : PChar; terminalConfig : DAQmxInputTermCfg;
minVal : Double ; maxVal:Double ; units : DAQmxVoltageUnits2 ; customScaleName : PChar) : Longint ;
stdcall ; external 'nicaiu.dll';
function DAQmxCfgSampClkTiming(taskHandle : Longint ; source : PChar ; rate : Double;
activeEdge:DAQmxEdge; sampleMode:DAQmxAcquisitionType; sampsPerChan:Longint):Longint; stdcall; external 'nicaiu.dll';
function DAQmxStartTask(taskHandle:Longint):Longint; stdcall; external 'nicaiu.dll';
function DAQmxReadAnalogF64(taskHandle : Longint; numSampsPerChan:Longint; timeout:Double;
fillMode:DAQmxFillMode; readArray:array of double; arraySizeInSamps:Longint;
sampsPerChanRead:Integer; reserved:Pointer):Longint; stdcall;external 'nicaiu.dll';
function DAQmxGetErrorString(errorCode : Longint ; errorString : PChar ;
bufferSize : Longint) : Longint ; stdcall ; external 'nicaiu.dll';
function DAQmxGetExtendedErrorInfo(errorString : PChar ; bufferSize : Longint) : Longint ;
stdcall ; external 'nicaiu.dll';
除錯了好幾天了,就是找不到原因,拜托請幫忙查看一下錯誤原因。多謝啦。
uj5u.com熱心網友回復:
你應該是沒有安裝采集卡吧,看下你的設備是否Dev1/ai0 如果這個出錯就會報這個創建錯誤的。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/130906.html
