用MSComm控件做通讯,丢失数据问题 ( 积分: 200 )

  • 主题发起人 主题发起人 ykxiong1
  • 开始时间 开始时间
var
i,InputLen:Integer;
tmpvar:Variant;
tmpInt:Integer;
begin
InputLen:=MSComm.InBufferCount;
tmpvar:=MSComm.Input;
for i:= 0 to InputLen-1 do
begin
tmpInt:=tmpvar;
end;
end;
 
to xusong168
我的代码是如下,可有问题

var
vTmp: variant;
ovTmp: oleVariant;
i: integer;
iReceived: integer;
bTmp: byte;
Buff:array[0..5000] of byte;
begin
case MSRequest.CommEvent of
comEvReceive: //2 收到Rthreshold个字符。该事件将持续产生
begin //直到用input属性从接收缓冲区中删除数据
iReceived := MSRequest.InputLen; //mscomm1.InBufferCount;//
ovTmp := MSRequest.Input;
vTmp := VarArraycreate([0, iReceived], varbyte);
vTmp := ovTmp;
for i := 0 to iReceived - 1 do //接收返回信息,存入buff中
begin
bTmp := vTmp;
buff := btmp;
end;
end;
end;
end;
 
你的太复杂了
COMM这个事件一次不一定能取到所有的接收数据
这和机器速度有关,同样收到100字节,快速的机器可以调用20次COMM
慢速的也就3次。
 
这个没关系的,其实我每次只取十几个数据,和这些没影响的
 
要注意控件属性的设置
前一段时间遇到过这样的问题
好像是硬件流量控制什么的 具体忘掉了
你可以cnpack中的cnRs232来实现
 
to 杯中水
麻烦能不能帮忙找下是什么属性,我试了好多没试出来,我会试一下cnpack的,多谢!
 
你用了XON/XOFF协议吧
 
to SupermanTm
是XON/XOFF协议,有什么问题吗?
 
问题已解决,谢谢SupermanTm,谢谢大家
 
祝贺你!谢谢你!
 
后退
顶部