|
|
|
@ -64,7 +64,6 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
this.RFID001 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("RFID001"));
|
|
|
|
this.RFID001 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("RFID001"));
|
|
|
|
//到位信号 读
|
|
|
|
//到位信号 读
|
|
|
|
this.linesignal01 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("linesignal01"));
|
|
|
|
this.linesignal01 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("FirstFloorLine") && t.plcpointNo.Contains("linesignal01"));
|
|
|
|
|
|
|
|
|
|
|
|
//一楼提升机流水号 读
|
|
|
|
//一楼提升机流水号 读
|
|
|
|
this.serialno06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("serialno06"));
|
|
|
|
this.serialno06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("serialno06"));
|
|
|
|
this.mesClose = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("mesclose"));
|
|
|
|
this.mesClose = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("mesclose"));
|
|
|
|
@ -87,27 +86,19 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
/// </summary>
|
|
|
|
/// </summary>
|
|
|
|
public void StartPoint()
|
|
|
|
public void StartPoint()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Thread firstFloorLine = new(FirstFloorLine)
|
|
|
|
Thread firstFloorLine = new(FirstFloorLine)//一楼接驳位线程
|
|
|
|
{
|
|
|
|
{
|
|
|
|
IsBackground = true
|
|
|
|
IsBackground = true
|
|
|
|
};
|
|
|
|
};
|
|
|
|
firstFloorLine.Start();
|
|
|
|
firstFloorLine.Start();
|
|
|
|
Console.WriteLine(DateTime.Now + ":一楼接驳位线程启动成功");
|
|
|
|
|
|
|
|
LogManager.Info("一楼接驳位线程启动成功");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Thread firstFloorHoister = new(FirstFloorHoister)
|
|
|
|
Thread firstFloorHoister = new(FirstFloorHoister)//提升机
|
|
|
|
{
|
|
|
|
{
|
|
|
|
IsBackground = true
|
|
|
|
IsBackground = true
|
|
|
|
};
|
|
|
|
};
|
|
|
|
firstFloorHoister.Start();
|
|
|
|
firstFloorHoister.Start();
|
|
|
|
|
|
|
|
|
|
|
|
//Thread CallEmptyThread = new Thread(CallEmpty)
|
|
|
|
Thread equipStatusThread = new Thread(EquipStatusLogic)//设备状态,1-5楼接驳位能不能送货,提升机和小车任务
|
|
|
|
//{
|
|
|
|
|
|
|
|
// IsBackground = true
|
|
|
|
|
|
|
|
//};
|
|
|
|
|
|
|
|
//CallEmptyThread.Start();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Thread equipStatusThread = new Thread(EquipStatusLogic)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
IsBackground = true
|
|
|
|
IsBackground = true
|
|
|
|
};
|
|
|
|
};
|
|
|
|
@ -134,28 +125,28 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
if (Convert.ToInt32(lineSignal) == 1)
|
|
|
|
if (Convert.ToInt32(lineSignal) == 1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i);
|
|
|
|
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i);
|
|
|
|
if (baseEquip.equipStatus != 1)
|
|
|
|
if (baseEquip.equipStatus != 1)//不是忙碌状态,改为忙碌状态
|
|
|
|
{
|
|
|
|
{
|
|
|
|
baseEquip.equipStatus = 1;
|
|
|
|
baseEquip.equipStatus = 1;
|
|
|
|
dbContext.Update(baseEquip);
|
|
|
|
dbContext.Update(baseEquip);
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
//else
|
|
|
|
{
|
|
|
|
//{
|
|
|
|
bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == i || t.currPointId == i).Any();
|
|
|
|
// bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == i || t.currPointId == i).Any();
|
|
|
|
if (!hasTask)
|
|
|
|
// if (!hasTask)
|
|
|
|
{
|
|
|
|
// {
|
|
|
|
baseEquip.equipStatus = 0;
|
|
|
|
// baseEquip.equipStatus = 0;
|
|
|
|
dbContext.Update(baseEquip);
|
|
|
|
// dbContext.Update(baseEquip);
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
// dbContext.SaveChanges();
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
//}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i);
|
|
|
|
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i);
|
|
|
|
bool hasCmd = dbContext.WcsCmd.Where(t => t.nextPointId == i || t.currPointId == i).Any();
|
|
|
|
bool hasCmd = dbContext.WcsCmd.Where(t => t.nextPointId == i || t.currPointId == i).Any();//小车任务
|
|
|
|
bool hasTask = dbContext.WcsTask.Where(t => (t.currPointId == i || t.endPointId == i) && t.taskStatus >= 1 && t.nextPointId == 6).Any();
|
|
|
|
bool hasTask = dbContext.WcsTask.Where(t => (t.currPointId == i || t.endPointId == i) && t.taskStatus >= 1 && t.nextPointId == 6).Any();//提升机任务,有没有正在执行的往这个接驳位送的
|
|
|
|
if (!hasCmd || !hasTask)
|
|
|
|
if (!hasCmd || !hasTask)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
baseEquip.containerNo = null;
|
|
|
|
baseEquip.containerNo = null;
|
|
|
|
@ -163,7 +154,7 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
dbContext.Update(baseEquip);
|
|
|
|
dbContext.Update(baseEquip);
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else//接驳位改为忙碌状态
|
|
|
|
{
|
|
|
|
{
|
|
|
|
baseEquip.containerNo = null;
|
|
|
|
baseEquip.containerNo = null;
|
|
|
|
baseEquip.equipStatus = 1;
|
|
|
|
baseEquip.equipStatus = 1;
|
|
|
|
@ -305,7 +296,7 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
{
|
|
|
|
{
|
|
|
|
try
|
|
|
|
try
|
|
|
|
{
|
|
|
|
{
|
|
|
|
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
|
|
|
|
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());//上次查出1,不加这行,数据库实际2,查出1
|
|
|
|
var RFID001Value = StaticData.PlcDic[0].ReadRFID(this.RFID001.plcpointAddress); //一楼RFID 读
|
|
|
|
var RFID001Value = StaticData.PlcDic[0].ReadRFID(this.RFID001.plcpointAddress); //一楼RFID 读
|
|
|
|
var linesignal01Value = StaticData.PlcDic[0].Read(this.linesignal01.plcpointAddress); //到位信号 读
|
|
|
|
var linesignal01Value = StaticData.PlcDic[0].Read(this.linesignal01.plcpointAddress); //到位信号 读
|
|
|
|
//正常读到plc值
|
|
|
|
//正常读到plc值
|
|
|
|
@ -400,7 +391,7 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (string.IsNullOrEmpty(task.containerNo))
|
|
|
|
if (string.IsNullOrEmpty(task.containerNo))//人工调出
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (task.useFlag == 1)
|
|
|
|
if (task.useFlag == 1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
@ -514,7 +505,7 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo);
|
|
|
|
BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo);
|
|
|
|
if (wcsTask.containerNo == StaticData.PlcDic[0].ReadRFID(floorPoint.plcpointAddress) || (string.IsNullOrEmpty(wcsTask.containerNo) && wcsTask.qty > 1))
|
|
|
|
if (wcsTask.containerNo == StaticData.PlcDic[0].ReadRFID(floorPoint.plcpointAddress) || (string.IsNullOrEmpty(wcsTask.containerNo) && wcsTask.qty > 1))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)
|
|
|
|
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//当前楼层和起始楼层一致
|
|
|
|
{
|
|
|
|
{
|
|
|
|
wcsTask.taskStatus = 2;
|
|
|
|
wcsTask.taskStatus = 2;
|
|
|
|
wcsTask.updateBy = "提升机线程";
|
|
|
|
wcsTask.updateBy = "提升机线程";
|
|
|
|
@ -531,7 +522,7 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
dbContext.Update(lineEquip);
|
|
|
|
dbContext.Update(lineEquip);
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else//当前楼层和起始楼层不一致
|
|
|
|
{
|
|
|
|
{
|
|
|
|
wcsTask.taskStatus = 1;
|
|
|
|
wcsTask.taskStatus = 1;
|
|
|
|
wcsTask.updateBy = "提升机线程";
|
|
|
|
wcsTask.updateBy = "提升机线程";
|
|
|
|
@ -589,20 +580,20 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3,且当前楼层为任务的目的楼层
|
|
|
|
if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3,且当前楼层为任务的目的楼层
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (wcsTask.floorNo == 1)
|
|
|
|
if (wcsTask.floorNo == 1)//目的楼层是1
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (ReadEmptyLocation())
|
|
|
|
if (ReadEmptyLocation())//托盘库是否有任务,没有任务返回true
|
|
|
|
{
|
|
|
|
{
|
|
|
|
var linesignal = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == $"linesignal0{wcsTask.floorNo}").plcpointAddress);
|
|
|
|
var linesignal = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == $"linesignal0{wcsTask.floorNo}").plcpointAddress);
|
|
|
|
if (linesignal != null && Convert.ToInt32(linesignal) == 0)
|
|
|
|
if (linesignal != null && Convert.ToInt32(linesignal) == 0)//接驳位外侧没有东西
|
|
|
|
{
|
|
|
|
{
|
|
|
|
BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}");
|
|
|
|
BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}");
|
|
|
|
var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress);
|
|
|
|
var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress);
|
|
|
|
if (clearPoint != null && Convert.ToBoolean(clearValue) == true)
|
|
|
|
if (clearPoint != null && Convert.ToBoolean(clearValue) == true)//是否有报警
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Console.WriteLine(DateTime.Now + ":提升机下发报警消除指令");
|
|
|
|
Console.WriteLine(DateTime.Now + ":提升机下发报警消除指令");
|
|
|
|
LogManager.Info("提升机下发报警消除指令");
|
|
|
|
LogManager.Info("提升机下发报警消除指令");
|
|
|
|
StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, false, clearPoint.plcpointLength.ToString());
|
|
|
|
StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, false, clearPoint.plcpointLength.ToString());//清除报警
|
|
|
|
}
|
|
|
|
}
|
|
|
|
wcsTask.taskStatus = 4;
|
|
|
|
wcsTask.taskStatus = 4;
|
|
|
|
wcsTask.updateBy = "提升机线程";
|
|
|
|
wcsTask.updateBy = "提升机线程";
|
|
|
|
@ -616,11 +607,11 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" });
|
|
|
|
dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" });
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else//接驳位外侧有东西
|
|
|
|
{
|
|
|
|
{
|
|
|
|
BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}");
|
|
|
|
BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}");
|
|
|
|
var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress);
|
|
|
|
var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress);
|
|
|
|
if (clearPoint != null && Convert.ToBoolean(clearValue)==false)
|
|
|
|
if (clearPoint != null && Convert.ToBoolean(clearValue) == false)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, true, clearPoint.plcpointLength.ToString());
|
|
|
|
StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, true, clearPoint.plcpointLength.ToString());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -651,16 +642,16 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.equipmentNo == $"clear0{wcsTask.floorNo}");
|
|
|
|
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}");
|
|
|
|
StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
|
|
|
|
StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (wcsTask.taskStatus == 4)
|
|
|
|
else if (wcsTask.taskStatus == 4)//提升机任务结束
|
|
|
|
{
|
|
|
|
{
|
|
|
|
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.floorNo && t.plcpointNo.Contains("wcsrun"));
|
|
|
|
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.floorNo && t.plcpointNo.Contains("wcsrun"));
|
|
|
|
var wcsRun = StaticData.PlcDic[0].Read(basePlcpoint.plcpointAddress);
|
|
|
|
var wcsRun = StaticData.PlcDic[0].Read(basePlcpoint.plcpointAddress);
|
|
|
|
if (wcsRun != null && Convert.ToInt32(wcsRun) == 0)
|
|
|
|
if (wcsRun != null && Convert.ToInt32(wcsRun) == 0)//判断当前接驳位的任务状态,wcsrrun如果是1代表入库,2是出库,0是空闲
|
|
|
|
{
|
|
|
|
{
|
|
|
|
BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
|
|
|
|
BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
|
|
|
|
wcsTask.nextPointId = floorEquip.objid;
|
|
|
|
wcsTask.nextPointId = floorEquip.objid;
|
|
|
|
@ -683,7 +674,7 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else//同步楼层,屏蔽状态
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (currentfloor06Value != null && targetfloor06Value != null)
|
|
|
|
if (currentfloor06Value != null && targetfloor06Value != null)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|