林豪 左 2 年之前
父节点
当前提交
fe57915c16

+ 0 - 4
WCS.Core/DataBlock.cs

@@ -40,10 +40,6 @@ namespace WCS.Core
                 lock (Entity.PLCInfo.Ex())
                 {
                     data = Entity.PLCInfo.Ex().Accessor.ReadBytes(Entity.No, Start, (ushort)(Length - Start));
-                    if (Entity.No == 83)
-                    {
-                        var a = 0;
-                    }
                 }
                 if (!Data.SequenceEqual(data))
                 {

+ 94 - 3
WCS.WorkEngineering/Extensions/DeviceExtension.cs

@@ -1,5 +1,9 @@
-using WCS.Core;
-using PLCType = WCS.Core.PLCType;
+using PlcSiemens.Core.Extension;
+using ServiceCenter.Logs;
+using ServiceCenter.Redis;
+using WCS.Core;
+using WCS.WorkEngineering.Protocol.BCR;
+using WCS.WorkEngineering.Protocol.Station;
 
 namespace WCS.WorkEngineering.Extensions
 {
@@ -54,7 +58,7 @@ namespace WCS.WorkEngineering.Extensions
                         Port = 102,
                         Rack = 0,
                         Slot = 1,
-                        Type = PLCType.Siemens
+                        //Type = PLCType.Siemens
                     }
                 }
             };
@@ -63,6 +67,93 @@ namespace WCS.WorkEngineering.Extensions
         }
 
         #endregion 协议操作扩展
