木
木工
Unregistered / Unconfirmed
GUEST, unregistred user!
是关于电力调度的通信问题。
调度中心与变电站通过modem,由微波传输。
现在我是用定时器每200ms轮询串口,按读取数据、处理数据、发送数据三个步骤顺序进行,没有按一般的人就会将接受数据单独写在一个线程里。现在遇到一个问题就是,串口缓存中的数据帧会分成两次才能读完,不知怎么搞得?我也是第一次用delphi做串口通信,多线程程序,所以有很多东西不太明白,希望得到指点。
我用的MSComm控件,读取函数如下:
Procedure ReadFromCom;
var ReceiveTotalLen:integer;
InputData_103:TInputData_103;
InBuffer:Variant;
i:integer;
TempLen:integer;
begin
TempLen:=0;
while SubCom.InBufferCount>0 do
begin
InBuffer:=SubCom.Input;
ReceiveTotalLen:=VarArrayHighBound(InBuffer,1)+1;
for i:=0 to ReceiveTotalLen-1 do
begin
InputData_103:=InBuffer;
end;
TempLen:=TempLen+ReceiveTotalLen;
Sleep(20);
end;
ReceiveTotalLen:=TempLen;
SetLength(Data_103FromCom,ReceiveTotalLen);
for i:=0 to ReceiveTotalLen-1 do
begin
Data_103FromCom:=InputData_103;
end;
end;
end;
调度中心与变电站通过modem,由微波传输。
现在我是用定时器每200ms轮询串口,按读取数据、处理数据、发送数据三个步骤顺序进行,没有按一般的人就会将接受数据单独写在一个线程里。现在遇到一个问题就是,串口缓存中的数据帧会分成两次才能读完,不知怎么搞得?我也是第一次用delphi做串口通信,多线程程序,所以有很多东西不太明白,希望得到指点。
我用的MSComm控件,读取函数如下:
Procedure ReadFromCom;
var ReceiveTotalLen:integer;
InputData_103:TInputData_103;
InBuffer:Variant;
i:integer;
TempLen:integer;
begin
TempLen:=0;
while SubCom.InBufferCount>0 do
begin
InBuffer:=SubCom.Input;
ReceiveTotalLen:=VarArrayHighBound(InBuffer,1)+1;
for i:=0 to ReceiveTotalLen-1 do
begin
InputData_103:=InBuffer;
end;
TempLen:=TempLen+ReceiveTotalLen;
Sleep(20);
end;
ReceiveTotalLen:=TempLen;
SetLength(Data_103FromCom,ReceiveTotalLen);
for i:=0 to ReceiveTotalLen-1 do
begin
Data_103FromCom:=InputData_103;
end;
end;
end;