SerialPortSetting.cs 3.1 KB
//存储了串口的初始化的设置数据,以及封装了串口的一部分方法

using System;
using System.IO.Ports;
using System.Windows.Forms;
namespace MachineDll
{
    public class SerialPortSetting
    {
        public static string PortName;
        public static int BautRate = 9600;
        public static int DataBits = 8;
        public static Parity Parity = Parity.None;
        public static StopBits StopBits = StopBits.One;

        private SerialPort _ItsSerialPort;
        private string Message;
        public void TestConnection()
        {
            string port="";
            for (int i = 1; i < 9;i++ )
            {
                _ItsSerialPort = new SerialPort("COM"+i.ToString(), BautRate, Parity, DataBits, StopBits);
                try
                {
                    _ItsSerialPort.Open();
                    port = "COM" + i.ToString() + " "+port;
                    _ItsSerialPort.Close();
                }
                catch(Exception es)
                {
                    //MessageBox.Show(_ItsSerialPort.PortName + "端口已经被其他程序所占用");
                }
            }
            MessageBox.Show(port+ "端口是可用的");
        }
        public bool StartConnection()
        {
            _ItsSerialPort = new SerialPort(PortName, BautRate, Parity, DataBits, StopBits);
            _ItsSerialPort.ErrorReceived += new SerialErrorReceivedEventHandler(SerialPort_ErrorReceived);
            _ItsSerialPort.RtsEnable = true;
            try
            {
                _ItsSerialPort.Open();
                return true;
            }
            catch
            {
                MessageBox.Show(_ItsSerialPort.PortName + "端口已经被其他程序所占用");
                return false;
            }
        }
         private void SerialPort_ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
         {
             this.Message = e.ToString();
         }


        public bool PortIsOpen()
        {
            return _ItsSerialPort.IsOpen;
        }

        public void CloseConnection()
        {
            try
            {
                _ItsSerialPort.Close();
            }
            catch
            {
                MessageBox.Show("关闭连接失败");
            }
        }

        public Byte[] ReadByte()
        {
            Byte[] data=new Byte[1];
            try
            {
                data = new Byte[_ItsSerialPort.BytesToRead];//接收缓冲区的字节数 
                _ItsSerialPort.Read(data, 0, _ItsSerialPort.BytesToRead);
            }
            catch
            { }
            return data;
        }

        public void SendByteNew(byte[] s)
        {
            try
            {
                _ItsSerialPort.Write(s, 0, 1);
            }
            catch
            {
            }
        }

        public void SendByte(string s)
        {
            _ItsSerialPort.Write(s);
        }

        public void SendString(string s)
        {
            byte[] btAppend = { 0x0D };
            _ItsSerialPort.Write(s);
            _ItsSerialPort.Write(btAppend, 0, btAppend.Length);
        }

        public string ReadExisting()
        {
            return _ItsSerialPort.ReadExisting();
        }
    }
}