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); }
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); } }
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); } }
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); } }