delphi - 在 Delphi Berlin 10.1 上使用 CPort Lib 接收数据包时的拆分响应
问题描述
我有一个连接到 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
属性,ComDataPacket
因为它随时更改。还有什么想法吗?
额外信息:
当我使用另一个给我最短响应的请求时,它不会分裂
Sent: getId,03
(HEX) > A5 81 52 CS
解决方案
CPort 不等待整个响应。
这是任何串行端口(包括 USB 端口)上的预期行为。您将不得不手动合并数据。
请注意,当通过 USB 传输数据时,数据很可能已经拆分 - CPort 通常非常紧密地遵循 USB 事务。
如果您的协议不允许确定消息结束,例如,您将不得不使用超时。
推荐阅读
- jquery - 如何使用 jQuery 使文本框出现
- javascript - “不是函数”jQuery
- vue.js - 如何使用 vue-cli-service build 命令复制资产?
- javascript - 如何组合 2 个 javascript/jquery 函数
- python - 如何更改以 loc 为条件的 pandas 数据框中的最后一个值?
- python - 通过多个两列创建新的numpy nd-array
- asp.net-core - Azure Pipelines:迁移到 .NET Core 3.1 后,Dotnet 发布失败,退出代码为 1
- docker - 升级到 ChromeDriver v80 和 Chrome v80 后,Chrome 无法在使用 Selenium 的 docker 容器中启动
- image - 如何有效地将图像作为 pubspec.yaml 中的资产处理?
- c# - Asp.Net - 使用 IHostedService 的计划任务