Разделенный ответ при получении пакета данных с CPort Lib на Delphi Berlin 10.1 - PullRequest
0 голосов
/ 15 мая 2018

У меня есть устройство, подключенное к порту 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

1 Ответ

0 голосов
/ 15 мая 2018

CPort не ожидает полного ответа.

Это ожидаемое поведение на любом последовательном порту, включая USB.Вам придется вручную объединять данные.

Обратите внимание, что данные, скорее всего, уже разделены при передаче через USB - CPort обычно очень близко следует за транзакциями USB.

Если ваш протокол не позволяет определить конец сообщения, вам, например, придется работать с таймаутом.

...