各位大侠,现在我正在做一个关于数据采集的上位机,在数据保存时遇到一些问题,希望得到你的热心帮助,在此先行谢过!
我要完成对USB口的数据采集保存以曲线显示,现在完成了采集以及曲线显示,可在数据保存时出了些问题,我把部分程序写下,希望大家帮我看看出出主意。
procedure TForm1.FormCreate(Sender: TObject);beginDevIoHandle :=
CreateFile('\\.\M8usbdrvlv0',generic_read or generic_write,1,nil,3,0,0);
start:=0;
end;
这里与驱动通信进行数据采集,主要是想在Timer中完成对数据的连续读入,当读到30000个数据后写入txt文档procedure TForm1.Timer1Timer(Sender: TObject);
var
rbyte:DWORD ;
err:DWORD ;
sut:BOOL ;
x:Integer ;
stx :Integer ;
readData: ARRAY[0..4096] of Byte ;
mCount: Integer;
begin //1
readData[0]:=0;
mCount:=0;
sut:=ReadFile (DevIoHandle,readData,256, rbyte,NIL) ;
FileHandle := FileCreate('C:\data.txt');//创建文档
if sut=False then
begin
err:= GetLastError ;
end ;
if rbyte>0 then
begin
for x:=0 to ((rbyte div 4)-1) do
begin
这里是数据,我想把数据(主要有两个,分别是readData[stx]+readData[stx+1]*256和readData[stx+2]+readData[stx+3]*256 )想把这两个数据不停保存,因为数据一直在更新,当保存30000个后写入data.txt
stx:=4*x;
iPlot1.Channel[0].AddXY(start, readData[stx]+readData[stx+1]*256);
iPlot1.Channel[1].AddXY(start, readData[stx+2]+readData[stx+3]*256);
s1:=Format('%.6d', [readData[stx]+readData[stx+1]*256]);
s2:=Format('%.6d', [readData[stx+2]+readData[stx+3]*256]);
s3:=Format('%.6d', [start]);
sdata:=sdata+s1+' '+s2+' '+s3+#13#10;
start:=start+1 ;
end;
end if start>30000 then
begin
FileWrite(FileHandle,sdata[1],Length(sdata));
start:=0;
sdata:='';//可我发现这样写程序时,data文档中并没有数据,希望大侠指正
for x:=0 to 1 do
begin//6
iPlot1.Channel[x].Clear ();end; end; end;
我要完成对USB口的数据采集保存以曲线显示,现在完成了采集以及曲线显示,可在数据保存时出了些问题,我把部分程序写下,希望大家帮我看看出出主意。
procedure TForm1.FormCreate(Sender: TObject);beginDevIoHandle :=
CreateFile('\\.\M8usbdrvlv0',generic_read or generic_write,1,nil,3,0,0);
start:=0;
end;
这里与驱动通信进行数据采集,主要是想在Timer中完成对数据的连续读入,当读到30000个数据后写入txt文档procedure TForm1.Timer1Timer(Sender: TObject);
var
rbyte:DWORD ;
err:DWORD ;
sut:BOOL ;
x:Integer ;
stx :Integer ;
readData: ARRAY[0..4096] of Byte ;
mCount: Integer;
begin //1
readData[0]:=0;
mCount:=0;
sut:=ReadFile (DevIoHandle,readData,256, rbyte,NIL) ;
FileHandle := FileCreate('C:\data.txt');//创建文档
if sut=False then
begin
err:= GetLastError ;
end ;
if rbyte>0 then
begin
for x:=0 to ((rbyte div 4)-1) do
begin
这里是数据,我想把数据(主要有两个,分别是readData[stx]+readData[stx+1]*256和readData[stx+2]+readData[stx+3]*256 )想把这两个数据不停保存,因为数据一直在更新,当保存30000个后写入data.txt
stx:=4*x;
iPlot1.Channel[0].AddXY(start, readData[stx]+readData[stx+1]*256);
iPlot1.Channel[1].AddXY(start, readData[stx+2]+readData[stx+3]*256);
s1:=Format('%.6d', [readData[stx]+readData[stx+1]*256]);
s2:=Format('%.6d', [readData[stx+2]+readData[stx+3]*256]);
s3:=Format('%.6d', [start]);
sdata:=sdata+s1+' '+s2+' '+s3+#13#10;
start:=start+1 ;
end;
end if start>30000 then
begin
FileWrite(FileHandle,sdata[1],Length(sdata));
start:=0;
sdata:='';//可我发现这样写程序时,data文档中并没有数据,希望大侠指正
for x:=0 to 1 do
begin//6
iPlot1.Channel[x].Clear ();end; end; end;
fs : TFileStream;
begin
fs := TFileStream.Create('文件路径', fmCreate);
end;//写文件时
fs.Write(data, dataSize);