Commit 6ab2f9c9 张东亮

4D到4C逻辑

1 个父辈 f2e11805
......@@ -92,7 +92,6 @@
<Compile Include="bean\jobType\F1LiftC1ToLiftD2JobType.cs" />
<Compile Include="bean\jobType\F1LiftD2ToLiftC1JobType.cs" />
<Compile Include="bean\jobType\SteelLineToLiftJobType.cs" />
<Compile Include="bean\jobType\LineToLineJobType.cs" />
<Compile Include="bean\jobType\RecoveryJobType.cs" />
<Compile Include="bean\jobType\LineOneToManyJobType.cs" />
<Compile Include="bean\jobType\ToLiftGetShelfJobType.cs" />
......
......@@ -353,10 +353,13 @@ namespace DeviceLibrary.bean
/// 顶起料车
/// </summary>
SD_Line_OneToMany_02_PutShelfOn,
SD_Line_OneToMany_03_1_CrossDoor,
SD_Line_OneToMany_03_2_CrossTwoDoor,
/// <summary>
/// 去线体
/// </summary>
SD_Line_OneToMany_03_ToLine,
/// <summary>
/// 到达线体,上报位置
/// </summary>
......@@ -369,6 +372,8 @@ namespace DeviceLibrary.bean
/// 检查下一线体
/// </summary>
SD_Line_OneToMany_06_CheckNextLine,
SD_Line_OneToMany_07_CrossTwoDoor,
SD_Line_OneToMany_07_CrossDoor,
/// <summary>
/// 返回至取料位置
/// </summary>
......
......@@ -21,6 +21,7 @@ namespace DeviceLibrary.bean.job
lift.LiftStatus liftStatus;
public override Job Run(AgvInfo agv)
{
Job job = this;
if (JobRunStep.IsStep(RunStep.NONE))
{
JobRunStep.ToNextStep(RunStep.SD_Line_OneToMany_01_ToPickUpPosition);
......@@ -51,18 +52,58 @@ namespace DeviceLibrary.bean.job
{
if (agv.TaskRunState.CheckTaskFinished(agv))
{
JobRunStep.ToNextStep(RunStep.SD_Line_OneToMany_03_ToLine);
//上报运输状态
manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.auto,
$"取车"));
runInfo = $"在{JobParam.SrcNode.AliceName}拾取料车完成,去{JobParam.CurTargetNode.AliceName}的放料点";
//任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.送料, out string msg);
ToTakeShelfOff(agv, $"{JobParam.CurTargetNode.Name}");
JobRunStep.Msg = runInfo;
//是否需要跨两个门
if (NodeManager.NeedCrossTwoDoor(agv, JobParam.SrcNode, JobParam.CurTargetNode))
{
JobParam.CrossDoor.CurNode = JobParam.SrcNode;
JobParam.CrossDoor.NextNode = JobParam.CurTargetNode;
JobParam.CrossDoor.IsIn = true;
JobParam.CrossDoor.IsAir = false;
GenJobCallBack(this.GetType(), RunStep.SD_Line_OneToMany_03_2_CrossTwoDoor, JobParam);
job = new CrossDoorJob(JobParam);
}
//是否需要跨门
else if (NodeManager.NeedCrossDoor(agv, JobParam.SrcNode, JobParam.CurTargetNode, out bool isin, out bool isair))
{
JobParam.CrossDoor.CurNode = JobParam.SrcNode;
JobParam.CrossDoor.NextNode = JobParam.CurTargetNode;
JobParam.CrossDoor.IsIn = isin;
JobParam.CrossDoor.IsAir = isair;
GenJobCallBack(this.GetType(), RunStep.SD_Line_OneToMany_03_1_CrossDoor, JobParam);
job = new CrossDoorJob(JobParam);
}
else
{
JobRunStep.ToNextStep(RunStep.SD_Line_OneToMany_03_ToLine);
runInfo = $"在{JobParam.SrcNode.AliceName}拾取料车完成,去{JobParam.CurTargetNode.AliceName}的放料点";
ToTakeShelfOff(agv, $"{JobParam.CurTargetNode.Name}");
JobRunStep.Msg = runInfo;
}
}
}
else if (JobRunStep.IsStep(RunStep.SD_Line_OneToMany_03_2_CrossTwoDoor))
{
JobParam.CrossDoor.CurNode = JobParam.SrcNode;
JobParam.CrossDoor.NextNode = JobParam.CurTargetNode;
JobParam.CrossDoor.IsIn = true;
JobParam.CrossDoor.IsAir = true;
GenJobCallBack(this.GetType(), RunStep.SD_Line_OneToMany_03_1_CrossDoor, JobParam);
job = new CrossDoorJob(JobParam);
}
else if (JobRunStep.IsStep(RunStep.SD_Line_OneToMany_03_1_CrossDoor))
{
JobRunStep.ToNextStep(RunStep.SD_Line_OneToMany_03_ToLine);
runInfo = $"去{JobParam.CurTargetNode.AliceName}的放料点";
ToTakeShelfOff(agv, GetTargetName(JobParam.CurTargetNode));
JobRunStep.Msg = runInfo;
}
else if (JobRunStep.IsStep(RunStep.SD_Line_OneToMany_03_ToLine))
{
if (agv.TaskRunState.CheckTaskFinished(agv))
......@@ -126,24 +167,59 @@ namespace DeviceLibrary.bean.job
{
if (JobParam.TargetNodes != null && JobParam.TargetNodes.Count > 0)
{
JobRunStep.ToNextStep(RunStep.SD_Line_OneToMany_03_ToLine);
JobParam.CurTargetNode = JobParam.TargetNodes[0];
JobParam.TargetNodes.RemoveAt(0);
System.Threading.Thread.Sleep(1000);
runInfo = $"去下一线体{JobParam.CurTargetNode.AliceName}的放料点";
JobRunStep.Msg = runInfo;
ToTakeShelfOff(agv, $"{JobParam.CurTargetNode.Name}");
if (NodeManager.NeedCrossDoor(agv, agv.Place, JobParam.CurTargetNode, out bool isin, out bool isair))
{
JobParam.CrossDoor.CurNode = agv.Place;
JobParam.CrossDoor.NextNode = JobParam.CurTargetNode;
JobParam.CrossDoor.IsIn = isin;
JobParam.CrossDoor.IsAir = isair;
GenJobCallBack(this.GetType(), RunStep.SD_Line_OneToMany_03_1_CrossDoor, JobParam);
job = new CrossDoorJob(JobParam);
}
else
{
JobRunStep.ToNextStep(RunStep.SD_Line_OneToMany_03_ToLine);
runInfo = $"去下一线体{JobParam.CurTargetNode.AliceName}的放料点";
JobRunStep.Msg = runInfo;
ToTakeShelfOff(agv, $"{JobParam.CurTargetNode.Name}");
}
}
else
{
if (JobParam.GetMissionInfo() != null && JobParam.GetMissionInfo().needBack)
{
JobRunStep.ToNextStep(RunStep.SD_Line_OneToMany_07_BackToPickUpPosition);
runInfo = $"{JobParam.CurTargetNode.AliceName}是最后一个线体,分发结束,需要返回{JobParam.SrcNode.Name}的放料点";
//任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回起始地, out string msg);
ToTakeShelfOff(agv, $"{JobParam.SrcNode.Name}");
JobRunStep.Msg = runInfo;
if (NodeManager.NeedCrossTwoDoor(agv, agv.Place, JobParam.SrcNode))
{
JobParam.CrossDoor.CurNode = agv.Place;
JobParam.CrossDoor.NextNode = JobParam.SrcNode;
JobParam.CrossDoor.IsIn = false;
JobParam.CrossDoor.IsAir = true;
GenJobCallBack(this.GetType(), RunStep.SD_Line_OneToMany_07_CrossTwoDoor, JobParam);
job = new CrossDoorJob(JobParam);
}
else if (NodeManager.NeedCrossDoor(agv, agv.Place, JobParam.SrcNode, out bool isin, out bool isair))
{
JobParam.CrossDoor.CurNode = agv.Place;
JobParam.CrossDoor.NextNode = JobParam.SrcNode;
JobParam.CrossDoor.IsIn = isin;
JobParam.CrossDoor.IsAir = isair;
GenJobCallBack(this.GetType(), RunStep.SD_Line_OneToMany_07_CrossDoor, JobParam);
job = new CrossDoorJob(JobParam);
}
else
{
JobRunStep.ToNextStep(RunStep.SD_Line_OneToMany_07_BackToPickUpPosition);
runInfo = $"{JobParam.CurTargetNode.AliceName}是最后一个线体,分发结束,需要返回{JobParam.SrcNode.Name}的放料点";
//任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回起始地, out string msg);
ToTakeShelfOff(agv, $"{JobParam.SrcNode.Name}");
JobRunStep.Msg = runInfo;
}
}
else if (JobParam.GetMissionInfo() != null && !JobParam.GetMissionInfo().needBack)
{
......@@ -160,6 +236,24 @@ namespace DeviceLibrary.bean.job
}
}
else if (JobRunStep.IsStep(RunStep.SD_Line_OneToMany_07_CrossTwoDoor))
{
JobParam.CrossDoor.CurNode = JobParam.CurTargetNode;
JobParam.CrossDoor.NextNode = JobParam.SrcNode;
JobParam.CrossDoor.IsIn = false;
JobParam.CrossDoor.IsAir = false;
GenJobCallBack(this.GetType(), RunStep.SD_Line_OneToMany_07_CrossDoor, JobParam);
job = new CrossDoorJob(JobParam);
}
else if (JobRunStep.IsStep(RunStep.SD_Line_OneToMany_07_CrossDoor))
{
JobRunStep.ToNextStep(RunStep.SD_Line_OneToMany_07_BackToPickUpPosition);
runInfo = $"过门完成,需要返回{JobParam.SrcNode.Name}的放料点";
//任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回起始地, out string msg);
ToTakeShelfOff(agv, $"{JobParam.SrcNode.Name}");
JobRunStep.Msg = runInfo;
}
else if (JobRunStep.IsStep(RunStep.SD_Line_OneToMany_07_BackToPickUpPosition))
{
if (agv.TaskRunState.CheckTaskFinished(agv))
......@@ -178,26 +272,48 @@ namespace DeviceLibrary.bean.job
{
if (agv.TaskRunState.CheckTaskFinished(agv))
{
JobRunStep.ToNextStep(RunStep.END);
if (JobParam.GetMissionInfo() != null && JobParam.GetMissionInfo().needBack)
if (NodeManager.NeedCrossTwoDoor(agv, agv.Place, JobParam.SrcNode))
{
//上报运输状态
manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.auto,
$"还车"));
JobParam.CrossDoor.CurNode = agv.Place;
JobParam.CrossDoor.NextNode = JobParam.SrcNode;
JobParam.CrossDoor.IsIn = false;
JobParam.CrossDoor.IsAir = true;
GenJobCallBack(this.GetType(), RunStep.END, JobParam);
job = new CrossDoorJob(JobParam);
}
else if (JobParam.GetMissionInfo() != null && !JobParam.GetMissionInfo().needBack)
else if (NodeManager.NeedCrossDoor(agv, agv.Place, JobParam.SrcNode, out bool isin, out bool isair))
{
//上报运输状态
manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.auto,
$"卸车"));
JobParam.CrossDoor.CurNode = agv.Place;
JobParam.CrossDoor.NextNode = JobParam.SrcNode;
JobParam.CrossDoor.IsIn = isin;
JobParam.CrossDoor.IsAir = isair;
GenJobCallBack(this.GetType(), RunStep.END, JobParam);
job = new CrossDoorJob(JobParam);
}
else
{
JobRunStep.ToNextStep(RunStep.END);
if (JobParam.GetMissionInfo() != null && JobParam.GetMissionInfo().needBack)
{
//上报运输状态
manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.auto,
$"还车"));
}
else if (JobParam.GetMissionInfo() != null && !JobParam.GetMissionInfo().needBack)
{
//上报运输状态
manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.auto,
$"卸车"));
}
runInfo = $"料车在{JobParam.SrcNode.AliceName}放下完成,任务结束";
//任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.完成, out string msg);
JobRunStep.Msg = runInfo;
}
runInfo = $"料车在{JobParam.SrcNode.AliceName}放下完成,任务结束";
//任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.完成, out string msg);
JobRunStep.Msg = runInfo;
}
}
else if (JobRunStep.IsStep(RunStep.END))
......@@ -214,7 +330,7 @@ namespace DeviceLibrary.bean.job
Name = agv.Name,
JobParam = JobParam
});
return this;
return job;
}
}
}
......@@ -18,6 +18,8 @@ namespace DeviceLibrary.bean.jobType
missionInfo = manager.MissionManager.GetLineToLineMission(agv);
if (missionInfo == null)
missionInfo = manager.MissionManager.GetStoreToLinesMission(agv);
if(missionInfo == null)
missionInfo=manager.MissionManager.Get4DTo4CLinesMission(agv);
if (missionInfo != null)
{
Node src = manager.NodeManager.GetNode(missionInfo.sourcePoint, NodeType.Node);
......
......@@ -593,6 +593,36 @@ namespace DeviceLibrary.manager
}
return null;
}
/// <summary>
///
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
public static MissionInfo Get4DTo4CLinesMission(AgvInfo agv)
{
MissionInfo missionInfo = null;
try
{
var missions = GetMissionInfos().Where(w => w.state != MissionState.中止
&& w.state != MissionState.取消 && w.state != MissionState.完成).ToList();
missionInfo = missions.Where(s => s.destinationWorkshop.Equals(SettingString._4C) &&
s.sourceWorkshop.Equals(SettingString._4D) &&
//(s.projectType.Equals(ProjectType.PCB领用) || s.projectType.Equals(ProjectType.包材领用))&&
(s.state == MissionState.创建) && agv.Scope.Tasks.Contains(s.projectType.ToString())).FirstOrDefault();
if (missionInfo != null && AgvCanGetMission(missionInfo))
{
SetMissionOccupied(missionInfo, agv);
Log.Info($"执行4D到4C任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo;
}
}
catch (Exception e)
{
Log.Error("Get4DTo4CLinesMission", e);
}
return null;
}
public static void SetMissionOccupied(MissionInfo missionInfo, AgvInfo agv)
{
SetMissionOccupiedAgv(missionInfo.missionId, agv.Name);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!