使用Dejan TComport Delphi组件从串口读取二进制数据

对这个问题抱歉,但是我对delphi有一点小菜。 我正在使用Dejan TComport组件从串口获取数据。 连接到端口的一台设备发送大约100个字节的二进制数据到串口。 我想要做的是提取字节数值为一个数组,以便我可以对它们进行计算。

TComport有一个方法Read(buffer,Count),它从input缓冲区读取DATA。

function Read(var Buffer; Count: Integer): Integer; 

该帮助指出,Buffervariables必须足够大以容纳Count字节,但不提供如何使用此函数的任何示例。 我可以看到Countvariables保存接收到的字节数,但是我找不到访问Buffer中字节的方法。

TComport还有一个方法Readstr,它从input缓冲区读取数据到一个STRINGvariables中。

 function ReadStr(var Str: String; Count: Integer): Integer; 

同样,Countvariables显示接收到的字节数,我可以使用Memo1.Text:= str来显示一些信息,但显然Memo1在显示控制字符时有问题。 我已经尝试了各种方法来尝试从Str中提取字节数据,但迄今没有成功。

我相信这一定很容易。 这是希望。

在这个功能

 function Read(var Buffer; Count: Integer): Integer; 

Count参数是您希望读取的字节数。 而函数返回值实际上是读取字节。

如果您将缓冲区定义为100字节的数组,则可以进行编码

 x := Read(Buffer, 100); 

如果输入只有70个字节,那么x将是70.这样,你可以读取,而x> 0

@johnma,我建议你使用TurboPower异步库 ,这是非常有效的,有很多的例子,是有据可查的。

检查这些链接

 // I use a timer to read a weight coming in on the Serial Port // but the routing could also be triggered by OnRXChar (received data event) // or OnRXBufferFull event. var WeightString: String; //global procedure TfmUDF.tmScaleTimer(Sender: TObject); var Data: AnsiString; begin ReadStr(Data,Count); //the individual bytes can be read Data[n]..... WeightData:=WeightData+Data; //just keeps adding the incoming data end; 

这有帮助吗?