Example #1
0
        protected ReadCardInfo HandleReadCardFrame(byte[] frame)
        {
            ReadCardInfo  info       = new ReadCardInfo(frame);
            ReturnMessage returnCode = CheckFrame(info);

            if (returnCode != ReturnMessage.Success)
            {
                info.ReturnValue = returnCode;
                return(info);
            }

            int len = frame.Length - 6;

            info.Data = new byte[len];
            Array.Copy(frame, 4, info.Data, 0, info.Data.Length); //拷贝数据

            info.ReturnValue = ReturnMessage.Success;
            return(info);
        }
Example #2
0
        /// <summary>
        /// 这个命令读取标签的保留区、EPC存储区、TID存储区或用户存储区中的数据。从指定的地址开始读,以字为单位。
        /// </summary>
        /// <param name="ENum">EPC号长度,以字为单位。EPC的长度在15个字以内,可以为0。超出范围,将返回参数错误信息。</param>
        /// <param name="EPC">要读取数据的标签的EPC号。长度根据所给的EPC号决定,EPC号以字为单位,且必须是整数个长度。高字在前,每个字的高字节在前。这里要求给出的是完整的EPC号。</param>
        /// <param name="Mem">一个字节。选择要读取的存储区。0x00:保留区;0x01:EPC存储区;0x02:TID存储区;0x03:用户存储区。其他值保留。若命令中出现了其它值,将返回参数出错的消息。</param>
        /// <param name="WordPtr">一个字节。指定要读取的字起始地址。0x00 表示从第一个字(第一个16位存储区)开始读,0x01表示从第2个字开始读,依次类推。</param>
        /// <param name="Num">一个字节。要读取的字的个数。不能设置为0x00,否则将返回参数错误信息。Num不能超过120,即最多读取120个字。若Num设置为0或者超过了120,将返回参数出错的消息。</param>
        /// <param name="Pwd">四个字节,这四个字节是访问密码。32位的访问密码的最高位在Pwd的第一字节(从左往右)的最高位,访问密码最低位在Pwd第四字节的最低位,Pwd的前两个字节放置访问密码的高字。只有当读保留区,并且相应存储区设置为密码锁、且标签的访问密码为非0的时候,才需要使用正确的访问密码。在其他情况下,Pwd为零或正确的访问密码。</param>
        /// <param name="MaskAdr">一个字节,掩模EPC号的起始字节地址。0x00表示从EPC号的最高字节开始掩模,0x01表示从EPC号的第二字节开始掩模,以此类推。</param>
        /// <param name="MaskLen">一个字节,掩模的字节数。掩模起始字节地址+掩模字节数不能大于EPC号字节长度,否则返回参数错误信息。</param>
        /// <returns></returns>
        public async Task <ReadCardInfo> ReadCardAsync(byte ENum, byte[] EPC, MemoryArea Mem,
                                                       byte WordPtr, byte Num, byte[] Pwd, byte MaskAdr, byte MaskLen)
        {
            byte[] frame = CreateReadCardFrame(ENum, EPC, Mem, WordPtr, Num, Pwd, MaskAdr, MaskLen);
            CommunicationReturnInfo cri = await com.SendAsync(frame);

            if (cri.ReturnValue != ReturnMessage.Success)
            {
                ReadCardInfo rci = new ReadCardInfo();
                rci.SendByte         = frame;
                rci.ReturnValue      = cri.ReturnValue;
                rci.ExceptionMessage = cri.ExceptionMessage;
                return(rci);
            }

            ReadCardInfo info = HandleReadCardFrame(cri.RecvByte);

            info.SendByte = frame;
            return(info);
        }