Commit 6f6f9ebf 张东亮

一楼两料架在电梯不接问题

1 个父辈 131d64c1
...@@ -16,7 +16,7 @@ namespace DeviceLibrary ...@@ -16,7 +16,7 @@ namespace DeviceLibrary
{ {
public class Control public class Control
{ {
private static log4net.ILog log = log4net.LogManager.GetLogger("Control"); private static log4net.ILog log = LogUtil.LOGGER;
static Dictionary<string, RunInfo> runInfoMap = new Dictionary<string, RunInfo>(); static Dictionary<string, RunInfo> runInfoMap = new Dictionary<string, RunInfo>();
private System.Timers.Timer AgvCallTimer; private System.Timers.Timer AgvCallTimer;
...@@ -203,7 +203,7 @@ namespace DeviceLibrary ...@@ -203,7 +203,7 @@ namespace DeviceLibrary
if (job != null) if (job != null)
{ {
agv.CurJob = job; agv.CurJob = job;
LogUtil.info($"{agv.Name} 收到任务 {job?.JobParam?.GetMissionInfo()?.missionId??""}"); LogUtil.info($"{agv.Name} 收到任务 {job?.JobParam?.GetMissionInfo()?.missionId??""} 【{JsonHelper.SerializeObject(job)}】");
} }
} }
else else
......
...@@ -17,12 +17,12 @@ namespace DeviceLibrary ...@@ -17,12 +17,12 @@ namespace DeviceLibrary
/// <summary> /// <summary>
/// 节点名称 /// 节点名称
/// </summary> /// </summary>
public string Name { get; set; } public string Name { get; set; } = "";
public NodeType Type { get; set; } public NodeType Type { get; set; }
/// <summary> /// <summary>
/// 所属车间 /// 所属车间
/// </summary> /// </summary>
public string Workshop { get; set; } public string Workshop { get; set; } = "";
/// <summary> /// <summary>
/// 节点IP /// 节点IP
/// </summary> /// </summary>
......
using Common; using Common;
using DeviceLibrary.bean; using DeviceLibrary.bean;
using DeviceLibrary.bean.agv;
using DeviceLibrary.bean.job; using DeviceLibrary.bean.job;
using DeviceLibrary.lift; using DeviceLibrary.lift;
using DeviceLibrary.manager; using DeviceLibrary.manager;
...@@ -40,7 +41,7 @@ namespace DeviceLibrary ...@@ -40,7 +41,7 @@ namespace DeviceLibrary
{ {
JobParam.CrossDoor.CurNode = agv.Place; JobParam.CrossDoor.CurNode = agv.Place;
JobParam.CrossDoor.NextNode = JobParam.SrcNode; JobParam.CrossDoor.NextNode = JobParam.SrcNode;
if (NodeManager.NeedCrossDoor(agv,JobParam.CrossDoor.CurNode,JobParam.CrossDoor.NextNode, out bool isin, out bool isair)) if (NodeManager.NeedCrossDoor(agv, JobParam.CrossDoor.CurNode, JobParam.CrossDoor.NextNode, out bool isin, out bool isair))
{ {
JobParam.CrossDoor.IsIn = isin; JobParam.CrossDoor.IsIn = isin;
JobParam.CrossDoor.IsAir = isair; JobParam.CrossDoor.IsAir = isair;
...@@ -50,6 +51,8 @@ namespace DeviceLibrary ...@@ -50,6 +51,8 @@ namespace DeviceLibrary
else else
{ {
JobRunStep.ToNextStep(RunStep.LineToLift_00_CrossDoor); JobRunStep.ToNextStep(RunStep.LineToLift_00_CrossDoor);
runInfo = $"无需过门,准备去取料点";
JobRunStep.Msg = runInfo;
} }
...@@ -88,7 +91,7 @@ namespace DeviceLibrary ...@@ -88,7 +91,7 @@ namespace DeviceLibrary
$"取车")); $"取车"));
JobParam.CrossDoor.CurNode = JobParam.SrcNode; JobParam.CrossDoor.CurNode = JobParam.SrcNode;
JobParam.CrossDoor.NextNode = JobParam.CurTargetNode; JobParam.CrossDoor.NextNode = JobParam.CurTargetNode;
if (NodeManager.NeedCrossDoor(agv, JobParam.CrossDoor.CurNode,JobParam.CrossDoor.NextNode, out bool isin, out bool isair)) if (NodeManager.NeedCrossDoor(agv, JobParam.CrossDoor.CurNode, JobParam.CrossDoor.NextNode, out bool isin, out bool isair))
{ {
JobParam.CrossDoor.IsIn = isin; JobParam.CrossDoor.IsIn = isin;
JobParam.CrossDoor.IsAir = isair; JobParam.CrossDoor.IsAir = isair;
...@@ -184,7 +187,13 @@ namespace DeviceLibrary ...@@ -184,7 +187,13 @@ namespace DeviceLibrary
else if (lift.LiftContext.IsDoorOpen(JobParam.CurTargetNode.Name, JobParam.GetMissionInfo().sourceFloor, agv)) else if (lift.LiftContext.IsDoorOpen(JobParam.CurTargetNode.Name, JobParam.GetMissionInfo().sourceFloor, agv))
{ {
ChargePileManager.StopCharge(agv); ChargePileManager.StopCharge(agv);
if (lift.LiftContext.HasShelfNeedLeave(JobParam.CurTargetNode.Name, agv.Client, out JobParam.LiftStatus)) string liftClient = agv.Client;
if (agv.Scope.Workshop.Equals(SettingString._4C) && SettingString.LIFT_D2.Equals(JobParam.CurTargetNode.Name))
{
//4C车使用4D的标识
liftClient = $"{Common.AppConfigHelper.GetValue(SettingString.AppIdentity, "NEOTEL")}-{SettingString._4D}";
}
if (lift.LiftContext.HasShelfNeedLeave(JobParam.CurTargetNode.Name, liftClient, out JobParam.LiftStatus))
{ {
ChargePileManager.StopCharge(agv); ChargePileManager.StopCharge(agv);
MissionInfo missionInfo = MissionManager.GetMission(JobParam.LiftStatus?.missionId ?? ""); MissionInfo missionInfo = MissionManager.GetMission(JobParam.LiftStatus?.missionId ?? "");
......
...@@ -33,7 +33,8 @@ namespace DeviceLibrary ...@@ -33,7 +33,8 @@ namespace DeviceLibrary
{ {
if (agv.HasEmptyShelfInLift(out string liftname, out lift.LiftStatus lift))//!agv.Scope.Floor.Equals(1) && if (agv.HasEmptyShelfInLift(out string liftname, out lift.LiftStatus lift))//!agv.Scope.Floor.Equals(1) &&
{ {
service.model.MissionInfo missionInfo = manager.MissionManager.GetReceiveMission(agv); //问题:两电梯都有架子离开时,只能一个一个接
service.model.MissionInfo missionInfo = manager.MissionManager.GetReceiveMission(agv, liftname);
//检查是否是空台车领用 3D->4C //检查是否是空台车领用 3D->4C
if (missionInfo == null && agv.Scope.Workshop.Equals(SettingString._4D)) if (missionInfo == null && agv.Scope.Workshop.Equals(SettingString._4D))
{ {
...@@ -42,8 +43,6 @@ namespace DeviceLibrary ...@@ -42,8 +43,6 @@ namespace DeviceLibrary
if (missionInfo != null) if (missionInfo != null)
{ {
if (!liftname.Equals(missionInfo?.liftName))
return null;
if (AgvAtPlace(agv, liftname)) if (AgvAtPlace(agv, liftname))
return null; return null;
if (service.model.MissionInfo.IsFinishedProdcut(missionInfo)) if (service.model.MissionInfo.IsFinishedProdcut(missionInfo))
......
...@@ -48,7 +48,7 @@ namespace DeviceLibrary.bean.jobType ...@@ -48,7 +48,7 @@ namespace DeviceLibrary.bean.jobType
//} //}
JobParam jobParam = new JobParam(src, dest, null, missionInfo); JobParam jobParam = new JobParam(src, dest, null, missionInfo);
MissionManager.SetMissionOccupied(missionInfo, agv); MissionManager.SetMissionOccupied(missionInfo, agv);
MissionManager.Log.Info($"执行任务[{agv.Name}][LineToLiftJobType]{JsonHelper.SerializeObject(missionInfo)}"); MissionManager.Log.Info($"[{agv.Name}]执行任务[LineToLiftJobType]【{JsonHelper.SerializeObject(missionInfo)}】");
//任务状态变更 //任务状态变更
MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.已分配, out string msg); MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.已分配, out string msg);
return new LineToLiftJob(jobParam); return new LineToLiftJob(jobParam);
......
...@@ -113,7 +113,7 @@ namespace DeviceLibrary.lift ...@@ -113,7 +113,7 @@ namespace DeviceLibrary.lift
} }
} }
/// <summary> /// <summary>
/// 同车间的其他小车是否占用电梯 /// 同一层的其他小车是否占用电梯
/// </summary> /// </summary>
/// <param name="agv"></param> /// <param name="agv"></param>
/// <param name="liftName"></param> /// <param name="liftName"></param>
...@@ -122,11 +122,16 @@ namespace DeviceLibrary.lift ...@@ -122,11 +122,16 @@ namespace DeviceLibrary.lift
{ {
try try
{ {
AgvInfo agvInfo = AGVManager.agvInfo.Find(s => var agvInfos = AGVManager.agvInfo.FindAll(s =>
s.Scope.Workshop.Equals(agv.Scope.Workshop) && !s.IP.Equals(agv.IP)); s.Scope.Floor.Equals(agv.Scope.Floor) && !s.IP.Equals(agv.IP));
if (agvInfo != null) if (agvInfos != null)
{ {
return lifts[liftName].Agvs.Contains(agvInfo.Name); //return lifts[liftName].Agvs.Contains(agvInfo.Name);
foreach (var item in agvInfos)
{
if (lifts[liftName].Agvs.Contains(item.Name))
return true;
}
} }
else else
return false; return false;
...@@ -159,7 +164,7 @@ namespace DeviceLibrary.lift ...@@ -159,7 +164,7 @@ namespace DeviceLibrary.lift
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error($"OtherAGVIsInLift: {SettingString.LIFT_D2}", ex); LogUtil.error($"F4AGVIsInD2Lift: {SettingString.LIFT_D2}", ex);
} }
return false; return false;
} }
......
...@@ -348,7 +348,7 @@ namespace DeviceLibrary.manager ...@@ -348,7 +348,7 @@ namespace DeviceLibrary.manager
/// </summary> /// </summary>
/// <param name="missionType"></param> /// <param name="missionType"></param>
/// <returns></returns> /// <returns></returns>
public static MissionInfo GetReceiveMission(AgvInfo agv) public static MissionInfo GetReceiveMission(AgvInfo agv,string liftId)
{ {
MissionInfo missionInfo = null; MissionInfo missionInfo = null;
try try
...@@ -360,7 +360,7 @@ namespace DeviceLibrary.manager ...@@ -360,7 +360,7 @@ namespace DeviceLibrary.manager
&& agv.Scope.Tasks.Contains(s.projectType.ToString()) && agv.Scope.Tasks.Contains(s.projectType.ToString())
&& !s.projectType.Equals(ProjectType.移远成品入库) && !s.projectType.Equals(ProjectType.移远成品入库)
&& !s.projectType.Equals(ProjectType.钢网入库) && !s.projectType.Equals(ProjectType.钢网入库)
&& !s.projectType.Equals(ProjectType.钢网领用)); && !s.projectType.Equals(ProjectType.钢网领用)&& s.liftName.Equals(liftId));
if (missionInfo != null && AgvCanGetMission(missionInfo)) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
return missionInfo; return missionInfo;
...@@ -933,6 +933,13 @@ namespace DeviceLibrary.manager ...@@ -933,6 +933,13 @@ namespace DeviceLibrary.manager
liftname = SettingString.LIFT_D2; liftname = SettingString.LIFT_D2;
} }
} }
if (missionInfo.sourceWorkshop.Equals(SettingString._4D))
{
if (missionInfo.destinationWorkshop.StartsWith("1"))
{
liftname = SettingString.LIFT_D2;
}
}
break; break;
case ProjectType.空台车领用: case ProjectType.空台车领用:
if (missionInfo.sourceWorkshop.Equals(SettingString._3D)) if (missionInfo.sourceWorkshop.Equals(SettingString._3D))
......
...@@ -223,24 +223,30 @@ namespace DeviceLibrary.manager ...@@ -223,24 +223,30 @@ namespace DeviceLibrary.manager
{ {
isIn = true; isIn = true;
isAirDoor = false; isAirDoor = false;
if (agv.Scope.Workshop.Equals("1F")) return false; if (cur == null) cur = agv.Place;
if (agv.Scope.Workshop.Equals("4C")) if (next == null) next = agv.Place;
try
{ {
if (cur.Workshop.Equals("4C") && next.Type.Equals(NodeType.Lift)&& next.Name.Equals(SettingString.LIFT_D2)) if (agv.Scope.Workshop.Equals("1F")) return false;
{ if (agv.Scope.Workshop.Equals("3C")) return false;
isIn = false; if (agv.Scope.Workshop.Equals("4C"))
return true;
}
else if ((cur.Workshop.Equals("4D")||(cur.Type.Equals(NodeType.Lift) && cur.Name.Equals(SettingString.LIFT_D2))) && (next.Type.Equals(NodeType.Standby) || next.Type.Equals(NodeType.AutoCharge)))
{ {
return true; if (cur.Workshop.Equals("4C") && next.Type.Equals(NodeType.Lift) && next.Name.Equals(SettingString.LIFT_D2))
{
isIn = false;
return true;
}
else if ((cur.Workshop.Equals("4D") || (cur.Type.Equals(NodeType.Lift)
&& cur.Name.Equals(SettingString.LIFT_D2))) &&
(next.Type.Equals(NodeType.Standby) || next.Type.Equals(NodeType.AutoCharge)))
{
return true;
}
else
return false;
} }
}
if (agv.Scope.Workshop.Equals("3C")) return false; //4D/3D车间的AGV
try
{
if (cur == null) cur = agv.Place;
if (next == null) next = agv.Place;
if (cur.Workshop.Equals("4C") || next.Workshop.Equals("4C")) if (cur.Workshop.Equals("4C") || next.Workshop.Equals("4C"))
{ {
if (next.Workshop.Equals("4C")) if (next.Workshop.Equals("4C"))
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!