端口已关闭从其他表单调用串行类时出错

时间:2018-03-19 13:51:39

标签: c# serial-port

我正在编写一个通过RS232与设备通信的程序。 我的程序将是一个GUI,以帮助用户编程/配置设备。

它将有多种形式。 为了使事物可读,我为串行通信创建了一个单独的类。 我可以打开,关闭并连接到表单1上的选定串行端口。但是,如果我进入表单2并尝试向端口发送串行命令,程序将抛出一个异常,说“端口已关闭”。

你能否让我知道我可能做错了什么。

Serial Class:

year

表格2:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace DM_Config_Tool
{
    class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        SerialPort serialPort = new SerialPort();
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form_Connect());
        }

        public string[] Serial_ListPorts()
        {
            string[] portList = { null };
            try
            {
                 portList = SerialPort.GetPortNames();
            }catch (Exception)
            {
                return null;
            }
            return portList;
        }

        public bool Serial_Connect(string _serialPortName)
        {

            serialPort.PortName = _serialPortName;
            serialPort.BaudRate = 9600;
            serialPort.Parity = Parity.None;
            serialPort.DataBits = 8;
            serialPort.StopBits = StopBits.One;
            serialPort.ReadTimeout = 500;
            serialPort.Handshake = Handshake.None;
            return Serial_Open();
        }

        public void Serial_Close()
        {
            serialPort.Close();
        }
        public bool Serial_Open()
        {
            try
            {
                serialPort.Open();
                return true;
            }catch(Exception)
            {
                return false;
            }
        }

        public bool Serial_Send_Cmd(string _serial_TXData, bool _serialData_AddNewLine)
        {
            bool TXStatus = false;
            if(_serialData_AddNewLine == true)
            {
                try
                {
                    serialPort.WriteLine(_serial_TXData);
                    TXStatus = true;
                }
                catch(Exception)
                {
                    TXStatus = false;
                }
            }
            else
            {
                try
                {
                    serialPort.Write(_serial_TXData);
                    TXStatus = true;
                    serialPort.DiscardOutBuffer();
                }
                catch (Exception msg)
                {
                    TXStatus = false;
                    //serialPort.DiscardOutBuffer();
                }
            }
            return TXStatus;
        }

        public string Serial_Receive_Data()
        {
            string _serial_RXDATA = null;

            try
            {
                _serial_RXDATA = serialPort.ReadExisting();
            }catch (Exception)
            {
                return null;
            }

            serialPort.DiscardInBuffer();
            return _serial_RXDATA;
        }
        public bool Serial_GetStatus()
        {
            return serialPort.IsOpen;
        }
    }
}

0 个答案:

没有答案