Member 13858107 Ответов: 1

Исключение несанкционированного последовательный порт


Я пытаюсь прочитать RFID-метки и отобразить их в своем инвентарном приложении c#. Я получил доступ к нему через приложение Arduino, которое дает мне правильный вывод на контрольный монитор, когда я передаю RFID-брелок. Но когда я попытался получить доступ к нему через visual studio, он работает только один раз, а затем дает мне доступ запрещен!а также перестал работать на Arduino IDE, говоря, что порт занят!

Что я уже пробовал:

public products()
    {
        InitializeComponent();
        initializeRFIDPort();
    }



//Function  to initialize the serial port

 SerialPort RFIDPort    
 public SerialPort initializeRFIDPort()
    {

        try
        {
            RFIDPort = new SerialPort("COM4",9600,Parity.None,8, StopBits.One);
          
            if (RFIDPort.IsOpen)
                RFIDPort.Close();

            if(!RFIDPort.IsOpen)
                    RFIDPort.Open();
            }
        catch (UnauthorizedAccessException ex) {MessageBox.Show( ex.Message); }
        catch (Exception)
        {
            RFIDPort = null;
        }

        return RFIDPort;
    }


У меня в классе есть две кнопки сканирования:

 private void ScanButton_Click(object sender, EventArgs e)
    {
        try
        {

            scanButtonIsClicked = true;
            if (RFIDPort.IsOpen)
            {
                RFIDPort.DataReceived += serialPort1_DataReceived;
                textBox1.Text = "";

            }
            else
                MessageBox.Show("RFID Reader is not connected!");
        }
        catch (IOException) { MessageBox.Show("Please reconnect your device "); }
        catch (System.Exception)
        {
            MessageBox.Show("Please Try Again");
        }
     }

  private void Searchbutton_Click(object sender, EventArgs e)
    {
        scansearchbtn = true;
        scanButtonIsClicked = false;

        try
        {
            if (RFIDPort.IsOpen)
            {
                 RFIDPort.DataReceived += serialPort1_DataReceived;

                textBox2.Text = "";

            }
            else { MessageBox.Show("RFID Reader is not connected!"); }
        }
        catch (IOException) { MessageBox.Show("Please reconnect your device ");}
        }

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        try
        {

            string line = RFIDPort.ReadLine();

            if (scanButtonIsClicked == true)
                this.BeginInvoke(new LineReceivedEvent(LineReceived), line);
            else
                this.BeginInvoke(new LineReceivedEvent(Line2Received), line);
        }
        catch (Exception){ MessageBox.Show("Can't Read from RFID Device.Please try again"); }

    }

    private delegate void LineReceivedEvent(string line);

    private void LineReceived(string line)
    {
        textBox2.Text = line;

    }
    private void Line2Received(string line)
    {
        textBox1.Text = line;

    }


а потом я закрыл последовательный порт на форуме-закрытие. когда я закрываю программу, содержащую RFIDPort.Close (), также возникает исключение, что ввод-вывод прерывается.
пожалуйста, если кто-нибудь может привести меня на правильный путь. Я пробовал много раз!!

Richard MacCutchan

Убедитесь, что Arduino IDE не работает, иначе он будет держать порт открытым.

1 Ответов

Рейтинг:
0

Gerry Schmitz

Только одно приложение может "открыть" последовательный порт одновременно.

Любое приложение, которое "зависает" с открытым последовательным портом, должно быть убито, чтобы освободить порт.

И когда вы "создаете" порт, он начинается как "закрытый"; вся ваша "проверка" избыточна.

И все ваши "пустые" блоки исключений бесполезны. Не используйте "пустые" блоки, потому что это побеждает "дефолт"; который должен сообщать через (последнее) "исключение" (базовый) класс.


Member 13858107

Итак, как я могу загрузить эскиз на аппаратное обеспечение Arduino, если я не открываю его на программном обеспечении Arduino, а затем читаю его своей собственной программой(Vs)? Спасибо за совет, честно говоря, я новичок :)

Gerry Schmitz

Я указал на некоторые вещи, которые вам нужно сначала "очистить", чтобы добраться до "чего-то", что можно исправить.

Затем вы можете получить более полезную "диагностическую" информацию.

Member 13858107

Хорошо, но вы сказали, что можете открыть последовательный порт только в одном приложении. Как я могу открыть его только в Visual Studio и без открытия его Arduino и загрузки эскиза для чтения данных? Я ничего не понимаю!

Gerry Schmitz

Когда "я" загружаю прошивку на устройство, я запускаю "загрузчик".

Когда я "закончил" загрузку, я "выхожу" из загрузчика (который "закрывает" свой "дескриптор" на порт), а затем я (повторно)открываю порт на клиентской машине (с помощью моего "приложения"), а затем отправляю и получаю.

то есть только одно "приложение" открывает "один и тот же" последовательный порт в любой момент времени.