我正在研究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的值我总是有空字符串,那我做错了什么?
答案 0 :(得分:0)
尝试使用ComPort.Read并获取readed数据缓冲区,然后根据需要解析它。