求大神帮助-MSCOMM串通讯问题
一个简单的串口读写
现在的情况是,在 < showmessage('发送超时');>之前commevent的值是-4083,之后才变成2 。发送数据后捕捉不到数据,等第二次发送,才能取出返回值。求大神帮助啊。。。
下面是代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, MSCommLib_TLB;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
MSComm1: TMSComm;
ComboBox1: TComboBox;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
k,m,n:integer;
seri,sero,rece_byte,dataout:variant;
adda:string;
serl,cs:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
k2,k3,i,l:integer;
begin
form1.MSComm1.CommPort:=form1.ComboBox1.ItemIndex+1;
form1.MSComm1.InBufferCount:=0;
form1.MSComm1.PortOpen:=true;
sero:=VarArrayCreate([0,11],varbyte);
sero[0]:=$68;
sero[1]:=$aa;
sero[2]:=$aa;
sero[3]:=$aa;
sero[4]:=$aa;
sero[5]:=$aa;
sero[6]:=$aa;
sero[7]:=$68;
sero[8]:=$13;
sero[9]:=$00;
sero[10]:=$df;
sero[11]:=$16;
form1.MSComm1.InputMode:=1;
form1.MSComm1.Output:=sero;
//接收地址
sleep(300);
If mscomm1.CommEvent=2 then
begin
serl:=form1.mscomm1.inbuffercount;
seri:=form1.MSComm1.Input;
k2:=0;
repeat
k2:=k2+1;
until
seri[k2]<>$fe;
l:=serl-1-k2;
rece_byte:=vararrayCreate([0,l],varbyte);
for k3:= k2 to serl-1 do
rece_byte[k3-k2]:=seri[k3];
for i:=0 to 5 do
add_byte[i]:=rece_byte[i+1];
for i:=0 to 5 do
add_byte2[i]:=add_byte[5-i];
adda:='';
for i:=0 to 5 do
adda:=adda+inttohex(add_byte[i],2);
form1.Edit1.Text:= adda ;
form1.MSComm1.PortOpen:=false;
end
else
edit2.Text:= inttostr(MScomm1.CommEvent);
showmessage('发送超时');
edit3.Text:= inttostr(MScomm1.CommEvent);
form1.MSComm1.PortOpen:=false;
end;
end. delphi??串口通信?mscomm? delphi 串口通信 mscomm
[解决办法]
没用过mscomm,一直用cport。
commevent是代表事件类型吧,你程序要关心这个类型吗?
一般如果是主从式通信,串口初始化的时候,设置下事件触发类型,不关心的类型关了(好象默认是全开的),
不用管commevent返回值