Commit 5fad85aa 张东亮

启用空台车项目

1 个父辈 ab1c3da7
......@@ -27,7 +27,7 @@ namespace DeviceLibrary.bean.job
runInfo = $"任务开始,去{JobParam.SrcNode.AliceName}的取料点";
//任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.已分配, out string msg);
AllocateTask(agv, $"{JobParam.SrcNode.Name}_{SettingString.PutShelfOn}");
ToPutShelfOn(agv, $"{JobParam.SrcNode.Name}");
JobRunStep.Msg = runInfo;
}
else if (JobRunStep.IsStep(RunStep.SD_Line_OneToMany_01_ToPickUpPosition))
......@@ -59,7 +59,7 @@ namespace DeviceLibrary.bean.job
runInfo = $"在{JobParam.SrcNode.AliceName}拾取料车完成,去{JobParam.CurTargetNode.AliceName}的放料点";
//任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.送料, out string msg);
AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff}");
ToTakeShelfOff(agv, $"{JobParam.CurTargetNode.Name}");
JobRunStep.Msg = runInfo;
}
}
......@@ -132,7 +132,7 @@ namespace DeviceLibrary.bean.job
System.Threading.Thread.Sleep(1000);
runInfo = $"去下一线体{JobParam.CurTargetNode.AliceName}的放料点";
JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff}");
ToTakeShelfOff(agv, $"{JobParam.CurTargetNode.Name}");
}
else
{
......@@ -142,7 +142,7 @@ namespace DeviceLibrary.bean.job
runInfo = $"{JobParam.CurTargetNode.AliceName}是最后一个线体,分发结束,需要返回{JobParam.SrcNode.Name}的放料点";
//任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回起始地, out string msg);
AllocateTask(agv, $"{JobParam.SrcNode.Name}_{SettingString.TakeShelfOff}");
ToTakeShelfOff(agv, $"{JobParam.SrcNode.Name}");
JobRunStep.Msg = runInfo;
}
else if (JobParam.GetMissionInfo() != null && !JobParam.GetMissionInfo().needBack)
......@@ -150,7 +150,7 @@ namespace DeviceLibrary.bean.job
JobRunStep.ToNextStep(RunStep.SD_Line_OnToMany_08_TakeShelfOff);
runInfo = $"{JobParam.CurTargetNode.AliceName}是最后一个线体,分发结束,无需返回,直接卸下";
JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{SettingString.TakeShelfOff}");
TakeShelfOff(agv);
}
else
{
......@@ -171,7 +171,7 @@ namespace DeviceLibrary.bean.job
$"到达{ JobParam.SrcNode.Name }"));
runInfo = $"到达{JobParam.SrcNode.AliceName}的放料点,准备卸下料车";
JobRunStep.Msg = runInfo;
AllocateTask(agv, SettingString.TakeShelfOff);
TakeShelfOff(agv);
}
}
else if (JobRunStep.IsStep(RunStep.SD_Line_OnToMany_08_TakeShelfOff))
......
......@@ -20,7 +20,6 @@ namespace DeviceLibrary.bean.job
{
}
lift.LiftStatus liftStatus;
public override Job Run(AgvInfo agv)
{
agv.SetJobContext(new bean.agv.JobContext()
......@@ -37,7 +36,7 @@ namespace DeviceLibrary.bean.job
JobRunStep.ToNextStep(RunStep.Steel_LiftToLine_01_ToLift);
runInfo = $"任务开始:去{JobParam.SrcNode.AliceName}";
JobRunStep.Msg = runInfo;
AllocateTask(agv, JobParam.SrcNode.Name);
ToLift(agv, JobParam.SrcNode.Name);
}
else if (JobRunStep.IsStep(RunStep.Steel_LiftToLine_01_ToLift))
{
......@@ -60,7 +59,7 @@ namespace DeviceLibrary.bean.job
JobRunStep.ToNextStep(RunStep.Steel_LiftToLine_03_EnterLift);
SetLiftOccupied(JobParam.SrcNode.Name, agv);
runInfo = $"{JobParam.SrcNode.AliceName}门已开启,进电梯取料点";
AllocateTask(agv, $"{JobParam.SrcNode.Name}_{SettingString.PutShelfOn}");
ToPutShelfOn(agv, JobParam.SrcNode.Name);
//任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.电梯到达, out string msg);
JobRunStep.Msg = runInfo;
......@@ -74,7 +73,6 @@ namespace DeviceLibrary.bean.job
runInfo = $"到达{JobParam.SrcNode.AliceName}取料点,准备拾取料车";
JobRunStep.Msg = runInfo;
PutLiftShelfOn(agv, JobParam.SrcNode.Name);
//AllocateTask(agv, $"{SettingString.PutShelfOn}_{JobParam.SrcNode.Name}");
}
}
else if (JobRunStep.IsStep(RunStep.Steel_LiftToLine_04_PutShelfOn))
......@@ -89,7 +87,7 @@ namespace DeviceLibrary.bean.job
runInfo = $"在{JobParam.SrcNode.AliceName}拾取料车完成,准备离开";
JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{SettingString.Leave}_{JobParam.SrcNode.Name}");
LeaveLift(agv, $"{JobParam.SrcNode.Name}");
}
}
else if (JobRunStep.IsStep(RunStep.Steel_LiftToLine_05_LeaveLift))
......@@ -103,6 +101,7 @@ namespace DeviceLibrary.bean.job
//任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.离开电梯, out string msg);
JobRunStep.Msg = runInfo;
ClearLiftNodeOccupied(agv);
}
}
else if (JobRunStep.IsStep(RunStep.Steel_LiftToLine_06_CloseLiftDoor))
......
using Common;
using DeviceLibrary.bean;
using DeviceLibrary.lift;
using DeviceLibrary.manager;
using DeviceLibrary.service.model;
using System;
namespace DeviceLibrary
{
/// <summary>
/// 3D钢网入库 到电梯
/// 3D钢网任务 线体到电梯
/// </summary>
public class SteelLineToLiftJob : Job
{
/// <summary>
/// 1F满架运送任务
/// 3D钢网任务 线体到电梯
/// </summary>
public SteelLineToLiftJob(JobParam jobParam) : base(jobParam)
{
......@@ -20,9 +22,9 @@ namespace DeviceLibrary
{
}
lift.LiftStatus liftStatus;
public override Job Run(AgvInfo agv)
{
Job job = this;
agv.SetJobContext(new bean.agv.JobContext()
{
MissionId = JobParam.GetMissionInfo().missionId,
......@@ -61,6 +63,8 @@ namespace DeviceLibrary
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
if(JobParam.GetMissionInfo().projectType.Equals(ProjectType.钢网入库))
{
JobRunStep.ToNextStep(RunStep.LineToLift_ToSteelSrc);
//上报状态
manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
......@@ -70,6 +74,13 @@ namespace DeviceLibrary
ToTakeShelfOff(agv, JobParam.SrcNode.Name);
JobRunStep.Msg = runInfo;
}
else
{
JobRunStep.ToNextStep(RunStep.LineToLift_WaitConfirm);
runInfo = $"钢网领用任务,直接去电梯口";
JobRunStep.Msg = runInfo;
}
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_ToSteelSrc))
{
......@@ -109,13 +120,36 @@ namespace DeviceLibrary
}
else if (JobRunStep.IsStep(RunStep.LineToLift_WaitConfirm))
{
if(TargetIsOccupied(agv, JobParam.CurTargetNode.Name))
{
JobRunStep.ToNextStep(RunStep.LineToLift_ToStandby);
runInfo = $"{JobParam.CurTargetNode.AliceName}有小车,去待机点";
ToStandby(agv);
}
else
{
JobRunStep.ToNextStep(RunStep.LineToLift_03_ToLift);
runInfo = $"在{JobParam.SrcNode.AliceName}确认完成,去{JobParam.CurTargetNode.AliceName}";
//任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.前往电梯, out string msg);
ToLift(agv, JobParam.CurTargetNode.Name);
JobRunStep.Msg = runInfo;
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_ToStandby))
{
if (TargetIsOccupied(agv, JobParam.CurTargetNode.Name))
{
}
else
{
JobRunStep.ToNextStep(RunStep.LineToLift_03_ToLift);
runInfo = $"{JobParam.CurTargetNode.AliceName}已空闲";
//任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.前往电梯, out string msg);
ToLift(agv, JobParam.CurTargetNode.Name);
JobRunStep.Msg = runInfo;
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_03_ToLift))
{
......@@ -138,20 +172,24 @@ namespace DeviceLibrary
{
if (lift.LiftContext.IsDoorOpen(JobParam.CurTargetNode.Name, JobParam.GetMissionInfo().sourceFloor))
{
if (lift.LiftContext.HasShelfNeedLeave(JobParam.CurTargetNode.Name, agv.Client, out liftStatus))
if (lift.LiftContext.HasShelfNeedLeave(JobParam.CurTargetNode.Name, agv.Client, out JobParam.LiftStatus))
{
JobRunStep.ToNextStep(RunStep.LineToLift_05_01_ToTemp1);
SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo = $"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车";
ToTmp1TakeOff(agv, JobParam.CurTargetNode.Name);
service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId);
MissionInfo missionInfo = MissionManager.GetMission(JobParam.LiftStatus?.missionId ?? "");
if (missionInfo != null)
{
//任务状态变更
MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.返回电梯到达, out string msg);
MissionManager.SetMissionOccupied(missionInfo, agv);
job = new SwitchShelfJob(JobParam);
}
else
{
JobRunStep.ToNextStep(RunStep.LineToLift_05_01_ToStandby);
//设置电梯占用
//SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo = $"{JobParam.CurTargetNode.AliceName}已开门。电梯内有送料的料车但无工单信息,去待机点,需要手动清空电梯缓存并关闭电梯门";//
ToStandby(agv);
JobRunStep.Msg = runInfo;
}
}
else
{
JobRunStep.ToNextStep(RunStep.LineToLift_06_01_EnterLift);
......@@ -172,161 +210,16 @@ namespace DeviceLibrary
}
}
#region 电梯内有料车
else if (JobRunStep.IsStep(RunStep.LineToLift_05_01_ToTemp1))
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
JobRunStep.ToNextStep(RunStep.LineToLift_05_02_TakeShelfOffAtTemp1);
runInfo = $"到达{JobParam.CurTargetNode.AliceName}的临时点1,将车上料车卸下";
JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{SettingString.TakeShelfOff}");
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_05_02_TakeShelfOffAtTemp1))
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
JobRunStep.ToNextStep(RunStep.LineToLift_05_03_ToLift);
runInfo = $"在{JobParam.CurTargetNode.AliceName}将车上料车卸在临时点1完成,去电梯口";
JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{JobParam.CurTargetNode.Name}");
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_05_03_ToLift))
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
JobRunStep.ToNextStep(RunStep.LineToLift_05_04_EnterLift);
runInfo = $"到达{JobParam.CurTargetNode.AliceName},去取料点";
JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.PutShelfOn}");
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_05_04_EnterLift))
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
JobRunStep.ToNextStep(RunStep.LineToLift_05_05_PutShelfOn);
runInfo = $"到达{JobParam.CurTargetNode.AliceName}的取料点,准备拾取料车";
JobRunStep.Msg = runInfo;
PutLiftShelfOn(agv, JobParam.CurTargetNode.Name);
//AllocateTask(agv, $"{SettingString.PutShelfOn}_{JobParam.CurTargetNode.Name}");
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_05_05_PutShelfOn))
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
JobRunStep.ToNextStep(RunStep.LineToLift_05_06_LeaveLift);
runInfo = $"拾取{JobParam.CurTargetNode.AliceName}的料车完成,准备离开电梯";
JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{SettingString.Leave}_{JobParam.CurTargetNode.Name}");
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_05_06_LeaveLift))
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
JobRunStep.ToNextStep(RunStep.LineToLift_05_15_CloseDoor);
//AGV离开
bool rtn = lift.LiftContext.AGVLeave(JobParam.CurTargetNode.Name, agv, false);
runInfo = $"离开{JobParam.CurTargetNode.AliceName}完成,发送离开信号:{rtn}";
service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId);
if (missionInfo != null)
{
//任务状态变更
MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.返回离开电梯, out string msg);
}
JobRunStep.Msg = runInfo;
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_05_15_CloseDoor))
{
if (lift.LiftContext.CheckAgvLeaveSig(JobParam.CurTargetNode.Name))
{
JobRunStep.ToNextStep(RunStep.LineToLift_05_18_ToStore);
runInfo = $"{JobParam.CurTargetNode.AliceName}关门完成,将料车送到{liftStatus.destinationPoint}的放料点";
service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId);
if (missionInfo != null)
{
//任务状态变更
MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.返回起始地, out string msg);
}
JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{liftStatus.destinationPoint}_{SettingString.TakeShelfOff}");
}
else if (JobRunStep.IsTimeOut(0.5, out double val))
{
//AGV离开
lift.LiftContext.AGVLeave(JobParam.CurTargetNode.Name, agv, false);
runInfo = $"{JobParam.CurTargetNode.AliceName}离开信号超时重发";
JobRunStep.Msg = runInfo;
System.Threading.Thread.Sleep(3000);
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_05_18_ToStore))
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
JobRunStep.ToNextStep(RunStep.LineToLift_05_19_TakeShelfOff);
runInfo = $"到达{liftStatus.destinationPoint}的放料点,准备卸下";
JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{SettingString.TakeShelfOff}");
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_05_19_TakeShelfOff))
else if (JobRunStep.IsStep(RunStep.LineToLift_05_01_ToStandby))
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
if (!TargetIsOccupied(agv, JobParam.CurTargetNode.Name) && !LiftContext.IsDoorOpen(JobParam.CurTargetNode.Name))
{
JobRunStep.ToNextStep(RunStep.LineToLift_05_10_ToTemp1);
runInfo = $"料车在{liftStatus.destinationPoint}卸下完成, 返回{JobParam.CurTargetNode.AliceName}的临时点1的取料点";
service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId);
if (missionInfo != null)
{
//任务状态变更
MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.完成, out string msg);
}
JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.PutShelfOn}");
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_05_10_ToTemp1))
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
JobRunStep.ToNextStep(RunStep.LineToLift_05_11_PutTemp1ShelfOn);
runInfo = $"到达{JobParam.CurTargetNode.AliceName}的临时点1的取料点,准备拾取料架";
JobRunStep.Msg = runInfo;
//AllocateTask(agv, $"{SettingString.PutShelfOn}");
PutShelfOn(agv);
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_05_11_PutTemp1ShelfOn))
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
JobRunStep.ToNextStep(RunStep.LineToLift_05_12_ToLift);
runInfo = $"拾取料架完成,去{JobParam.CurTargetNode.AliceName}";
JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{JobParam.CurTargetNode.Name}");
}
}
else if (JobRunStep.IsStep(RunStep.LineToLift_05_12_ToLift))
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
JobRunStep.ToNextStep(RunStep.LineToLift_04_CheckLiftStatus);
runInfo = $"到达{JobParam.CurTargetNode.AliceName},请求电梯";
JobRunStep.ToNextStep(RunStep.LineToLift_03_ToLift);
runInfo = $"{JobParam.CurTargetNode.AliceName}已空闲";
ToLift(agv, JobParam.CurTargetNode.Name);
JobRunStep.Msg = runInfo;
//请求电梯
lift.LiftContext.Request(JobParam.GetMissionInfo(), agv);
System.Threading.Thread.Sleep(2000);
}
}
#endregion
#region 电梯内无料车
else if (JobRunStep.IsStep(RunStep.LineToLift_06_01_EnterLift))
{
......@@ -388,7 +281,7 @@ namespace DeviceLibrary
JobRunStep.EndJob();
return null;
}
return this;
return job;
}
}
......
......@@ -90,8 +90,8 @@ namespace DeviceLibrary
if (AGVTaskIsFinished(agv))
{
JobRunStep.ToNextStep(RunStep.Switch_03_ToLift);
runInfo = $"去{JobParam.CurTargetNode.AliceName},,{missionInfo()}";
MoveToNode(agv, JobParam.CurTargetNode.Name);
runInfo = $"去{JobParam.CurTargetNode.AliceName},{missionInfo()}";
//MoveToNode(agv, JobParam.CurTargetNode.Name);
JobRunStep.Msg = runInfo;
}
}
......@@ -181,7 +181,7 @@ namespace DeviceLibrary
{
JobRunStep.ToNextStep(RunStep.Switch_11_ToLift);
runInfo = $"去{JobParam.CurTargetNode.AliceName},{missionInfo()}";
MoveToNode(agv, JobParam.CurTargetNode.Name);
//MoveToNode(agv, JobParam.CurTargetNode.Name);
JobRunStep.Msg = runInfo;
}
}
......
......@@ -456,7 +456,11 @@ namespace DeviceLibrary.manager
missionInfo = missions.Where(s => s.destinationWorkshop.Equals(agv.Scope.Workshop) &&
s.sourceWorkshop.Equals(agv.Scope.Workshop) &&
((s.projectType.Equals(ProjectType.半成品领用)) || (s.sourceWorkshop.Equals(s.destinationWorkshop))) &&
((s.projectType.Equals(ProjectType.半成品领用)||
s.projectType.Equals(ProjectType.空台车领用)||
s.projectType.Equals(ProjectType.空台车归还)) ||
(s.sourceWorkshop.Equals(s.destinationWorkshop)))
&&
(s.state == MissionState.创建) && agv.Scope.Tasks.Contains(s.projectType.ToString())).FirstOrDefault();
if (missionInfo != null && AgvCanGetMission(missionInfo))
{
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!