Commit 4ee65acf 张东亮

二期基本逻辑ok

1 个父辈 315a5150
...@@ -53,6 +53,7 @@ ...@@ -53,6 +53,7 @@
this.txtShow = new System.Windows.Forms.TextBox(); this.txtShow = new System.Windows.Forms.TextBox();
this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.textBox1 = new System.Windows.Forms.TextBox();
this.tableLayoutPanel3.SuspendLayout(); this.tableLayoutPanel3.SuspendLayout();
this.tabControl1.SuspendLayout(); this.tabControl1.SuspendLayout();
this.tabPage2.SuspendLayout(); this.tabPage2.SuspendLayout();
...@@ -277,6 +278,7 @@ ...@@ -277,6 +278,7 @@
this.dgvInfos.Size = new System.Drawing.Size(1666, 287); this.dgvInfos.Size = new System.Drawing.Size(1666, 287);
this.dgvInfos.TabIndex = 0; this.dgvInfos.TabIndex = 0;
this.dgvInfos.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvInfos_CellContentClick); this.dgvInfos.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvInfos_CellContentClick);
this.dgvInfos.DataError += new System.Windows.Forms.DataGridViewDataErrorEventHandler(this.dgvInfos_DataError);
// //
// tabPage3 // tabPage3
// //
...@@ -357,6 +359,7 @@ ...@@ -357,6 +359,7 @@
// //
// tabPage5 // tabPage5
// //
this.tabPage5.Controls.Add(this.textBox1);
this.tabPage5.Controls.Add(this.txtShow); this.tabPage5.Controls.Add(this.txtShow);
this.tabPage5.Location = new System.Drawing.Point(4, 25); this.tabPage5.Location = new System.Drawing.Point(4, 25);
this.tabPage5.Margin = new System.Windows.Forms.Padding(4); this.tabPage5.Margin = new System.Windows.Forms.Padding(4);
...@@ -368,12 +371,12 @@ ...@@ -368,12 +371,12 @@
// //
// txtShow // txtShow
// //
this.txtShow.Dock = System.Windows.Forms.DockStyle.Fill; this.txtShow.Dock = System.Windows.Forms.DockStyle.Top;
this.txtShow.Location = new System.Drawing.Point(0, 0); this.txtShow.Location = new System.Drawing.Point(0, 0);
this.txtShow.Margin = new System.Windows.Forms.Padding(4); this.txtShow.Margin = new System.Windows.Forms.Padding(4);
this.txtShow.Multiline = true; this.txtShow.Multiline = true;
this.txtShow.Name = "txtShow"; this.txtShow.Name = "txtShow";
this.txtShow.Size = new System.Drawing.Size(1696, 356); this.txtShow.Size = new System.Drawing.Size(1696, 199);
this.txtShow.TabIndex = 0; this.txtShow.TabIndex = 0;
// //
// tableLayoutPanel4 // tableLayoutPanel4
...@@ -401,6 +404,16 @@ ...@@ -401,6 +404,16 @@
this.flowLayoutPanel1.Size = new System.Drawing.Size(1698, 506); this.flowLayoutPanel1.Size = new System.Drawing.Size(1698, 506);
this.flowLayoutPanel1.TabIndex = 0; this.flowLayoutPanel1.TabIndex = 0;
// //
// textBox1
//
this.textBox1.Dock = System.Windows.Forms.DockStyle.Top;
this.textBox1.Location = new System.Drawing.Point(0, 199);
this.textBox1.Margin = new System.Windows.Forms.Padding(4);
this.textBox1.Multiline = true;
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(1696, 151);
this.textBox1.TabIndex = 1;
//
// FrmMain // FrmMain
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
...@@ -462,6 +475,7 @@ ...@@ -462,6 +475,7 @@
private System.Windows.Forms.TextBox txtShow; private System.Windows.Forms.TextBox txtShow;
private System.Windows.Forms.CheckBox checkBox1; private System.Windows.Forms.CheckBox checkBox1;
private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox1;
} }
} }
...@@ -12,6 +12,7 @@ using System.Threading.Tasks; ...@@ -12,6 +12,7 @@ using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using Common; using Common;
using DeviceLibrary; using DeviceLibrary;
using DeviceLibrary.lift;
using DeviceLibrary.manager; using DeviceLibrary.manager;
using DeviceLibrary.service.model; using DeviceLibrary.service.model;
...@@ -157,6 +158,12 @@ namespace AGVControl ...@@ -157,6 +158,12 @@ namespace AGVControl
Invoke(new Action(() => Invoke(new Action(() =>
{ {
txtShow.Text = DeviceLibrary.HttpManager.Agvtransinfo; txtShow.Text = DeviceLibrary.HttpManager.Agvtransinfo;
try
{
textBox1.Text = LiftContext.GetLiftNodeOccupiedInfo();
}
catch { }
})); }));
...@@ -228,6 +235,11 @@ namespace AGVControl ...@@ -228,6 +235,11 @@ namespace AGVControl
AgvTaskManager.ReloadAgvTask(); AgvTaskManager.ReloadAgvTask();
} }
private void dgvInfos_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
LogUtil.error($"表格式异常:{e.RowIndex},{e.ColumnIndex},{e.Exception.Message}");
}
private void dgvInfos_CellContentClick(object sender, DataGridViewCellEventArgs e) private void dgvInfos_CellContentClick(object sender, DataGridViewCellEventArgs e)
{ {
if (e.RowIndex == -1) if (e.RowIndex == -1)
......
...@@ -94,6 +94,7 @@ namespace AGVControl ...@@ -94,6 +94,7 @@ namespace AGVControl
{ {
Agv.Auto = false; Agv.Auto = false;
LiftContext.ResetLiftOccupiedAgv(Agv); LiftContext.ResetLiftOccupiedAgv(Agv);
LiftContext.SetLiftNodeOccupied(Agv);
ChargePileManager.StopCharge(Agv); ChargePileManager.StopCharge(Agv);
LogUtil.info($"取消自动任务,当前运行信息是:{Agv.Msg}"); LogUtil.info($"取消自动任务,当前运行信息是:{Agv.Msg}");
try try
......
...@@ -70,6 +70,9 @@ namespace Common ...@@ -70,6 +70,9 @@ namespace Common
public const string Lift_Names = "Lift_Names"; public const string Lift_Names = "Lift_Names";
public const string IsDebug = "IsDebug"; public const string IsDebug = "IsDebug";
#endregion #endregion
#region 点位
public const string ShelfBuff = "ShelfBuff";
#endregion
} }
} }
...@@ -142,7 +142,7 @@ namespace Common ...@@ -142,7 +142,7 @@ namespace Common
} }
catch (Exception e) catch (Exception e)
{ {
LogUtil.error("POST ERROR:" + e.ToString()); LogUtil.error($"POST ERROR:【{url}】【{paramData}】",e);
} }
if (!result.Contains("null") && result.Length != 0) if (!result.Contains("null") && result.Length != 0)
{ {
...@@ -180,7 +180,7 @@ namespace Common ...@@ -180,7 +180,7 @@ namespace Common
} }
catch (Exception e) catch (Exception e)
{ {
LogUtil.error("POST ERROR:" + e.ToString()); LogUtil.error($"POST ERROR:【{url}】【{paramData}】", e);
} }
return result; return result;
} }
......
...@@ -87,6 +87,7 @@ ...@@ -87,6 +87,7 @@
<Compile Include="bean\agv\Mir_Error.cs" /> <Compile Include="bean\agv\Mir_Error.cs" />
<Compile Include="bean\agv\Scope.cs" /> <Compile Include="bean\agv\Scope.cs" />
<Compile Include="bean\ChargePiles.cs" /> <Compile Include="bean\ChargePiles.cs" />
<Compile Include="bean\jobType\ShelfBuffToLiftJobType.cs" />
<Compile Include="bean\jobType\SteelLiftToLinesJobType.cs" /> <Compile Include="bean\jobType\SteelLiftToLinesJobType.cs" />
<Compile Include="bean\jobType\F1LiftC1ToLiftD2JobType.cs" /> <Compile Include="bean\jobType\F1LiftC1ToLiftD2JobType.cs" />
<Compile Include="bean\jobType\F1LiftD2ToLiftC1JobType.cs" /> <Compile Include="bean\jobType\F1LiftD2ToLiftC1JobType.cs" />
...@@ -97,6 +98,7 @@ ...@@ -97,6 +98,7 @@
<Compile Include="bean\job\ChargeJob.cs" /> <Compile Include="bean\job\ChargeJob.cs" />
<Compile Include="bean\job\F1LiftC1ToLiftD2Job.cs" /> <Compile Include="bean\job\F1LiftC1ToLiftD2Job.cs" />
<Compile Include="bean\job\F1LiftD2ToLiftC1Job.cs" /> <Compile Include="bean\job\F1LiftD2ToLiftC1Job.cs" />
<Compile Include="bean\job\CrossDoorJob.cs" />
<Compile Include="bean\job\SteelLiftToStorageJob.cs" /> <Compile Include="bean\job\SteelLiftToStorageJob.cs" />
<Compile Include="bean\job\SteelLiftToLinesJob.cs" /> <Compile Include="bean\job\SteelLiftToLinesJob.cs" />
<Compile Include="bean\job\LineOneToManyJob.cs" /> <Compile Include="bean\job\LineOneToManyJob.cs" />
...@@ -108,6 +110,7 @@ ...@@ -108,6 +110,7 @@
<Compile Include="bean\JobParam.cs" /> <Compile Include="bean\JobParam.cs" />
<Compile Include="bean\jobType\BackLiftToLineJobType.cs" /> <Compile Include="bean\jobType\BackLiftToLineJobType.cs" />
<Compile Include="bean\jobType\LineToLiftJobType.cs" /> <Compile Include="bean\jobType\LineToLiftJobType.cs" />
<Compile Include="bean\job\SwitchShelfJob.cs" />
<Compile Include="bean\TaskRunState.cs" /> <Compile Include="bean\TaskRunState.cs" />
<Compile Include="bean\jobType\LiftToLinesJobType.cs" /> <Compile Include="bean\jobType\LiftToLinesJobType.cs" />
<Compile Include="bean\job\StandyJob.cs" /> <Compile Include="bean\job\StandyJob.cs" />
......
using Common; using Common;
using DeviceLibrary.lift;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Web.UI.WebControls.WebParts;
namespace DeviceLibrary.bean namespace DeviceLibrary.bean
{ {
...@@ -26,7 +28,10 @@ namespace DeviceLibrary.bean ...@@ -26,7 +28,10 @@ namespace DeviceLibrary.bean
{ {
return missionInfo; return missionInfo;
} }
/// <summary>
/// 电梯内的料架信息
/// </summary>
public LiftStatus LiftStatus;
/// <summary> /// <summary>
/// 任务信息 /// 任务信息
/// </summary> /// </summary>
...@@ -51,6 +56,10 @@ namespace DeviceLibrary.bean ...@@ -51,6 +56,10 @@ namespace DeviceLibrary.bean
/// </summary> /// </summary>
public Shelf Shelf { get; set; } public Shelf Shelf { get; set; }
public OpType OpType { get; set; } = OpType.ComToLine; public OpType OpType { get; set; } = OpType.ComToLine;
/// <summary>
/// 回调Job
/// </summary>
public JobCallBack CallbackJob;
public JobParam(Node srcplace, Node tarplace =null,Shelf shelf=null, service.model.MissionInfo MissionInfo =null) public JobParam(Node srcplace, Node tarplace =null,Shelf shelf=null, service.model.MissionInfo MissionInfo =null)
{ {
SrcNode = srcplace; SrcNode = srcplace;
...@@ -82,4 +91,15 @@ namespace DeviceLibrary.bean ...@@ -82,4 +91,15 @@ namespace DeviceLibrary.bean
/// </summary> /// </summary>
MaulAndAPI, MaulAndAPI,
} }
public class JobCallBack
{
public Type Type { get; set; }
public Job Job { get; set; }
public RunStep RunStep { get; set; }
public JobCallBack(Type type, RunStep step)
{
this.Type = type;
this.RunStep = step;
}
}
} }
...@@ -34,6 +34,7 @@ namespace DeviceLibrary.bean ...@@ -34,6 +34,7 @@ namespace DeviceLibrary.bean
#endregion #endregion
#region 料架返回 电梯到线体 #region 料架返回 电梯到线体
ShelfBack_LiftToStore_01_ToStandby,
/// <summary> /// <summary>
/// 去电梯口 /// 去电梯口
/// </summary> /// </summary>
...@@ -103,6 +104,8 @@ namespace DeviceLibrary.bean ...@@ -103,6 +104,8 @@ namespace DeviceLibrary.bean
LineToLift_05_10_ToTemp1, LineToLift_05_10_ToTemp1,
LineToLift_05_11_PutTemp1ShelfOn, LineToLift_05_11_PutTemp1ShelfOn,
LineToLift_05_12_ToLift, LineToLift_05_12_ToLift,
LineToLift_05_13_ToShelfPlace,
LineToLift_05_14_TakeShelfOff,
#endregion #endregion
#region 电梯内无料车 #region 电梯内无料车
...@@ -114,6 +117,7 @@ namespace DeviceLibrary.bean ...@@ -114,6 +117,7 @@ namespace DeviceLibrary.bean
#endregion #endregion
#region 电梯到线体 产品分发 最后空料料架返回 #region 电梯到线体 产品分发 最后空料料架返回
SD_LiftToLine_00_ToStandby,
/// <summary> /// <summary>
/// 去电梯口 /// 去电梯口
/// </summary> /// </summary>
...@@ -363,6 +367,7 @@ namespace DeviceLibrary.bean ...@@ -363,6 +367,7 @@ namespace DeviceLibrary.bean
#endregion #endregion
#region 1F 成品空料架从D2C1 #region 1F 成品空料架从D2C1
S1F_LiftD2ToLiftC1_00_ToStandby,
/// <summary> /// <summary>
/// 去电梯口 /// 去电梯口
/// </summary> /// </summary>
...@@ -387,6 +392,7 @@ namespace DeviceLibrary.bean ...@@ -387,6 +392,7 @@ namespace DeviceLibrary.bean
/// 关闭电梯门 /// 关闭电梯门
/// </summary> /// </summary>
S1F_LiftD2ToLiftC1_06_CloseLiftDoor, S1F_LiftD2ToLiftC1_06_CloseLiftDoor,
S1F_LiftD2ToLiftC1_07_ToStandby,
S1F_LiftD2ToLiftC1_07_ToLiftC1, S1F_LiftD2ToLiftC1_07_ToLiftC1,
S1F_LiftD2ToLiftC1_08_CheckC1Status, S1F_LiftD2ToLiftC1_08_CheckC1Status,
...@@ -412,6 +418,7 @@ namespace DeviceLibrary.bean ...@@ -412,6 +418,7 @@ namespace DeviceLibrary.bean
S1F_LiftD2ToLiftC1_19_03_ToTemp1, S1F_LiftD2ToLiftC1_19_03_ToTemp1,
S1F_LiftD2ToLiftC1_19_04_PutTemp1ShelfOn, S1F_LiftD2ToLiftC1_19_04_PutTemp1ShelfOn,
S1F_LiftD2ToLiftC1_19_05_ToLift, S1F_LiftD2ToLiftC1_19_05_ToLift,
S1F_LiftD2ToLiftC1_19_05_ToStandby,
#endregion #endregion
#region 空成品料车 #region 空成品料车
...@@ -434,6 +441,7 @@ namespace DeviceLibrary.bean ...@@ -434,6 +441,7 @@ namespace DeviceLibrary.bean
#endregion #endregion
#region 1F 成品入库从C1D2 #region 1F 成品入库从C1D2
S1F_LiftC1ToLiftD2_00_ToStandby,
/// <summary> /// <summary>
/// 去电梯口 /// 去电梯口
/// </summary> /// </summary>
...@@ -459,6 +467,7 @@ namespace DeviceLibrary.bean ...@@ -459,6 +467,7 @@ namespace DeviceLibrary.bean
/// </summary> /// </summary>
S1F_LiftC1ToLiftD2_06_CloseLiftDoor, S1F_LiftC1ToLiftD2_06_CloseLiftDoor,
S1F_LiftC1ToLiftD2_07_ToLiftD2, S1F_LiftC1ToLiftD2_07_ToLiftD2,
S1F_LiftC1ToLiftD2_ToStandby,
S1F_LiftC1ToLiftD2_08_CheckD2Status, S1F_LiftC1ToLiftD2_08_CheckD2Status,
#region 电梯内无料车 #region 电梯内无料车
...@@ -467,9 +476,9 @@ namespace DeviceLibrary.bean ...@@ -467,9 +476,9 @@ namespace DeviceLibrary.bean
S1F_LiftC1ToLiftD2_11_LeaveLift, S1F_LiftC1ToLiftD2_11_LeaveLift,
#endregion #endregion
#region 电梯内有料车 #region 电梯内有料车
S1F_LiftC1ToLiftD2_12_ToTemp1,
S1F_LiftC1ToLiftD2_12_ToStandby, S1F_LiftC1ToLiftD2_12_ToStandby,
S1F_LiftC1ToLiftD2_13_TakeShelfOffAtTemp1, S1F_LiftC1ToLiftD2_13_ToShelfBuff,
S1F_LiftC1ToLiftD2_14_TakeShelfOff,
S1F_LiftC1ToLiftD2_14_ToLift, S1F_LiftC1ToLiftD2_14_ToLift,
S1F_LiftC1ToLiftD2_15_EnterLift, S1F_LiftC1ToLiftD2_15_EnterLift,
S1F_LiftC1ToLiftD2_16_PutShelfOn, S1F_LiftC1ToLiftD2_16_PutShelfOn,
...@@ -504,6 +513,96 @@ namespace DeviceLibrary.bean ...@@ -504,6 +513,96 @@ namespace DeviceLibrary.bean
#endregion #endregion
#region 电梯口料架交换
/// <summary>
/// 料架交换:去临时点1
/// </summary>
Switch_01_ToTmp1,
/// <summary>
/// 料架交换:在临时点1卸下料架
/// </summary>
Switch_02_TakeShelfOffAtTmp1,
/// <summary>
/// 料架交换:去电梯
/// </summary>
Switch_03_ToLift,
/// <summary>
/// 料架交换:进入电梯
/// </summary>
Switch_04_EnterLift,
/// <summary>
/// 料架交换:拾取电梯内的料架
/// </summary>
Switch_05_PutLiftShelfOn,
/// <summary>
/// 料架交换:离开电梯
/// </summary>
Switch_06_LeaveLift,
/// <summary>
/// 料架交换:去临时点2
/// </summary>
Switch_07_ToTmp2,
/// <summary>
/// 料架交换:在临时点2卸下料车
/// </summary>
Switch_08_TakeShelfOffAtTpm2,
/// <summary>
/// 料架交换:去临时点1
/// </summary>
Switch_09_ReToTmp1,
/// <summary>
/// 料架交换:在临时点1拾取料架
/// </summary>
Switch_10_PutShelfOnAtTmp1,
/// <summary>
/// 料架交换:去电梯
/// </summary>
Switch_11_ToLift,
/// <summary>
/// 料架交换:进入电梯
/// </summary>
Switch_12_EnterLift,
/// <summary>
/// 料架交换:在电梯放下料车
/// </summary>
Switch_13_TakeLiftShelfOff,
/// <summary>
/// 料架交换:离开电梯
/// </summary>
Switch_14_LeaveLift,
/// <summary>
/// 料架交换:关门,并更新送料信息
/// </summary>
Switch_15_CloseDoor,
Switch_15_WaitDoorClose,
/// <summary>
/// 料架交换:去临时点2
/// </summary>
Switch_16_ReToTmp2,
/// <summary>
/// 料架交换:在临时点2拾取料架
/// </summary>
Switch_17_PutShelfOnAtTmp2,
/// <summary>
/// 根据当前状态送料
/// </summary>
Switch_18_SendShelf,
/// <summary>
/// 根据当前状态返还料架
/// </summary>
Switch_19_ReturnShelf,
#endregion
#region 过门任务
CrossDoor_01_ToCurDoor,
CrossDoor_02_OpenCurDoor,
CrossDoor_03_Enter,
CrossDoor_04_CloseCurDoor,
CrossDoor_05_OpenAntherDoor,
CrossDoor_06_LeaveDoor,
CrossDoor_07_CloseAntherDoor,
CrossDoor_08_Finish,
#endregion
/// <summary> /// <summary>
/// 结束 /// 结束
/// </summary> /// </summary>
......
...@@ -34,7 +34,7 @@ namespace DeviceLibrary ...@@ -34,7 +34,7 @@ namespace DeviceLibrary
}) ; }) ;
if (JobRunStep.IsStep(RunStep.NONE)) if (JobRunStep.IsStep(RunStep.NONE))
{ {
ClearLiftNodeOccupied(agv);
if (!ChargePileManager.HasEmpty(agv, out ChargePile charge)) if (!ChargePileManager.HasEmpty(agv, out ChargePile charge))
{ {
runInfo = $"无空闲充电桩,从" + JobParam.SrcNode + "回到待机位"; runInfo = $"无空闲充电桩,从" + JobParam.SrcNode + "回到待机位";
......
using Common;
using DeviceLibrary.bean;
namespace DeviceLibrary
{
/// <summary>
/// 过门任务
/// </summary>
public class CrossDoorJob : Job
{
/// <summary>
/// 待机任务
/// </summary>
/// <param name="agvPlae"></param>
public CrossDoorJob(JobParam jobParam) : base(jobParam)
{
JobName = "过门任务";
}
public CrossDoorJob():base()
{
JobName = "过门任务";
}
/// <summary>
/// 过门任务
/// </summary>
/// <param name="agv"></param>
public override Job Run(AgvInfo agv)
{
agv.SetJobContext(new bean.agv.JobContext()
{
AgvTask = agv.TaskRunState.Task,
JobFullName = this.ToString(),
JobStep = JobRunStep.PreStep(),
Name = agv.Name,
JobParam=JobParam
});
if (JobRunStep.IsStep(RunStep.NONE))
{
{
{
JobRunStep.ToNextStep(RunStep.STANDBY_WAIT_REACH_STANDBY);
runInfo = "从" + JobParam.SrcNode + "回到待机位";
JobRunStep.Msg = runInfo;
ToStandby(agv);
}
}
}
else if (JobRunStep.IsStep(RunStep.STANDBY_WAIT_REACH_STANDBY))
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
JobRunStep.ToNextStep(RunStep.END);
// runInfo = "到达待机位";
//JobRunStep.Msg = runInfo;
}
}
else if (JobRunStep.IsStep(RunStep.END))
{
//Job job = AGVManager.control.GetJob(agv);
//if (job != null && !(job is StandyJob))
//{
// if (job is ChargeJob && agv.Battery > BatteryMid)
// return this;
// runInfo = "在待机位检测到任务,执行任务";
// JobRunStep.Msg = runInfo;
// JobRunStep.EndJob();
// return job;
//}
}
return this;
}
}
}
...@@ -31,10 +31,35 @@ namespace DeviceLibrary.bean.job ...@@ -31,10 +31,35 @@ namespace DeviceLibrary.bean.job
}); });
if (JobRunStep.IsStep(RunStep.NONE)) if (JobRunStep.IsStep(RunStep.NONE))
{ {
JobRunStep.ToNextStep(RunStep.ShelfBack_LiftToStore_01_ToLift); if(TargetIsOccupied(agv, JobParam.SrcNode.Name))
runInfo = $"任务开始:去{JobParam.SrcNode.AliceName}"; {
JobRunStep.Msg = runInfo; JobRunStep.ToNextStep(RunStep.ShelfBack_LiftToStore_01_ToStandby);
AllocateTask(agv, $"{JobParam.SrcNode.Name}"); runInfo = $"{JobParam.SrcNode.AliceName}有小车,去待机点";
JobRunStep.Msg = runInfo;
MoveToNode(agv, $"{SettingString.Standby}");
}
else
{
JobRunStep.ToNextStep(RunStep.ShelfBack_LiftToStore_01_ToLift);
runInfo = $"任务开始:去{JobParam.SrcNode.AliceName}";
JobRunStep.Msg = runInfo;
ToLift(agv, $"{JobParam.SrcNode.Name}");
}
}
else if (JobRunStep.IsStep(RunStep.ShelfBack_LiftToStore_01_ToStandby))
{
if (TargetIsOccupied(agv, JobParam.SrcNode.Name))
{
}
else
{
JobRunStep.ToNextStep(RunStep.ShelfBack_LiftToStore_01_ToLift);
runInfo = $"任务开始:去{JobParam.SrcNode.AliceName}";
JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{JobParam.SrcNode.Name}");
}
} }
else if (JobRunStep.IsStep(RunStep.ShelfBack_LiftToStore_01_ToLift)) else if (JobRunStep.IsStep(RunStep.ShelfBack_LiftToStore_01_ToLift))
{ {
...@@ -44,7 +69,7 @@ namespace DeviceLibrary.bean.job ...@@ -44,7 +69,7 @@ namespace DeviceLibrary.bean.job
//上报状态 //上报状态
manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId, 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, service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.auto,
$"到达{ JobParam.SrcNode.Name }")); $"到达{JobParam.SrcNode.Name}"));
runInfo = $"到达{JobParam.SrcNode.AliceName},等待门开启"; runInfo = $"到达{JobParam.SrcNode.AliceName},等待门开启";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
} }
...@@ -56,7 +81,7 @@ namespace DeviceLibrary.bean.job ...@@ -56,7 +81,7 @@ namespace DeviceLibrary.bean.job
JobRunStep.ToNextStep(RunStep.ShelfBack_LiftToStore_02_02_EnterLift); JobRunStep.ToNextStep(RunStep.ShelfBack_LiftToStore_02_02_EnterLift);
runInfo = $"{JobParam.SrcNode.AliceName}门已开启,去取料点"; runInfo = $"{JobParam.SrcNode.AliceName}门已开启,去取料点";
//任务状态变更 //任务状态变更
lift.LiftContext.SetLiftOccupiedAgv(JobParam.SrcNode.Name,agv.IP); lift.LiftContext.SetLiftOccupiedAgv(JobParam.SrcNode.Name, agv.IP);
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回电梯到达, out string msg); MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回电梯到达, out string msg);
AllocateTask(agv, $"{JobParam.SrcNode.Name}_{SettingString.PutShelfOn}"); AllocateTask(agv, $"{JobParam.SrcNode.Name}_{SettingString.PutShelfOn}");
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
...@@ -84,7 +109,8 @@ namespace DeviceLibrary.bean.job ...@@ -84,7 +109,8 @@ namespace DeviceLibrary.bean.job
$"电梯取车")); $"电梯取车"));
runInfo = $"在{JobParam.SrcNode.AliceName}取料车完成,准备离开"; runInfo = $"在{JobParam.SrcNode.AliceName}取料车完成,准备离开";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{SettingString.Leave}_{JobParam.SrcNode.Name}"); //AllocateTask(agv, $"{SettingString.Leave}_{JobParam.SrcNode.Name}");
LeaveLift(agv, JobParam.SrcNode.Name);
} }
} }
else if (JobRunStep.IsStep(RunStep.ShelfBack_LiftToStore_04_LeaveLift)) else if (JobRunStep.IsStep(RunStep.ShelfBack_LiftToStore_04_LeaveLift))
...@@ -93,7 +119,7 @@ namespace DeviceLibrary.bean.job ...@@ -93,7 +119,7 @@ namespace DeviceLibrary.bean.job
{ {
JobRunStep.ToNextStep(RunStep.ShelfBack_LiftToStore_05_CloseLiftDoor); JobRunStep.ToNextStep(RunStep.ShelfBack_LiftToStore_05_CloseLiftDoor);
//关门 //关门
bool rtn = lift.LiftContext.AGVLeave(JobParam.SrcNode.Name, agv,false); bool rtn = lift.LiftContext.AGVLeave(JobParam.SrcNode.Name, agv, false);
runInfo = $"离开{JobParam.SrcNode.AliceName},关闭电梯门:{rtn}"; runInfo = $"离开{JobParam.SrcNode.AliceName},关闭电梯门:{rtn}";
//任务状态变更 //任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回离开电梯, out string msg); MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回离开电梯, out string msg);
...@@ -117,7 +143,7 @@ namespace DeviceLibrary.bean.job ...@@ -117,7 +143,7 @@ namespace DeviceLibrary.bean.job
//上报状态 //上报状态
manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId, 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, service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.auto,
$"到达{ JobParam.CurTargetNode.Name }")); $"到达{JobParam.CurTargetNode.Name}"));
runInfo = $"到达{JobParam.CurTargetNode.AliceName}放料点,卸下料车"; runInfo = $"到达{JobParam.CurTargetNode.AliceName}放料点,卸下料车";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
AllocateTask(agv, SettingString.TakeShelfOff); AllocateTask(agv, SettingString.TakeShelfOff);
......
...@@ -43,7 +43,7 @@ namespace DeviceLibrary ...@@ -43,7 +43,7 @@ namespace DeviceLibrary
JobRunStep.ToNextStep(RunStep.STANDBY_WAIT_REACH_STANDBY); JobRunStep.ToNextStep(RunStep.STANDBY_WAIT_REACH_STANDBY);
runInfo = "从" + JobParam.SrcNode + "回到待机位"; runInfo = "从" + JobParam.SrcNode + "回到待机位";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
AllocateStandbyTask(agv); ToStandby(agv);
} }
} }
......
...@@ -294,7 +294,7 @@ namespace DeviceLibrary.bean.job ...@@ -294,7 +294,7 @@ namespace DeviceLibrary.bean.job
{ {
if (agv.TaskRunState.CheckTaskFinished(agv.Name)) if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{ {
if (TargetIsOccupied(agv, JobParam.SrcNode.AliceName)) if (TargetIsOccupied(agv, JobParam.SrcNode.Name))
{ {
JobRunStep.ToNextStep(RunStep.Steel_LiftToLine_19_ToStandby); JobRunStep.ToNextStep(RunStep.Steel_LiftToLine_19_ToStandby);
runInfo = $"{JobParam.SrcNode.AliceName}有车,去停留点"; runInfo = $"{JobParam.SrcNode.AliceName}有车,去停留点";
...@@ -319,7 +319,7 @@ namespace DeviceLibrary.bean.job ...@@ -319,7 +319,7 @@ namespace DeviceLibrary.bean.job
} }
else if (JobRunStep.IsStep(RunStep.Steel_LiftToLine_19_ToStandby)) else if (JobRunStep.IsStep(RunStep.Steel_LiftToLine_19_ToStandby))
{ {
if (TargetIsOccupied(agv, JobParam.SrcNode.AliceName)) if (TargetIsOccupied(agv, JobParam.SrcNode.Name))
{ {
} }
else else
......
...@@ -36,7 +36,7 @@ namespace DeviceLibrary ...@@ -36,7 +36,7 @@ namespace DeviceLibrary
{ {
JobRunStep.ToNextStep(RunStep.LineToLift_01_ToLine); JobRunStep.ToNextStep(RunStep.LineToLift_01_ToLine);
runInfo = $"任务开始:去{JobParam.SteelShelfNode.AliceName}的取料点"; runInfo = $"任务开始:去{JobParam.SteelShelfNode.AliceName}的取料点";
AllocateTask(agv, $"{JobParam.SteelShelfNode.Name}_{SettingString.PutShelfOn}"); ToPutShelfOn(agv, JobParam.SteelShelfNode.Name);
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
} }
...@@ -54,7 +54,7 @@ namespace DeviceLibrary ...@@ -54,7 +54,7 @@ namespace DeviceLibrary
runInfo = $"到达{JobParam.SrcNode.AliceName}的取料点,开始拾取料车"; runInfo = $"到达{JobParam.SrcNode.AliceName}的取料点,开始拾取料车";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
AllocateTask(agv, SettingString.PutShelfOn); PutShelfOn(agv);
} }
} }
else if (JobRunStep.IsStep(RunStep.LineToLift_02_PutShelfOn)) else if (JobRunStep.IsStep(RunStep.LineToLift_02_PutShelfOn))
...@@ -67,7 +67,7 @@ namespace DeviceLibrary ...@@ -67,7 +67,7 @@ namespace DeviceLibrary
service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.auto, service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.auto,
$"取车")); $"取车"));
runInfo = $"在{JobParam.SrcNode.AliceName}拾取料车完成,去{JobParam.SrcNode.AliceName}放料点"; runInfo = $"在{JobParam.SrcNode.AliceName}拾取料车完成,去{JobParam.SrcNode.AliceName}放料点";
AllocateTask(agv, $"{JobParam.SrcNode.Name}_{SettingString.TakeShelfOff}"); ToTakeShelfOff(agv, JobParam.SrcNode.Name);
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
} }
} }
...@@ -113,7 +113,7 @@ namespace DeviceLibrary ...@@ -113,7 +113,7 @@ namespace DeviceLibrary
runInfo = $"在{JobParam.SrcNode.AliceName}确认完成,去{JobParam.CurTargetNode.AliceName}"; runInfo = $"在{JobParam.SrcNode.AliceName}确认完成,去{JobParam.CurTargetNode.AliceName}";
//任务状态变更 //任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.前往电梯, out string msg); MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.前往电梯, out string msg);
AllocateTask(agv, JobParam.CurTargetNode.Name); ToLift(agv, JobParam.CurTargetNode.Name);
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
} }
...@@ -143,7 +143,7 @@ namespace DeviceLibrary ...@@ -143,7 +143,7 @@ namespace DeviceLibrary
JobRunStep.ToNextStep(RunStep.LineToLift_05_01_ToTemp1); JobRunStep.ToNextStep(RunStep.LineToLift_05_01_ToTemp1);
SetLiftOccupied(JobParam.CurTargetNode.Name, agv); SetLiftOccupied(JobParam.CurTargetNode.Name, agv);
runInfo = $"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车"; runInfo = $"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车";
AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.Temp1}_{SettingString.TakeShelfOff}"); ToTmp1TakeOff(agv, JobParam.CurTargetNode.Name);
service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId); service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId);
if (missionInfo != null) if (missionInfo != null)
{ {
...@@ -157,7 +157,7 @@ namespace DeviceLibrary ...@@ -157,7 +157,7 @@ namespace DeviceLibrary
JobRunStep.ToNextStep(RunStep.LineToLift_06_01_EnterLift); JobRunStep.ToNextStep(RunStep.LineToLift_06_01_EnterLift);
runInfo = $"{JobParam.CurTargetNode.AliceName}已开门,到放料点"; runInfo = $"{JobParam.CurTargetNode.AliceName}已开门,到放料点";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff}"); ToTakeShelfOff(agv, JobParam.CurTargetNode.Name);
} }
} }
else if (JobRunStep.IsTimeOut(20) && !lift.LiftContext.CheckIfRequestOk(JobParam.CurTargetNode.Name, JobParam.GetMissionInfo())) else if (JobRunStep.IsTimeOut(20) && !lift.LiftContext.CheckIfRequestOk(JobParam.CurTargetNode.Name, JobParam.GetMissionInfo()))
......
using Common; using Common;
using DeviceLibrary.bean.job; using DeviceLibrary.bean.job;
using DeviceLibrary.manager; using DeviceLibrary.manager;
using System;
namespace DeviceLibrary.bean.jobType namespace DeviceLibrary.bean.jobType
{ {
...@@ -15,19 +16,25 @@ namespace DeviceLibrary.bean.jobType ...@@ -15,19 +16,25 @@ namespace DeviceLibrary.bean.jobType
return null; return null;
else else
{ {
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.ShelfBackMission(agv); service.model.MissionInfo missionInfo = manager.MissionManager.ShelfBackMission(agv);
if(missionInfo!=null) if (missionInfo != null)
{ {
if (!liftname.Equals(missionInfo?.liftName)) if (!liftname.Equals(missionInfo?.liftName))
return null; return null;
if (CheckHasSameJob(agv,liftname))
{
return null;
}
if (TargetIsOccupied(agv, liftname))
return null;
//if (service.model.MissionInfo.IsFinishedProdcut(missionInfo)) //if (service.model.MissionInfo.IsFinishedProdcut(missionInfo))
// return null; // return null;
Node src = manager.NodeManager.GetNode(liftname, NodeType.Lift); Node src = manager.NodeManager.GetNode(liftname, NodeType.Lift);
string[] dests = lift.destinationPoint.Split(','); string[] dests = lift.destinationPoint.Split(',');
Node dest = manager.NodeManager.GetNode(dests.Length > 1 ? dests[0] : lift.destinationPoint, NodeType.Node); Node dest = manager.NodeManager.GetNode(dests.Length > 1 ? dests[0] : lift.destinationPoint, NodeType.Node);
JobParam jobParam = new JobParam(src, dest,null,missionInfo); JobParam jobParam = new JobParam(src, dest, null, missionInfo);
MissionManager.SetMissionOccupied(missionInfo, agv); MissionManager.SetMissionOccupied(missionInfo, agv);
return new ShelfBackLiftToStoreJob(jobParam); return new ShelfBackLiftToStoreJob(jobParam);
} }
...@@ -35,5 +42,21 @@ namespace DeviceLibrary.bean.jobType ...@@ -35,5 +42,21 @@ namespace DeviceLibrary.bean.jobType
} }
return null; return null;
} }
bool CheckHasSameJob(AgvInfo agv,string liftname)
{
try
{
AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && s.Scope.Workshop.Equals(agv.Scope.Workshop)
&& s.CurJob != null && (s.CurJob is F1LiftC1ToLiftD2Job ||
s.CurJob is F1LiftD2ToLiftC1Job || (s.CurJob is LineToLiftJob && liftname.Equals(s?.CurJob?.JobParam?.CurTargetNode?.Name??""))));
if (agvInfo != null)
return true;
}
catch
{
return false;
}
return false;
}
} }
} }
...@@ -21,13 +21,13 @@ namespace DeviceLibrary.bean.jobType ...@@ -21,13 +21,13 @@ namespace DeviceLibrary.bean.jobType
{ {
if(agv.Scope.Floor.Equals(1) && agv.HasFinishedShelfInLift(out string liftname, out lift.LiftStatus lift)) if(agv.Scope.Floor.Equals(1) && agv.HasFinishedShelfInLift(out string liftname, out lift.LiftStatus lift))
{ {
//if (CheckOtherRobotState(agv, SettingString.LIFT_C1) || CheckOtherRobotState(agv, SettingString.LIFT_D2))
//{
// return null;
//}
service.model.MissionInfo missionInfo = manager.MissionManager.GetF1SendFullFinishedC1ToD2Mission(agv); service.model.MissionInfo missionInfo = manager.MissionManager.GetF1SendFullFinishedC1ToD2Mission(agv);
if(missionInfo!=null) if(missionInfo!=null)
{ {
if (TargetIsOccupied(agv, SettingString.LIFT_D2) || TargetIsOccupied(agv, SettingString.LIFT_C1))
{
return null;
}
if (service.model.MissionInfo.IsFinishedProdcut(missionInfo)) if (service.model.MissionInfo.IsFinishedProdcut(missionInfo))
{ {
Node src = manager.NodeManager.GetNode(SettingString.LIFT_C1, NodeType.Lift); Node src = manager.NodeManager.GetNode(SettingString.LIFT_C1, NodeType.Lift);
...@@ -46,7 +46,7 @@ namespace DeviceLibrary.bean.jobType ...@@ -46,7 +46,7 @@ namespace DeviceLibrary.bean.jobType
try try
{ {
AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && s.Scope.Workshop.Equals(agv.Scope.Workshop) AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && s.Scope.Workshop.Equals(agv.Scope.Workshop)
&& s.CurJob != null && (s.CurJob is F1LiftC1ToLiftD2Job || s.CurJob is F1LiftD2ToLiftC1Job)); && s.CurJob != null && (s.CurJob is F1LiftC1ToLiftD2Job || s.CurJob is F1LiftD2ToLiftC1Job || s.CurJob is LineToLiftJob));
if (agvInfo != null) if (agvInfo != null)
return true; return true;
} }
......
...@@ -19,10 +19,10 @@ namespace DeviceLibrary.bean.jobType ...@@ -19,10 +19,10 @@ namespace DeviceLibrary.bean.jobType
{ {
if (agv.Scope.Floor.Equals(1) && agv.HasFinishedEmptyShelfInLift(out string liftname, out lift.LiftStatus lift)) if (agv.Scope.Floor.Equals(1) && agv.HasFinishedEmptyShelfInLift(out string liftname, out lift.LiftStatus lift))
{ {
//if (CheckOtherRobotState(agv, SettingString.LIFT_C1) || CheckOtherRobotState(agv, SettingString.LIFT_D2)) if (TargetIsOccupied(agv, SettingString.LIFT_D2))
//{ {
// return null; return null;
//} }
service.model.MissionInfo missionInfo = manager.MissionManager.GetF1FinishedD2ToC1Mission(agv); service.model.MissionInfo missionInfo = manager.MissionManager.GetF1FinishedD2ToC1Mission(agv);
if (missionInfo != null) if (missionInfo != null)
{ {
...@@ -41,7 +41,7 @@ namespace DeviceLibrary.bean.jobType ...@@ -41,7 +41,7 @@ namespace DeviceLibrary.bean.jobType
try try
{ {
AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && s.Scope.Workshop.Equals(agv.Scope.Workshop) AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && s.Scope.Workshop.Equals(agv.Scope.Workshop)
&& s.CurJob != null && (s.CurJob is F1LiftD2ToLiftC1Job || s.CurJob is F1LiftC1ToLiftD2Job)); && s.CurJob != null && (s.CurJob is F1LiftD2ToLiftC1Job || s.CurJob is F1LiftC1ToLiftD2Job || s.CurJob is LineToLiftJob));
if (agvInfo != null) if (agvInfo != null)
return true; return true;
} }
......
using Common; using Common;
using DeviceLibrary.lift;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
...@@ -22,34 +23,22 @@ namespace DeviceLibrary ...@@ -22,34 +23,22 @@ namespace DeviceLibrary
// AGVManager.agvInfo.Find(s=>s.Auto&& !s.IP.Equals(agvInfo.IP)&&(agvInfo?.CurJob?.JobParam?.)) // AGVManager.agvInfo.Find(s=>s.Auto&& !s.IP.Equals(agvInfo.IP)&&(agvInfo?.CurJob?.JobParam?.))
//} //}
/// <summary> /// <summary>
/// 检查其他机器人是否有电梯任务 /// 目标点是否有小车
/// </summary> /// </summary>
/// <param name="agvInfo"></param> /// <param name="agv"></param>
/// <param name="liftname"></param> /// <param name="targetName"></param>
/// <returns>true:有</returns> /// <returns></returns>
protected bool CheckOtherRobotState(AgvInfo agvInfo, string liftname) protected bool TargetIsOccupied(AgvInfo agv, string targetName)
{ {
var allAgv = AGVManager.agvInfo.FindAll(s => s.Auto && !agvInfo.IP.Equals(s.IP) &&
agvInfo.Scope.Workshop.Equals(s.Scope.Workshop));
try try
{ {
AgvInfo agvInfo1 = allAgv.Find(s => s.Place != null && s.Place.Name.Contains(liftname)); return LiftContext.OtherAGVIsInLift(agv, targetName);
//AgvInfo agvInfo1 = allAgv.Find(s => s.CurJob != null && s.CurJob.JobParam != null &&
// ((s.CurJob.JobParam.SrcNode != null && s.CurJob.JobParam.SrcNode.Name.Contains(liftname)) &&
// (s.CurJob.JobParam.CurTargetNode != null && s.CurJob.JobParam.CurTargetNode.Name.Contains(liftname))));
if (agvInfo1 != null)
return true;
} }
catch (Exception ex) catch (Exception ex)
{ {
foreach (var item in allAgv) LogUtil.error($"TargetIsOccupied:{agv.Name},{JsonHelper.SerializeObject(AGVManager.agvInfo)}", ex);
{ return false;
LogUtil.error($"CheckOtherRobotState,{agvInfo.Name},{liftname}: {JsonHelper.SerializeObject(item)}", ex);
}
return true;
} }
return false;
} }
} }
} }
...@@ -26,6 +26,8 @@ namespace DeviceLibrary ...@@ -26,6 +26,8 @@ namespace DeviceLibrary
return null; return null;
else if (CheckHasSameJob(agv)) else if (CheckHasSameJob(agv))
return null; return null;
else if (CheckHasSendJob(agv))
return null;
else else
{ {
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) &&
...@@ -59,6 +61,8 @@ namespace DeviceLibrary ...@@ -59,6 +61,8 @@ namespace DeviceLibrary
} }
} }
MissionManager.SetMissionOccupied(missionInfo, agv);
MissionManager.Log.Info($"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return new LiftToLinesJob(jobParam); return new LiftToLinesJob(jobParam);
} }
} }
...@@ -70,17 +74,18 @@ namespace DeviceLibrary ...@@ -70,17 +74,18 @@ namespace DeviceLibrary
{ {
try try
{ {
if (agv.Scope.Workshop.Equals("1F")) AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && s.Scope.Workshop.Equals(agv.Scope.Workshop)
{ && s.CurJob != null && (s.CurJob is LiftToLinesJob));
AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && s.Scope.Workshop.Equals(agv.Scope.Workshop) if (agvInfo != null)
&& s.CurJob != null && (s.CurJob is LiftToLinesJob ) && s.Scope.Workshop.Equals("1F")); return true;
if (agvInfo != null) //if (agv.Scope.Workshop.Equals("1F"))
return true; //{
}
else //}
{ //else
return false; //{
} // return false;
//}
} }
catch catch
{ {
...@@ -88,34 +93,28 @@ namespace DeviceLibrary ...@@ -88,34 +93,28 @@ namespace DeviceLibrary
} }
return false; return false;
} }
bool CheckHasSendJob(AgvInfo agv)
bool TargetIsOccupied(AgvInfo agv, string targetName)
{ {
try try
{ {
if (agv.Scope.Equals("1F")) if (agv.Scope.Workshop.Equals("1F"))
{ {
AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && !s.IP.Equals(agv.IP) AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && s.Scope.Workshop.Equals(agv.Scope.Workshop)
&& agv.Scope.Workshop.Equals(s.Scope.Workshop) && s.Scope.Equals("1F")); && s.CurJob != null && s.Scope.Workshop.Equals("1F") && (s.CurJob is LineToLiftJob || s.CurJob is F1LiftC1ToLiftD2Job
|| s.CurJob is F1LiftD2ToLiftC1Job));
if (agvInfo != null) if (agvInfo != null)
{ return true;
//if (agvInfo?.Place.Name.Contains(targetName) ?? false)
// return true;
if (agvInfo?.TaskRunState?.Task?.Name.Equals(targetName) ?? false)
{
return true;
}
}
} }
else else
{
return false; return false;
return false; }
} }
catch (Exception ex) catch
{ {
LogUtil.error($"TargetIsOccupied:{agv.Name},{JsonHelper.SerializeObject(AGVManager.agvInfo)}", ex);
return false; return false;
} }
return false;
} }
} }
} }
using Common; using Common;
using DeviceLibrary.bean.job; using DeviceLibrary.bean.job;
using DeviceLibrary.lift;
using DeviceLibrary.manager; using DeviceLibrary.manager;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
...@@ -18,6 +19,8 @@ namespace DeviceLibrary.bean.jobType ...@@ -18,6 +19,8 @@ namespace DeviceLibrary.bean.jobType
{ {
if (!agv.IsIdle()) if (!agv.IsIdle())
return null; return null;
if (LiftContext.CheckHasEmptyFinished(agv, SettingString.LIFT_D2, out LiftStatus liftStatus))
return null;
service.model.MissionInfo missionInfo = manager.MissionManager.GetLineToLiftMission(agv, out string liftname); service.model.MissionInfo missionInfo = manager.MissionManager.GetLineToLiftMission(agv, out string liftname);
if (missionInfo != null) if (missionInfo != null)
{ {
...@@ -35,7 +38,7 @@ namespace DeviceLibrary.bean.jobType ...@@ -35,7 +38,7 @@ namespace DeviceLibrary.bean.jobType
Common.LogUtil.error($"无法生成任务,电梯不存在:{liftname}"); Common.LogUtil.error($"无法生成任务,电梯不存在:{liftname}");
return null; return null;
} }
if (CheckOtherRobotState(agv, liftname)) if (TargetIsOccupied(agv, liftname))
{ {
return null; return null;
} }
...@@ -49,19 +52,18 @@ namespace DeviceLibrary.bean.jobType ...@@ -49,19 +52,18 @@ namespace DeviceLibrary.bean.jobType
return null; return null;
} }
bool CheckHasSameJob(AgvInfo agv,string liftname) bool CheckHasSameJob(AgvInfo agv, string liftname)
{ {
try try
{ {
if (agv.Scope.Workshop.Equals("1F")) if (agv.Scope.Workshop.Equals("1F"))
{ {
AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && s.Scope.Workshop.Equals(agv.Scope.Workshop) && AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && s.Scope.Workshop.Equals(agv.Scope.Workshop) &&
s.Scope.Workshop.Equals("1F") s.CurJob != null && (s.CurJob is LineToLiftJob || s.CurJob is F1LiftC1ToLiftD2Job
&& s.CurJob != null && (s.CurJob is LineToLiftJob || s.CurJob is F1LiftC1ToLiftD2Job
|| s.CurJob is F1LiftD2ToLiftC1Job)); || s.CurJob is F1LiftD2ToLiftC1Job));
if (agvInfo != null) if (agvInfo != null)
{ {
if(agvInfo?.CurJob?.JobParam?.GetMissionInfo()?.liftName?.Equals(liftname)??true) if (agvInfo?.CurJob?.JobParam?.GetMissionInfo()?.liftName?.Equals(liftname) ?? true)
{ {
return true; return true;
} }
...@@ -71,11 +73,19 @@ namespace DeviceLibrary.bean.jobType ...@@ -71,11 +73,19 @@ namespace DeviceLibrary.bean.jobType
// return true; // return true;
} }
else else
return false; {
AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && s.Scope.Workshop.Equals(agv.Scope.Workshop) &&
s.CurJob != null && (s.CurJob is LineToLiftJob));
if (agvInfo != null)
{
return true;
}
}
return false;
} }
catch(Exception ex) catch (Exception ex)
{ {
LogUtil.error("LineToLiftJobType CheckHasSameJob",ex); LogUtil.error("LineToLiftJobType CheckHasSameJob", ex);
return true; return true;
} }
return false; return false;
......
using Common;
using DeviceLibrary.bean.job;
using DeviceLibrary.lift;
using DeviceLibrary.manager;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DeviceLibrary.bean.jobType
{
/// <summary>
/// 从缓存点取料并送入电梯内
/// </summary>
public class ShelfBuffToLiftJobType : JobType
{
public override Job GetNewJob(AgvInfo agv)
{
if (!agv.IsIdle())
return null;
if (LiftContext.CheckHasEmptyFinished(agv, SettingString.LIFT_D2, out LiftStatus liftStatus))
return null;
service.model.MissionInfo missionInfo = manager.MissionManager.BuffToLiftMission(agv);
if (missionInfo != null)
{
if (CheckHasSameJob(agv, missionInfo.liftName))
return null;
Node src = manager.NodeManager.GetNode(SettingString.ShelfBuff, NodeType.Node);
Node dest = manager.NodeManager.GetNode(missionInfo.liftName, NodeType.Lift);
if (src == null)
{
Common.LogUtil.error($"无法生成任务,起始点不存在:{missionInfo.sourcePoint}");
return null;
}
if (dest == null)
{
Common.LogUtil.error($"无法生成任务,电梯不存在:{missionInfo.liftName}");
return null;
}
if (TargetIsOccupied(agv, missionInfo.liftName))
{
return null;
}
JobParam jobParam = new JobParam(src, dest, null, missionInfo);
MissionManager.SetMissionOccupied(missionInfo, agv);
MissionManager.Log.Info($"执行任务[{agv.Name}][ShelfBuffToLiftJobType]{JsonHelper.SerializeObject(missionInfo)}");
//任务状态变更
//MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.已分配, out string msg);
return new LineToLiftJob(jobParam);
}
return null;
}
bool CheckHasSameJob(AgvInfo agv, string liftname)
{
try
{
if (agv.Scope.Workshop.Equals("1F"))
{
AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && s.Scope.Workshop.Equals(agv.Scope.Workshop) &&
s.Scope.Workshop.Equals("1F")
&& s.CurJob != null && (s.CurJob is LineToLiftJob || s.CurJob is F1LiftC1ToLiftD2Job
|| s.CurJob is F1LiftD2ToLiftC1Job));
if (agvInfo != null)
{
if (agvInfo?.CurJob?.JobParam?.GetMissionInfo()?.liftName?.Equals(liftname) ?? true)
{
return true;
}
}
//if (agvInfo != null)
// return true;
}
else
return false;
}
catch (Exception ex)
{
LogUtil.error("LineToLiftJobType CheckHasSameJob", ex);
return true;
}
return false;
}
}
}
...@@ -5,6 +5,7 @@ using System.Linq; ...@@ -5,6 +5,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Web.Management;
using static DeviceLibrary.OpManager; using static DeviceLibrary.OpManager;
namespace DeviceLibrary.lift namespace DeviceLibrary.lift
...@@ -41,11 +42,92 @@ namespace DeviceLibrary.lift ...@@ -41,11 +42,92 @@ namespace DeviceLibrary.lift
{ {
if (liftStatus?.HasEmptyFinishedShelf ?? false)//D2电梯有成品空架子,不返回门状态 if (liftStatus?.HasEmptyFinishedShelf ?? false)//D2电梯有成品空架子,不返回门状态
{ {
//返回一个成品任务id
liftStatus.missionId = manager.MissionManager.GetMissionIdByEmptyFinishedShelfInLift(SettingString.LIFT_C1);
return true; return true;
} }
} }
return false; return false;
} }
public static string GetLiftNodeOccupiedInfo()
{
try
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("电梯位置占用信息");
foreach (var item in lifts)
{
sb.Append(item.Key + ":");
sb.AppendLine("[点位占用:"+string.Join(";", item.Value.Agvs) +"][电梯使用:"+item.Value.UsingAgv+"]");
}
return sb.ToString();
}
catch
{
}
return "";
}
/// <summary>
/// 设置电梯节点的占用
/// </summary>
/// <param name="agv"></param>
/// <param name="liftName"></param>
public static void SetLiftNodeOccupied(AgvInfo agv, string liftName = "")
{
try
{
if (string.IsNullOrEmpty(liftName))
{
foreach (var item in lifts.Values)
{
if (item.Agvs != null && item.Agvs.Contains(agv.IP))
{
item.Agvs.Remove(agv.IP);
LogUtil.info($"【{agv.Name}】清除电梯节点占用:{string.Join(",",item.Agvs)}");
}
}
}
else
{
if (!lifts[liftName].Agvs.Contains(agv.IP))
{
lifts[liftName].Agvs.Add(agv.IP);
LogUtil.info($"【{agv.Name}】设置电梯【{liftName}】节点占用:{string.Join(",", lifts[liftName].Agvs)}");
}
}
}
catch (Exception ex)
{
LogUtil.error($"SetLiftOccupied: {agv.IP},{liftName}", ex);
}
}
/// <summary>
/// 同车间的其他小车是否在电梯处
/// </summary>
/// <param name="agv"></param>
/// <param name="liftName"></param>
/// <returns></returns>
public static bool OtherAGVIsInLift(AgvInfo agv, string liftName)
{
try
{
AgvInfo agvInfo = AGVManager.agvInfo.Find(s =>
s.Scope.Workshop.Equals(agv.Scope.Workshop) && !s.IP.Equals(agv.IP)&&s.Auto);
if (agvInfo != null)
{
return lifts[liftName].Agvs.Contains(agvInfo.IP);
}
else
return false;
}
catch(Exception ex)
{
LogUtil.error($"OtherAGVIsInLift: {agv.IP},{liftName}",ex);
}
return false;
}
/// <summary> /// <summary>
/// 电梯是否开门 /// 电梯是否开门
/// </summary> /// </summary>
...@@ -79,7 +161,7 @@ namespace DeviceLibrary.lift ...@@ -79,7 +161,7 @@ namespace DeviceLibrary.lift
/// <returns>true:是</returns> /// <returns>true:是</returns>
public static bool IsOccupied(AgvInfo agv, string liftId) public static bool IsOccupied(AgvInfo agv, string liftId)
{ {
return lifts[liftId].OccupiedAgv.Equals(agv.IP); return lifts[liftId].UsingAgv.Equals(agv.IP);
} }
/// <summary> /// <summary>
/// 请求使用电梯 /// 请求使用电梯
...@@ -135,6 +217,58 @@ namespace DeviceLibrary.lift ...@@ -135,6 +217,58 @@ namespace DeviceLibrary.lift
return rtn; return rtn;
} }
/// <summary> /// <summary>
/// 更新请求信息
/// </summary>
/// <param name="missionInfo"></param>
/// <param name="agvInfo"></param>
/// <param name="isback"></param>
/// <returns></returns>
public static bool UpdateRequestInfo(service.model.MissionInfo missionInfo, AgvInfo agvInfo, bool isback = false)
{
service.model.SendInInfo info;
bool rtn = false;
if (isback)//返回
{
if (!AGVManager.GetsysClientBy(missionInfo.sourceFloor, missionInfo.liftName, out string destclient))
{
Common.LogUtil.error($"请求电梯失败,因目的系统标识获取失败:floor={agvInfo.Scope.Floor},lift={missionInfo.liftName}");
return false;
}
info = new service.model.SendInInfo()
{
liftId = missionInfo.liftName,
destinationFloor = missionInfo.sourceFloor,
destinationPoint = missionInfo.sourcePoint,
destinationClient = destclient,
sourceFloor = missionInfo.destinationFloor,
sourceClient = agvInfo.Client,
updateInfo=true
};
}
else
{
if (!AGVManager.GetsysClientBy(missionInfo.destinationFloor, missionInfo.liftName, out string destclient))
{
Common.LogUtil.error($"请求电梯失败,因目的系统标识获取失败:floor={agvInfo.Scope.Floor},lift={missionInfo.liftName}");
return false;
}
info = new service.model.SendInInfo()
{
liftId = missionInfo.liftName,
sourceClient = agvInfo.Client,
sourceFloor = missionInfo.sourceFloor,
sourcePoint = missionInfo.sourcePoint,
destinationClient = destclient,
destinationFloor = missionInfo.destinationFloor,
destinationPoint = missionInfo.destinationPoint,
updateInfo = true
};
}
LogUtil.info($"更新电梯请求信息:{JsonHelper.SerializeObject(info)}");
rtn = HttpManager.RequestSendIn(info);
return rtn;
}
/// <summary>
/// 成品呼叫 /// 成品呼叫
/// </summary> /// </summary>
/// <param name="missionInfo"></param> /// <param name="missionInfo"></param>
...@@ -314,19 +448,19 @@ namespace DeviceLibrary.lift ...@@ -314,19 +448,19 @@ namespace DeviceLibrary.lift
/// <param name="agvIp"></param> /// <param name="agvIp"></param>
public static void SetLiftOccupiedAgv(string liftId, string agvIp) public static void SetLiftOccupiedAgv(string liftId, string agvIp)
{ {
lifts[liftId].OccupiedAgv = agvIp; lifts[liftId].UsingAgv = agvIp;
Common.LogUtil.info($"设置电梯占用:{liftId},{agvIp}【{JsonHelper.SerializeObject(lifts)}】"); Common.LogUtil.info($"使用电梯:{liftId},{agvIp}【{JsonHelper.SerializeObject(lifts)}】");
} }
public static void ResetLiftOccupiedAgv(string liftId) public static void ResetLiftOccupiedAgv(string liftId)
{ {
try try
{ {
lifts[liftId].OccupiedAgv = ""; lifts[liftId].UsingAgv = "";
Common.LogUtil.info($"清除电梯占用:{liftId}【{JsonHelper.SerializeObject(lifts)}】"); Common.LogUtil.info($"清除使用电梯:{liftId}【{JsonHelper.SerializeObject(lifts)}】");
} }
catch (Exception ex) catch (Exception ex)
{ {
Common.LogUtil.error($"清除电梯占用失败:{liftId}", ex); Common.LogUtil.error($"清除使用电梯失败:{liftId}", ex);
} }
} }
public static void ResetLiftOccupiedAgv(AgvInfo agv) public static void ResetLiftOccupiedAgv(AgvInfo agv)
...@@ -335,17 +469,17 @@ namespace DeviceLibrary.lift ...@@ -335,17 +469,17 @@ namespace DeviceLibrary.lift
{ {
foreach (var item in lifts.Values) foreach (var item in lifts.Values)
{ {
if (agv.IP.Equals(item.OccupiedAgv)) if (agv.IP.Equals(item.UsingAgv))
{ {
item.OccupiedAgv = ""; item.UsingAgv = "";
Common.LogUtil.info($"{agv.Name}清除电梯占用:【{JsonHelper.SerializeObject(lifts)}】"); Common.LogUtil.info($"{agv.Name}清除使用电梯:【{JsonHelper.SerializeObject(lifts)}】");
} }
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
Common.LogUtil.error($"{agv.Name}清除电梯占用失败", ex); Common.LogUtil.error($"{agv.Name}清除使用电梯失败", ex);
} }
} }
/// <summary> /// <summary>
...@@ -355,8 +489,8 @@ namespace DeviceLibrary.lift ...@@ -355,8 +489,8 @@ namespace DeviceLibrary.lift
/// <returns>true:占用</returns> /// <returns>true:占用</returns>
public static bool CheckLiftOccupied(string liftId) public static bool CheckLiftOccupied(string liftId)
{ {
LogUtil.debug($"检查电梯{liftId}是否被用:【{JsonHelper.SerializeObject(lifts)}】"); LogUtil.debug($"检查电梯{liftId}是否被使用:【{JsonHelper.SerializeObject(lifts)}】");
return !lifts[liftId].OccupiedAgv.Equals(""); return !lifts[liftId].UsingAgv.Equals("");
} }
/// <summary> /// <summary>
/// 获取电梯状态 /// 获取电梯状态
......
...@@ -9,7 +9,11 @@ namespace DeviceLibrary.lift ...@@ -9,7 +9,11 @@ namespace DeviceLibrary.lift
public class LiftInfo public class LiftInfo
{ {
public LiftStatus LiftStatus { get; set; } public LiftStatus LiftStatus { get; set; }
public string OccupiedAgv { get; set; } = ""; public string UsingAgv { get; set; } = "";
/// <summary>
/// 占用电梯的小车名
/// </summary>
public List<string> Agvs { get; set; } = new List<string>();
public LiftInfo() public LiftInfo()
{ {
LiftStatus = new LiftStatus(); LiftStatus = new LiftStatus();
......
...@@ -66,6 +66,7 @@ namespace DeviceLibrary ...@@ -66,6 +66,7 @@ namespace DeviceLibrary
jobTypes.Add(new F1LiftD2ToLiftC1JobType()); jobTypes.Add(new F1LiftD2ToLiftC1JobType());
jobTypes.Add(new LiftToLinesJobType()); jobTypes.Add(new LiftToLinesJobType());
jobTypes.Add(new BackLiftToLineJobType()); jobTypes.Add(new BackLiftToLineJobType());
jobTypes.Add(new ShelfBuffToLiftJobType());
jobTypes.Add(new LineToLiftJobType()); jobTypes.Add(new LineToLiftJobType());
jobTypes.Add(new LineOneToManyJobType()); jobTypes.Add(new LineOneToManyJobType());
jobTypes.Add(new SteelLineToLiftJobType()); jobTypes.Add(new SteelLineToLiftJobType());
......
...@@ -255,6 +255,32 @@ namespace DeviceLibrary.manager ...@@ -255,6 +255,32 @@ namespace DeviceLibrary.manager
} }
return null; return null;
} }
/// <summary>
/// 获取料架缓存点的任务
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
public static MissionInfo BuffToLiftMission(AgvInfo agv)
{
MissionInfo missionInfo = null;
try
{
var missions = GetMissionInfos().Where(w => w.state != MissionState.中止
&& w.state != MissionState.取消 && w.state != MissionState.完成).ToList();
missionInfo = missions.Find(s => s.sourceWorkshop.Equals(agv.Scope.Workshop) && !s.sourceWorkshop.Equals(s.destinationWorkshop) &&
s.state.Equals(MissionState.料架缓存) &&
agv.Scope.Tasks.Contains(s.projectType.ToString()));
if (missionInfo != null && AgvCanGetMission(missionInfo))
return missionInfo;
}
catch (Exception e)
{
Log.Error("BuffToLiftMission", e);
}
return null;
}
static bool AgvCanGetMission(MissionInfo missionInfo) static bool AgvCanGetMission(MissionInfo missionInfo)
{ {
return string.IsNullOrEmpty(missionInfo.occupiedAgv); return string.IsNullOrEmpty(missionInfo.occupiedAgv);
...@@ -276,8 +302,6 @@ namespace DeviceLibrary.manager ...@@ -276,8 +302,6 @@ namespace DeviceLibrary.manager
&& agv.Scope.Tasks.Contains(s.projectType.ToString()) && !s.projectType.Equals(ProjectType.移远成品入库)); && agv.Scope.Tasks.Contains(s.projectType.ToString()) && !s.projectType.Equals(ProjectType.移远成品入库));
if (missionInfo != null && AgvCanGetMission(missionInfo)) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
SetMissionOccupied(missionInfo, agv);
Log.Info($"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo; return missionInfo;
} }
} }
...@@ -303,12 +327,11 @@ namespace DeviceLibrary.manager ...@@ -303,12 +327,11 @@ namespace DeviceLibrary.manager
missionInfo = missions.Where(s => (agv.Scope.Workshop.Equals(s.sourceWorkshop)) && missionInfo = missions.Where(s => (agv.Scope.Workshop.Equals(s.sourceWorkshop)) &&
(!s.projectType.Equals(ProjectType.钢网入库) && !s.projectType.Equals(ProjectType.钢网领用)) (!s.projectType.Equals(ProjectType.钢网入库) && !s.projectType.Equals(ProjectType.钢网领用))
&& &&
(s.state >= MissionState.返回到达电梯内 && s.state <= MissionState.返回电梯到达) (s.state >= MissionState.返回到达电梯内 && s.state <= MissionState.返回电梯到达)
&& agv.Scope.Tasks.Contains(s.projectType.ToString())).FirstOrDefault(); && agv.Scope.Tasks.Contains(s.projectType.ToString())).FirstOrDefault();
if (missionInfo != null && AgvCanGetMission(missionInfo)) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
Log.Info($"执行料架返回任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo; return missionInfo;
} }
} }
...@@ -331,7 +354,6 @@ namespace DeviceLibrary.manager ...@@ -331,7 +354,6 @@ namespace DeviceLibrary.manager
&& agv.Scope.Tasks.Contains(s.projectType.ToString())).FirstOrDefault(); && agv.Scope.Tasks.Contains(s.projectType.ToString())).FirstOrDefault();
if (missionInfo != null && AgvCanGetMission(missionInfo)) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
Log.Info($"执行钢网分发线体任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo; return missionInfo;
} }
} }
...@@ -354,8 +376,6 @@ namespace DeviceLibrary.manager ...@@ -354,8 +376,6 @@ namespace DeviceLibrary.manager
&& agv.Scope.Tasks.Contains(s.projectType.ToString())).FirstOrDefault(); && agv.Scope.Tasks.Contains(s.projectType.ToString())).FirstOrDefault();
if (missionInfo != null && AgvCanGetMission(missionInfo)) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
Log.Info($"执行钢网去立库任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo; return missionInfo;
} }
} }
...@@ -382,7 +402,6 @@ namespace DeviceLibrary.manager ...@@ -382,7 +402,6 @@ namespace DeviceLibrary.manager
&& s.projectType.Equals(ProjectType.移远成品入库)).FirstOrDefault(); && s.projectType.Equals(ProjectType.移远成品入库)).FirstOrDefault();
if (missionInfo != null && AgvCanGetMission(missionInfo)) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
Log.Info($"执行1F成品回收任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo; return missionInfo;
} }
} }
...@@ -411,7 +430,6 @@ namespace DeviceLibrary.manager ...@@ -411,7 +430,6 @@ namespace DeviceLibrary.manager
&& s.projectType.Equals(ProjectType.移远成品入库)).FirstOrDefault(); && s.projectType.Equals(ProjectType.移远成品入库)).FirstOrDefault();
if (missionInfo != null && AgvCanGetMission(missionInfo) && missionInfo.missionId.StartsWith("P16")) if (missionInfo != null && AgvCanGetMission(missionInfo) && missionInfo.missionId.StartsWith("P16"))
{ {
Log.Info($"执行1F成品入库任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo; return missionInfo;
} }
} }
...@@ -442,7 +460,6 @@ namespace DeviceLibrary.manager ...@@ -442,7 +460,6 @@ namespace DeviceLibrary.manager
if (missionInfo != null && AgvCanGetMission(missionInfo)) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
SetMissionOccupied(missionInfo, agv); SetMissionOccupied(missionInfo, agv);
Log.Info($"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo; return missionInfo;
} }
} }
...@@ -581,7 +598,7 @@ namespace DeviceLibrary.manager ...@@ -581,7 +598,7 @@ namespace DeviceLibrary.manager
public static void AddSteelTarNodes(string missionId, string nodes) public static void AddSteelTarNodes(string missionId, string nodes)
{ {
MissionInfo missionInfo = GetMission(missionId); MissionInfo missionInfo = GetMission(missionId);
if(missionInfo!=null) if (missionInfo != null)
{ {
missionInfo.destinationPoint = nodes; missionInfo.destinationPoint = nodes;
{ {
...@@ -605,7 +622,7 @@ namespace DeviceLibrary.manager ...@@ -605,7 +622,7 @@ namespace DeviceLibrary.manager
Log.Info($"任务[{missionInfo.missionId}]更改钢网目的地[{nodes}]成功"); Log.Info($"任务[{missionInfo.missionId}]更改钢网目的地[{nodes}]成功");
} }
} }
/// <summary> /// <summary>
/// 根据任务信息得到电梯名称 /// 根据任务信息得到电梯名称
......
...@@ -7,6 +7,7 @@ using System.Runtime.Serialization; ...@@ -7,6 +7,7 @@ using System.Runtime.Serialization;
using Common; using Common;
using DeviceLibrary.service.model; using DeviceLibrary.service.model;
using DeviceLibrary.manager; using DeviceLibrary.manager;
using System.Reflection;
namespace DeviceLibrary namespace DeviceLibrary
{ {
...@@ -35,6 +36,13 @@ namespace DeviceLibrary ...@@ -35,6 +36,13 @@ namespace DeviceLibrary
} }
else else
{ {
int.TryParse(createMissionInfo.missionId.Substring(1, 2), out int projectType);
if (projectType > 16)
{
result.code = -1;
result.msg = $"不存在的任务类型:{createMissionInfo.sourcePoint}";
Log.Error(result.msg);
}
if (!NodeManager.CheckNode(createMissionInfo.sourcePoint)) if (!NodeManager.CheckNode(createMissionInfo.sourcePoint))
{ {
result.code = -1; result.code = -1;
......
...@@ -144,6 +144,19 @@ namespace DeviceLibrary.service.model ...@@ -144,6 +144,19 @@ namespace DeviceLibrary.service.model
return false; return false;
return missionInfo.projectType.Equals(ProjectType.移远成品入库); return missionInfo.projectType.Equals(ProjectType.移远成品入库);
} }
/// <summary>
/// 拷贝一个新的实例
/// </summary>
/// <returns></returns>
//public MissionInfo ToCopy()
//{
// MissionInfo posInfo = new MissionInfo();
// System.Reflection.PropertyInfo[] info1 = posInfo.GetType().GetProperties();
// System.Reflection.PropertyInfo[] info2 = this.GetType().GetProperties();
// for (int i = 0; i < info1.Length; i++)
// info1[i].SetValue(posInfo, info2[i].GetValue(this));
// return posInfo;
//}
} }
public enum MissionState public enum MissionState
...@@ -203,7 +216,8 @@ namespace DeviceLibrary.service.model ...@@ -203,7 +216,8 @@ namespace DeviceLibrary.service.model
/// 完成 /// 完成
/// </summary> /// </summary>
完成, 完成,
等待成品回收 等待成品回收,
料架缓存
} }
/// <summary> /// <summary>
/// 项目类型 /// 项目类型
......
...@@ -39,5 +39,9 @@ namespace DeviceLibrary.service.model ...@@ -39,5 +39,9 @@ namespace DeviceLibrary.service.model
/// 目的地点位 /// 目的地点位
/// </summary> /// </summary>
public string destinationPoint { get; set; } public string destinationPoint { get; set; }
/// <summary>
/// 更新电梯信息
/// </summary>
public bool updateInfo { get; set; } = false;
} }
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!