串口类

来源:互联网 发布:js中判断能否整除 编辑:程序博客网 时间:2024/05/17 06:42
之前写的一个类,你可以试试 /****************************************************************** * 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 /// /// free opw /// public void FreeDrv() { try { if (ss_port != null) { ss_port.Close(); } } catch { } } #endregion #region Write command to OPW /// /// 发操作命令给OPW设备 /// 并返回状态 /// /// /// 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 } }