如何在C#中使用其他类的串口?

时间:2015-09-27 09:57:59

标签: c# class methods serial-port

当我启动方法" SendHex()"从我的第二堂课它给我一个错误(端口关闭)。虽然我可以从主类打开端口并成功发送任何数据,但我不能从第二类中做到这一点!

这是我的主要课程:(已编辑)

namespace SerialPort
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            foreach (String s in System.IO.Ports.SerialPort.GetPortNames())
            {
                txtPort.Items.Add(s);
            }
        }

        public System.IO.Ports.SerialPort SP = new System.IO.Ports.SerialPort();
        public void serialport_connect(String port, int baudrate, Parity parity, int databits, StopBits stopbits)
        {
            SP = new System.IO.Ports.SerialPort(port, baudrate, parity, databits, stopbits);
            try{ SP.Open();}
            catch (Exception ex) { MessageBox.Show(ex.ToString(), "Error"); }
        }


        private void cmdConnect_Click(object sender, EventArgs e)
        {
            String port = txtPort.Text;
            int baudrate = Convert.ToInt32(cmbbaudrate.Text);
            Parity parity = (Parity)Enum.Parse(typeof(Parity), cmbparity.Text);
            int databits = Convert.ToInt32(cmbdatabits.Text);
            StopBits stopbits = (StopBits)Enum.Parse(typeof(StopBits), cmbstopbits.Text);
            serialport_connect(port, baudrate, parity, databits, stopbits);
        }

        static byte[] HexToBytes(string input)
        {
            byte[] result = new byte[input.Length / 2];
            for (int i = 0; i < result.Length; i++)
            {
                result[i] = Convert.ToByte(input.Substring(2 * i, 2), 16);
            }
            return result;
        }

        public void SendHex(string hexData)
        {
            SP.Write(HexToBytes(hexData), 0, HexToBytes(hexData).Length);
        }
        private void button2_Click(object sender, EventArgs e)
        {
            SendCommand ss = new SendCommand();
            ss.SC();
        }


    }
}

这是我的第二堂课: 编辑:

    namespace SerialPort
{
    class SendCommand
    {
        Form1 fm = new Form1();
        public void SC ()
            {
            String port = "COM30";
            int baudrate = Convert.ToInt32("115200");
            Parity parity = (Parity)Enum.Parse(typeof(Parity), "None");
            int databits = Convert.ToInt32("8");
            StopBits stopbits = (StopBits)Enum.Parse(typeof(StopBits), "One");

            if (fm.SP.IsOpen)
            {
            }else

            {
                fm.serialport_connect(port, baudrate, parity, databits, stopbits);
            }         
            fm.SendHex("aabb");
            }

    }
}

1 个答案:

答案 0 :(得分:0)

在Second Class中,您正在创建一个新的Form对象,因此您的SerialPort未打开。 您可能希望在调用SendHex方法之前调用SerialPort_Connect方法。

SideNote:如果您在单独的类中移动SerialPort相关代码并在表单和第二类中使用该类,那将会很不错。