其实我要做的就是随便我的通讯线插在哪个串口上都可以用,不要一定在串口1或是2。
应该怎么做呢???最好能给出具体的代码怎么写!!!谢谢!!!

解决方案 »

  1.   

    不知道如何检测串口是否连线,如果串口被占用且未共享,那用createfile打开的时候会返回INVALID_HANDLE_VALUE。
    对于您的想法,我想可以用下面方法实现。
    1、首先在终端设备上作一个探测响应,当收到一个探测时就发送一个回复。
    2、取得系统所用串口,在注册表'hardware\devicemap\serialcomm'下存有系统所有串口。
    3、做扫描函数,依次打开串口,成功地话就发送探测报文。如果有回复的话就使用此串口。
      

  2.   

    procedure OpenComm(COM:Integer);
    var
      cc:TCOMMCONFIG;
      Temp:string;
      hComm: THandle;
    begin
      SetCommMask(hcomm,$0);
      CloseHandle(hComm);
      Temp:='COM'+inttostr(COM);                          // 选择所要打开的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:=EVENPARITY; // 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;
    //  ShowMessage('通信端口设置成功!');
      beep;
    end;
    把自己项目的源程序都给你了。分是一定要给哟,呵呵!
      

  3.   

    这是我曾经写过的代码,直接复制上,希望能对你有帮助。
    编码还算是规范,相信您能看懂。
    MSComm是微软的Microsoft Comm Control6.0控件。procedure TfrmComSendTest.MSCommInitialize;
    begin
      if MSComm.PortOpen then
        MSComm.PortOpen := false;
        
      MSComm.OutBufferSize := 1024;     //设置接收缓冲区的大小
      MSComm.InBufferSize := 1024;      //设置发送缓冲区的大小
      MSComm.Settings := '9600,n,8,1';  //设置串口通信参数
      MSComm.CommPort := 1;             //设置串行端口号
    end;如果初始化出错,证明端口被占用或不存在。procedure TfrmComSendTest.InitSend;
    begin
      MSComm.PortOpen := true;      //打开串口
      MSComm.OutBufferCount := 0;   //清空发送缓冲区
      MSComm.DTREnable := true;      // 数据终端准备好
      MSComm.RTSEnable := true;      // 请求发送
      MSComm.Handshaking := 0;
    end;procedure TfrmComSendTest.SendOver;
    begin
      MSComm.PortOpen := false; //关闭串口
      MSComm.DTREnable :=false;
      MSComm.RTSEnable :=false;
    end;