倍加福RFID读头读取数据模拟键盘输入文本

倍加福RFID读头读取数据模拟键盘输入文本



前言

最近由于客户买的PDA扫RFID数据解析不出正常数据,就写了个程序通过读取倍加福RFID的数据,并模拟键盘文本输入到文本框。


一、硬件配置连接

倍加福的RFID控制器
倍加福的控制,双通道的,可以连接两个RFID读头,灰色的是电源线,绿色的网线,黑色的是连接RFID读头的,吐槽的是,倍加福的RFID读头线路并不是很软,而且有点硬,容易断。
RFID读头
倍加福的读头

连接示意图

二、倍加福控制器参数设置

1、控制器IP设置

IP设置

2、Webserver 登陆

控制器有自己的网页界面,登录账号密码:identcontrol
登录首页
IP设置界面

此控制器支持与PLC之间的EIP通讯,也支持TCP通讯,需要改通讯模式,只需要在ethernet/ip instance选项种选择就行,这里由于是与电脑通过TCP通讯,就改成TCP/IP就行,端口号默认10000,无法更改。

二、通讯指令

1.启用连续触发

指令:000619420000 通过TCP发送此指令,读头指示灯会不同的闪烁绿灯,当RFID芯片靠近读头时,会闪下黄灯,表示读取成功。

二、获取数据模拟键盘输入文本

1.连接

代码如下:

  public void Connect()
  {
      if (client == null || !client.Connected)
      {
          try
          {
              client = new TcpClient();
              IAsyncResult result = client.BeginConnect(IPAddress.Parse(RFIDIP), Convert.ToInt32(RFIDPort), ConnectCallback, null);
              var success = result.AsyncWaitHandle.WaitOne(CONNECT_TIMEOUT);
              if (!success)
              {
                  MessageBox.Show("连接超时!");
                  return;
              }

              if (!client.Connected)
              {
                  MessageBox.Show("无法连接到服务器!");
                  return;
              }
              this.Invoke((EventHandler)delegate
              {
                  btnConnect.Enabled = false;
                  btnStop.Enabled = true;

              });

          }
          catch (ArgumentNullException)
          {
              MessageBox.Show("IP地址错误!");
          }
          catch (FormatException)
          {
              MessageBox.Show("端口号错误!");
          }
          catch (Exception ex)
          {
              MessageBox.Show("错误连接: " + ex.Message);
          }
      }
      else
      {
          SendToKeyboard("Already connected!");
          this.Invoke((EventHandler)delegate
          {
              lblStatus.Text = "断开";
              lblStatus.BackColor = Color.Red;
              btnConnect.Enabled = true;
              btnStop.Enabled = false;

          });
      }
  }

启用连读指令

 private void ConnectCallback(IAsyncResult ar)
 {
     try
     {
         client.EndConnect(ar);
         stream = client.GetStream();
         stream.ReadTimeout = RECEIVE_TIMEOUT;
         IsConnet = true;
         receiveThread = new Thread(Receive);
         receiveThread.IsBackground = true;
         receiveThread.Start();
         this.Timer_Sendkeys.Interval = WriteTxtTime;
         SendData("000619420000");
         UpdateUI(() => SendToKeyboard("启动RFID读码连读!"));
         lblStatus.Invoke(new Action(() =>
         {
             lblStatus.Text = "链接";
             lblStatus.BackColor = Color.Green;
         }));

     }
     catch (Exception ex)
     {
         UpdateUI(() => SendToKeyboard("错误连接中: " + ex.Message));

     }
 }

接收

private void Receive()
{
    Sendstr sendstr = sendmassage;
    try
    {
        while (IsConnet)
        {
            if (client.Connected)
            {

                byte[] buffer = new byte[1024];
                int bytesRead = stream.Read(buffer, 0, buffer.Length);
                if (bytesRead > 0)
                {
                    string message = "";
                    if (bytesRead > 6)
                    {
                        message = Encoding.Default.GetString(buffer, 6, bytesRead).Replace("\0", "").Trim();
                        Client_Getmassage = message;
                        Invoke(new mydelegate(ON_Timer));
                        UpdateUI(() => SendToKeyboard(message));
                    }
                }
                else
                {
                    StopReceiving();
                    Thread.Sleep(1000);
                    Connect();
                }
            }
        }
    }
    catch (TimeoutException ex)
    {
        // 接收超时异常处理
        UpdateUI(() => SendToKeyboard("接收超时异常: " + ex.Message));
        StopReceiving();
        Thread.Sleep(1000);
        Connect();
    }
    catch (Exception ex)
    {
        // 其他异常处理
        StopReceiving();
        UpdateUI(() => SendToKeyboard("接收异常: " + ex.Message));
        Thread.Sleep(2000);
        Connect();
    }
}

通过定时器把数据写入到文本,模拟Ctrl+c,Ctrl+V,复制粘贴到文本框,千万别用模拟键盘输入,速度慢容易确实数据乱码。 ,如果需要加回车触发,加上模拟回车键 SendKeys.Send(“ENTER”);

   private void Timer_Sendkeys_Tick(object sender, EventArgs e)
   {
       //if (CKB.Checked)
       //{
       //    Client_Getmassage += "\r";
       //}

       string text = ConvertEncode(Client_Getmassage + "\r");
       Clipboard.SetText(text, TextDataFormat.Text);
       SendKeys.Send("^c");
       SendKeys.Send("^v");
       SendKeys.Send("ENTER");

       Client_Getmassage = "";
       Timer_Sendkeys.Enabled = false;
   }

RFID扫码测试视频


总结

大家需要软件源代码可以去 倍加福RFID读头读取数据模拟键盘输入文本源代码下载

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生活即地狱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值