串口未授权异常

时间:2018-06-27 16:23:55

标签: c# serial-port

我正在尝试通过Arduino应用程序访问RFID阅读器,这会在控制监视器上给我正确的输出。

但是,当我尝试通过Visual Studio C#访问它时,它只能运行一次,然后拒绝访问!并且也停止了在Arduino IDE上的工作。

type="javascript"

我将函数放在这里:

//Function  to initialize 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;
}

有两个扫描按钮,第一个用于扫描然后将数据添加到数据库中,第二个按钮用于扫描和搜索数据

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

然后我在论坛关闭中关闭了串行端口。
如果有人可以引导我走正确的路,请。我已经尝试了很多次,并且随机运行! 在Aruino端,这是我的代码:

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 (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 (TimeoutException) { }
    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;
}

0 个答案:

没有答案