簡體   English   中英

SerialPort.Data收到的問題

[英]SerialPort.Datarecieved problems

我對SerialPort.DataReceived事件有問題。 讓我解釋一下我的問題。 我有1個表格讓我們調用這個mainform.cs,我有一個類pumpfuntions.cs,在pumpfunctions.cs中,我創建了串行端口,並通過串行端口創建了我需要的功能。

我想要的是我收到的數據進入文本框。 但是問題是我的Datareceived類在我的pumpfunctions.cs中。

我該如何解決。

代碼Pumpfunctions.cs:

Class PumpFunctions
    {

        private SerialPort _comport = new SerialPort();
        public string RxString;

        public void SerialPortDataReceived()
        {
            if (_comport.DataReceived != false)
            {
                string ReadData = _comport.ReadExisting();


                RxString = ReadData;
            }
        }

        public void OpenSerialPort()
        {
            _comport.PortName = "COM6";
            _comport.BaudRate = 9600;
            _comport.Open();

        }

        public void CloseSerialPort()
        {
            _comport.Close();

        }
}

代碼Mainform.cs

public partial class MainForm : Form
    {
        private PumpFunctions _pump = new PumpFunctions();
        private String rxString;

        public MainForm()
        {
            InitializeComponent();
            _pump.OpenSerialPort();

        }

private void SerialPortDataReceived()
        {
            string rxString = _pump.RxString;
            //this.Invoke(new EventHandler(_commandTextbox_TextChanged));

        }

        private void _commandTextbox_TextChanged(object sender, EventArgs e)
        {
            switch (rxString)
            {
                case "\r\n:": _commandTextbox.AppendText("Status: Stopped\r\n"); break;
                case "\r\n>": _commandTextbox.AppendText("Status: Running forward\r\n"); break;
                case "\r\n<": _commandTextbox.AppendText("Status: Running reverse\r\n"); break;
                case "\r\n*": _commandTextbox.AppendText("Status: Stalled\r\n"); break;
                case "\r\n*|": _commandTextbox.AppendText("Status: Infuse limit switch activated\r\n"); break;
                case "\r\n*W": _commandTextbox.AppendText("Status: Withdraw limit switch activated\r\n"); break;
                case "\r\n*D": _commandTextbox.AppendText("Status: Disable by emergency stop\r\n"); break;
                case "\r\n*T": _commandTextbox.AppendText("Status: Target volume reached\r\n"); break;
                default: _commandTextbox.AppendText(rxString); break;
            }
        }




    }

有人可以向我解釋問題出在哪里。

這也是我得到的錯誤

錯誤1

The event 'System.IO.Ports.SerialPort.DataReceived' can only appear on the left hand side of += or -=

提前致謝

DataReceived是SerialPort類公開的事件
當您想從端口接收數據時,可以向委托注冊此事件。

無法檢查事件是否為true / false。 您可以檢查是否有訂閱者。
在此處閱讀有關該類的信息SerialPort MSDN

創建Serialport並注冊事件的程序示例:

class Program
{
    static SerialPort serialPort;
    static void Main(string[] args)
    {
        serialPort = new SerialPort("COM6", 1200, Parity.None, 8, StopBits.One);

        serialPort.Open();
        if (serialPort.IsOpen)
        {
            serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
        }

        Thread.Sleep(10000);
    }

    static void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        var length = serialPort.BytesToRead;
        byte[] buffer = new byte[length];
        serialPort.Read(buffer, 0, length);

        for (int i = 0; i < buffer.Length; i++)
        {
            if (buffer.Length >= 2)
            {
                Console.WriteLine("Ok with = > " + buffer.ToString());
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM