Esempio n. 1
0
        private WqrfidCmdPackage WaitRecvPackage(int timeOut)
        {
            DateTime st = System.DateTime.Now;

            if (timeOut > 5000)
            {
                timeOut = 5000;
            }
            string reStr = "";

            while (true)
            {
                Thread.Sleep(5);
                WqrfidCmdPackage package = ParseRecvData(ref reStr);
                DateTime         cur     = System.DateTime.Now;
                TimeSpan         ts      = cur - st;
                if (ts.TotalMilliseconds > timeOut)
                {
                    reStr = "PLC返回超时," + timeOut + "毫秒" + reStr;
                    Console.WriteLine(reStr);
                    return(null);
                }
                if (package != null)
                {
                    return(package);
                }
            }
            return(null);
        }
Esempio n. 2
0
 public byte[] ReadEPC()
 {
     try
     {
         lock (lockObj)
         {
             byte[] cmdBytes = new byte[] { 0x40, 0x06, 0xEE, 0x01, 0x00, 0x00, 0x00, 0xCB };
             if (!SendData(cmdBytes))
             {
                 return(null);
             }
             WqrfidCmdPackage package = WaitRecvPackage(recvTimeOut);
             if (package == null)
             {
                 Console.WriteLine("{0}读EPC失败,接收到的数据:{1}", this.readerIP, BytesToString(this.recBuffer.ToArray()));
                 return(null);
             }
             if (package.BootCode != 0xF0)
             {
                 Console.WriteLine("{0}读EPC失败,数据错误:{1}", this.readerIP, BytesToString(this.recBuffer.ToArray()));
                 return(null);
             }
             if (package.Cmd != 0xEE)
             {
                 Console.WriteLine("{0}读EPC失败,功能码错误,理论上功能码{1},实际:{2}", this.readerIP, "EE", package.Cmd.ToString("X2"));
                 return(null);
             }
             List <byte> epcList = new List <byte>();
             int         epcLen  = package.data[1] * 2;
             if (package.data.Count() < epcLen + 2)
             {
                 Console.WriteLine("{0}读EPC失败,EPC理论长度{1},实际:{2}", this.readerIP, epcLen, package.data.Count() - 2);
                 return(null);
             }
             for (int i = 0; i < epcLen + 1; i++)
             {
                 epcList.Add(package.data[1 + i]);
             }
             return(epcList.ToArray());
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.ToString());
         return(null);
     }
 }
Esempio n. 3
0
        private WqrfidCmdPackage ParseRecvData(ref string reStr)
        {
            lock (bufLock)
            {
                if (this.recBuffer.Count() < 4)
                {
                    reStr = "接收数据长度不足4字节";
                    return(null);
                }
                byte bootCode = this.recBuffer[0];
                byte len      = this.recBuffer[1];
                byte cmd      = this.recBuffer[2];

                int  sumLen = len + 2;
                byte check  = this.recBuffer[sumLen - 1];
                if (this.recBuffer.Count() < sumLen)
                {
                    reStr = string.Format("接收数据长度不足,理论长度:{0}", len + 2);
                    return(null);
                }
                byte[] packageSum = new byte[sumLen - 1];
                for (int i = 0; i < sumLen - 1; i++)
                {
                    packageSum[i] = this.recBuffer[i];
                }
                byte checkSum = CheckSum(packageSum);
                if (checkSum != check)
                {
                    reStr = string.Format("校验和错误,理论值:{0},接收到的值:{1}", checkSum, check);
                    return(null);
                }
                WqrfidCmdPackage package = new WqrfidCmdPackage();
                package.BootCode = bootCode;
                package.Length   = len;
                package.Cmd      = cmd;

                for (int i = 0; i < len - 2; i++)
                {
                    package.data.Add(recBuffer[i + 3]);
                }
                package.checkSum = checkSum;
                return(package);
            }
        }
Esempio n. 4
0
 public string ReadUID()
 {
     //throw new NotImplementedException();
     try
     {
         lock (lockObj)
         {
             string strUID   = "";
             byte[] epcBytes = ReadEPC();
             if (epcBytes == null || epcBytes.Count() < 2)
             {
                 return(string.Empty);
             }
             byte        epcWordLen = epcBytes[0];
             byte        mem        = 2;
             byte        addr       = 0;
             byte        len        = 6; //word长度
             List <byte> cmdBytes   = new List <byte>();
             cmdBytes.Add(0x40);
             cmdBytes.Add((byte)(10 + epcWordLen * 2));
             cmdBytes.Add(0xEC);
             cmdBytes.AddRange(epcBytes);
             cmdBytes.Add(mem);
             cmdBytes.Add(addr);
             cmdBytes.Add(len);
             cmdBytes.AddRange(AccPaswd);
             byte check = CheckSum(cmdBytes.ToArray());
             cmdBytes.Add(check);
             if (!SendData(cmdBytes.ToArray()))
             {
                 return(null);
             }
             WqrfidCmdPackage package = WaitRecvPackage(recvTimeOut);
             if (package == null)
             {
                 Console.WriteLine("{0}读EPC失败,接收到的数据:{1}", this.readerIP, BytesToString(this.recBuffer.ToArray()));
                 return(null);
             }
             if (package.BootCode != 0xF0)
             {
                 Console.WriteLine("{0}读EPC失败,数据错误:{1}", this.readerIP, BytesToString(this.recBuffer.ToArray()));
                 return(null);
             }
             if (package.Cmd != 0xEC)
             {
                 Console.WriteLine("{0}读EPC失败,功能码错误,理论上功能码{1},实际:{2}", this.readerIP, "EE", package.Cmd.ToString("X2"));
                 return(null);
             }
             strUID = "";
             foreach (byte b in package.data)
             {
                 strUID += b.ToString("X2");
             }
             return(strUID);
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.ToString());
         return(null);
     }
 }