我有一个设备连接到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
答案 0 :(得分:0)
CPort并没有等待整个回复。
这是任何串行端口的预期行为,包括USB端口。您必须手动合并数据。
请注意,通过USB传输数据很可能已经拆分 - CPort通常非常接近USB事务。
如果您的协议不允许确定消息结束,则必须使用超时,例如。