Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用Dejan tImport Delphi组件从串行端口读取二进制数据_Windows_Delphi - Fatal编程技术网

Windows 使用Dejan tImport Delphi组件从串行端口读取二进制数据

Windows 使用Dejan tImport Delphi组件从串行端口读取二进制数据,windows,delphi,Windows,Delphi,很抱歉问这个问题,但我对德尔福有点不屑一顾。我使用Dejan TComport组件从串行端口获取数据。连接到端口的一盒设备将大约100字节的二进制数据发送到串行端口。我想做的是将字节作为数值提取到数组中,以便对它们执行计算 tImport有一个从输入缓冲区读取数据的方法Read(buffer,Count) function Read(var Buffer; Count: Integer): Integer; 帮助说明缓冲区变量必须足够大以容纳Count字节,但没有提供如何使用此函数的任何示例。

很抱歉问这个问题,但我对德尔福有点不屑一顾。我使用Dejan TComport组件从串行端口获取数据。连接到端口的一盒设备将大约100字节的二进制数据发送到串行端口。我想做的是将字节作为数值提取到数组中,以便对它们执行计算

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

function Read(var Buffer; Count: Integer): Integer;
帮助说明缓冲区变量必须足够大以容纳Count字节,但没有提供如何使用此函数的任何示例。我可以看到Count变量保存接收的字节数,但我找不到访问缓冲区中字节的方法

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

function ReadStr(var Str: String; Count: Integer): Integer;
同样,Count变量显示接收的字节数,我可以使用Memo1.Text:=str来显示一些信息,但显然Memo1在显示控制字符时有问题。我尝试了各种方法,试图从Str中提取字节数据,但至今没有成功

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

在这个函数中

function Read(var Buffer; Count: Integer): Integer;
Count参数是您希望读取的字节数。 而函数返回值实际上是读取字节

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

x := Read(Buffer, 100);
如果输入只有70个字节,那么x将是70。 这样,当x>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;

这有帮助吗?

如果在循环中读取数据,
Buffer
参数不应该是完整的数组,而是要写入的数组的下一个元素。Buffer应该是一个“workingbuffer”,将其内容附加到最终变量中。您应该充实您的答案,以便更清楚您的意思。