从RFID阅读器中提取数据

时间:2014-12-29 09:22:09

标签: c#

我正在与一个食堂管理项目(在一家公司)合作。我想在放入Rfid阅读器时通过身份证对用户进行身份验证。我已经浏览了几个网站,但他们没有达到我想要的水平。 我的问题是,我无法从放在Rfid阅读器上的身份证中提取序列号。任何人。 PLZ帮助我...我正在使用visual studio 2012(Windows应用程序),我使用的语言是C#。 我的代码如下:

private void button1_Click(object sender, EventArgs e)
{
    RFID = new SerialPort();
    RFID.PortName = "COM1";
    RFID.BaudRate = 9600;
    RFID.DataBits = 8;
    RFID.Parity = Parity.None;
    RFID.StopBits = StopBits.One;
    RFID.Handshake = Handshake.None;

    RFID.Open();
    RFID.DtrEnable = true;

    RFID.DataReceived += new SerialDataReceivedEventHandler(RFID_DataReceived);
}
private void RFID_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    String data = RFID.ReadExisting();
    label8.Text += data;
}

3 个答案:

答案 0 :(得分:0)

我从未根据串行通信写过任何内容,但可以尝试帮助您,因为没有更好的选择:)

阅读有关SerialPort.DataReceived事件(http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived%28v=vs.110%29.aspx)的ms文档我有以下嫌疑人:

  1. 在辅助线程上引发DataReceived事件那么,事件是否被调用?你同步线程?

  2. 上面链接的页面包含一些将接收到的数据打印到控制台的简单示例。请尝试构建并运行。它有效吗?如果没有,您可能会遇到硬件,设备驱动程序或设备设置问题。

  3. 希望这有帮助

答案 1 :(得分:0)

我所做的是使用计时器而不是事件处理程序:

private void scale_com_port_open()
{
   try
   {
       serialPort2.PortName = "COM9";
       serialPort2.BaudRate = Convert.ToInt32("115200");
       serialPort2.DataBits = Convert.ToInt32("8");
       serialPort2.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "One");
       serialPort2.Parity = (Parity)Enum.Parse(typeof(Parity), "None");
       serialPort2.Open();
   }
   catch (Exception ex)
   {
       MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
   }
}

然后我添加了一个定时器,它每隔 100 毫秒触发一次。

  private void timer3_Tick(object sender, EventArgs e)//database inserting rfid tag ID
  {
      string rfid_no = "";
      textRFID.Text = "";

      try
      {
          if (serialPort2.IsOpen)
          {
             string rfid_data = serialPort1.ReadExisting();

             if(rfid_data == "") {}

             else
             {
                textRFID.Text = rfid_data;
                timer3.Enabled = false;
             }
          }
       }
       catch (Exception ex)
       {
            MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
       }
   }

这对我来说每次都有效

答案 2 :(得分:0)

DataReceived 事件永远不会调用,因为你必须调用 RFID.ReadExisting();第一的。 您可以调用 RFID.ReadExisting();在一个单独的线程中循环并阅读,只要你得到豁免。如果发生异常,则读取器可能已断开连接或发生了其他事情。 顺便说一句:您使用的是哪个 rfid 阅读器?