首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从RFID读取器中提取数据

从RFID读取器中提取数据
EN

Stack Overflow用户
提问于 2014-12-29 17:22:09
回答 3查看 7.3K关注 0票数 0

我正在从事一个食堂管理项目(在一家公司)。我想要通过他们的身份证身份验证用户时,戴上Rfid读卡器。我浏览了几个网站,但它们都达不到我想要的水平。我的问题是,我无法从放在Rfid阅读器上的身份证中提取序列号。任何人。请帮我解决这个问题。我正在使用visual studio 2012 (windows应用程序),我使用的语言是C#。我的代码如下:

代码语言:javascript
复制
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;
}
EN

回答 3

Stack Overflow用户

发布于 2015-01-16 22:52:21

我从来没有写过任何基于串行通信的东西,但我可以尝试帮助你,因为没有更好的选择:)

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

在辅助线程上引发

  1. DataReceived事件,那么该事件是否被调用?你同步线程吗?
  2. 上面链接的页面包含一些简单的示例,它将接收到的数据打印到控制台上。请尝试构建并运行它。它起作用了吗?如果没有,则可能是硬件、设备驱动程序或设备设置有问题。

希望这能有所帮助

票数 0
EN

Stack Overflow用户

发布于 2021-01-07 18:19:29

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

代码语言:javascript
复制
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);
   }
}

然后我添加了一个计时器,它每,比如说每100ms触发一次。

代码语言:javascript
复制
  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);
       }
   }

这对我来说每次都是有效的

票数 0
EN

Stack Overflow用户

发布于 2021-02-15 17:17:30

DataReceived事件永远不会调用,因为您必须先调用RFID.ReadExisting();。您可以在循环中的单独线程中调用RFID.ReadExisting();,并在获得exeption时进行读取。如果发生异常,那么阅读器可能会断开连接或发生其他事情。顺便说一句:你用的是哪种rfid阅读器?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27686230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档