我已经下载并安装了comport库.我有一个模拟器通过串口RS232发送数据到Selphi程序.这是以下代码段.
procedure TMainForm.ComPortRxChar(Sender: TObject; Count: Integer);
begin
ComPort.ReadStr(CPort.Str, Count);
Memo.Text := Memo.Text + CPort.Str;
end;
Run Code Online (Sandbox Code Playgroud)
至于CPort库部分,我补充说:
var
Str: String;
here is the problem.
Run Code Online (Sandbox Code Playgroud)
正在经历的数据示例大致相同
$HEHDT,288.45,T*1D
$HEHDT,288.46,T*18
$HEHDT,288.47,T*1A
Run Code Online (Sandbox Code Playgroud)
等等.每行每秒发送一次.因此,使用上面的代码,备忘录将显示所有这些数据.
但是,如果我将代码更改为:
procedure TMainForm.ComPortRxChar(Sender: TObject; Count: Integer);
begin
ComPort.ReadStr(CPort.Str, Count);
Memo.Text := Memo.Text + CPort.Str + 'haha';
end;
Run Code Online (Sandbox Code Playgroud)
这是备忘录上的内容:
$HEHDT,2haha88.45,T*haha1Dhaha
$HEHDT,2haha88.46,T*haha18haha
$HEHDT,2haha88.47,T*haha1Ahaha
Run Code Online (Sandbox Code Playgroud)
8个ASCII字符后出现"haha".这意味着在CPort.pas库中,在异步/同步部分下,只有8ASCII字符max被赋给变量Str?
如何更改代码,使整个数据字符串(无论大小)分配给变量Str而不是8字节.
更新**我意识到这部分CPort库包含以下代码.任何人都可以启发我如何编辑代码?或者它是否是我采购的正确块.谢谢!
// split buffer in packets
procedure TComDataPacket.HandleBuffer;
procedure DiscardPacketToPos(Pos: Integer);
var
Str: string;
begin
FInPacket := True;
if Pos > 1 then
begin
Str := Copy(Buffer, 1, Pos …Run Code Online (Sandbox Code Playgroud)