关于串口的发送、接受数据问题(100分)

  • 主题发起人 主题发起人 木工
  • 开始时间 开始时间

木工

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;
 
开始一两次接受还能正常,后来就要分几次才能接受了,单步调试的时候,两个应用程序在断点处相互发送、接受,就完全正确,是不是用Timer控制不好
 
顶!!我是单机上调试的,改动Timer的间隔时间结果有所不同
 
用线程来操作就没有什么问题了,我现在和你做相类似的项目。
 
这是使用控件的问题,mscomm控件的响应时间达不到要求,用api就没有问题了
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2158041
串口通讯控件开发的一点问题
 
1)把轮询周期加大
2)像“一般的人”那样去做
 
我也有过这样的问题,用线程代替TIMER就不会有问题了
 
帮顶。。。。。。。。。。。。。。。。。。。。。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
893
SUNSTONE的Delphi笔记
S
S
回复
0
查看
871
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
899
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部