获取在读取之前在串行端口上等待的字节数

时间:2011-08-24 14:35:39

标签: delphi serial-port

我有一个定制设备,通过串口发送/接收数据。我想知道是否有任何函数可以用来获取等待从串口读取的字节数?

我只想要一个windows api解决方案,如果有的话。这似乎是一项微不足道的任务,我不想使用外部组件。

3 个答案:

答案 0 :(得分:5)

ClearCommError应填写COMSTAT(TComStat记录),其中有一个'cbInQue'成员,指定端口上收到的未读字节数。

答案 1 :(得分:4)

我使用TComPort。虽然你可以使用WinAPi调用,但它们很棘手,TComPort会处理无聊的事情。它非常轻巧自由,您可以使用帮助中的TComport.InputCount函数:

 Returns the number of bytes in input buffer.

function InputCount: Integer;

Description
Call InputCount function to get the number of bytes in input buffer.

答案 2 :(得分:1)

Win API ClearCommError 应返回在接收缓冲区中等待的字符数,其中 cHandle 当前使用/打开串行通信端口。

function TRS232Comm.InputCount: cardinal;
var
  Errors: Cardinal;
  CommStat: TComStat;
begin
  if not ClearCommError(cHandle, Errors, @CommStat) then
  begin
    PurgeComm(cHandle, PURGE_RXCLEAR);     //Just empty comm buffer on error and return 0
    result := 0;
  end else
    result := CommStat.cbInQue;
end;