下面是我的代码:首先是一个函数过程,在这里创建回调函数DAQmxCreateTask('',@taskPHandle);
DAQmxCreateDIChan(taskPHandle,'Dev1/port0/line0:1','',DAQmx_Val_ChanPerLine);
DAQmxCfgChangeDetectionTiming(taskPHandle,'Dev1/port0/line0:1','Dev1/port0/line0:1',DAQmx_Val_AcquisitionType_ContSamps ,1)
DAQmxRegisterSignalEvent(taskpHandle,DAQmx_Val_Signal2_ChangeDetectionEvent,0,Integer(@ChangeDetectionCallback),nil);
DAQmxStartTask(taskPHandle);下面是回调函数过程 function ChangeDetectionCallback(TaskPHandle:Integer;singleID:Integer;Callback:Pointer):Integer ;stdcall;
var
SampleStepID:DWORD;
begin
frm_Main.mmo_alarmInfo.Lines.Add(DateTimeToStr(Now ));
if (Mark_SampleStroke =0) then
begin
TaskRunning :=True ;
hSampleStepThread:=CreateThread(nil,0,@sampleStep,nil,0,SampleStepID); end;
if (Mark_SampleStroke =2) then
begin
MaxStroke :=Num_Pluse;
frm_Main.mmo_alarmInfo.Lines.Add(FloatToStr(MaxStroke)) ;
frm_Main.pnl_Sumlen.Caption:=Format('%.3f',[(Num_Pluse*4/1000)+strtofloatdef(ParamIniFile.ReadString(TestModelStr,'¾àÀëÐÞÕýÖµ','0.0'),0.0)]);
frm_Main.TestResult[4]:=frm_Main.pnl_Sumlen.Caption;
if (StrToFloat(frm_Main.pnl_Sumlen.Caption)>=RoundTo(strtofloat(ParamIniFile.ReadString(TestModelStr,'´¥Í·×ÜÐгÌÏÂÏÞ','0.0')),-2)) and
(StrToFloat(frm_Main.pnl_Sumlen.Caption)<=RoundTo(strtofloat(ParamIniFile.ReadString(TestModelStr,'´¥Í·×ÜÐгÌÉÏÏÞ','0.0')),-2)) then
begin
frm_Main.TestResult[5]:='Pass';
frm_Main.pnl_Sumlen.Font.Color:=clBlue;
end
else
begin
frm_Main.TestResult[5]:='Fail';
frm_Main.pnl_Sumlen.Font.Color:=clRed;
end;
end;
if (Mark_SampleStroke =0) then Mark_SampleStroke :=2;
end;在程序的最后,释放taskphandle这个句柄,如下: if taskPHandle <>0 then
begin
DAQmxStopTask(taskPHandle);
DAQmxClearTask(taskPHandle) ;
taskPHandle :=0;
end;现在不知道哪里发生错误了,只能调用一次,今天晚上搞不定,明天完蛋了
DAQmxCreateDIChan(taskPHandle,'Dev1/port0/line0:1','',DAQmx_Val_ChanPerLine);
DAQmxCfgChangeDetectionTiming(taskPHandle,'Dev1/port0/line0:1','Dev1/port0/line0:1',DAQmx_Val_AcquisitionType_ContSamps ,1)
DAQmxRegisterSignalEvent(taskpHandle,DAQmx_Val_Signal2_ChangeDetectionEvent,0,Integer(@ChangeDetectionCallback),nil);
DAQmxStartTask(taskPHandle);下面是回调函数过程 function ChangeDetectionCallback(TaskPHandle:Integer;singleID:Integer;Callback:Pointer):Integer ;stdcall;
var
SampleStepID:DWORD;
begin
frm_Main.mmo_alarmInfo.Lines.Add(DateTimeToStr(Now ));
if (Mark_SampleStroke =0) then
begin
TaskRunning :=True ;
hSampleStepThread:=CreateThread(nil,0,@sampleStep,nil,0,SampleStepID); end;
if (Mark_SampleStroke =2) then
begin
MaxStroke :=Num_Pluse;
frm_Main.mmo_alarmInfo.Lines.Add(FloatToStr(MaxStroke)) ;
frm_Main.pnl_Sumlen.Caption:=Format('%.3f',[(Num_Pluse*4/1000)+strtofloatdef(ParamIniFile.ReadString(TestModelStr,'¾àÀëÐÞÕýÖµ','0.0'),0.0)]);
frm_Main.TestResult[4]:=frm_Main.pnl_Sumlen.Caption;
if (StrToFloat(frm_Main.pnl_Sumlen.Caption)>=RoundTo(strtofloat(ParamIniFile.ReadString(TestModelStr,'´¥Í·×ÜÐгÌÏÂÏÞ','0.0')),-2)) and
(StrToFloat(frm_Main.pnl_Sumlen.Caption)<=RoundTo(strtofloat(ParamIniFile.ReadString(TestModelStr,'´¥Í·×ÜÐгÌÉÏÏÞ','0.0')),-2)) then
begin
frm_Main.TestResult[5]:='Pass';
frm_Main.pnl_Sumlen.Font.Color:=clBlue;
end
else
begin
frm_Main.TestResult[5]:='Fail';
frm_Main.pnl_Sumlen.Font.Color:=clRed;
end;
end;
if (Mark_SampleStroke =0) then Mark_SampleStroke :=2;
end;在程序的最后,释放taskphandle这个句柄,如下: if taskPHandle <>0 then
begin
DAQmxStopTask(taskPHandle);
DAQmxClearTask(taskPHandle) ;
taskPHandle :=0;
end;现在不知道哪里发生错误了,只能调用一次,今天晚上搞不定,明天完蛋了
function DAQmxRegisterSignalEvent(taskHandle:Longint; signalID:DAQmxSignal2; options:Longint; callbackFunction:Longint; callbackData:Pointer):Longint; stdcall;