using PlcSiemens.Core.Extension; using PlcSiemens.ProtocolHandle; using ServiceCenter; using ServiceCenter.SqlSugars; using SqlSugar; using WCS.Core; using WCS.Entity; using WCS.Entity.Protocol.BCR; using WCS.Entity.Protocol.DataStructure; using WCS.Entity.Protocol.QT; using WCS.Entity.Protocol.RGV; using WCS.Entity.Protocol.Robot; using WCS.Entity.Protocol.SRM; using WCS.Entity.Protocol.Station; using WCS.Entity.Protocol.Truss; using WCS.WorkEngineering.Extensions; using WCS.WorkEngineering.Systems; using WCS.WorkEngineering.Systems.扭转检测; using wms.sqlsugar.model.fj; using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags; namespace WCS.WorkEngineering { /// /// 业务工程配置信息 /// public static class WorkStart { /// /// 初始化 设备信息 /// public static void InitializeDeviceInfo() { #region 帘线 AddDevices(2134, 2149, "{0:d}", (dev, i) => { if (i == 0) { dev.AddProtocol(0, 81, "10.30.39.41"); dev.AddFlag(DeviceFlags.扫码); } dev.AddProtocol(i * 14, 520, "10.30.39.41"); dev.AddProtocol(i * 16, 521, "10.30.39.41"); dev.AddProtocol(i * 12, 523, "10.30.39.41"); dev.AddFlag(DeviceFlags.输送机 | DeviceFlags.帘线); }); AddDevices(2258, 2284, "{0:d}", (dev, i) => { if (i == 0) { dev.AddProtocol(0, 81, "10.30.39.42"); dev.AddFlag(DeviceFlags.扫码); } dev.AddProtocol(i * 14, 520, "10.30.39.42"); dev.AddProtocol(i * 16, 521, "10.30.39.42"); dev.AddProtocol(i * 12, 523, "10.30.39.42"); dev.AddFlag(DeviceFlags.输送机 | DeviceFlags.帘线); }); AddDevices(2419, 2436, "{0:d}", (dev, i) => { if (i == 0) { dev.AddProtocol(0, 81, "10.30.39.43"); dev.AddFlag(DeviceFlags.扫码); } dev.AddProtocol(i * 14, 520, "10.30.39.43"); dev.AddProtocol(i * 16, 521, "10.30.39.43"); dev.AddProtocol(i * 12, 523, "10.30.39.43"); dev.AddFlag(DeviceFlags.输送机 | DeviceFlags.帘线); }); #endregion 帘线 #region 环线 AddDevices(3601, 3802, "{0:d}", (dev, i) => { dev.AddProtocol(i * 14, 520, "10.30.39.131"); dev.AddProtocol(i * 16, 521, "10.30.39.131"); dev.AddProtocol(i * 12, 523, "10.30.39.131"); dev.AddFlag(DeviceFlags.输送机); dev.AddFlag("Floor", "1"); }); SetPath(3752, 3753, 3755, 3756, 3757, 3758, 3759); SetPath(3753, 3760, 3761, 3763, 3764, 3765, 3766, 3767); SetPath(3761, 3771, 3772, 3774, 3775, 3776, 3777, 3778); AddDevices(3301, 3506, "{0:d}", (dev, i) => { dev.AddProtocol(i * 14, 520, "10.30.39.150"); dev.AddProtocol(i * 16, 521, "10.30.39.150"); dev.AddProtocol(i * 12, 523, "10.30.39.150"); dev.AddFlag(DeviceFlags.输送机); dev.AddFlag("Floor", "2"); }); SetPath(3452, 3453, 3455, 3456, 3457, 3458, 3459); SetPath(3453, 3460, 3461, 3463, 3464, 3465, 3466, 3467); SetPath(3461, 3471, 3472, 3474, 3475, 3476, 3477, 3478); AddDevices(3001, 3202, "{0:d}", (dev, i) => { dev.AddProtocol(i * 14, 520, "10.30.39.170"); dev.AddProtocol(i * 16, 521, "10.30.39.170"); dev.AddProtocol(i * 12, 523, "10.30.39.170"); dev.AddFlag(DeviceFlags.输送机); dev.AddFlag("Floor", "3"); }); SetPath(3152, 3153, 3155, 3156, 3157, 3158, 3159); SetPath(3153, 3160, 3161, 3163, 3164, 3165, 3166, 3167); SetPath(3161, 3171, 3172, 3174, 3175, 3176, 3177, 3178); Device.Find("3618").AddProtocol(256, 81, "10.30.39.131").SetFlag("入库扫码"); Device.Find("3318").AddProtocol(256, 81, "10.30.39.150").SetFlag("入库扫码"); Device.Find("3018").AddProtocol(256, 81, "10.30.39.170").SetFlag("入库扫码"); Device.Find("3752").AddProtocol(512, 81, "10.30.39.131").SetFlag("出库扫码"); Device.Find("3452").AddProtocol(512, 81, "10.30.39.150").SetFlag("出库扫码"); Device.Find("3152").AddProtocol(512, 81, "10.30.39.170").SetFlag("出库扫码"); "3633,3649,3665,3681,3697,3713,3729,3745".Split(',').For((dev, i) => { dev.AddFlag(DeviceFlags.入库 | DeviceFlags.巷道口); dev.AddFlag("Tunnel", $"{i + 1}"); var code = int.Parse(dev.Code) + 1; var d = Device.Find(code.ToString()).AddFlag("位置", "顶升").AddFlag("Tunnel", $"{i + 1}"); }); "3333,3349,3365,3381,3397,3413,3429,3445".Split(',').For((dev, i) => { dev.AddFlag(DeviceFlags.入库 | DeviceFlags.巷道口); dev.AddFlag("Tunnel", $"{i + 1}"); var code = int.Parse(dev.Code) + 1; var d = Device.Find(code.ToString()).AddFlag("位置", "顶升").AddFlag("Tunnel", $"{i + 1}"); }); "3033,3049,3065,3081,3097,3113,3129,3145".Split(',').For((dev, i) => { dev.AddFlag(DeviceFlags.入库 | DeviceFlags.巷道口); dev.AddFlag("Tunnel", $"{i + 1}"); var code = int.Parse(dev.Code) + 1; var d = Device.Find(code.ToString()).AddFlag("位置", "顶升").AddFlag("Tunnel", $"{i + 1}"); }); var sCode = 3020; for (int f = 0; f < 3; f++) { for (int i = 0; i < 8; i++) { var code = sCode + 16 * i; Device.Find(code.ToString()).AddFlag("位置", "巷道口放行"); Device.Find($"{code + 5}").AddFlag("位置", "堆垛机放货工位").AddFlag("Tunnel", $"{i + 1}"); Device.Find($"{code + 4}").AddFlag("位置", "堆垛机放货工位").AddFlag("Tunnel", $"{i + 1}"); } sCode += 300; } #endregion 环线 #region 成品码垛 AddDevices(5001, 5185, "{0:d}", (dev, i) => { dev.AddProtocol(i * 14, 520, "10.30.39.220"); dev.AddProtocol(i * 16, 521, "10.30.39.220"); dev.AddProtocol(i * 12, 523, "10.30.39.220"); dev.AddFlag(DeviceFlags.输送机); dev.SetFlag("装箱码垛"); }); AddDevices(5201, 5224, "{0:d}", (dev, i) => { var index = i + 200; dev.AddProtocol(index * 14, 520, "10.30.39.220"); dev.AddProtocol(index * 16, 521, "10.30.39.220"); dev.AddProtocol(index * 12, 523, "10.30.39.220"); dev.AddFlag(DeviceFlags.输送机); dev.SetFlag("装箱码垛"); }); AddDevices(5225, 5330, "{0:d}", (dev, i) => { var index = i + 224; dev.AddProtocol(index * 14, 520, "10.30.39.220"); dev.AddProtocol(index * 16, 521, "10.30.39.220"); dev.AddProtocol(index * 12, 523, "10.30.39.220"); dev.AddFlag(DeviceFlags.输送机); dev.SetFlag("装箱码垛"); }); Device.Find("5032").AddProtocol(8, 23, "10.30.39.220"); Device.Find("5038").AddProtocol(2560, 81, "10.30.39.220"); Device.Find("5251").AddProtocol(0, 525, "10.30.39.220"); Device.Find("5251").AddProtocol(0, 83, "10.30.39.220"); Device.Find("5038").AddProtocol(2796, 83, "10.30.39.220"); Device.Find("5056").AddFlag("码垛工位", "8090").AddFlag("位置", "缓存"); Device.Find("5070").AddFlag("码垛工位", "8090").AddFlag("位置", "缓存"); Device.Find("5086").AddFlag("码垛工位", "8092").AddFlag("位置", "缓存"); Device.Find("5100").AddFlag("码垛工位", "8092").AddFlag("位置", "缓存"); Device.Find("5310").AddFlag("码垛工位", "8096").AddFlag("位置", "缓存"); Device.Find("5295").AddFlag("码垛工位", "8096").AddFlag("位置", "缓存"); Device.Find("5280").AddFlag("码垛工位", "8098").AddFlag("位置", "缓存"); Device.Find("5265").AddFlag("码垛工位", "8098").AddFlag("位置", "缓存"); Device.Find("5135").AddFlag("码垛工位", "8090").AddFlag("位置", "抓取"); "5213,5214,5215".Split(',').For((dev, i) => { dev.AddFlag("Parent", "5135"); }); Device.Find("5146").AddFlag("码垛工位", "8092").AddFlag("位置", "抓取"); "5216,5217,5218".Split(',').For((dev, i) => { dev.AddFlag("Parent", "5146"); }); Device.Find("5158").AddFlag("码垛工位", "8096").AddFlag("位置", "抓取"); "5219,5220,5221".Split(',').For((dev, i) => { dev.AddFlag("Parent", "5158"); }); Device.Find("5169").AddFlag("码垛工位", "8098").AddFlag("位置", "抓取"); "5222,5223,5224".Split(',').For((dev, i) => { dev.AddFlag("Parent", "5169"); }); //Device.Find("5134").AddFlag("码垛工位", "8090").AddFlag("位置","扫码"); //Device.Find("5145").AddFlag("码垛工位", "8092").AddFlag("位置","扫码"); //Device.Find("5157").AddFlag("码垛工位", "8096").AddFlag("位置","扫码"); //Device.Find("5168").AddFlag("码垛工位", "8098").AddFlag("位置","扫码"); //码垛抓取扫码 //Device.Find("5131").AddProtocol(2794, 81, "10.30.39.220").AddFlag("码垛工位", "8090").AddFlag("位置", "扫码"); //Device.Find("5142").AddProtocol(3050, 81, "10.30.39.220").AddFlag("码垛工位", "8092").AddFlag("位置", "扫码"); //Device.Find("5154").AddProtocol(3306, 81, "10.30.39.220").AddFlag("码垛工位", "8096").AddFlag("位置", "扫码"); //Device.Find("5165").AddProtocol(3562, 81, "10.30.39.220").AddFlag("码垛工位", "8098").AddFlag("位置", "扫码"); //码垛抓取扫码 Device.Find("5126").AddProtocol(2794, 81, "10.30.39.220").AddFlag("码垛工位", "8090").AddFlag("位置", "扫码"); Device.Find("5137").AddProtocol(3050, 81, "10.30.39.220").AddFlag("码垛工位", "8092").AddFlag("位置", "扫码"); Device.Find("5149").AddProtocol(3306, 81, "10.30.39.220").AddFlag("码垛工位", "8096").AddFlag("位置", "扫码"); Device.Find("5160").AddProtocol(3562, 81, "10.30.39.220").AddFlag("码垛工位", "8098").AddFlag("位置", "扫码"); #endregion 成品码垛 #region 扭转检测 AddDevices(4000, 4285, "{0:d}", (dev, i) => { dev.AddProtocol(i * 14, 520, "10.30.39.190"); if (short.Parse(dev.Code) >= 4280) { dev.AddProtocol((i+12) * 16, 521, "10.30.39.190"); } else dev.AddProtocol(i * 16, 521, "10.30.39.190"); dev.AddProtocol(i * 12, 523, "10.30.39.190"); dev.SetFlag("扭转检测"); }); AddDevices(5186, 5197, "{0:d}", (dev, i) => { var index = (i + 1) + 275; dev.AddProtocol(index * 14, 520, "10.30.39.190"); dev.AddProtocol(index * 16, 521, "10.30.39.190"); dev.AddProtocol(index * 12, 523, "10.30.39.190"); dev.SetFlag("扭转异常"); }); Device.Find("4006").AddFlag("位置", "机台分配"); Device.Find("4087").AddFlag("位置", "机台分配"); var arr = new int[] { 4019, 4042, 4049, 4072, 4079, 4096, 4119, 4126, 4149, 4156 }; for (int i = 0; i < arr.Length; i++) { var convInCode = arr[i]; var dev = Device.Find(convInCode.ToString()); dev.AddProtocol(i * 256, 81, "10.30.39.190"); var st = new Device($"QT{i + 1}"); //st.AddProtocol(i * 40, 998, "10.30.39.190"); st.AddProtocol(i * 6, 51, "10.30.39.190"); st.AddTarget($"{short.Parse(dev.Code) + 1}"); dev.AddTarget(st.Code); } //出口 //4020,4028,4050,4058,4080,4097,4105,4127,4135,4157, SetPath(4006, 4007, 4010, 4011, 4013, 4014, 4230, 4231, 4016, 4017, 4018, 4019); SetPath(4011, 4029, 4030, 4031, 4032, 4033, 4034, 4036, 4037, 4240, 4241, 4039, 4040, 4041, 4042); SetPath(4034, 4044, 4045, 4242, 4243, 4046, 4047, 4048, 4049); SetPath(4034, 4059, 4060, 4061, 4062, 4063, 4064, 4066, 4067, 4248, 4249, 4069, 4070, 4071, 4072); SetPath(4064, 4074, 4075, 4250, 4251, 4076, 4077, 4078, 4079); SetPath(4087, 4088, 4090, 4091, 4254, 4255, 4093, 4094, 4095, 4096); SetPath(4088, 4106, 4107, 4108, 4109, 4110, 4111, 4113, 4114, 4260, 4261, 4116, 4117, 4118, 4119); SetPath(4111, 4121, 4122, 4262, 4263, 4123, 4124, 4125, 4126); SetPath(4111, 4136, 4137, 4138, 4139, 4140, 4141, 4143, 4144, 4268, 4269, 4146, 4147, 4148, 4149); SetPath(4141, 4151, 4152, 4270, 4271, 4153, 4154, 4155, 4156); #endregion 扭转检测 //return; #region 堆垛机 AddDevices(101, 108, "SRM{0:d}", (dev, i) => { var ip = $"10.30.40.{i * 13 + 1}"; dev.AddProtocol(0, 520, ip); dev.AddProtocol(0, 521, ip); dev.AddProtocol(0, 542, ip); dev.AddFlag("Floor", "1"); dev.AddFlag("Tunnel", $"{i + 1}"); }); AddDevices(201, 208, "SRM{0:d}", (dev, i) => { var ip = $"10.30.41.{i * 13 + 1}"; dev.AddProtocol(0, 520, ip); dev.AddProtocol(0, 521, ip); dev.AddProtocol(0, 542, ip); dev.AddFlag("Floor", "2"); dev.AddFlag("Tunnel", $"{i + 1}"); }); AddDevices(301, 308, "SRM{0:d}", (dev, i) => { var ip = $"10.30.41.{i * 13 + 105}"; dev.AddProtocol(0, 520, ip); dev.AddProtocol(0, 521, ip); dev.AddProtocol(0, 542, ip); dev.AddFlag("Floor", "3"); dev.AddFlag("Tunnel", $"{i + 1}"); }); #endregion 堆垛机 #region 机械手 AddDevices(1, 2, "Robot{0:d}", (dev, i) => { dev.AddProtocol(i * 24, 520, "10.30.43.117"); dev.AddProtocol(i * 34, 521, "10.30.43.117"); dev.AddProtocol(i * 4, 522, "10.30.43.117"); }); AddDevices("{0:d}", (dev, code, i) => { dev.AddProtocol((code - 8001) * 16, 521, "10.30.43.73"); dev.AddProtocol(i * 12, 530, "10.30.43.117"); dev.AddProtocol(i * 334, 531, "10.30.43.117"); var rbcode = $"Robot{i / 2 + 1}"; dev.AddFlag("Robot", rbcode); dev.AddFlag("位置", "码垛"); dev.SetFlag("装箱码垛"); }, 8090, 8092, 8096, 8098); #endregion 机械手 new Device("SXOut"); } private static Device[] AddDevices(int from, int to, string codeFormat, Action act) { var list = new List(); for (int i = from; i <= to; i++) { var dev = new Device(string.Format(codeFormat, i)); list.Add(dev); act(dev, i - from); } return list.ToArray(); } private static Device[] AddDevices(string codeFormat, Action act, params int[] codes) { var list = new List(); for (int i = 0; i < codes.Length; i++) { var code = codes[i]; var dev = new Device(string.Format(codeFormat, code)); list.Add(dev); act(dev, code, i); } return list.ToArray(); } private static void SetPath(params int[] codes) { SetPath(codes.Select(v => v.ToString()).ToArray()); } private static void SetPath(params string[] codes) { for (int i = 0; i < codes.Length - 1; i++) { var code = codes[i]; var code2 = codes[i + 1]; var dev = Device.Find(code); dev.AddTarget(code2); } } /// /// 初始化数据库连接 /// /// public static void InitDB(this List datas) { //初始化数据库 SqlSugarHelper.Do(db => { foreach (var connectionString in datas!) { var _db = db.Connect.GetConnectionScope(connectionString.Key); switch (connectionString.Key) { case "WCSDB"://WCS基本数据库 SqlSugarHelper.SetDefault(connectionString.Key); //_db.CodeFirst.InitTables(typeof(WCS_TaskOutSeq)); //_db.CodeFirst.InitTables(typeof(WCS_PlcData)); //_db.CodeFirst.InitTables(typeof(WCS_TaskInfo)); //_db.CodeFirst.InitTables(typeof(WCS_TaskDtl)); //_db.CodeFirst.InitTables(typeof(WCS_TaskOld)); //_db.CodeFirst.InitTables(typeof(WCS_AgvTaskInfo)); //_db.CodeFirst.InitTables(typeof(WCS_Palletizing)); //_db.CodeFirst.InitTables(typeof(WCS_PalletizingLayer)); //_db.CodeFirst.InitTables(typeof(WCS_PalletizingRow)); //_db.CodeFirst.InitTables(typeof(WCS_PalletizingLoc)); //_db.CodeFirst.InitTables(typeof(WCS_CacheLine)); //_db.CodeFirst.InitTables(typeof(WCS_CacheLineLoc)); break; case "WCSDlog"://WCS日志数据库 break; default: //其他库 break; }; }; }); } } internal static class Extentions { public static void For(this Array source, Action act) { for (int i = 0; i < source.Length; i++) { var code = source.GetValue(i).ToString(); var dev = Device.Find(code); act(dev, i); } } } }