+
+        #region 设备扩展方法
+
+        /// <summary>
+        ///  入库站点是否被禁止
+        /// </summary>
+        /// <returns></returns>
+        public static void 入库站点是否被禁止(this Device<IStation520, IStation521, IStation523, IStation91> device)
+        {
+            var config = RedisHub.Default.Check("ForbidTubuEnter") ?? throw new Exception("请在Redis中配置入库口禁用");
+            var configs = config.Split(",");
+            if (configs.Contains(device.Entity.Code)) throw new KnownException("当前入库口已被禁用,请联系运维人员了解具体情况", LogLevelEnum.High);
+        }
+
+        /// <summary>
+        ///  入库站点是否被禁止
+        /// </summary>
+        /// <returns></returns>
+        public static void 入库站点是否被禁止(this Device<IStation520, IStation521, IStation523, IBCR81> device)
+        {
+            var config = RedisHub.Default.Check("ForbidTubuEnter") ?? throw new Exception("请在Redis中配置入库口禁用");
+            var configs = config.Split(",");
+            if (configs.Contains(device.Entity.Code)) throw new KnownException("当前入库口已被禁用,请联系运维人员了解具体情况", LogLevelEnum.High);
+        }
+
+        /// <summary>
+        ///  入库站点是否被禁止
+        /// </summary>
+        /// <returns></returns>
+        public static void 入库站点是否被禁止(this Device<IStation520, IStation521, IStation523, IStation91, IBCR81> device)
+        {
+            var config = RedisHub.Default.Check("ForbidTubuEnter") ?? throw new Exception("请在Redis中配置入库口禁用");
+            var configs = config.Split(",");
+            if (configs.Contains(device.Entity.Code)) throw new KnownException("当前入库口已被禁用,请联系运维人员了解具体情况", LogLevelEnum.High);
+        }
+
+        /// <summary>
+        ///  入库站点是否满足执行条件
+        /// </summary>
+        /// <returns></returns>
+        public static void 入库站点是否满足执行条件(this Device<IStation520, IStation521, IStation523, IStation91> device)
+        {
+            if (device.Data.VoucherNo != device.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{device.Data.VoucherNo}-DB521:{device.Data2.VoucherNo}", LogLevelEnum.High);
+            if (device.Data3.Status.HasFlag(StationStatus.Run)) throw new KnownException("设备运行中", LogLevelEnum.Low);
+            if (device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 0) throw new KnownException("有光电无请求", LogLevelEnum.Mid);
+            if (!device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 1) throw new KnownException("无光电有请求", LogLevelEnum.Mid);
+            if (!device.Data3.Status.HasFlag(StationStatus.OT_Status)) throw new KnownException("站台货物信息与实际占用不一致", LogLevelEnum.Low);
+        }
+
+        /// <summary>
+        ///  入库站点是否满足执行条件
+        /// </summary>
+        /// <returns></returns>
+        public static void 入库站点是否满足执行条件(this Device<IStation520, IStation521, IStation523, IBCR81> device)
+        {
+            if (device.Data.VoucherNo != device.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{device.Data.VoucherNo}-DB521:{device.Data2.VoucherNo}", LogLevelEnum.High);
+            if (device.Data3.Status.HasFlag(StationStatus.Run)) throw new KnownException("设备运行中", LogLevelEnum.Low);
+            if (device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 0) throw new KnownException("有光电无请求", LogLevelEnum.Mid);
+            if (!device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 1) throw new KnownException("无光电有请求", LogLevelEnum.Mid);
+            if (!device.Data3.Status.HasFlag(StationStatus.OT_Status)) throw new KnownException("站台货物信息与实际占用不一致", LogLevelEnum.Low);
+        }
+
+        /// <summary>
+        ///  入库站点是否满足执行条件
+        /// </summary>
+        /// <returns></returns>
+        public static void 入库站点是否满足执行条件(this Device<IStation520, IStation521, IStation523, IStation91, IBCR81> device)
+        {
+            if (device.Data.VoucherNo != device.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{device.Data.VoucherNo}-DB521:{device.Data2.VoucherNo}", LogLevelEnum.High);
+            if (device.Data3.Status.HasFlag(StationStatus.Run)) throw new KnownException("设备运行中", LogLevelEnum.Low);
+            if (device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 0) throw new KnownException("有光电无请求", LogLevelEnum.Mid);
+            if (!device.Data3.Status.HasFlag(StationStatus.PH_Status) && device.Data2.Request == 1) throw new KnownException("无光电有请求", LogLevelEnum.Mid);
+            if (!device.Data3.Status.HasFlag(StationStatus.OT_Status)) throw new KnownException("站台货物信息与实际占用不一致", LogLevelEnum.Low);
+        }
+
+        /// <summary>
+        ///  获取BCR码
+        /// </summary>
+        /// <returns></returns>
+        public static string GetBCRCode(this IBCR81 bCR)
+        {
+            var barcode = bCR.Content.Trim('\0');
+            if (barcode.IsNullOrWhiteSpace()) throw new KnownException($"扫码失败,内容为空", LogLevelEnum.High);
+            return barcode;
+        }
+
+        #endregion 设备扩展方法
     }
 
     /// <summary>

+ 20 - 5
WCS.WorkEngineering/Extensions/TaskExtension.cs

@@ -1,9 +1,8 @@
-using ServiceCenter.Logs;
+using Newtonsoft.Json;
+using ServiceCenter.Logs;
+using ServiceCenter.Redis;
 using ServiceCenter.SqlSugars;
 using WCS.Entity;
-using WCS.WorkEngineering.WebApi.Controllers;
-using WCS.WorkEngineering.WebApi.Models.AGV.Response;
-using TaskStatus = WCS.Entity.TaskStatus;
 
 namespace WCS.WorkEngineering.Extensions
 {
@@ -115,7 +114,6 @@ namespace WCS.WorkEngineering.Extensions
         ///// <exception cref="KnownException"></exception>
         //public static WCS_TaskInfo GetOutTask(this WCS_TaskInfo taskInfo, SqlSugarHelper db, List<string> allOutCode, int floor, SRM obj, int index = 1)
         //{
-            
         //    return task;
         //}
 
@@ -129,5 +127,22 @@ namespace WCS.WorkEngineering.Extensions
             var id = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(v => v.Take(1)).Max(v => v.ID);
             return id + 1;
         }
+
+        /// <summary>
+        /// 更新任务执行记录
+        /// </summary>
+        /// <param name="task">任务信息</param>
+        public static void updateRedisHash(this WCS_TaskInfo task)
+        {
+            RedisHub.Default.HSet($"Hash:{task.ID}", task.ToDic());
+        }
+
+        public static Dictionary<string, string> ToDic<T>(this T obj) where T : class
+        {
+            Dictionary<string, string> map = new Dictionary<string, string>();
+            var objSte = JsonConvert.SerializeObject(obj);
+            map = JsonConvert.DeserializeObject<Dictionary<string, string>>(objSte);
+            return map;
+        }
     }
 }

