TDataPacket和TComPort等到接收数据包

时间:2013-05-30 16:09:19

标签: windows delphi object delphi-xe2 tcomport

我正在研究ecr软件。

该软件与具有com端口的硬件进行通信。

我在delphi中编程,我正在使用TComPort和TDataPacket组件。

我有一个问题(我想,或者我不明白tdatapacket的工作原理)。

为了打印收据,我必须向协议规则格式化一些字符串发送给硬件。

打印协议如下:

我:ENQ

HW:ACK

Me:STX + string + checksum(string)+ ETX

HW:ACK

我:STX +字符串+校验和(字符串)+ ETX(结束字符串)

HW:确认并打印收据

我写了这段代码:

procedure TForm1.Button4Click(Sender: TObject);
var
  snd, ckSum: String;
  checkSum : Byte;
begin
  if ack = #$06 then
  begin
    snd := '5/1/0.00//1.000000/SALDO/';
    checkSum := calcCheckSum(snd);
    ckSum := formatfloat('00',checkSum);
    ComPort.WriteStr(#$02 + snd + ckSum + #$03);
  end;
end;

并在数据包上发送数据包事件:

procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: string);
begin
  ack := Str;
end;

但是如果我尝试打印ack的值我总是有空字符串,那我做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试使用ComPort.Read并获取readed数据缓冲区,然后根据需要解析它。