在Delphi Berlin 10.1上使用CPort Lib接收数据包时的拆分响应

时间:2018-05-14 21:33:18

标签: delphi serial-port usb packet delphi-10.1-berlin

我有一个设备连接到USB端口,当我发送请求时,我收到了响应。但我收到了一个分裂的回应,看起来CPort并没有等待整个回应。

Sent: getNodeStatus,03
(HEX) > A5 FE 03 10 00 10 19 17 00 1A 17 16 17 10 19 00 19 19 19 00 10 19 10 10 10 00 19 00 10 10 00 19      
(HEX) > 17 19 00 00 10 10 10 10 18 10 10 19 19 10 10 00 00 00 00 00 00 6D 

我想将两行合并为一个具有相同响应的行:

Sent: getNodeStatus,03
(HEX) > A5 FE 03 10 00 10 19 17 00 1A 17 16 17 10 19 00 19 19 19 00 10 19 10 10 10 00 19 00 10 10 00 19 17 19 00 00 10 10 10 10 18 10 10 19 19 10 10 00 00 00 00 00 00 6D 

我不知道如何实现这一点,这是OnPacket代码:

procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: string);
var
  I:Integer;
  t:byte;
  str2:String;
begin
    for I:=1 to length(str) do
      begin
        str2 := str2+IntToHex(Byte(str[I]),2)+' ';
      end;
    memo1.lines.add('(HEX) > '+str2);
    memo1.lines.add(' ');
end;

要记住的一件重要事情是,无法使用StartString & StotString的{​​{1}}属性,因为它随时都会发生变化。还有其他想法吗?

额外信息:

当我使用另一个给我最短响应的请求时,它不会被分裂

ComDataPacket

1 个答案:

答案 0 :(得分:0)

  

CPort并没有等待整个回复。

这是任何串行端口的预期行为,包括USB端口。您必须手动合并数据。

请注意,通过USB传输数据很可能已经拆分 - CPort通常非常接近USB事务。

如果您的协议不允许确定消息结束,则必须使用超时,例如。