串口的开关问题(50分)

  • 主题发起人 主题发起人 wsz1220
  • 开始时间 开始时间
W

wsz1220

Unregistered / Unconfirmed
GUEST, unregistred user!
向专家请教一个问题就是:我写的串口通信程序当不向串口写数据的时候,打开和关闭没有任何问题,可一旦向串口写数据的时候,第一次执行也没有问题,可就是一关闭串口,再打开时就出现问题。
范例程序如下:
procedure TForm1.Button1Click(Sender: TObject);
begin //打开串口并向串口写数据
if not comm32.Enabled then
begin
comm32.CommPort:='com1';
comm32.StartComm;
memo1.Lines.Add('open the com');
comm32.WriteCommData(pchar('1234'),4);
memo1.Lines.Add('write data to com');
end else begin
memo1.Lines.Add('open the com');
comm321.WriteCommData(pchar('1234'),4);
memo1.Lines.Add('write data to com');
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin //此为关闭串口程序
if comm32.Enabled then
begin
comm32.StopComm;
memo1.Lines.Add('close the com');
end;
end;
用的是spcomm.
请大家指点...

 
可以到www.toptang.com下个例程
 
我没用过spcomm,看样子好像enabled属性与串口open无关才会这样,你可以把open函数的if选择去掉看看
 
每次打开前

先关闭串口
 
呵呵!你用的好像不是spcomm呀!是comm32吧,也就是说是VB的哪个控件吧
 
if 打开 then 关闭
打开
 
spcomm的关闭端口函数是comm.stopcomm;打开函数是comm.startcomm;Mscomm打开端口函数是:mscomm.portopen:=true;关闭函数是:mscomm.portopen:=false;使用前选关闭端口,设置好参数后,再打开端口,就可以正常运行了。
 
spcomm的关闭端口函数是comm.stopcomm;打开函数是comm.startcomm;Mscomm打开端口函数是:mscomm.portopen:=true;关闭函数是:mscomm.portopen:=false;使用前选关闭端口,设置好参数后,再打开端口,就可以正常运行了。
 
procedure TForm1.Button2Click(Sender: TObject);
begin //此为关闭串口程序
if comm32.StartComm then
begin
comm32.StopComm;
memo1.Lines.Add('close the com');
end;
end;
 
呵呵,很明显的,打开和关闭之间的没有时间延迟,硬件的响应速度没有CPU快的,要延迟几个毫秒到几十个毫秒为好
 
我把程序改成这样在我的win98下运行正常:
procedure TForm1.Button1Click(Sender: TObject);
begin //打开串口并向串口写数据

comm32.CommName:='com1';
comm32.StartComm;
memo1.Lines.Add('open the com');
comm32.WriteCommData(pchar('1234'),4);
memo1.Lines.Add('write data to com');

end;
procedure TForm1.Button2Click(Sender: TObject);
begin //此为关闭串口程序


comm32.StopComm;
memo1.Lines.Add('close the com');

end;
 
设一个全局变量,放在打开和关闭串口程序里面,用于每次判断是不是应该打开或关闭串口。
var s:boolean;在creat过程中设定s的初值为true;

procedure TForm1.Button1Click(Sender: TObject);
begin //打开串口并向串口写数据
if s then
begin
comm32.CommPort:='com1';
comm32.StartComm;
memo1.Lines.Add('open the com');
comm32.WriteCommData(pchar('1234'),4);
memo1.Lines.Add('write data to com');
end else begin
memo1.Lines.Add('open the com');
comm321.WriteCommData(pchar('1234'),4);
memo1.Lines.Add('write data to com');
end;
s:=false;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin //此为关闭串口程序
if not s then
begin
comm32.StopComm;
memo1.Lines.Add('close the com');
end;
s:=true;
end;
 
1.Enabled属性与开关无关,原程序中打开时用
if not comm32.Enabled then
条件不能满足(启动时串口可用,可能是因为没上述限制)
2.stopcomm时,如原未打开不报错;startcomm时,如原已打开会报错
建议:
1.设全局变量记录串口开关情况,以它为条件操作
2.每次startcomm前,都加上stopcomm
 
你的错误是什么???出的是什么问题
 
后退
顶部