+ 19 - 8
WCS.WorkEngineering/Protocol/BCR/IBCR83.cs

@@ -46,13 +46,24 @@ namespace WCS.WorkEngineering.Protocol.BCR
         [StringLength(50)]
         public string BcrCode11 { get; set; }
 
-        ///// <summary>
-        /////  获取历史扫码记录
-        ///// </summary>
-        ///// <returns></returns>
-        //public List<string> GetBcrCodeList()
-        //{
-        //    return new List<string>() { BcrCode1, BcrCode2, BcrCode3, BcrCode4, BcrCode5, BcrCode6, BcrCode7, BcrCode8, BcrCode9, BcrCode10, BcrCode11 };
-        //}
+        /// <summary>
+        ///  获取历史扫码记录
+        /// </summary>
+        /// <returns></returns>
+        public List<string> GetBcrCodeList()
+        {
+            return new List<string>() {
+                BcrCode1.Trim('\0'),
+                BcrCode2.Trim('\0'),
+                BcrCode3.Trim('\0'),
+                BcrCode4.Trim('\0'),
+                BcrCode5.Trim('\0'),
+                BcrCode6.Trim('\0'),
+                BcrCode7.Trim('\0'),
+                BcrCode8.Trim('\0'),
+                BcrCode9.Trim('\0'),
+                BcrCode10.Trim('\0'),
+                BcrCode11.Trim('\0') };
+        }
     }
 }

+ 0 - 44
WCS.WorkEngineering/ProtocolProxy.cs

@@ -57,50 +57,6 @@ namespace WCS.Service
 
         protected override void DataChanged()
         {
-            //if (Device.HasProtocol(typeof(IStation520)))
-            //{
-            //    if (DataPack.StationDatas == null)
-            //    {
-            //        DataPack.StationDatas = new DeviceDataCollection<StationData>();
-            //    }
-            //    DataPack.StationDatas.Datas.Append(new StationData()
-            //    {
-            //        Code = Device.Code,
-            //        D520 = Copy(this, typeof(IStation520).Assembly.GetTypes().Where(v => v.IsClass).Where(v => v.GetInterface(typeof(IStation520).Name) != null && v != this.GetType()).First()) as WCS_Station520,
-            //        D521 = Copy(this, typeof(IStation521).Assembly.GetTypes().Where(v => v.IsClass).Where(v => v.GetInterface(typeof(IStation521).Name) != null && v != this.GetType()).First()) as WCS_Station521,
-            //        D523 = Copy(this, typeof(IStation523).Assembly.GetTypes().Where(v => v.IsClass).Where(v => v.GetInterface(typeof(IStation523).Name) != null && v != this.GetType()).First()) as WCS_Station523,
-            //    }); ;
-            //    DataPack.StationDatas.Frame = DateTime.Now;
-            //}
-            //else if (Device.HasProtocol(typeof(ISRM520)))
-            //{
-            //    if (DataPack.SRMDatas == null)
-            //    {
-            //        DataPack.SRMDatas = new DeviceDataCollection<SRMData>();
-            //    }
-            //    DataPack.SRMDatas.Datas.Append(new SRMData()
-            //    {
-            //        Code = Device.Code,
-            //        D520 = Copy(this, typeof(ISRM520).Assembly.GetTypes().Where(v => v.IsClass).Where(v => v.GetInterface(typeof(ISRM520).Name) != null && v != this.GetType()).First()) as WCS_SRM520,
-            //        D521 = Copy(this, typeof(ISRM521).Assembly.GetTypes().Where(v => v.IsClass).Where(v => v.GetInterface(typeof(ISRM521).Name) != null && v != this.GetType()).First()) as WCS_SRM521,
-            //        D537 = Copy(this, typeof(ISRM537).Assembly.GetTypes().Where(v => v.IsClass).Where(v => v.GetInterface(typeof(ISRM537).Name) != null && v != this.GetType()).First()) as WCS_SRM537,
-            //    });
-            //    DataPack.SRMDatas.Frame = DateTime.Now;
-            //}
-            //else if (Device.HasProtocol(typeof(IBCR81)))
-            //{
-            //    if (DataPack.BcrDatas == null)
-            //    {
-            //        DataPack.BcrDatas = new DeviceDataCollection<BCRData>();
-            //    }
-            //    DataPack.BcrDatas.Datas.Append(new BCRData()
-            //    {
-            //        Code = Device.Code,
-            //        Bcr81 = Copy(this, typeof(IBCR81).Assembly.GetTypes().Where(v => v.IsClass).Where(v => v.GetInterface(typeof(IBCR81).Name) != null && v != this.GetType()).First()) as WCS_BCR81,
-            //    });
-            //    DataPack.BcrDatas.Frame = DateTime.Now;
-            //}
-            //DataPack.Frame = DateTime.Now;
         }
 
         private object Copy(object obj, Type type)

