Commit 6f6f9ebf 张东亮

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

1 个父辈 131d64c1
......@@ -16,7 +16,7 @@ namespace DeviceLibrary
{
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>();
private System.Timers.Timer AgvCallTimer;
......@@ -203,7 +203,7 @@ namespace DeviceLibrary
if (job != null)
{
agv.CurJob = job;
LogUtil.info($"{agv.Name} 收到任务 {job?.JobParam?.GetMissionInfo()?.missionId??""}");
LogUtil.info($"{agv.Name} 收到任务 {job?.JobParam?.GetMissionInfo()?.missionId??""} 【{JsonHelper.SerializeObject(job)}】");
}
}
else
......
......@@ -17,12 +17,12 @@ namespace DeviceLibrary
/// <summary>
/// 节点名称
/// </summary>
public string Name { get; set; }
public string Name { get; set; } = "";
public NodeType Type { get; set; }
/// <summary>
/// 所属车间
/// </summary>
public string Workshop { get; set; }
public string Workshop { get; set; } = "";
/// <summary>
/// 节点IP
/// </summary>
......
using Common;
using DeviceLibrary.bean;
using DeviceLibrary.bean.agv;
using DeviceLibrary.bean.job;
using DeviceLibrary.lift;
using DeviceLibrary.manager;
......@@ -40,7 +41,7 @@ namespace DeviceLibrary
{
JobParam.CrossDoor.CurNode = agv.Place;
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.IsAir = isair;
......@@ -50,6 +51,8 @@ namespace DeviceLibrary
else
{
JobRunStep.ToNextStep(RunStep.LineToLift_00_CrossDoor);
runInfo = $"无需过门,准备去取料点";
JobRunStep.Msg = runInfo;
}
......@@ -88,7 +91,7 @@ namespace DeviceLibrary
$"取车"));
JobParam.CrossDoor.CurNode = JobParam.SrcNode;
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.IsAir = isair;
......@@ -184,7 +187,13 @@ namespace DeviceLibrary
else if (lift.LiftContext.IsDoorOpen(JobParam.CurTargetNode.Name, JobParam.GetMissionInfo().sourceFloor, 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);
MissionInfo missionInfo = MissionManager.GetMission(JobParam.LiftStatus?.missionId ?? "");
......
......@@ -33,7 +33,8 @@ namespace DeviceLibrary
{
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
if (missionInfo == null && agv.Scope.Workshop.Equals(SettingString._4D))
{
......@@ -42,8 +43,6 @@ namespace DeviceLibrary
if (missionInfo != null)
{
if (!liftname.Equals(missionInfo?.liftName))
return null;
if (AgvAtPlace(agv, liftname))
return null;
if (service.model.MissionInfo.IsFinishedProdcut(missionInfo))
......
......@@ -48,7 +48,7 @@ namespace DeviceLibrary.bean.jobType
//}
JobParam jobParam = new JobParam(src, dest, null, missionInfo);
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);
return new LineToLiftJob(jobParam);
......
......@@ -113,7 +113,7 @@ namespace DeviceLibrary.lift
}
}
/// <summary>
/// 同车间的其他小车是否占用电梯
/// 同一层的其他小车是否占用电梯
/// </summary>
/// <param name="agv"></param>
/// <param name="liftName"></param>
......@@ -122,11 +122,16 @@ namespace DeviceLibrary.lift
{
try
{
AgvInfo agvInfo = AGVManager.agvInfo.Find(s =>
s.Scope.Workshop.Equals(agv.Scope.Workshop) && !s.IP.Equals(agv.IP));
if (agvInfo != null)
var agvInfos = AGVManager.agvInfo.FindAll(s =>
s.Scope.Floor.Equals(agv.Scope.Floor) && !s.IP.Equals(agv.IP));
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
return false;
......@@ -159,7 +164,7 @@ namespace DeviceLibrary.lift
}
catch (Exception ex)
{
LogUtil.error($"OtherAGVIsInLift: {SettingString.LIFT_D2}", ex);
LogUtil.error($"F4AGVIsInD2Lift: {SettingString.LIFT_D2}", ex);
}
return false;
}
......
......@@ -348,7 +348,7 @@ namespace DeviceLibrary.manager
/// </summary>
/// <param name="missionType"></param>
/// <returns></returns>
public static MissionInfo GetReceiveMission(AgvInfo agv)
public static MissionInfo GetReceiveMission(AgvInfo agv,string liftId)
{
MissionInfo missionInfo = null;
try
......@@ -360,7 +360,7 @@ namespace DeviceLibrary.manager
&& agv.Scope.Tasks.Contains(s.projectType.ToString())
&& !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))
{
return missionInfo;
......@@ -933,6 +933,13 @@ namespace DeviceLibrary.manager
liftname = SettingString.LIFT_D2;
}
}
if (missionInfo.sourceWorkshop.Equals(SettingString._4D))
{
if (missionInfo.destinationWorkshop.StartsWith("1"))
{
liftname = SettingString.LIFT_D2;
}
}
break;
case ProjectType.空台车领用:
if (missionInfo.sourceWorkshop.Equals(SettingString._3D))
......
......@@ -223,24 +223,30 @@ namespace DeviceLibrary.manager
{
isIn = true;
isAirDoor = false;
if (cur == null) cur = agv.Place;
if (next == null) next = agv.Place;
try
{
if (agv.Scope.Workshop.Equals("1F")) return false;
if (agv.Scope.Workshop.Equals("3C")) return false;
if (agv.Scope.Workshop.Equals("4C"))
{
if (cur.Workshop.Equals("4C") && next.Type.Equals(NodeType.Lift)&& next.Name.Equals(SettingString.LIFT_D2))
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)))
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;
try
{
if (cur == null) cur = agv.Place;
if (next == null) next = agv.Place;
//4D/3D车间的AGV
if (cur.Workshop.Equals("4C") || next.Workshop.Equals("4C"))
{
if (next.Workshop.Equals("4C"))
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!