RFIDManager.cs 4.4 KB

using Asa.RFID;
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace OnlineStore.DeviceLibrary
{
    public class RFIDManager
    {
        private static bool IsOpen = false;
        public static void Open(string[] iparray)
        {
            if (IsOpen)
            {
                return;
            }
            try
            {
                RFIDAutoReader.Open(null,  iparray);
                IsOpen = true;
            }
            catch (Exception ex)
            {
                LogUtil.error("Open 出错:" + ex.ToString());
            }
        }

        public static RFIDData ReadRFID(string ip, bool isClear = false)
        {
            try
            {
                if (String.IsNullOrEmpty(ip).Equals(false))
                {
                    byte[] bdata = null;
                    if (isClear)
                    {

                        bdata = RFIDAutoReader.ReadAndClear(ip);
                    }
                    else
                    {
                        bdata = RFIDAutoReader.Read(ip);
                    }

                    if (bdata == null)
                    {
                        LogUtil.error("RFID [ " + ip + " ] 读到数据=null");
                    }
                    RFIDData data = new RFIDData(bdata);

                    //if (bdata == null || data.NumStr().EndsWith("00"))
                    //{
                    //    LogUtil.error("RFID [ " + ip + " ] 读到数据 [" + data.NumStr() + "] ,重连rfid并重新读取一次");

                    //    RFIDAutoReader.ReOpen(ip);

                    //    bdata = RFIDAutoReader.Read(ip, isClear);

                    //    data = new RFIDData(bdata);
                    //    LogUtil.error("RFID [ " + ip + " ] 重连后读取到数据 [" + data.NumStr() + "] ");
                    //}
                    return data;
                }
            }
            catch (Exception ex)
            {
                //LogUtil.error("ReadRFID["+ip+"]出错:" + ex.ToString());
            }
            return new RFIDData(0, 0);
        }


        public static void Close()
        {
            try
            {
                RFIDAutoReader.CloseAll();
            }
            catch (Exception ex)
            {
                LogUtil.error("关闭RFID出错:" + ex.ToString());
            }
        }

    }
    public class RFIDData
    {
        /// <summary>
        /// RFID类型,区分是料架还是托盘,托盘E=69,包装料料架A=65,料串=B
        /// </summary>
        public char RFType = '0';
        public int Num = 0;

        public RFIDData(int num, int t)
        {
            if (t < 65)
            {
                RFType = '0';
            }
            else
            {
                this.RFType = (char)t;
            }
            this.Num = num;
        }

        public RFIDData(byte[] data)
        {
            try
            {
                if (data != null && data.Length > 2)
                {
                    if (data[1] < 65)
                    {
                        RFType = '0';
                    }
                    else
                    {
                        RFType = (char)data[1];
                    }
                    Num = (int)(data[2]);
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("RFIP 数据【" + data + "】 获取编码失败");
            }
        }
        public byte[] ToData()
        {
            return new byte[] { (byte)RFType, (byte)Num };
        }
        public string NumStr()
        {
            return "" + RFType + "" + Num.ToString() + "";
        }

        internal static bool IsRealRfid(string shelfRfid)
        { 
            //判断料架号是否是真实的料架号
            if (shelfRfid.StartsWith("C") || shelfRfid.StartsWith("D"))
            {
                int num = -1;
                try
                {
                    num = Convert.ToInt32(shelfRfid.Substring(1, shelfRfid.Length - 1)); 
                }
                catch (Exception ex)
                { 
                }
                if (num > 0)
                {
                    return true;
                } 
            }
            return false;
        }
    }
}