+ 1 - 1
WCS.WorkEngineering/Systems/NoInteractionSystems.cs

@@ -16,7 +16,7 @@ namespace WCS.WorkEngineering.Systems
     /// <summary>
     ///  无交互系统
     /// </summary>
-    [BelongTo(typeof(MainWorldd))]
+    //[BelongTo(typeof(MainWorldd))]
     [Description("无交互系统")]
     public class NoInteractionSystems : DeviceSystem<Station>
     {

+ 28 - 6
WCS.WorkEngineering/Systems/一楼扫码入库.cs

@@ -5,6 +5,9 @@ using WCS.Core;
 using WCS.Entity;
 using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.Protocol.BCR;
+using WCS.WorkEngineering.Protocol.Station;
+using WCS.WorkEngineering.WebApi.Controllers;
+using WCS.WorkEngineering.WebApi.Models.WMS.Request;
 using WCS.WorkEngineering.Worlds;
 
 namespace WCS.WorkEngineering.Systems
@@ -14,20 +17,17 @@ namespace WCS.WorkEngineering.Systems
     /// </summary>
     [BelongTo(typeof(MainWorld))]
     [Description("一楼扫码入库")]
-    public class 一楼扫码入库 : DeviceSystem<Station>
+    public class 一楼扫码入库 : DeviceSystem<Device<IStation520, IStation521, IStation523, IStation91, IBCR81>>
     {
         protected override bool ParallelDo => true;
 
         protected override bool SaveLogsToFile => true;
 
-        private List<BCR> BCRS = new List<BCR>();
-
         public 一楼扫码入库()
         {
-            BCRS = Device.All.Where(v => v.HasProtocol<IBCR81>()).Select(v => new BCR(v, World)).ToList();
         }
 
-        public override void Do(Station obj)
+        public override void Do(Device<IStation520, IStation521, IStation523, IStation91, IBCR81> obj)
         {
             obj.入库站点是否被禁止();
             obj.入库站点是否满足执行条件();
@@ -39,8 +39,30 @@ namespace WCS.WorkEngineering.Systems
                 {
                     var db = _db.Default;
                     //获取托盘条码
-                    var barcode = BCRS.GetBCRCode(obj.Entity.Code);
+                    var barcode = obj.Data5.GetBCRCode();
 
+                    //验证是否有对应的任务
+                    if (!db.Queryable<WCS_TaskInfo>().Any(v => v.BarCode == barcode))
+                    {
+                        WmsApi.OneFloorWorkerBuildEmptyPalletsStock(new OneFloorWorkerBuildEmptyPalletsStockRequest()
+                        {
+                            PalletCode = barcode,
+                            StartLoc = obj.Entity.Code,
+                        });
+                    }
+                    //找到对应的任务
+                    task = db.Queryable<WCS_TaskInfo>().First(v => v.BarCode == barcode);
+                    if (task.Status == Entity.TaskStatus.NewBuild)
+                    {
+                        //开始对任务进行处理
+                        task.Status = Entity.TaskStatus.ConveyorExecution;
+                        task.StartTime = DateTime.Now;
+                        task.SrmStation = task.AddrFrom;
+                        task.AddWCS_TASK_DTL(_db, obj.Entity.Code, "开始执行入库任务");
+                        db.Updateable(task).ExecuteCommand();
+                        task.updateRedisHash();
+                    }
+                    else return;
                 });
             }
             catch (Exception ex)

+ 5 - 8
WCS.WorkEngineering/Systems/湿拉满轮帘线芯股第一次扫码.cs

@@ -1,7 +1,7 @@
 using System.ComponentModel;
 using WCS.Core;
-using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.Protocol.BCR;
+using WCS.WorkEngineering.Protocol.Station;
 using WCS.WorkEngineering.WebApi.Controllers;
 using WCS.WorkEngineering.Worlds;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
@@ -13,20 +13,17 @@ namespace WCS.WorkEngineering.Systems
     /// </summary>
     [BelongTo(typeof(MainWorld))]
     [Description("湿拉满轮帘线芯股第一次扫码")]
-    public class 湿拉满轮帘线芯股第一次扫码 : DeviceSystem<Station>
+    public class 湿拉满轮帘线芯股第一次扫码 : DeviceSystem<Device<IStation520, IStation521, IStation523, IBCR83>>
     {
         protected override bool ParallelDo => true;
 
         protected override bool SaveLogsToFile => true;
 
-        public override void Do(Station obj)
+        public override void Do(Device<IStation520, IStation521, IStation523, IBCR83> obj)
         {
-            var dev = Device.All.FirstOrDefault(v => v.Code == obj.Entity.Code);
-            var bcr = new Device<IBCR83>(dev, World);
-
-            var bcrCode = bcr.Data.BcrCode1.Trim('\0');
+            var bcrCodeList = obj.Data4.GetBcrCodeList();
             //获取当前站台对应的编码信息
-            WmsApi.EnteMainLine(new List<string>());
+            WmsApi.EnteMainLine(bcrCodeList);
         }
 
         public override bool Select(Device dev)

+ 21 - 3
WCS.WorkEngineering/WebApi/Controllers/WmsApi.cs

@@ -363,11 +363,14 @@ namespace WCS.WorkEngineering.WebApi.Controllers
         /// <param name="codeList">工字轮条码组</param>
         /// <returns></returns>
         /// <exception cref="KnownException"></exception>
-        public static SRes? EnteMainLine(List<string> codeList)
+        public static SRes? OneFloorWorkerBuildEmptyPalletsStock(OneFloorWorkerBuildEmptyPalletsStockRequest reqDto)
         {
-            var res = APICaller.CallApi<SRes>(WMSUrl + "/api/FJ/EnteMainLine", new EnteMainLineRequest
+            var res = APICaller.CallApi<SRes>(WMSUrl + "/api/FJ/OneFloorWorkerBuildEmptyPalletsStock", new OneFloorWorkerBuildEmptyPalletsStockRequest
             {
-                IShapedWheelCodes = codeList
+                PalletCode = reqDto.PalletCode,
+                PalletType = reqDto.PalletType,
+                StartLoc = reqDto.StartLoc,
+                WareCode = GetWareCode(reqDto.StartLoc)
             });
             if (res.ResCode != ResponseStatusCodeEnum.Sucess)
             {
@@ -375,5 +378,20 @@ namespace WCS.WorkEngineering.WebApi.Controllers
             }
             return res;
         }
+
+        /// <summary>
+        ///  获取仓库号
+        /// </summary>
+        public static string GetWareCode(string add)
+        {
+            switch (add)
+            {
+                case "":
+                    return "1N";
+
+                default:
+                    return "";
+            }
+        }
     }
 }

+ 54 - 0
WCS.WorkEngineering/WebApi/Models/WMS/Request/OneFloorWorkerBuildEmptyPalletsStockRequest.cs

@@ -0,0 +1,54 @@
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    public class OneFloorWorkerBuildEmptyPalletsStockRequest
+    {/// <summary>
+     ///  托盘编码
+     /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public string PalletCode { get; set; }
+
+        /// <summary>
+        ///  托盘类型
+        /// </summary>
+        public PalletType PalletType { get; set; }
+
+        /// <summary>
+        ///  入库起始地址
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public string StartLoc { get; set; }
+
+        /// <summary>
+        ///  仓库编码
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public string WareCode { get; set; }
+
+        /// <summary>
+        ///  托盘数量
+        /// </summary>
+        [Description("托盘数量")]
+        public string PalletNum { get; set; }
+    }
+
+    /// <summary>
+    ///  托盘类型
+    /// </summary>
+    public enum PalletType
+    {
+        /// <summary>
+        ///  09使用的托盘
+        /// </summary>
+        [Description("09使用的托盘")]
+        Pallet09 = 1,
+
+        /// <summary>
+        ///  非09使用的托盘
+        /// </summary>
+        [Description("非09使用的托盘")]
+        PalletNo09 = 2,
+    }
+}

