如何用delphi读取串口数据(100分)

  • 主题发起人 主题发起人 lmy1210
  • 开始时间 开始时间
L

lmy1210

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi写一个读串口数据的程序,其中串口要求如下:
串口帧格式:7个数据位,1个奇校验位,2个停止位
波特率:9600
工作方式:0MODEM
正确的结果应该是每秒收到100多次的72H。可是我得到的结果却是每几秒钟收
到一个错误的十六进制数据。请高手们帮我看看我的程序是否写错了,在下
感激不尽,谢谢!

我用了一个串口的COM控件,并用如下程序:
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
var
com1receive:integer;
begin
move(buffer,com1receive,17);
edit1.text:=edit1.text+inttostr(com1receive);//测试接收到的数据是否正确。
end;
后来一位沈前卫兄给我提供了以下程序段,可我试后没有收到任何数据。
请各位高手继续帮忙。谢谢!

var RecBuf:array [0..255] of char;

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
begin
fillchar(RecBuf,256,#0);
move(buffer,RecBuf,BufferLength);
edit1.text:=edit1.text+RecBuf;
end;

 
怎么叫没有数据? 通过IDE的调试环境, 看看变量中是否真的没有值.
最简单地, 在move的地方设个断点, 看看能不能执行到.

很可能是因为接收到的字符是ascii 0字符而屏蔽掉了string的显示.
 
你是否保证一正确的结果一定是“每秒收到100多次的72H”?
 
对,这是设备厂家说明书提供的。
 
是不是控件有问题,试换一个吧。或你可否把控件Mail给我试一试
MailTo:Tim@edu.21cn.com
 
我写的这个程序是用来接收一个视频音频切换矩阵的数据。
计算机串口通过RS232-RS422转换器与切换矩阵的控制口相连

 
我以前都是用它接ascii数据的,可能是
数据有问题,string针对ascii的所以不行,
----也许你需要编码?我不能肯定.
 
看我的:
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
str :string;
c :pchar;
i :char;
begin
try
setlength(str,bufferlength);
c:=Pchar(buffer);
i:=c^;
listbox1.Items.Add(inttostr(byte(i)));
//putdata(1);
except
timer1.Enabled:=false;
comm1.StopComm;
showmessage('通迅错误!');
end;
end;
 
接受答案了.
 
后退
顶部