首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

求大神帮助-MSCOMM串通讯有关问题

2013-06-25 
求大神帮助-MSCOMM串通讯问题一个简单的串口读写现在的情况是,在showmessage(发送超时)之前commevent

求大神帮助-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返回值

热点排行