Multifunction DAQ

cancel
Showing results for 
Search instead for 
Did you mean: 

Ploblems in changing waveform on the fly....

I'm using PCI-MIO-16-4.
Using double buffering mode,I'm generating 2 waveforms and at the sametime aquire 2 analogsignals.

There is no ploblem when the outgoing waveform in not changed, but, when I changed the outgoing buffer with new one, the first waveform afther the change was not generated correctly(only partially). From the second waveform after the change the waveform generated correctly..
and I don't understand that when I set the sampling rate to 5 kHz the waveform generation works correctly....if I use more faster or slower sampling rate it always generates above ploblem.

here is the code that i wrote( i'm using delphi).....

if form3.IPD.value<=0 then begin// ///////////////////////if continuous.............
status:=WFM_DB_config(device,2,@DAchans, 1,0,0);
Status:=WFM_Group_Setup(device, 2,@DAchans,1);
status:=Select_signal(Device, ND_RTSI_1,ND_IN_CONVERT,ND_HIGH_TO_LOW);
status:=select_signal(device, ND_out_update, Nd_rtsi_1, Nd_high_to_low);
status:=WFM_Load(device, 2, @DAchans, @DAbufferSbin, 2*pulsecount,form3.np.value,0);
status:=DAQ_rate(rate,0,@timebase,@sampleint);
status:=daq_DB_config(device,1);
status:=Scan_setup(device,1,@chans,@gains);
Status:=WFM_Group_Control(device, 1,1);
status:=Scan_start(device,@ADbuffer,2*pulsecount,timebase,sampleint,timebase,0);
loofcount:=0;
gloofcount:=0;
try
if form3.NP.value>0 then begin////////////////////////////////////////////NP.value>0
while (loofcount if pulseout then begin
status:=WFM_DB_Halfready(device,2,@DAchans,@halfready);
if (halfready=1) and (status=0) then begin
status:=WFM_DB_Transfer(device,2,@DAchans,@DABufferSbin,pulsecount);
end;
end;
Status:=DAQ_DB_HalfReady(Device,@HalfReady,@DAQstopped);
if (halfready=1) and (status=0) then begin
status:=daq_DB_transfer(device,@halfADbuffer,@pulsecount,@daqstopped);
if not pause then begin
// form1.savebinarydata;
// status:=scan_Demux(@halfadbuffer,pulse2count,2,0);
if not drawing then
form2.draw;
inc(loofcount);
inc(gloofcount);
form3.select1pulse;
end;
if (stop=true) or (loofcount>=form3.NP.value)then begin
Stop:=true;
assignfile(f,datafilename);
reset(f);
try
seek(f,28);
tonumofPper1chan4:=((filesize(f)-300) / 2)/numofchans;
blockwrite(f,tonumofPper1chan4,4);
finally
closefile(f);
end;
form2.enablecontrol;
break;
end; // stop
end; // halfready
end; // while
end
0 Kudos
Message 1 of 2
(2,272 Views)
Mio,
I'm sorry to say that I had the same problem as well and it is not solvable! When
ever you change the waveform output of these cards, both outputs are restarted. I
tried to run a waveform continousely and to use the other channel as a analog (dc)
output to control a temperature in my system. I had to download both things each time
I changed the temperature....
Maybe other cards would do much better.

Urs B�gli

MIO schrieb:

> I'm using PCI-MIO-16-4.
> Using double buffering mode,I'm generating 2 waveforms and at the
> sametime aquire 2 analogsignals.
>
> There is no ploblem when the outgoing waveform in not changed, but,
> when I changed the outgoing buffer with new one, the first waveform
> afther the change was not generated correctly(only partially). From
> the second waveform after the change the waveform generated
> correctly..
> and I don't understand that when I set the sampling rate to 5 kHz the
> waveform generation works correctly....if I use more faster or slower
> sampling rate it always generates above ploblem.
>
> here is the code that i wrote( i'm using delphi).....
>
> if form3.IPD.value<=0 then begin// ///////////////////////if
> continuous.............
> status:=WFM_DB_config(device,2,@DAchans, 1,0,0);
> Status:=WFM_Group_Setup(device, 2,@DAchans,1);
> status:=Select_signal(Device,
> ND_RTSI_1,ND_IN_CONVERT,ND_HIGH_TO_LOW);
> status:=select_signal(device, ND_out_update, Nd_rtsi_1,
> Nd_high_to_low);
> status:=WFM_Load(device, 2, @DAchans, @DAbufferSbin,
> 2*pulsecount,form3.np.value,0);
> status:=DAQ_rate(rate,0,@timebase,@sampleint);
> status:=daq_DB_config(device,1);
> status:=Scan_setup(device,1,@chans,@gains);
> Status:=WFM_Group_Control(device, 1,1);
> status:=Scan_start(device,@ADbuffer,2*pulsecount,timebase,sampleint,timebase,0);
> loofcount:=0;
> gloofcount:=0;
> try
> if form3.NP.value>0 then
> begin////////////////////////////////////////////NP.value>0
> while (loofcount> if pulseout then begin
> status:=WFM_DB_Halfready(device,2,@DAchans,@halfready);
> if (halfready=1) and (status=0) then begin
> status:=WFM_DB_Transfer(device,2,@DAchans,@DABufferSbin,pulsecount);
> end;
> end;
> Status:=DAQ_DB_HalfReady(Device,@HalfReady,@DAQstopped);
> if (halfready=1) and (status=0) then begin
> status:=daq_DB_transfer(device,@halfADbuffer,@pulsecount,@daqstopped);
> if not pause then begin
> // form1.savebinarydata;
> // status:=scan_Demux(@halfadbuffer,pulse2count,2,0);
> if not drawing then
> form2.draw;
> inc(loofcount);
> inc(gloofcount);
> form3.select1pulse;
> end;
> if (stop=true) or (loofcount>=form3.NP.value)then begin
> Stop:=true;
> assignfile(f,datafilename);
> reset(f);
> try
> seek(f,28);
> tonumofPper1chan4:=((filesize(f)-300) / 2)/numofchans;
> blockwrite(f,tonumofPper1chan4,4);
> finally
> closefile(f);
> end;
> form2.enablecontrol;
> break;
> end; // stop
> end; // halfready
> end; // while
> end
0 Kudos
Message 2 of 2
(2,272 Views)