+ 20 - 15
WCS.WorkEngineering/WorkStart.cs

@@ -81,36 +81,41 @@ namespace WCS.WorkEngineering
 
             #region 520、521 交互线体会有520、521
 
+            //Item1表示线体号集合,Item2表示IP,Item3表示设备标识
             var list = new List<Tuple<List<int>, string, DeviceFlags>>()
             {
                 new Tuple<List<int>, string,DeviceFlags>(new List<int>(){1 },"10.30.37.166",DeviceFlags.满轮主线第一次扫码),
                 new Tuple<List<int>, string,DeviceFlags>(new List<int>(){22, 41, 61 },"10.30.37.166",DeviceFlags.主线分流点),
-                new Tuple<List<int>, string,DeviceFlags>(new List<int>(){418, },"10.30.37.166",DeviceFlags.主线分流点)
+                //new Tuple<List<int>, string,DeviceFlags>(new List<int>(){418, },"10.30.37.166",DeviceFlags.主线分流点)
             };
-            var db520523 = new List<int>() { 1, 22, 41, 61, };
-            for (int i = 0; i < db520523.Count; i++)
+
+            foreach (var item in list)
             {
-                var device = Device.All.FirstOrDefault(v => v.Code == db520523[i].ToString());
-                device.AddProtocol<IStation520>(i * 14, 520, "10.30.37.166");
-                device.AddProtocol<IStation521>(i * 16, 521, "10.30.37.166");
-                device.AddProtocol<IBCR83>(i * 602, 83, "10.30.37.166");
+                for (int i = 0; i < item.Item1.Count; i++)
+                {
+                    var device = Device.All.FirstOrDefault(v => v.Code == item.Item1[i].ToString());
+                    device.AddFlag(item.Item3);
+                    device.AddProtocol<IStation520>(i * 14, 520, item.Item2);
+                    device.AddProtocol<IStation521>(i * 16, 521, item.Item2);
+                }
             }
 
             #endregion 520、521 交互线体会有520、521
 
             #region 满轮扫码器
 
