有没有谁用c#编过串口通讯的,
要如何制定通讯协议,通讯数据包要如何校验还有要如何接收和发送数据。
给你例子看看
有的可以将代码发到

解决方案 »

  1.   

    /****************************************************************** 
    * Copyright(c)  : Tangxu 
    * Description  : 
    * CreateDate    : 2006-9-01 04:53:08 
    * Creater      : Tang.xu 
    * LastChangeDate: 
    * LastChanger  : 
    * Version Info  : 1.0.0 
    * ******************************************************************/ 
    using System; 
    using System.IO.Ports; 
    using System.Threading; 
    using System.Text; namespace Tangxu.Common 

        public class ReadCom 
        { 
            public ReadCom() 
            { 
                _ReadConfig = new ReadConfigure(System.Environment.CurrentDirectory + "\\Com_Info.xml"); 
            }         public ReadCom(string sCom,int nBaud):this() 
            { 
            
            }         private byte[] _ReadBuffer; 
            private SerialPort ss_port = new SerialPort(); 
            private static int nReadCount = 0; 
            private ReadConfigure _ReadConfig;         #region Initialize com port         public bool InitCom()//初始化建串口类实例 
            { 
              // return true; 
                try 
                { 
                    ss_port.PortName = _ReadConfig.GetNodeValue("PORT");// _sComPort; 
                    ss_port.BaudRate = int.Parse(_ReadConfig.GetNodeValue("BAUD"));//_nBaud; 
                    ss_port.ReadBufferSize = 10240; 
                    ss_port.DataBits = int.Parse(_ReadConfig.GetNodeValue("DATA"));//8; 
                    switch (_ReadConfig.GetNodeValue("PARITY")) 
                    { 
                        case "None": 
                            ss_port.Parity = Parity.None; 
                            break; 
                        case "Even": 
                            ss_port.Parity = Parity.Even; 
                            break; 
                        case "Mark": 
                            ss_port.Parity = Parity.Mark; 
                            break; 
                        case "Odd": 
                            ss_port.Parity = Parity.Odd; 
                            break; 
                        case "Space": 
                            ss_port.Parity = Parity.Mark; 
                            break; 
                    } 
                    switch (_ReadConfig.GetNodeValue("STOP")) 
                    { 
                        case "1": 
                            ss_port.StopBits = StopBits.One; 
                            break; 
                        case "1.5": 
                            ss_port.StopBits = StopBits.OnePointFive; 
                            break; 
                        case "2": 
                            ss_port.StopBits = StopBits.Two; 
                            break; 
                    } 
                    ss_port.ReadTimeout = 600; 
                    ss_port.WriteTimeout = 700;                 ss_port.Open();//打开串口 
                    return true; 
                } 
                catch (Exception ex) 
                { 
                    throw new Exception("打开串口失败!\r\n错误信息:" + ex.Message); 
                } 
            } 
            #endregion         #region FreeDrv 
            /// <summary> 
            /// free opw 
            /// </summary> 
            public void FreeDrv() 
            { 
                try 
                { 
                    if (ss_port != null) 
                    {                  
                        ss_port.Close();  
                    } 
                } 
                catch 
                { } 
            } 
            #endregion         #region Write command to OPW 
            /// <summary> 
            /// 发操作命令给OPW设备 
            /// 并返回状态 
            /// </summary> 
            /// <param name="sCommand"> </param> 
            /// <returns> </returns> 
            public string WriteCommand(string sCommand) 
            { 
                StringBuilder sb = new StringBuilder(); 
                bool bRead = true; 
                try 
                { 
                    ss_port.DiscardInBuffer(); 
                    ss_port.Write(sCommand); 
                    Thread.Sleep(1500); 
                    while (bRead) 
                    { 
                        _ReadBuffer = new byte[ss_port.BytesToRead]; 
                        ss_port.Read(_ReadBuffer, 0, _ReadBuffer.Length); 
                        sb.Append(Encoding.ASCII.GetString(_ReadBuffer)); 
                        Thread.Sleep(500); 
                        if (ss_port.BytesToRead <= 0) 
                        { 
                            bRead= false; 
                        } 
                    } 
                    if (sb.ToString().Length== 0) 
                    { 
                        nReadCount++; 
                    }                 if (nReadCount == 3) 
                    { 
                        nReadCount = 0; 
                        throw new Exception("设置不正确或没有联接设备!"); 
                    }              
                } 
                catch (Exception ex) 
                { 
                    throw new Exception("从设备获取数据失败!\r\n错误信息:" + ex.Message); 
                } 
                return sb.ToString(); ; 
            }         public string WriteCommand(byte[] bCommand) 
            { 
                StringBuilder sb = new StringBuilder(); 
                bool bRead = true; 
                try 
                { 
                    ss_port.DiscardInBuffer(); 
                    ss_port.Write(bCommand,0,bCommand.Length); 
                    Thread.Sleep(1500); 
                    while (bRead) 
                    { 
                        _ReadBuffer = new byte[ss_port.BytesToRead]; 
                        ss_port.Read(_ReadBuffer, 0, _ReadBuffer.Length); 
                        sb.Append(Encoding.ASCII.GetString(_ReadBuffer)); 
                        Thread.Sleep(500); 
                        if (ss_port.BytesToRead <= 0) 
                        { 
                            bRead = false; 
                        } 
                    } 
                    if (sb.ToString().Length == 0) 
                    { 
                        nReadCount++; 
                    }                 if (nReadCount == 3) 
                    { 
                        nReadCount = 0; 
                        throw new Exception("设置不正确或没有联接设备!"); 
                    }              
                } 
                catch (Exception ex) 
                { 
                    throw new Exception("从设备获取数据失败!\r\n错误信息:" + ex.Message); 
                } 
                return sb.ToString(); 
            } 
            #endregion         #region Get All COM Port 
            public string[] GetAllComPort() 
            { 
                string[] sAllPort = null; 
                try 
                { 
                    sAllPort = SerialPort.GetPortNames(); 
                } 
                catch (Exception ex) 
                { 
                    throw new Exception("获取计算机COM口列表失败!\r\n错误信息:" + ex.Message); 
                } 
                return sAllPort; 
            } 
            #endregion 
        } }