RFIDManagercs.cs 4.0 KB
using Asa;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary
{
  public   class RFIDManager
    {
        public static RFID RfidReader = new RFID();
        private static int DefaultTrayNum = ConfigAppSettings.GetIntValue(Setting_Init.DefaultTrayNum);
        /// <summary>
        /// 获取托盘编码
        /// </summary> 
        public static int GetTrayNum(int subType, bool isClear = false)
        {
            if (DefaultTrayNum > 0)
            {
                return DefaultTrayNum;
            }
            //  return 9;
            if (subType.Equals(104))
            {
                return LineManager.Line.Sw23TrayNum;
            }
            else if (subType.Equals(101))
            {
                return LineManager.Line.Sw41TrayNum;
            }

            string ip = GetRFIP(subType);
            //获取盘号
            RFIDData data = ReadRFID(ip, isClear);
            if (data != null)
            {
                if (data.RFType.Equals((byte)'E'))
                {
                    return data.Num;
                }
                else if (data.RFType > 0)
                {
                    LogUtil.error("RFID [ " + ip + " ] 读到数据 " + data.ToStr() + " 返回盘号  0");
                }
                else
                {
                    LogUtil.debug("RFID [ " + ip + " ] 读到数据 " + data.ToStr() + " 返回盘号  0");
                }
                return 0;
            }

            return 0;
        }
        public static RFIDData GetShelfData(int subType)
        {
            string ip = GetRFIP(subType, 1);
            return ReadRFID(ip);
        }


        public static RFIDData ReadRFID(string ip, bool isClear = false)
        {
            try
            {
                if (String.IsNullOrEmpty(ip).Equals(false) && LineManager.Line.rfidList.Contains(ip))
                {
                    RFIDData data = new RFIDData(RfidReader.Read(ip));
                    if (isClear)
                    {
                        RfidReader.Clear(ip);
                    }
                    return data;
                }
            }
            catch (Exception ex)
            {
                //LogUtil.error("ReadRFID["+ip+"]出错:" + ex.ToString());
            }
            return new RFIDData(-1, -1);
        }

        public  static string GetRFIP(int subType, int rtType = 0)
        {
            string ip = "";
            string rtName = DeviceConfig.RFIP_Str + "_" + subType.ToString().PadLeft(3, '0');
            if (rtType > 0)
            {
                rtName += "-" + rtType.ToString();
            }
            if (DeviceConfig.ProRFIpMap.ContainsKey(rtName))
            {
                ip = DeviceConfig.ProRFIpMap[rtName];
            }
            return ip;
        }
    }
    public class RFIDData
    {
        /// <summary>
        /// RFID类型,区分是料架还是托盘,托盘E=69,A=65
        /// </summary>
        public int RFType = 0;
        /// <summary>
        /// 托盘编号,从1-32
        /// </summary>
        public int Num = 0;

        public RFIDData(int num, int t)
        {
            this.RFType = t;
            this.Num = num;
        }

        public RFIDData(byte[] data)
        {
            try
            {
                if (data != null && data.Length > 2)
                {
                    RFType = data[1];
                    Num = Convert.ToInt32(data[2]);
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("RFIP 数据【" + data + "】 获取编码失败");
            }
        }
        public byte[] ToData()
        {
            return new byte[] { (byte)RFType, (byte)Num };
        }
        public string ToStr()
        {
            return "  [" + RFType + "],[" + Num + "] ";
        }


    }
}