using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library;
using Khd.Core.Wcs.Global;
using Khd.Core.Wcs.Wcs;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Data;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs
{
public class MainCentralControl
{
public static object QingKongDianWei = 0;
public static object WcsChuLiWanCheng = 1;
public static object WcsMoRenQuXiang = 1;
private readonly IHost _host;
///
/// 构造函数
///
///
public MainCentralControl(IHost host)
{
this._host = host;
}
///
/// 启动程序
///
public void Start()
{
LoggerUtils logger=new LoggerUtils();
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
try
{
StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();//设备交互用
StaticData.basePlcs = dbContext.BasePlc.ToList();//陈工Agv和设备信息推送
StaticData.BaseEquip = dbContext.BaseEquip.ToList();//设备信息
StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();//字典表,Agv任务模板
foreach (var plcConfig in StaticData.PlcConfigs)
{
if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code))
{
Plc.S7.Plc plc;
plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot);
try
{
plc.Open();
Console.WriteLine(DateTime.Now + ":连接PLC:" + plcConfig.IP);
}
catch
{
Console.WriteLine(DateTime.Now + ":连接Plc" + plcConfig.IP + "失败~~~~~~~");
}
StaticData.PlcDic.TryAdd(plcConfig.Code, plc);
}
}
//创建定时器
SystemTimer systemTimer = new SystemTimer(_host);
systemTimer.Start();
//创建任务
CreateTaskByRecord createTaskByRecord = new(_host);
createTaskByRecord.StartPoint();
//一楼提升机以及接驳位
FirstFloor firstFloor = new(_host);
firstFloor.StartPoint();
//二层接驳位
var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First();
SecondFloorPoint secondFloorPoint = new(_host, SecondBaseFloorEquip.floorNo.Value);
secondFloorPoint.StartPoint();
//二层AGV
var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First();
SecondFloorAGV secondFloorAGV = new(_host, SecondFloorAgvEquip.floorNo.Value);
secondFloorAGV.StartPoint();
//二楼线体
var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 17).First();
SecondFloorLine secondFloorLine = new(_host, SecondFloorLineEquip.floorNo.Value);
secondFloorLine.StartPoint();
//三层接驳位
var ThirdBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 1).First();
ThirdFloorPoint thirdFloorPoint = new(_host, ThirdBaseFloorEquip.floorNo.Value);
thirdFloorPoint.StartPoint();
//三层AGV
var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First();
ThirdFloorAGV thirdFloorAGV = new(_host, ThirdFloorAgvEquip.floorNo.Value);
thirdFloorAGV.StartPoint();
//四楼接驳位
FourthFloorPoint fourthFloorPoint = new FourthFloorPoint(_host, 4);
fourthFloorPoint.StartPoint();
//五层接驳位
var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First();
FiveFloorPoint fifthFloorPoint = new(_host, FifthBaseFloorEquip.floorNo.Value);
fifthFloorPoint.StartPoint();
//五层CTU
var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First();
FiveFloorCTU fiveFloorCTU = new(_host, FiveFloorCTUEquip.floorNo.Value);
fiveFloorCTU.StartPoint();
//五层AGV
var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First();
FiveFloorAGV fifthFloorAGV = new(_host, FifthFloorAgvEquip.floorNo.Value);
fifthFloorAGV.StartPoint();
//背负式Agv
var FifthFloorBearAgvEquip = StaticData.BaseEquip.Where(t => t.objid == 28).First();
FiveFloorBearAgv fiveFloorBearAgv = new(_host, FifthFloorBearAgvEquip.floorNo.Value);
fiveFloorBearAgv.StartPoint();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
logger.Error(ex.Message+"\n"+ex.StackTrace);
}
}
}
}