首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Dejan TComport Delphi组件读取串口的二进制数据

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

Stack Overflow用户
提问于 2010-03-17 05:17:01
回答 2查看 8.7K关注 0票数 2

很抱歉这个问题,但我对Delphi有点新手。我正在使用Dejan TComport组件从串口获取数据。连接到该端口的一盒设备将大约100字节的二进制数据发送到串行端口。我想做的是将字节作为数值提取到一个数组中,这样我就可以对它们执行计算。

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

代码语言:javascript
复制
function Read(var Buffer; Count: Integer): Integer;

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

TComport还有一个methord Readstr,它将数据从输入缓冲区读取到字符串变量中。

代码语言:javascript
复制
function ReadStr(var Str: String; Count: Integer): Integer;

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

我相信这一定很简单。希望如此。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-17 05:42:46

在此函数中

代码语言:javascript
复制
function Read(var Buffer; Count: Integer): Integer;

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

如果您有一个定义为100字节数组的缓冲区,则可以编写

代码语言:javascript
复制
x := Read(Buffer, 100);

如果输入只有70个字节,那么x就是70。这样你就可以在x>0的时候阅读

票数 2
EN

Stack Overflow用户

发布于 2010-03-17 12:21:58

代码语言:javascript
复制
// 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;

这有帮助吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2458219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档