WinCE UHF超高频读卡 900HZ

本文介绍了一个使用C#实现的UHF超高频RFID读写演示程序,包括了读取和写入标签数据的具体实现。该程序通过ExtReadData_G2和ExtWriteData_G2函数进行读写操作,并提供了读写进度反馈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using UHFReaderWinCE;


namespace UHF超高频读写Demo
{
    public partial class WriteReadForm : Form
    {
        public WriteReadForm(List<string> cb)
        {
            InitializeComponent();
            this.cb = cb;
        }
        private byte readerAddr = 0xff;
        private int fCmdRet = 0x30;
        List<string> cb = new List<string>();
        private void WriteReadForm_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Escape)
            {
                this.DialogResult = DialogResult.Cancel;
            }
        }


        private void WriteReadForm_Load(object sender, EventArgs e)
        {


            this.cbEPC.DataSource = cb;
        }


        private void button13_Click(object sender, EventArgs e)
        {


        }


        private void button12_Click(object sender, EventArgs e)
        {


        }
        bool stopflag = false;
        private void btnRead_Click(object sender, EventArgs e)
        {
            listboxContent.Items.Clear();
            int result = 0x30;
            int Len = 0;
            byte ENum = 0;
            byte Mem = 0;
            byte Num = 0;
            byte[] WordPtr = new byte[2];
            int Errorcode = 0;
            byte[] Password = new byte[4];
            byte[] Data = new byte[440];
            string str;
            if (cbEPC.Items.Count == 0)
                return;
            str = cbEPC.SelectedItem.ToString();
            if (str == "")
                return;
            ENum = Convert.ToByte(str.Length / 4);
            byte[] EPC = new byte[ENum];
            EPC = HexStringToByteArray(str);
            Mem = 3;//写用户区
            WordPtr = HexStringToByteArray(txtData.Text);
            Password = HexStringToByteArray("00000000");
            stopflag = false;
            for (int m = 0; m < 512; m++)
            {
                int wd = m * 8;
                Num = 8;
                WordPtr[0] = Convert.ToByte(wd >> 8);
                WordPtr[1] = Convert.ToByte(wd & 0x00FF);


                bool success = false;
                for (int k = 0; k < 10; k++)
                {
                    fCmdRet = RWDev.ExtReadData_G2(ref readerAddr, EPC, ENum, Mem, WordPtr, Num, Password,
                        MaskInfo.MaskMem, MaskInfo.MaskAdr, MaskInfo.MaskLen, MaskInfo.MaskData, Data, ref Errorcode);
                    if (fCmdRet == 0)
                    {
                        byte[] daw = new byte[Num * 2];
                        Array.Copy(Data, daw, Num * 2);
                        string temp = "字数:" + Convert.ToString(wd) + "~" + Convert.ToString(wd + 7) + "--" + ByteArrayToHexString(daw);
                        listboxContent.Items.Add(temp);
                        listboxContent.SelectedIndex = listboxContent.Items.Count - 1;
                        success = true;
                        break;
                    }
                }
                if (success == false)
                {
                    string temp = "字数:" + Convert.ToString(wd) + "~" + Convert.ToString(wd + 7) + "--读取失败";
                    listboxContent.Items.Add(temp);
                }
                Application.DoEvents();
                if (stopflag) break;
            }
        }
        #region 16进制字符串和字节数组相互转化
        /// <summary>
        /// 16进制字符串转化为字节数组
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        private byte[] HexStringToByteArray(string s)
        {
            s = s.Replace(" ", "");
            byte[] buffer = new byte[s.Length / 2];
            for (int i = 0; i < s.Length; i += 2)
                buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
            return buffer;
        }
        /// <summary>
        /// 字节数组转化为16进制字符串
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private string ByteArrayToHexString(byte[] data)
        {
            StringBuilder sb = new StringBuilder(data.Length * 3);
            foreach (byte b in data)
                sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
            return sb.ToString().ToUpper();
        }
        #endregion


        private void btnWrite_Click(object sender, EventArgs e)
        {
            listboxContent.Items.Clear();
            if (txtData.Text.Length != 16) return;
            int result = 0x30;
            byte WNum = 0;
            byte ENum = 0;
            byte Mem = 0;
            byte Num = 0;
            byte[] WordPtr = new byte[2];
            int Errorcode = 0;
            byte[] Password = new byte[4];
            byte[] Data = new byte[440];
            string str, str1;
            if (cbEPC.Items.Count == 0)
                return;
            str = cbEPC.SelectedItem.ToString();
            if (str == "")
                return;
            ENum = Convert.ToByte(str.Length / 4);
            byte[] EPC = new byte[ENum * 2];
            EPC = HexStringToByteArray(str);
            Mem = 3;
            WNum = 4;
            byte[] writedata = new byte[8];
            writedata = HexStringToByteArray(txtData.Text);
            Password = HexStringToByteArray("00000000");
            stopflag = false;
            for (int m = 0; m < 512; m++)
            {
                int wd = m * 8;
                Num = 8;
                WordPtr[0] = Convert.ToByte(wd >> 8);
                WordPtr[1] = Convert.ToByte(wd & 0x00FF);
                bool success = false;
                for (int k = 0; k < 10; k++)
                {
                    fCmdRet = RWDev.ExtWriteData_G2(ref readerAddr, EPC, WNum, ENum, Mem, WordPtr, writedata, Password, MaskInfo.MaskMem, MaskInfo.MaskAdr,
                     MaskInfo.MaskLen, MaskInfo.MaskData, ref Errorcode);
                    if (fCmdRet == 0)
                    {
                        string temp = "字数:" + Convert.ToString(wd) + "~" + Convert.ToString(wd + 7) + "--写入成功";
                        listboxContent.Items.Add(temp);
                        success = true;
                        break;
                    }
                }
                if (success == false)
                {
                    string temp = "字数:" + Convert.ToString(wd) + "~" + Convert.ToString(wd + 7) + "--写入失败";
                    listboxContent.Items.Add(temp);
                }
                Application.DoEvents();
                if (stopflag) break;
            }
        }


        private void button1_Click(object sender, EventArgs e)
        {
            stopflag = true;
        }
    }

}


奉上源码:仅供参考http://download.youkuaiyun.com/download/dapeng2513/10207048

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值