用SPCOMM控件开发串口通讯程序,我的串口没接数据线(我怀凝线有问题),但也应该可以发数据,但每次按发送按钮:procedure TForm1.Button1Click(Sender: TObject);
var
  
  SendBuf : array[1..5] of Byte ;
begin
  SendBuf[1] := byte($D7) ;
  Comm1.StartComm;
  
  if not Comm1.WriteCommData(@SendBuf[1],1) then
    Edit1.Text := '0'
  else
    Edit1.Text := '1';
 end;
但每次Edit1都显0,究竟哪里出问题了?????

解决方案 »

  1.   

    我也怀疑是线的问题,下面我以前的写的一段过程,以供参考//响应数据包接收正确并已录入数据库
    function SendData1(Comm:TComm) : Boolean;
    var
      arrByte : array [1..6] of Byte;
    begin
      //起始标志位
      arrByte[1] := $1B;  //数据长度位
      arrByte[2] := $30;
      arrByte[3] := $32;  //命令字
      arrByte[4] := $30;
      arrByte[5] := $31;  //参数体(无)  //结束位
      arrByte[6] := $0D;  //发送
      Result := Comm.WriteCommData(PChar(@arrByte),High(arrByte))
    end;
      

  2.   

    一定是你的comm1的属性设置出了问题,你仔细检查一遍。
      

  3.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    OpenComm;
    end;procedure TForm1.OpenComm;
    var
      cc:TCOMMCONFIG;
      Temp:string;
    begin
      Temp:='COM'+inttostr(1);                          //Ñ¡ÔñËùÒª´ò¿ªµÄCOM
      hComm:=CreateFile(PChar(Temp), GENERIC_READ or GENERIC_WRITE,
           0, nil, OPEN_EXISTING, 0, 0);                   //´ò¿ªCOM
      if (hComm = INVALID_HANDLE_VALUE) then begin         //Èç¹ûCOM Î´´ò¿ª
        MessageBox (0, '´ò¿ªÍ¨ÐŶ˿ڴíÎó!!','',MB_OK);
        exit;
      end;  GetCommState(hComm,cc.dcb);                         // µÃ֪ĿǰCOM µÄ״̬
      cc.dcb.BaudRate:=CBR_9600;                          // ÉèÖò¨ÌØÂÊΪ9600
      cc.dcb.ByteSize:=8;                                 // ×Ö½ÚΪ 8 bit
      cc.dcb.Parity:=NOPARITY;                            // Parity Îª None
      cc.dcb.StopBits:=ONESTOPBIT;                        // 1 ¸öStop bit  if not SetCommState(hComm, cc.dcb) then begin       // ÉèÖÃCOM µÄ״̬
        MessageBox (0, 'ͨÐŶ˿ÚÉèÖôíÎó!!!','',MB_OK);
        CloseHandle(hComm);
        exit;
      end;
    end;procedure TForm1.fasong(str:string);
    var
      lrc:LongWord;
      s:string;
    begin
      s:=str;
      if (hComm=0) then exit;
      WriteFile(hComm,Pointer(s)^,Length(s), lrc, nil); //ËͳöÊý¾Ý
    end;先用api试试
      

  4.   

    参考一下:http://www.ccw.com.cn/htm/app/aprog/01_1_8_4.asp
      

  5.   

    檢查對應的 Comm1.StartComm;  的 ComX 有沒有存在你的電腦
      

  6.   

    当我把语句Comm1.StartComm;从按钮的事件中移到窗口的OnShow事件中就可以发关了,
    这回真得是撞鬼了!!!tell me why???
      

  7.   

    你的启动命令对于代码的执行而言要比232设备完成启动快,所以在你写WriteCommData的时候实际还没启动好,所以只要在StartComm后面Sleep(100)就可以了,我是这么理解的!
      

  8.   

    按钮每次进来的时候都要打开串口 Comm1.StartComm; 退出的时候却没有关闭串口  下次再进来的时候又Comm1.StartComm; ....  当你把语句Comm1.StartComm;从按钮的事件中移到窗口的OnShow事件中后 就相当于你的程序只打开一次串口了啊!