C # несколько открытый последовательный порт всегда закрывается после нескольких чтений данных - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь создать приложение для чтения последовательных данных с любого порта, доступного на ПК с Windows, эти порты должны оставаться открытыми и ожидать сигнала для чтения. Я использую считыватель RFID.поэтому я создал функцию, которая может открыть порт, указав его номер, но проблема в том, что открытый порт был развернут до максимума, всего 4 порта после нескольких чтений затем он отключается, и вам нужно перезапустить процесс снова.

Есть ли способ улучшить мой код, я подозреваю, что из-за нехватки питания мой считыватель (5 В) купил USB-концентратор с внешним питанием, но моя проблема все еще существует.Любое предложение было бы здорово.

   private void OpenSerial(String COM)
        {

            _serialPort = new SerialPort();
            _serialPort.PortName = COM;

            _serialPort.BaudRate = 9600;
            _serialPort.Parity = Parity.None;
            _serialPort.StopBits = StopBits.One;
            _serialPort.Handshake = Handshake.None;
            _serialPort.DataBits = 8;
            _serialPort.ReadTimeout = 2000;
            _serialPort.WriteTimeout = 500;
            _serialPort.DtrEnable = true;
            _serialPort.RtsEnable = true;


            try
            {
                _serialPort.Open(); //opens the port
            }
            catch (Exception ex)
            {
                textBox1.AppendText(String.Format("Port is already open."));
                textBox1.AppendText(System.Environment.NewLine);
            }



            _serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            _serialPort.DataReceived += DataReceivedHandler;



        }


 private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {

            SerialPort sp = (SerialPort)sender;
            System.Threading.Thread.Sleep(100);
            string indata = sp.ReadExisting();
            string spN = sp.PortName;
            this.BeginInvoke(new SetTextDeleg(DisplayOutput), new object[] { indata, spN }  );
            Debug.WriteLine(indata);

        }

Тогда я использую это, как показано ниже.

OpenSerial("COM1");
OpenSerial("COM2");
OpenSerial("COM3");
OpenSerial("COM4");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...