-            var list1 = new List<Tuple<List<int>, string, DeviceFlags>>()
+            var list1 = new List<Tuple<List<int>, string>>()
             {
-                new Tuple<List<int>, string,DeviceFlags>(new List<int>(){1 },"10.30.37.166",DeviceFlags.满轮主线第一次扫码),
-                new Tuple<List<int>, string,DeviceFlags>(new List<int>(){22, 41, 61 },"10.30.37.166",DeviceFlags.主线分流点)
+                new Tuple<List<int>, string>(new List<int>(){1 },"10.30.37.166"),
+                new Tuple<List<int>, string>(new List<int>(){22, 41, 61 },"10.30.37.166")
             };
-            for (int i = 0; i < db520523.Count; i++)
+            foreach (var item in list1)
             {
-                var device = Device.All.FirstOrDefault(v => v.Code == db520523[i].ToString());
-                device.AddProtocol<IStation520>(i * 14, 520, "10.30.37.166");
-                device.AddProtocol<IStation521>(i * 16, 521, "10.30.37.166");
-                device.AddProtocol<IBCR83>(i * 602, 83, "10.30.37.166");
+                for (int i = 0; i < item.Item1.Count; i++)
+                {
+                    var device = Device.All.FirstOrDefault(v => v.Code == item.Item1[i].ToString());
+                    device.AddProtocol<IBCR83>(i * 602, 83, item.Item2);
+                }
             }
 
             #endregion 满轮扫码器