RFIDManagercs.cs 5.2 KB

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

namespace OnlineStore.DeviceLibrary
{
  public   class RFIDManager
    {
        public static Asa.RFID.ReaderAll RfidReader = new ReaderAll();
        private static int DefaultTrayNum = ConfigAppSettings.GetIntValue(Setting_Init.DefaultTrayNum);

        public static void Open(string[] iparray)
        {
            string path = Application.StartupPath + @"\logs\rfid\";
            RFIDManager.RfidReader.LogPath = path;
         //   string[] rfidArray = rfidList.ToArray();
            //连接rfip 
            RFIDManager.RfidReader.Open(iparray);
            RfidReader.GetValue += RfidReader_GetValue;
        }

        private static void RfidReader_GetValue(string s)
        {
            LogUtil.info("RfidReader_GetValue:" + s);
        }

        /// <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 string GetShelfId(int subType,out byte[] bytedata)
        {
            string ip = GetRFIP(subType, 1);
            RFIDData data= ReadRFID(ip);
            bytedata = data.ToData();
            if (data.RFType.Equals('B'))
            {
                return data.RFType.ToString() + "" + data.Num.ToString().PadLeft(2, '0');
            }else if (data.Num > 0)
            {
                LogUtil.error("RFID [ " + ip + " ] 读到数据 " + data.ToStr() + " 返回料架号为空");
            }
            return "";
        }
         
        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 static void Close()
        {
            try
            {
                RfidReader.Close();
            }catch(Exception ex)
            {
                LogUtil.error("关闭RFID出错:" + ex.ToString());
            }
        }
    }
    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 + "" + ((int)Num).ToString().PadLeft(2, '0');
            //return "  [" + RFType + "],[" + Num + "] ";
        } 
    }
}