对这个问题抱歉,但是我对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;
这有帮助吗?