http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx

解决方案 »

  1.   

    去找一下netserialcomm微软写好了的,串口组件
      

  2.   

    谁能把netserialcomm这个串口组件详细的描述一下,谢谢!!!
      

  3.   

    public static bool InitComm(string com)
    {
    Win32Com.DCB PortDCB = new Win32Com.DCB();
    Win32Com.COMMTIMEOUTS CommTimeouts = new Win32Com.COMMTIMEOUTS();
    Win32Com.OVERLAPPED wo = new Win32Com.OVERLAPPED();
    IntPtr hPort;
    hPort = Win32Com.CreateFile(com, Win32Com.GENERIC_READ | Win32Com.GENERIC_WRITE, 0, IntPtr.Zero,
    Win32Com.OPEN_EXISTING, Win32Com.FILE_FLAG_OVERLAPPED, IntPtr.Zero);
    if (hPort == (IntPtr)Win32Com.INVALID_HANDLE_VALUE)
    {
    return false;
    } //JH1.1: Changed from 0 to "magic number" to give instant return on ReadFile:
    CommTimeouts.ReadIntervalTimeout = Win32Com.MAXDWORD;
    CommTimeouts.ReadTotalTimeoutConstant = 0;
    CommTimeouts.ReadTotalTimeoutMultiplier = 0;
    CommTimeouts.WriteTotalTimeoutMultiplier=1000;
    CommTimeouts.WriteTotalTimeoutConstant = 0;
        Win32Com.GetCommState (hPort,ref PortDCB);

    PortDCB.BaudRate = 9600;
    PortDCB.ByteSize = 8;
    PortDCB.Parity = (byte)0;
    PortDCB.StopBits = (byte)0;

    if (!Win32Com.SetCommState(hPort, ref PortDCB))
    {
    return false;
    }
    if (!Win32Com.SetCommTimeouts(hPort, ref CommTimeouts))
    {
    return false;
    }
    Win32Com.CancelIo (hPort);
    Win32Com.CloseHandle (hPort);
    return true;
    }
    System.IntPtr  pHandle;
    int handle;
    //opens the existing file...
    handle = CreateFile(fileName,
    GENERIC_WRITE,
    0, 
    0,
    OPEN_EXISTING,
    0,
    0);
        
    pHandle=new System .IntPtr (handle);
    FileStream fs=new FileStream (pHandle,FileAccess.Write );
    string s;




    byte[] byteOut; 
    Int32 dwCount = s.Length;
    byteOut = new byte[dwCount]; 
    // for (int i = 0;i<dwCount;i++)  
    // {    
    // //  ByteStrings.to 
    // byteOut[i] = System.Convert.ToByte( s[i]); 
    //
    // }  
    byteOut=Encoding.ASCII .GetBytes (s);

    // How many characters are in the string?


    fs.Write (byteOut,0,dwCount);
    fs.Flush ();
    fs.Close ();
    Win32Com.CloseHandle (pHandle);
    return true;
    }
      

  4.   

    1. 利用CreateFile函数打开串行口,以确定本应用程序对此串行口的占有权,并封锁
    其它应用程序对此串口的操作;
        2. 通过GetCommState函数填充设备控制块DCB,再通过调用SetCommState函数配置串
    行口的波特率、数据位、校验位和停止位;
        3. 创建串行口监视线程监视串行口事件,在此基础上就可以在相应的串口上操作数
    据的传输;
      

  5.   

    谢谢这位仁兄,其实你说的和大家说的一样,不过是用C#调用api实现