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

时间:2010-03-16 21:17:01

标签: windows delphi

对这个问题表示歉意,但我对Delphi来说有点像菜鸟。我正在使用Dejan TComport组件从串行端口获取数据。连接到端口的一盒设备将大约100字节的二进制数据发送到串行端口。我想要做的是将字节作为数值提取到数组中,以便我可以对它们执行计算。

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

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

帮助说Buffer变量必须足够大以容纳Count字节,但不提供如何使用此函数的任何示例。我可以看到Count变量保存了接收到的字节数,但我找不到一种方法来访问Buffer中的字节。

TComport还有一个方法Readstr,它将输入缓冲区中的数据读入STRING变量。

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

Count变量再次显示接收的字节数,我可以使用Memo1.Text:= str显示一些信息,但显然Memo1在显示控制字符时出现问题。我尝试了各种方法来尝试从Str中提取字节数据,但到目前为止还没有成功。

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

3 个答案:

答案 0 :(得分:2)

在此功能中

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

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

如果将Buffer定义为100字节的数组,则可以编码

x := Read(Buffer, 100);

如果输入只有70个字节,则x将为70。 这样你就可以在x> 0

答案 1 :(得分:0)

@johnma,我建议您使用 TurboPower异步库,它非常高效,有很多示例,并且有很好的文档记录。

检查这些链接

答案 2 :(得分:0)

// 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;

这有帮助吗?