using PlcSiemens.Core.Extension;
using ServiceCenter;
using ServiceCenter.Logs;
using ServiceCenter.Redis;
using ServiceCenter.SqlSugars;
using System.Diagnostics;
using WCS.Core;
using WCS.Entity.Protocol;
using WCS.Entity.Protocol.BCR;
using WCS.Entity.Protocol.DataStructure;
using WCS.Entity.Protocol.HUB;
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 DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
namespace WCS.WorkEngineering
{
///
/// 业务工程配置信息
///
public static class WorkStart
{
///
/// 初始化 设备信息
///
public static void InitializeDeviceInfo()
{
#region 初始化RGV相关信息
List RgvInfo = new List
{
new RgvSegmentInfo( 1, "10.30.37.113"), //库一北
new RgvSegmentInfo( 2, "10.30.37.118"), //库一南
new RgvSegmentInfo( 3, "10.30.37.123"), //库二北
new RgvSegmentInfo( 4, "10.30.37.128"), //库二南
new RgvSegmentInfo( 5, "10.30.37.133"), //库三北
new RgvSegmentInfo( 6, "10.30.37.138"), //库三南
};
foreach (var item in RgvInfo)
{
var conv = new Device($"RGV{item.Code}");
conv.AddFlag(DeviceFlags.RGV);
conv.AddProtocol(0, 520, item.Ip);
conv.AddProtocol(0, 521, item.Ip);
conv.AddProtocol(0, 523, item.Ip);
}
#endregion 初始化RGV相关信息
#region 初始化输送机相关信息
#region 基本信息
#region 托盘线输送线
var tuples = new List>>>
{
//分拣库一
new("10.30.37.89",new List>()
{
new(1601, 1620),
new(2501, 2540),
new(2701, 2740),
new(1661, 1690),
}),
//分拣库二
new("10.30.37.97",new List>()
{
new(1621, 1640),
new(2901, 2940),
new(3101, 3140),
new(1691, 1720),
}),
//分拣库三
new("10.30.37.105",new List>()
{
new(1641, 1660),
new(3301, 3340),
new(3501, 3540),
new(1721, 1750)
})
};
foreach (var item in tuples)
{
var db520 = 0;
var db521 = 0;
var db523 = 0;
foreach (var item1 in item.Item2)
{
for (var i = item1.Item1; i <= item1.Item2; i++)
{
var conv = new Device(i.ToString());
conv.AddFlag(DeviceFlags.输送机);
conv.AddProtocol(db520, 520, item.Item1);
conv.AddProtocol(db521, 521, item.Item1);
conv.AddProtocol(db523, 523, item.Item1);
db520 += 14;
db521 += 16;
db523 += 12;
}
}
}
#endregion 托盘线输送线
#region 满轮输送线
#region DB523,所有线体都会有DB523
var mLtuples523 = new List>>>()
{
new("10.30.37.166",new List>() //北侧满轮主线
{
new(1, 100),
new(9001, 9010),//暂用,无意义
new(401, 599),
new(801,999),
new(1201,1399),
}),
new("10.30.37.198",new List>() //南侧满轮主线
{
new(101, 210),
new(601, 799),
new(1001, 1199),
new(1401,1599),
new(341,379),
})
};
foreach (var item in mLtuples523)
{
var db523 = 0;
var db524 = 0;
foreach (var item1 in item.Item2)
{
for (var i = item1.Item1; i <= item1.Item2; i++)
{
var conv = new Device(i.ToString());
conv.AddFlag(DeviceFlags.输送机);
conv.AddProtocol(db523, 523, item.Item1);
conv.AddProtocol(db524, 524, item.Item1);
db523 += 12;
db524 += 16;
}
}
}
#endregion DB523,所有线体都会有DB523
#region 520、521 交互线体会有520、521
//Item2表示线体号集合,Item1表示IP
var mLTuples520 = new List>>()
{
//北侧
new("10.30.37.166",new List() {1,22,41,61,418,426,435,444,455,466,480,494,508,522,536,550,564,578,591,818,826,835,844,855,866,880,894,908,922,936,950,964,978,991,1218,1226,1235,1244,1255,1266,1280,1294,1308,1322,1336,1350,1364,1378,1391}),
//南侧
new("10.30.37.198",new List(){101,122,141,161,618,626,635,644,655,666,680,694,708,722,736,750,764,778,791,1018,1026,1035,1044,1055,1066,1080,1094,1108,1122,1136,1150,1164,1178,1191,1418,1426,1435,1444,1455,1466,1480,1494,1508,1522,1536,1550,1564,1578,1591})
};
foreach (var item in mLTuples520)
{
var db520 = 0;
var db521 = 0;
foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
{
if (device != null)
{
device.AddProtocol(db520, 520, item.Item1);
device.AddProtocol(db521, 521, item.Item1);
}
db520 += 14;
db521 += 16;
}
}
#endregion 520、521 交互线体会有520、521
#region 满轮扫码器
//Item2表示线体号集合,Item1表示IP
var mLTuples83 = new List>>()
{
new("10.30.37.166",new List(){3,14,18,22,38,323,41,58,61}) ,
new("10.30.37.198",new List(){101,114,118,122,138,363,141,158,161})
};
foreach (var item in mLTuples83)
{
var db83 = 0;
foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
{
device?.AddProtocol(db83, 83, item.Item1);
db83 += 604;
}
}
#endregion 满轮扫码器
#region 满轮线告诉分拣预分配
//Item2表示线体号集合,Item1表示IP
var mLTuples525 = new List>>()
{
new("10.30.37.166",new List(){18,38,58}),
new("10.30.37.198",new List(){118,138,158}),
};
foreach (var item in mLTuples525)
{
var db525 = 0;
foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
{
device?.AddProtocol(db525, 525, item.Item1);
db525 += 3266;
}
}
#endregion 满轮线告诉分拣预分配
#region 外检信息
//Item2表示线体号集合,Item1表示IP
var mLTuples91 = new List>>()
{
new("10.30.37.166",new List(){418,818,1218}),
new("10.30.37.198",new List(){618,1018,1418})
};
foreach (var item in mLTuples91)
{
var db91 = 0;
foreach (var device in item.Item2.Select(item2 => Device.All.FirstOrDefault(v => v.Code == item2.ToString())))
{
device?.AddProtocol(db91, 91, item.Item1);
db91 += 14;
}
}
#endregion 外检信息
#endregion 满轮输送线
#endregion 基本信息
#region 托盘线扫码器
var bcrInfo = new List
{
new(new [] { "2532", "2732" }, "10.30.37.89"),
new(new [] { "2932", "3132" }, "10.30.37.97"),
//new(new [] { "2532", "2732" }, "10.30.37.105"),
new(new [] {"RGV1"},"10.30.37.113"),
new(new [] {"RGV2"},"10.30.37.118"),
new(new [] {"RGV3"},"10.30.37.123"),
new(new [] {"RGV4"},"10.30.37.128"),
new(new [] {"RGV5"},"10.30.37.133"),
new(new [] {"RGV6"},"10.30.37.138")
};
foreach (var item in bcrInfo)
{
for (var i = 0; i < item.DeviceNo.Length; i++)
{
var device = Device.All.FirstOrDefault(v => v.Code == item.DeviceNo[i]);
device.AddFlag(DeviceFlags.扫码);
var pos = i * 20;
device.AddProtocol(pos, 81, item.Ip);
}
}
#endregion 托盘线扫码器
#region 外检信息
List shapeInfo = new List
{
new ShapeInfo(new int[] { 2732,2532 }, "10.30.37.89"),
new ShapeInfo(new int[] { 2932, 3132 }, "10.30.37.97"),
//new ShapeInfo(new int[] { 2732,2532 }, "10.30.37.105")
};
foreach (var item in shapeInfo)
{
for (int i = 0; i < item.DeviceNo.Length; i++)
{
var conv = Device.All.FirstOrDefault(x => x.Code == item.DeviceNo[i].ToString());
conv.AddFlag(DeviceFlags.外检);
int pos = i * 14;
conv.AddProtocol(pos, 91, item.Ip);
}
}
#endregion 外检信息
#endregion 初始化输送机相关信息
#region 初始化桁架相关信息
List TrussInfo = new List
{
new TrussSegmentInfo( 1, "10.30.37.211"),
new TrussSegmentInfo( 2, "10.30.37.217"),
new TrussSegmentInfo( 3, "10.30.37.223")
};
foreach (var item in TrussInfo)
{
var conv = new Device($"Truss{item.Code}");
conv.AddFlag(DeviceFlags.桁架);
conv.AddProtocol(0, 520, item.Ip);
conv.AddProtocol(0, 521, item.Ip);
conv.AddProtocol(0, 522, item.Ip);
}
var tuples1 = new List>>
{
//桁架
new("10.30.37.211",new List(){1685,1686,1687,1688,1689,1690,1675,1674,1673,1672,1671,1670,1677,1678,1679,1680,1665,1664,1663,1662}), //分拣库一
new("10.30.37.217",new List(){1715,1716,1717,1718,1719,1720,1705,1704,1703,1702,1701,1700,1707,1708,1709,1710,1695,1694,1693,1692}), //分拣库二
new("10.30.37.223",new List(){1745,1746,1747,1748,1749,1750,1735,1734,1733,1732,1731,1730,1737,1738,1739,1740,1725,1724,1723,1722}), //分拣库三
};
foreach (var item in tuples1)
{
var db530 = 0;
var db531 = 0;
foreach (var conv in item.Item2.Select(item1 => Device.All.FirstOrDefault(x => x.Code == item1.ToString())))
{
conv!.AddProtocol(db530, 530, item.Item1);
conv!.AddProtocol(db531, 531, item.Item1);
db530 += 18;
db531 += 250;
if (conv.Code == "1662")
{
var a = 0;
}
}
}
var tuples21 = new List>>
{
//机械臂
new("10.30.37.230",new List(){ 1666, 1661}), //库一北
new("10.30.37.232",new List(){ 1681, 1676}), //库一南
new("10.30.37.234",new List(){ 1696, 1691}), //库二北
new("10.30.37.236",new List(){ 1711, 1706}), //库二南
new("10.30.37.238",new List(){ 1726, 1721}), //库三北
new("10.30.37.240",new List(){ 1741, 1736 }), //库三南
};
foreach (var item in tuples21)
{
var db530 = 0;
var db531 = 0;
foreach (var conv in item.Item2.Select(item1 => Device.All.FirstOrDefault(x => x.Code == item1.ToString())))
{
conv!.AddProtocol(db530, 530, item.Item1);
conv!.AddProtocol(db531, 531, item.Item1);
db530 += 8;
db531 += 130;
}
}
#endregion 初始化桁架相关信息
#region 初始化机械臂相关信息
List TrussInfo1 = new List
{
new( 1, "10.30.37.230"),
new( 2, "10.30.37.232"),
new( 3, "10.30.37.234"),
new( 4, "10.30.37.236"),
new( 5, "10.30.37.238"),
new( 6, "10.30.37.240"),
};
foreach (var item in TrussInfo1)
{
var conv = new Device($"Robot{item.Code}");
conv.AddFlag(DeviceFlags.Robot);
conv.AddProtocol(0, 520, item.Ip);
conv.AddProtocol(0, 521, item.Ip);
conv.AddProtocol(0, 522, item.Ip);
}
#endregion 初始化机械臂相关信息
#region 初始化堆垛机相关信息
int ip = 41;
for (int i = 0; i <= 5; i++)
{
var srm = new Device($"SRM{i + 1}");
srm.AddFlag(DeviceFlags.堆垛机);
ip = i == 0 ? ip : ip + 8;
//三台堆垛机IP主机位分别是 41、49、57、65、73、81
srm.AddProtocol(0, 520, $"10.30.37.{ip}");
srm.AddProtocol(0, 521, $"10.30.37.{ip}");
srm.AddProtocol(0, 523, $"10.30.37.{ip}");
//增加巷道
var tunnel = new Device($"TY{i + 1}");
tunnel.AddFlag(DeviceFlags.巷道);
}
#endregion 初始化堆垛机相关信息
}
///
/// 初始化数据库连接
///
///
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基本数据库
break;
case "WCSDlog"://WCS日志数据库
break;
case "PLC"://PLC
SqlSugarHelper.SetPLC(connectionString.Key);
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
// _db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
//_db.CodeFirst.InitTables();
break;
default: //其他库
break;
};
};
});
}
}
public class DevDbConfig
{
public DevDbConfig()
{
}
public DevDbConfig(string ip, T code)
{
IP = ip;
Code = code;
}
public DevDbConfig(string ip, List> devIntervalList)
{
IP = ip;
DevIntervalList = devIntervalList;
}
public DevDbConfig(string ip, List devCodeList)
{
IP = ip;
DevCodeList = devCodeList;
}
public string IP { get; set; }
public T Code { get; set; }
public T StartCode { get; set; }
public T EndCode { get; set; }
public List DevCodeList { get; set; }
public List> DevIntervalList { get; set; }
}
public class DevInterval
{
public DevInterval(T s, T e)
{
StartCode = s;
EndCode = e;
}
public T StartCode { get; set; }
public T EndCode { get; set; }
}
}