W
wl_5545831
Unregistered / Unconfirmed
GUEST, unregistred user!
我编写了一个PLC的数据采集软件,每隔30ms从plc中读取512个字节,并以文件流的方式写入到文件中。这512个字节中头7个字节表示Year、Month、Day、Hour、Min、Sec、Msec,其中Msec仅表示0~99(去掉了个位,因为字节仅仅是0~255)。但是当我读取这个文件的时候发现文件中每条记录的时间间隔不是30ms,这是通过判断每条记录的Msec的间隔是否为30得出的。我想是不是Timer在30ms中出现了延迟导致的。然后我换上了JvThreadTimer,但是还是问题依旧,那位朋友能给出解决办法?下面是一个timer的小例子:
procedure TForm1.Button2Click(Sender: TObject);
var
Year,Month,Day,Hour,Min,Sec,Msec:word;
Tof:TFileStream;
buf:array[1..7] of byte;
begin
decodedate(now,Year,Month,Day);
DecodeTime(now,Hour,Min,Sec,Msec);
Year:=Year-2000;
buf[1]:=Year;
buf[2]:=Month;
buf[3]:=Day;
buf[4]:=Hour;
buf[5]:=Min;
buf[6]:=Sec;
buf[7]:=Msec;
if FileExists('test.dat') = true then
Tof:=TFileStream.Create('test.dat',fmOpenReadWrite)
else
Tof:=TFileStream.Create('test.dat',fmCreate);
Tof.Seek(0,soFromEnd);
Tof.WriteBuffer(Buf,7);
Tof.Free;
end;
这样测试以后结果就不准了。
procedure TForm1.Button2Click(Sender: TObject);
var
Year,Month,Day,Hour,Min,Sec,Msec:word;
Tof:TFileStream;
buf:array[1..7] of byte;
begin
decodedate(now,Year,Month,Day);
DecodeTime(now,Hour,Min,Sec,Msec);
Year:=Year-2000;
buf[1]:=Year;
buf[2]:=Month;
buf[3]:=Day;
buf[4]:=Hour;
buf[5]:=Min;
buf[6]:=Sec;
buf[7]:=Msec;
if FileExists('test.dat') = true then
Tof:=TFileStream.Create('test.dat',fmOpenReadWrite)
else
Tof:=TFileStream.Create('test.dat',fmCreate);
Tof.Seek(0,soFromEnd);
Tof.WriteBuffer(Buf,7);
Tof.Free;
end;
这样测试以后结果就不准了。