spcomm的使用(100分)

  • 主题发起人 主题发起人 yangyee
  • 开始时间 开始时间
Y

yangyee

Unregistered / Unconfirmed
GUEST, unregistred user!
各位:
我现在想用spcomm只接收数据,是否在接收之前先来一句
comm1.StartComm;
我把这句写上后,程序出错,出错信息入下
Error Opening Serial port
我的完整程序如下:
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var
s: string;
begin
SetLength(S, BufferLength); //接收RS232的数据并显示Memo1上。
Move(Buffer^, PChar(S)^, BufferLength);
//Move(Buffer^, s, BufferLength);
Memo1.Lines.Add(S);
Memo1.Invalidate;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Comm1.StartComm;
end;
 
我觉得也许不能在Form创建的时候打开串口
试一试加到OnShow事件中去,或者加一个按钮,
在按钮的OnClick事件中打开串口.
 
sam-lai:
在按钮的click事件中照样出错。
没有这句行不行?
 
 
你用的串口坏了,或是已被占用了(多半是后者)

你可以换一个串口试试
还有那个

Memo1.Invalidate;
是多余的
 
我想应该是这样:
var
s: string[255];
begin
...
// Memo1.Invalidate;
end;
 
同意carryon的看法,你的串口可能出问题了。
必须要form1.Comm1.StartComm这一句。
 
使用SPCOMM控件时必须先设置好COMMNAME(如: COM1,COM2),BAUDRATE等属性,
而且该串口必须不被其它程序占用. 你可用CREATEFILE尝试打开串口判断.发现可用再关闭
串口并调用STARTCOMM过程.
 
顺便请问高手一个问题:我如何知道我机器上的哪些串口没有用?
 
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
viewstring:string;
begin
viewstring:='';
move(buffer^,pchar(@rbuf)^,bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring+inttohex(rbuf,2)+'';
viewstring:='接收'+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add('');
end;
这样写绝对正确,放心吧!
 
to xinmowyj;可以在注册表里读,具体是那个键值我忘了
 
try
spcomm.stopcomm;
spcomm.comname := 'com1';('com2','com3','com4'...)
spcomm.startcomm;
finally
messagebox();
end;
应该没撮啊
 
我按照cqwty和zyb的程序试了一下好像还是不行啊
 
打开串口哪句必须要的,你可先试试在comm1.startcomm;之前加上comm1.stopcomm;
如果还不行可能是你的端口坏了,如果你机器上还有COM2的话可以换端口试试。
 
我懷疑是你的com口被占用了,你是不是打開了超級終端,你可能換一個口試一下
 
如果你的程序启动后就了现这种情况,应该是坏了(没用其他程序并使用了端口的情况),如果第一次运行没事,但第二次运行时出现,说明第一次没关闭端口。
 
后退
顶部