多谢maxim88和ayu310的建议
首先对于ayu310 的建议,我也想帧长固定,但是下位机不是我做,所以也没有办法
还有就是下面是我写的程序
可以接受但发现处理不了,我是综合了wjqhyg和maxim88大哥的意见,下位机每一帧的间隔是1s发上来,我程序是按一帧一帧的处理,其中要说明的就是:
对于spcomm控件里的readintervaltimeout和readtotaltimeout我不大明白什么意思,但我设置为100和3(发现3和5的效果没什么不同,但是10的话就收不到数据了)请各位大哥帮我指正,谢谢!!
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
buffer_ptr: pChar;
i: Integer;
j: Integer;
f,str_1,b,x,m,z:string;
e,a,h,c,l: integer;
begin
j:=0;
buffer_ptr:=Buffer;
ReceiveCount:=ReceiveCount+1;
if ReceiveCount=1000 then
ReceiveCount:=0;
Edit2.Text:=IntToStr(ReceiveCount);
Str_1:='';
if BufferLength>=1 then
begin
while j<=BufferLength-1 do
begin
i:=Integer((Buffer_ptr+j)^);
Str_1:=Str_1+IntTohex(i,2);
j:=j+1;
end;
memo1.Text:=Str_1;
a:=pos('1002',x);
delete(x,1,a+3);
memo2.text:=x;
x:=memo2.Text;
while not pos('1010',x)=0 do
begin
e:=pos('1010',x);
f:=copy(x,a+4,2);
edit1.text:=f;
if f='02' then
begin
m:=m+copy(x,1,e-1)+'1002';
delete(x,1,e+5);
end
else if f='03' then
begin
m:=m+copy(x,1,e-1)+'1003';
delete(x,1,e+5);
end;
end;
h:=pos('1003',x);
z:=copy(x,1,h-1) ;
memo3.Text:=m+z;
end;
end;