Commit 34d4da0b 张东亮

成品入库,播放音效

1 个父辈 235cbc78
...@@ -51,8 +51,6 @@ ...@@ -51,8 +51,6 @@
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.button1 = new System.Windows.Forms.Button();
this.tableLayoutPanel3.SuspendLayout(); this.tableLayoutPanel3.SuspendLayout();
this.tabControl1.SuspendLayout(); this.tabControl1.SuspendLayout();
this.tabPage2.SuspendLayout(); this.tabPage2.SuspendLayout();
...@@ -269,8 +267,6 @@ ...@@ -269,8 +267,6 @@
// //
// tabPage3 // tabPage3
// //
this.tabPage3.Controls.Add(this.button1);
this.tabPage3.Controls.Add(this.textBox1);
this.tabPage3.Controls.Add(this.label12); this.tabPage3.Controls.Add(this.label12);
this.tabPage3.Controls.Add(this.groupBox2); this.tabPage3.Controls.Add(this.groupBox2);
this.tabPage3.Location = new System.Drawing.Point(4, 22); this.tabPage3.Location = new System.Drawing.Point(4, 22);
...@@ -359,23 +355,6 @@ ...@@ -359,23 +355,6 @@
this.flowLayoutPanel1.Size = new System.Drawing.Size(1274, 405); this.flowLayoutPanel1.Size = new System.Drawing.Size(1274, 405);
this.flowLayoutPanel1.TabIndex = 0; this.flowLayoutPanel1.TabIndex = 0;
// //
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(319, 32);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(218, 21);
this.textBox1.TabIndex = 47;
//
// button1
//
this.button1.Location = new System.Drawing.Point(339, 73);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(163, 41);
this.button1.TabIndex = 48;
this.button1.Text = "根据任务编号删除任务";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// FrmMain // FrmMain
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
...@@ -402,7 +381,6 @@ ...@@ -402,7 +381,6 @@
this.tblLayoutUnlock.ResumeLayout(false); this.tblLayoutUnlock.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.dgvInfos)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dgvInfos)).EndInit();
this.tabPage3.ResumeLayout(false); this.tabPage3.ResumeLayout(false);
this.tabPage3.PerformLayout();
this.groupBox2.ResumeLayout(false); this.groupBox2.ResumeLayout(false);
this.tabPage5.ResumeLayout(false); this.tabPage5.ResumeLayout(false);
this.tabPage5.PerformLayout(); this.tabPage5.PerformLayout();
...@@ -434,8 +412,6 @@ ...@@ -434,8 +412,6 @@
private System.Windows.Forms.DataGridView dgvInfos; private System.Windows.Forms.DataGridView dgvInfos;
private System.Windows.Forms.TabPage tabPage5; private System.Windows.Forms.TabPage tabPage5;
private System.Windows.Forms.TextBox txtShow; private System.Windows.Forms.TextBox txtShow;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox1;
} }
} }
...@@ -194,16 +194,16 @@ namespace AGVControl ...@@ -194,16 +194,16 @@ namespace AGVControl
private void button1_Click(object sender, EventArgs e) private void button1_Click(object sender, EventArgs e)
{ {
try //try
{ //{
string missionId = textBox1.Text.Trim(); // string missionId = textBox1.Text.Trim();
MissionInfo missionInfo = MissionManager.GetMission(missionId); // MissionInfo missionInfo = MissionManager.GetMission(missionId);
if(missionInfo != null) // if(missionInfo != null)
{ // {
MissionManager.DeleteById(missionId); // MissionManager.DeleteById(missionId);
} // }
} //}
catch { } //catch { }
} }
private void dgvInfos_CellContentClick(object sender, DataGridViewCellEventArgs e) private void dgvInfos_CellContentClick(object sender, DataGridViewCellEventArgs e)
......
...@@ -83,12 +83,12 @@ namespace AGVControl ...@@ -83,12 +83,12 @@ namespace AGVControl
{ {
if (!chkBxAuto.Checked && !Agv.JobContext.MissionId.Equals("")) if (!chkBxAuto.Checked && !Agv.JobContext.MissionId.Equals(""))
{ {
if (MessageBox.Show($"正在执行任务[{Agv.JobContext.MissionId}],切到手动后该任务无法继续执行,确定切到手动状态?", "警告", MessageBoxButtons.YesNo).Equals( //if (MessageBox.Show($"正在执行任务[{Agv.JobContext.MissionId}],切到手动后该任务无法继续执行,确定切到手动状态?", "警告", MessageBoxButtons.YesNo).Equals(
DialogResult.No)) // DialogResult.No))
{ //{
chkBxAuto.Checked = true; // chkBxAuto.Checked = true;
return; // return;
} //}
LogUtil.info($"人员切换到手动,{Agv.Name}当前执行的任务为{Agv.JobContext.MissionId}"); LogUtil.info($"人员切换到手动,{Agv.Name}当前执行的任务为{Agv.JobContext.MissionId}");
} }
btnReSendTask.Enabled = chkBxAuto.Checked; btnReSendTask.Enabled = chkBxAuto.Checked;
......
...@@ -16,6 +16,7 @@ namespace Common ...@@ -16,6 +16,7 @@ namespace Common
public const string PutShelfOn = "PutShelfOn"; public const string PutShelfOn = "PutShelfOn";
public const string TakeShelfOff = "TakeShelfOff"; public const string TakeShelfOff = "TakeShelfOff";
public const string Temp1 = "Temp1"; public const string Temp1 = "Temp1";
public const string Temp2 = "Temp2";
public const string DoorAirOut = "DoorAirOut"; public const string DoorAirOut = "DoorAirOut";
public const string AutoCharge = "AutoCharge"; public const string AutoCharge = "AutoCharge";
public const string PlaySound = "PlaySound"; public const string PlaySound = "PlaySound";
......
...@@ -10,10 +10,9 @@ namespace Common ...@@ -10,10 +10,9 @@ namespace Common
{ {
public class LogUtil public class LogUtil
{ {
public static readonly ILog AIOLog = LogManager.GetLogger("AGVDispatch");
private static LogUtil instance = new LogUtil(); private static LogUtil instance = new LogUtil();
public delegate void ShowLog(string msg,Color color); public delegate void ShowLog(string msg,Color color);
public static readonly ILog LOGGER = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public static readonly ILog LOGGER = LogManager.GetLogger("AGVDispatch");
public static Dictionary<int, DateTime> lastErrorLogTime = new Dictionary<int, DateTime>(); public static Dictionary<int, DateTime> lastErrorLogTime = new Dictionary<int, DateTime>();
public static System.Windows.Forms.RichTextBox logBox = null; public static System.Windows.Forms.RichTextBox logBox = null;
......
...@@ -65,18 +65,22 @@ ...@@ -65,18 +65,22 @@
<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\F1LiftC1ToLiftD2JobType.cs" />
<Compile Include="bean\jobType\F1LiftD2ToLiftC1JobType.cs" />
<Compile Include="bean\jobType\LineToLineJobType.cs" /> <Compile Include="bean\jobType\LineToLineJobType.cs" />
<Compile Include="bean\jobType\RecoveryJobType.cs" /> <Compile Include="bean\jobType\RecoveryJobType.cs" />
<Compile Include="bean\jobType\LineOneToManyJobType.cs" /> <Compile Include="bean\jobType\LineOneToManyJobType.cs" />
<Compile Include="bean\job\ChargeJob.cs" /> <Compile Include="bean\job\ChargeJob.cs" />
<Compile Include="bean\job\F1LiftC1ToLiftD2Job.cs" />
<Compile Include="bean\job\F1LiftD2ToLiftC1Job.cs" />
<Compile Include="bean\job\LineOneToManyJob.cs" /> <Compile Include="bean\job\LineOneToManyJob.cs" />
<Compile Include="bean\job\LineToLineJob.cs" /> <Compile Include="bean\job\LineToLineJob.cs" />
<Compile Include="bean\job\LiftToLinesJob.cs" /> <Compile Include="bean\job\LiftToLinesJob.cs" />
<Compile Include="bean\job\F1LiftToStoreJob.cs" /> <Compile Include="bean\job\F1LiftToStoreJob.cs" />
<Compile Include="bean\job\F1StoreToLiftJob.cs" /> <Compile Include="bean\job\LineToLiftJob.cs" />
<Compile Include="bean\JobParam.cs" /> <Compile Include="bean\JobParam.cs" />
<Compile Include="bean\jobType\F1LiftToStoreJobType.cs" /> <Compile Include="bean\jobType\F1LiftToStoreJobType.cs" />
<Compile Include="bean\jobType\F1StoreToLiftJobType.cs" /> <Compile Include="bean\jobType\LineToLiftJobType.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" />
...@@ -112,6 +116,7 @@ ...@@ -112,6 +116,7 @@
<Compile Include="service\model\ConfirmOperation.cs" /> <Compile Include="service\model\ConfirmOperation.cs" />
<Compile Include="service\model\DeleteMission.cs" /> <Compile Include="service\model\DeleteMission.cs" />
<Compile Include="service\model\DoorInfo.cs" /> <Compile Include="service\model\DoorInfo.cs" />
<Compile Include="service\model\FinishedInfo.cs" />
<Compile Include="service\model\MissionInfo.cs" /> <Compile Include="service\model\MissionInfo.cs" />
<Compile Include="service\model\SendInInfo.cs" /> <Compile Include="service\model\SendInInfo.cs" />
<Compile Include="service\model\TransportStatus.cs" /> <Compile Include="service\model\TransportStatus.cs" />
......
...@@ -191,6 +191,7 @@ namespace DeviceLibrary.bean ...@@ -191,6 +191,7 @@ namespace DeviceLibrary.bean
/// 去线体 /// 去线体
/// </summary> /// </summary>
SD_LineToLine_03_ToLine, SD_LineToLine_03_ToLine,
SD_LineToLine_04_PlaySound,
/// <summary> /// <summary>
/// 等待确认 /// 等待确认
/// </summary> /// </summary>
...@@ -240,6 +241,147 @@ namespace DeviceLibrary.bean ...@@ -240,6 +241,147 @@ namespace DeviceLibrary.bean
SD_Line_OnToMany_08_TakeShelfOff, SD_Line_OnToMany_08_TakeShelfOff,
#endregion #endregion
#region 1F 成品空料架从D2C1
/// <summary>
/// 去电梯口
/// </summary>
S1F_LiftD2ToLiftC1_01_ToLiftD2,
/// <summary>
/// 等待电梯门开
/// </summary>
S1F_LiftD2ToLiftC1_02_WaitDoorOpen,
/// <summary>
///
/// </summary>
S1F_LiftD2ToLiftC1_03_EnterLift,
/// <summary>
/// 顶起料车
/// </summary>
S1F_LiftD2ToLiftC1_04_PutShelfOn,
/// <summary>
/// 离开电梯
/// </summary>
S1F_LiftD2ToLiftC1_05_LeaveLift,
/// <summary>
/// 关闭电梯门
/// </summary>
S1F_LiftD2ToLiftC1_06_CloseLiftDoor,
S1F_LiftD2ToLiftC1_07_ToLiftC1,
S1F_LiftD2ToLiftC1_08_CheckC1Status,
#region 电梯内无料车
S1F_LiftD2ToLiftC1_09_EnterLift,
S1F_LiftD2ToLiftC1_10_TakeShelfOffAtLift,
S1F_LiftD2ToLiftC1_11_LeaveLift,
#endregion
#region 电梯内有料车
S1F_LiftD2ToLiftC1_12_ToTemp1,
S1F_LiftD2ToLiftC1_13_TakeShelfOffAtTemp1,
S1F_LiftD2ToLiftC1_14_ToLift,
S1F_LiftD2ToLiftC1_15_EnterLift,
S1F_LiftD2ToLiftC1_16_PutShelfOn,
S1F_LiftD2ToLiftC1_17_LeaveLift,
#region 库房料车
S1F_LiftD2ToLiftC1_18_CloseDoor,
S1F_LiftD2ToLiftC1_19_01_ToStore,
S1F_LiftD2ToLiftC1_19_02_TakeShelfOff,
S1F_LiftD2ToLiftC1_19_03_ToTemp1,
S1F_LiftD2ToLiftC1_19_04_PutTemp1ShelfOn,
S1F_LiftD2ToLiftC1_19_05_ToLift,
#endregion
#region 空成品料车
S1F_LiftD2ToLiftC1_20_01_ToTemp2,
S1F_LiftD2ToLiftC1_20_02_TakeShelfOff,
S1F_LiftD2ToLiftC1_20_03_ToTemp1,
S1F_LiftD2ToLiftC1_20_04_PutShelfOn,
S1F_LiftD2ToLiftC1_20_05_ToLiftC1,
S1F_LiftD2ToLiftC1_20_06_EnterLiftC1,
S1F_LiftD2ToLiftC1_20_07_TakeShelfOff,
S1F_LiftD2ToLiftC1_20_08_LeaveLiftC1,
S1F_LiftD2ToLiftC1_20_09_CloseDoor,
S1F_LiftD2ToLiftC1_20_10_ToTemp2,
S1F_LiftD2ToLiftC1_20_11_TakeShelfOn,
S1F_LiftD2ToLiftC1_20_12_Switch,
#endregion
#endregion
#endregion
#region 1F 成品入库从C1D2
/// <summary>
/// 去电梯口
/// </summary>
S1F_LiftC1ToLiftD2_01_ToLiftC1,
/// <summary>
/// 等待电梯门开
/// </summary>
S1F_LiftC1ToLiftD2_02_WaitDoorOpen,
/// <summary>
///
/// </summary>
S1F_LiftC1ToLiftD2_03_EnterLift,
/// <summary>
/// 顶起料车
/// </summary>
S1F_LiftC1ToLiftD2_04_PutShelfOn,
/// <summary>
/// 离开电梯
/// </summary>
S1F_LiftC1ToLiftD2_05_LeaveLift,
/// <summary>
/// 关闭电梯门
/// </summary>
S1F_LiftC1ToLiftD2_06_CloseLiftDoor,
S1F_LiftC1ToLiftD2_07_ToLiftD2,
S1F_LiftC1ToLiftD2_08_CheckD2Status,
#region 电梯内无料车
S1F_LiftC1ToLiftD2_09_EnterLift,
S1F_LiftC1ToLiftD2_10_TakeShelfOffAtLift,
S1F_LiftC1ToLiftD2_11_LeaveLift,
#endregion
#region 电梯内有料车
S1F_LiftC1ToLiftD2_12_ToTemp1,
S1F_LiftC1ToLiftD2_13_TakeShelfOffAtTemp1,
S1F_LiftC1ToLiftD2_14_ToLift,
S1F_LiftC1ToLiftD2_15_EnterLift,
S1F_LiftC1ToLiftD2_16_PutShelfOn,
S1F_LiftC1ToLiftD2_17_LeaveLift,
#region 库房料车
S1F_LiftC1ToLiftD2_18_CloseDoor,
S1F_LiftC1ToLiftD2_19_01_ToStore,
S1F_LiftC1ToLiftD2_19_02_TakeShelfOff,
S1F_LiftC1ToLiftD2_19_03_ToTemp1,
S1F_LiftC1ToLiftD2_19_04_PutTemp1ShelfOn,
S1F_LiftC1ToLiftD2_19_05_ToLift,
#endregion
#region 空成品料车
S1F_LiftC1ToLiftD2_20_01_ToTemp2,
S1F_LiftC1ToLiftD2_20_02_TakeShelfOff,
S1F_LiftC1ToLiftD2_20_03_ToTemp1,
S1F_LiftC1ToLiftD2_20_04_PutShelfOn,
S1F_LiftC1ToLiftD2_20_05_ToLiftC1,
S1F_LiftC1ToLiftD2_20_06_EnterLiftC1,
S1F_LiftC1ToLiftD2_20_07_TakeShelfOff,
S1F_LiftC1ToLiftD2_20_08_LeaveLiftC1,
S1F_LiftC1ToLiftD2_20_09_CloseDoor,
S1F_LiftC1ToLiftD2_20_10_ToTemp2,
S1F_LiftC1ToLiftD2_20_11_TakeShelfOn,
S1F_LiftC1ToLiftD2_20_12_Switch,
#endregion
#endregion
#endregion
/// <summary> /// <summary>
/// 结束 /// 结束
/// </summary> /// </summary>
......
...@@ -229,6 +229,47 @@ namespace DeviceLibrary ...@@ -229,6 +229,47 @@ namespace DeviceLibrary
return false; return false;
} }
/// <summary> /// <summary>
/// 是否有成品空料车在电梯中准备送出
/// </summary>
/// <param name="liftname"></param>
/// <returns></returns>
public bool HasFinishedEmptyShelfInLift(out string liftname, out lift.LiftStatus liftStatus)
{
liftname = "";
liftStatus = null;
string[] lifts = Scope.Remark.Split(',');
foreach (string item in lifts)
{
if (lift.LiftContext.HasFinishedShelfNeedLeave(item, Client, out liftStatus)
&& liftStatus.HasEmptyFinishedShelf)
{
liftname = item;
return true;
}
}
return false;
}
/// <summary>
/// 是否有成品满料车在电梯中准备送出
/// </summary>
/// <param name="liftname"></param>
/// <returns></returns>
public bool HasFinishedShelfInLift(out string liftname, out lift.LiftStatus liftStatus)
{
liftname = "";
liftStatus = null;
string[] lifts = Scope.Remark.Split(',');
foreach (string item in lifts)
{
if (lift.LiftContext.HasFinishedShelfNeedLeave(item, Client, out liftStatus))
{
liftname = item;
return true;
}
}
return false;
}
/// <summary>
/// 任务重发 /// 任务重发
/// </summary> /// </summary>
public void Resend() public void Resend()
......
...@@ -92,7 +92,7 @@ namespace DeviceLibrary.bean.job ...@@ -92,7 +92,7 @@ namespace DeviceLibrary.bean.job
{ {
JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_05_CloseLiftDoor); JobRunStep.ToNextStep(RunStep.S1F_LiftToStore_05_CloseLiftDoor);
//关门 //关门
bool rtn = lift.LiftContext.AGVLeave(JobParam.SrcNode.Name, agv); 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);
......
...@@ -12,7 +12,7 @@ namespace DeviceLibrary ...@@ -12,7 +12,7 @@ namespace DeviceLibrary
{ {
JobParam = jobParam; JobParam = jobParam;
if (jobParam != null && jobParam.GetMissionInfo() != null) if (jobParam != null && jobParam.GetMissionInfo() != null)
JobName = jobParam.GetMissionInfo().JobName; JobName = jobParam.GetMissionInfo().jobName;
} }
public Job() { } public Job() { }
public JobParam JobParam { get; set; } public JobParam JobParam { get; set; }
...@@ -66,7 +66,7 @@ namespace DeviceLibrary ...@@ -66,7 +66,7 @@ namespace DeviceLibrary
/// </summary> /// </summary>
public string JobName { get; set; } = ""; public string JobName { get; set; } = "";
protected void AllocateTask(AgvInfo agv, string taskName) public void AllocateTask(AgvInfo agv, string taskName)
{ {
Task = AgvTaskManager.GetTaskByName(taskName, agv); Task = AgvTaskManager.GetTaskByName(taskName, agv);
AgvTaskManager.AssignMission(agv, taskName); AgvTaskManager.AssignMission(agv, taskName);
...@@ -81,6 +81,16 @@ namespace DeviceLibrary ...@@ -81,6 +81,16 @@ namespace DeviceLibrary
Task = AgvTaskManager.GetTaskByName($"{SettingString.Standby}", agv); Task = AgvTaskManager.GetTaskByName($"{SettingString.Standby}", agv);
AgvTaskManager.AssignMission(agv, $"{SettingString.Standby}"); AgvTaskManager.AssignMission(agv, $"{SettingString.Standby}");
} }
protected void PlaySound(AgvInfo agv)
{
Task = AgvTaskManager.GetTaskByName($"{SettingString.PlaySound}", agv);
AgvTaskManager.AssignMission(agv, $"{SettingString.PlaySound}");
}
protected void StopSound(AgvInfo agv)
{
Task = AgvTaskManager.GetTaskByName($"{SettingString.StopSound}", agv);
AgvTaskManager.AssignMission(agv, $"{SettingString.StopSound}");
}
/// <summary> /// <summary>
/// 设置PLC值 /// 设置PLC值
/// </summary> /// </summary>
......
...@@ -95,7 +95,7 @@ namespace DeviceLibrary.bean.job ...@@ -95,7 +95,7 @@ namespace DeviceLibrary.bean.job
{ {
JobRunStep.ToNextStep(RunStep.SD_LiftToLine_06_CloseLiftDoor); JobRunStep.ToNextStep(RunStep.SD_LiftToLine_06_CloseLiftDoor);
//关门 //关门
bool rtn = lift.LiftContext.AGVLeave(JobParam.SrcNode.Name, agv); 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);
...@@ -134,6 +134,7 @@ namespace DeviceLibrary.bean.job ...@@ -134,6 +134,7 @@ namespace DeviceLibrary.bean.job
JobRunStep.ToNextStep(RunStep.SD_LiftToLine_09_WaitConfirm); JobRunStep.ToNextStep(RunStep.SD_LiftToLine_09_WaitConfirm);
runInfo = $"等待{JobParam.CurTargetNode.AliceName}的人员确认"; runInfo = $"等待{JobParam.CurTargetNode.AliceName}的人员确认";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
PlaySound(agv);
} }
else else
{ {
...@@ -154,6 +155,7 @@ namespace DeviceLibrary.bean.job ...@@ -154,6 +155,7 @@ namespace DeviceLibrary.bean.job
$"卸货{ JobParam.CurTargetNode.Name }")); $"卸货{ JobParam.CurTargetNode.Name }"));
//重置确认信息 //重置确认信息
JobParam.CurTargetNode.ExtendEquip.Reset(); JobParam.CurTargetNode.ExtendEquip.Reset();
StopSound(agv);
} }
else if (JobRunStep.IsTimeOut(WaitTimeOut, out double timeoutval)) else if (JobRunStep.IsTimeOut(WaitTimeOut, out double timeoutval))
{ {
...@@ -230,6 +232,10 @@ namespace DeviceLibrary.bean.job ...@@ -230,6 +232,10 @@ namespace DeviceLibrary.bean.job
JobRunStep.ToNextStep(RunStep.SD_LiftToLine_12_WaitDoorOpen); JobRunStep.ToNextStep(RunStep.SD_LiftToLine_12_WaitDoorOpen);
//请求电梯 //请求电梯
lift.LiftContext.Request(JobParam.GetMissionInfo(), agv, true); lift.LiftContext.Request(JobParam.GetMissionInfo(), agv, true);
//上报运输状态
manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
service.model.TransportStatus.TypeStr.error, agv.Name, JobParam.SrcNode.Name, service.model.TransportStatus.ModeStr.auto,
$"等待电梯到达超时"));
} }
} }
else if (JobRunStep.IsStep(RunStep.SD_LiftToLine_13_CheckLiftStatus)) else if (JobRunStep.IsStep(RunStep.SD_LiftToLine_13_CheckLiftStatus))
......
...@@ -85,6 +85,7 @@ namespace DeviceLibrary.bean.job ...@@ -85,6 +85,7 @@ namespace DeviceLibrary.bean.job
JobRunStep.ToNextStep(RunStep.SD_Line_OneToMany_05_WaitConfirm); JobRunStep.ToNextStep(RunStep.SD_Line_OneToMany_05_WaitConfirm);
runInfo = $"等待{JobParam.CurTargetNode.AliceName}的人员确认"; runInfo = $"等待{JobParam.CurTargetNode.AliceName}的人员确认";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
PlaySound(agv);
} }
else else
{ {
...@@ -108,6 +109,7 @@ namespace DeviceLibrary.bean.job ...@@ -108,6 +109,7 @@ namespace DeviceLibrary.bean.job
$"卸货{ JobParam.CurTargetNode.Name }")); $"卸货{ JobParam.CurTargetNode.Name }"));
//关闭按钮确认 //关闭按钮确认
JobParam.CurTargetNode.ExtendEquip.Reset(); JobParam.CurTargetNode.ExtendEquip.Reset();
StopSound(agv);
} }
else if (JobRunStep.IsTimeOut(WaitTimeOut, out double timeoutval)) else if (JobRunStep.IsTimeOut(WaitTimeOut, out double timeoutval))
{ {
...@@ -119,39 +121,43 @@ namespace DeviceLibrary.bean.job ...@@ -119,39 +121,43 @@ namespace DeviceLibrary.bean.job
} }
else if (JobRunStep.IsStep(RunStep.SD_Line_OneToMany_06_CheckNextLine)) else if (JobRunStep.IsStep(RunStep.SD_Line_OneToMany_06_CheckNextLine))
{ {
if (JobParam.TargetNodes != null && JobParam.TargetNodes.Count > 0) if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
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;
AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff}");
}
else
{ {
if (JobParam.GetMissionInfo() != null && JobParam.GetMissionInfo().needBack) if (JobParam.TargetNodes != null && JobParam.TargetNodes.Count > 0)
{
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);
AllocateTask(agv, $"{JobParam.SrcNode.Name}_{SettingString.TakeShelfOff}");
JobRunStep.Msg = runInfo;
}
else if (JobParam.GetMissionInfo() != null && !JobParam.GetMissionInfo().needBack)
{ {
JobRunStep.ToNextStep(RunStep.SD_Line_OnToMany_08_TakeShelfOff); JobRunStep.ToNextStep(RunStep.SD_Line_OneToMany_03_ToLine);
runInfo = $"{JobParam.CurTargetNode.AliceName}是最后一个线体,分发结束,无需返回,直接卸下"; JobParam.CurTargetNode = JobParam.TargetNodes[0];
JobParam.TargetNodes.RemoveAt(0);
System.Threading.Thread.Sleep(1000);
runInfo = $"去下一线体{JobParam.CurTargetNode.AliceName}的放料点";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{SettingString.TakeShelfOff}"); AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff}");
} }
else else
{ {
LogUtil.error(JobParam.GetMissionInfo().ToString()); 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);
AllocateTask(agv, $"{JobParam.SrcNode.Name}_{SettingString.TakeShelfOff}");
JobRunStep.Msg = runInfo;
}
else if (JobParam.GetMissionInfo() != null && !JobParam.GetMissionInfo().needBack)
{
JobRunStep.ToNextStep(RunStep.SD_Line_OnToMany_08_TakeShelfOff);
runInfo = $"{JobParam.CurTargetNode.AliceName}是最后一个线体,分发结束,无需返回,直接卸下";
JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{SettingString.TakeShelfOff}");
}
else
{
LogUtil.error(JobParam.GetMissionInfo().ToString());
}
} }
} }
} }
else if (JobRunStep.IsStep(RunStep.SD_Line_OneToMany_07_BackToPickUpPosition)) else if (JobRunStep.IsStep(RunStep.SD_Line_OneToMany_07_BackToPickUpPosition))
{ {
......
...@@ -8,15 +8,15 @@ namespace DeviceLibrary ...@@ -8,15 +8,15 @@ namespace DeviceLibrary
/// <summary> /// <summary>
/// 1F,库房到电梯(满料运送) /// 1F,库房到电梯(满料运送)
/// </summary> /// </summary>
public class F1StoreToLiftJob : Job public class LineToLiftJob : Job
{ {
/// <summary> /// <summary>
/// 1F满架运送任务 /// 1F满架运送任务
/// </summary> /// </summary>
public F1StoreToLiftJob(JobParam jobParam) : base(jobParam) public LineToLiftJob(JobParam jobParam) : base(jobParam)
{ {
} }
public F1StoreToLiftJob() : base() public LineToLiftJob() : base()
{ {
} }
...@@ -36,8 +36,6 @@ namespace DeviceLibrary ...@@ -36,8 +36,6 @@ namespace DeviceLibrary
{ {
JobRunStep.ToNextStep(RunStep.S1F_StoreToLift_01_ToStore); JobRunStep.ToNextStep(RunStep.S1F_StoreToLift_01_ToStore);
runInfo = $"任务开始:去{JobParam.SrcNode.AliceName}的取料点"; runInfo = $"任务开始:去{JobParam.SrcNode.AliceName}的取料点";
//任务状态变更
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;
...@@ -89,7 +87,7 @@ namespace DeviceLibrary ...@@ -89,7 +87,7 @@ namespace DeviceLibrary
runInfo = $"到达{JobParam.CurTargetNode.AliceName},请求电梯并等待开门"; runInfo = $"到达{JobParam.CurTargetNode.AliceName},请求电梯并等待开门";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
//开始请求电梯 //开始请求电梯
lift.LiftContext.Request(JobParam.GetMissionInfo(),agv); lift.LiftContext.Request(JobParam.GetMissionInfo(), agv);
} }
} }
else if (JobRunStep.IsStep(RunStep.S1F_StoreToLift_04_CheckLiftStatus)) else if (JobRunStep.IsStep(RunStep.S1F_StoreToLift_04_CheckLiftStatus))
...@@ -122,7 +120,12 @@ namespace DeviceLibrary ...@@ -122,7 +120,12 @@ namespace DeviceLibrary
{ {
JobRunStep.ToNextStep(RunStep.S1F_StoreToLift_04_CheckLiftStatus); JobRunStep.ToNextStep(RunStep.S1F_StoreToLift_04_CheckLiftStatus);
//请求电梯 //请求电梯
lift.LiftContext.Request(JobParam.GetMissionInfo(),agv); lift.LiftContext.Request(JobParam.GetMissionInfo(), agv);
//上报运输状态
manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
service.model.TransportStatus.TypeStr.error, agv.Name, JobParam.CurTargetNode.Name, service.model.TransportStatus.ModeStr.auto,
$"等待电梯到达超时"));
} }
} }
#region 电梯内有料车 #region 电梯内有料车
...@@ -182,7 +185,7 @@ namespace DeviceLibrary ...@@ -182,7 +185,7 @@ namespace DeviceLibrary
{ {
JobRunStep.ToNextStep(RunStep.S1F_StoreToLift_05_07_CloseDoor); JobRunStep.ToNextStep(RunStep.S1F_StoreToLift_05_07_CloseDoor);
//AGV离开 //AGV离开
bool rtn = lift.LiftContext.AGVLeave(JobParam.CurTargetNode.Name, agv); bool rtn = lift.LiftContext.AGVLeave(JobParam.CurTargetNode.Name, agv, false);
runInfo = $"离开{JobParam.CurTargetNode.AliceName}完成,发送离开信号:{rtn}"; runInfo = $"离开{JobParam.CurTargetNode.AliceName}完成,发送离开信号:{rtn}";
service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId); service.model.MissionInfo missionInfo = manager.MissionManager.GetMission(liftStatus.missionId);
if (missionInfo != null) if (missionInfo != null)
...@@ -195,7 +198,7 @@ namespace DeviceLibrary ...@@ -195,7 +198,7 @@ namespace DeviceLibrary
} }
else if (JobRunStep.IsStep(RunStep.S1F_StoreToLift_05_07_CloseDoor)) else if (JobRunStep.IsStep(RunStep.S1F_StoreToLift_05_07_CloseDoor))
{ {
if(lift.LiftContext.CheckAgvLeaveSig(JobParam.CurTargetNode.Name)) if (lift.LiftContext.CheckAgvLeaveSig(JobParam.CurTargetNode.Name))
{ {
JobRunStep.ToNextStep(RunStep.S1F_StoreToLift_05_08_ToStore); JobRunStep.ToNextStep(RunStep.S1F_StoreToLift_05_08_ToStore);
runInfo = $"{JobParam.CurTargetNode.AliceName}关门完成,将料车送到{liftStatus.destinationPoint}的放料点"; runInfo = $"{JobParam.CurTargetNode.AliceName}关门完成,将料车送到{liftStatus.destinationPoint}的放料点";
...@@ -208,10 +211,10 @@ namespace DeviceLibrary ...@@ -208,10 +211,10 @@ namespace DeviceLibrary
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
AllocateTask(agv, $"{liftStatus.destinationPoint}_{SettingString.TakeShelfOff}"); AllocateTask(agv, $"{liftStatus.destinationPoint}_{SettingString.TakeShelfOff}");
} }
else if(JobRunStep.IsTimeOut(0.5,out double val)) else if (JobRunStep.IsTimeOut(0.5, out double val))
{ {
//AGV离开 //AGV离开
lift.LiftContext.AGVLeave(JobParam.CurTargetNode.Name, agv); lift.LiftContext.AGVLeave(JobParam.CurTargetNode.Name, agv, false);
runInfo = $"{JobParam.CurTargetNode.AliceName}离开信号超时重发"; runInfo = $"{JobParam.CurTargetNode.AliceName}离开信号超时重发";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
System.Threading.Thread.Sleep(3000); System.Threading.Thread.Sleep(3000);
...@@ -272,7 +275,7 @@ namespace DeviceLibrary ...@@ -272,7 +275,7 @@ namespace DeviceLibrary
runInfo = $"到达{JobParam.CurTargetNode.AliceName},请求电梯"; runInfo = $"到达{JobParam.CurTargetNode.AliceName},请求电梯";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
//请求电梯 //请求电梯
lift.LiftContext.Request(JobParam.GetMissionInfo(),agv); lift.LiftContext.Request(JobParam.GetMissionInfo(), agv);
System.Threading.Thread.Sleep(2000); System.Threading.Thread.Sleep(2000);
} }
} }
...@@ -298,7 +301,11 @@ namespace DeviceLibrary ...@@ -298,7 +301,11 @@ namespace DeviceLibrary
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,
$"电梯卸车")); $"电梯卸车"));
if (JobParam.GetMissionInfo().projectType.Equals(service.model.ProjectType.成品入库))
{
//设置该电梯内的产品是成品入库
lift.LiftContext.SetFinishedState(JobParam.CurTargetNode.Name, true);
}
runInfo = $"料车在{JobParam.CurTargetNode.AliceName}卸下完成,准备离开"; runInfo = $"料车在{JobParam.CurTargetNode.AliceName}卸下完成,准备离开";
ResetOccupiedAgv(JobParam.GetMissionInfo()); ResetOccupiedAgv(JobParam.GetMissionInfo());
//任务状态变更 //任务状态变更
...@@ -312,8 +319,17 @@ namespace DeviceLibrary ...@@ -312,8 +319,17 @@ namespace DeviceLibrary
if (agv.TaskRunState.CheckTaskFinished(agv.Name)) if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{ {
JobRunStep.ToNextStep(RunStep.END); JobRunStep.ToNextStep(RunStep.END);
//AGV离开 bool rtn = false;
bool rtn= lift.LiftContext.AGVLeave(JobParam.CurTargetNode.Name, agv); if (JobParam.GetMissionInfo().projectType.Equals(service.model.ProjectType.成品入库))
{
//AGV离开
rtn = lift.LiftContext.AGVLeave(JobParam.CurTargetNode.Name, agv, false);
}
else
{
//AGV离开
rtn = lift.LiftContext.AGVLeave(JobParam.CurTargetNode.Name, agv);
}
runInfo = $"任务结束:离开{JobParam.CurTargetNode.AliceName}完成并发送离开信号:{rtn}"; runInfo = $"任务结束:离开{JobParam.CurTargetNode.AliceName}完成并发送离开信号:{rtn}";
//任务状态变更 //任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.电梯运行, out string msg); MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.电梯运行, out string msg);
......
 using Common; using Common;
using DeviceLibrary.manager; using DeviceLibrary.manager;
namespace DeviceLibrary.bean.job namespace DeviceLibrary.bean.job
...@@ -68,7 +68,7 @@ namespace DeviceLibrary.bean.job ...@@ -68,7 +68,7 @@ namespace DeviceLibrary.bean.job
{ {
if (agv.TaskRunState.CheckTaskFinished(agv.Name)) if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{ {
JobRunStep.ToNextStep(RunStep.SD_LineToLine_04_WaitConfirm); JobRunStep.ToNextStep(RunStep.SD_LineToLine_04_PlaySound);
//确认按钮生效 //确认按钮生效
JobParam.CurTargetNode.ExtendEquip.AllowConfirm(); JobParam.CurTargetNode.ExtendEquip.AllowConfirm();
//上报运输状态 //上报运输状态
...@@ -78,11 +78,29 @@ namespace DeviceLibrary.bean.job ...@@ -78,11 +78,29 @@ namespace DeviceLibrary.bean.job
runInfo = $"到达{JobParam.CurTargetNode.AliceName}的放料点"; runInfo = $"到达{JobParam.CurTargetNode.AliceName}的放料点";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
PlaySound(agv);
}
}
else if (JobRunStep.IsStep(RunStep.SD_LineToLine_04_PlaySound))
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
if (OpManager.WaitConfirm.Line(JobParam.CurTargetNode))
{
StopSound(agv);
}
else if (JobRunStep.IsTimeOut(WaitTimeOut, out double timeoutval))
{
//报警,$"等待{JobParam.CurTargetNode.AliceName}的人员确认超时{timeoutval}分"
manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
service.model.TransportStatus.TypeStr.error, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.agvButton,
$"等待{ JobParam.CurTargetNode.Name }确认超时{timeoutval}分"));
}
} }
} }
else if (JobRunStep.IsStep(RunStep.SD_LineToLine_04_WaitConfirm)) else if (JobRunStep.IsStep(RunStep.SD_LineToLine_04_WaitConfirm))
{ {
if (OpManager.WaitConfirm.Line(JobParam.CurTargetNode)) if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{ {
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.agvButton, service.model.TransportStatus.TypeStr.status, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.agvButton,
...@@ -96,7 +114,7 @@ namespace DeviceLibrary.bean.job ...@@ -96,7 +114,7 @@ namespace DeviceLibrary.bean.job
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回起始地, out string msg); MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.返回起始地, out string msg);
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
} }
else if(JobParam.GetMissionInfo() != null && !JobParam.GetMissionInfo().needBack) else if (JobParam.GetMissionInfo() != null && !JobParam.GetMissionInfo().needBack)
{ {
JobRunStep.ToNextStep(RunStep.SD_LineToLine_06_TakeShelfOff); JobRunStep.ToNextStep(RunStep.SD_LineToLine_06_TakeShelfOff);
runInfo = $"将料车在{JobParam.CurTargetNode.AliceName}卸下"; runInfo = $"将料车在{JobParam.CurTargetNode.AliceName}卸下";
...@@ -110,13 +128,7 @@ namespace DeviceLibrary.bean.job ...@@ -110,13 +128,7 @@ namespace DeviceLibrary.bean.job
//关闭按钮确认 //关闭按钮确认
JobParam.CurTargetNode.ExtendEquip.Reset(); JobParam.CurTargetNode.ExtendEquip.Reset();
} }
else if (JobRunStep.IsTimeOut(WaitTimeOut, out double timeoutval))
{
//报警,$"等待{JobParam.CurTargetNode.AliceName}的人员确认超时{timeoutval}分"
manager.UploadManager.UploadTransportStatus(new service.model.TransportStatus(agv.CurJob.JobParam.GetMissionInfo().missionId,
service.model.TransportStatus.TypeStr.error, agv.Name, agv.Place.Name, service.model.TransportStatus.ModeStr.agvButton,
$"等待{ JobParam.CurTargetNode.Name }确认超时{timeoutval}分"));
}
} }
else if (JobRunStep.IsStep(RunStep.SD_LineToLine_05_BackToSrcLine)) else if (JobRunStep.IsStep(RunStep.SD_LineToLine_05_BackToSrcLine))
{ {
......
using Common;
using DeviceLibrary.bean.job;
namespace DeviceLibrary.bean.jobType
{
/// <summary>
/// 1F,电梯C1到电梯D2。成品料架入库
/// </summary>
public class F1LiftC1ToLiftD2JobType : JobType
{
public override Job GetNewJob(AgvInfo agv)
{
if (!agv.IsIdle())
return null;
else
{
if(agv.Scope.Floor.Equals(1) && agv.HasFinishedShelfInLift(out string liftname, out lift.LiftStatus lift))
{
service.model.MissionInfo missionInfo = manager.MissionManager.GetF1SendFullFinishedC1ToD2Mission(agv);
if(missionInfo!=null)
{
if (service.model.MissionInfo.IsFinishedProdcut(missionInfo))
{
Node src = manager.NodeManager.GetNode(SettingString.LIFT_C1, NodeType.Lift);
Node dest = manager.NodeManager.GetNode(SettingString.LIFT_D2, NodeType.Lift);
JobParam jobParam = new JobParam(src, dest, null, missionInfo);
return new F1LiftC1ToLiftD2Job(jobParam);
}
}
}
}
return null;
}
}
}
using Common;
using DeviceLibrary.bean.job;
namespace DeviceLibrary.bean.jobType
{
/// <summary>
/// 1F,电梯D2到电梯C1。成品料架回收
/// </summary>
public class F1LiftD2ToLiftC1JobType : JobType
{
public override Job GetNewJob(AgvInfo agv)
{
if (!agv.IsIdle())
return null;
else
{
if(agv.Scope.Floor.Equals(1) && agv.HasFinishedEmptyShelfInLift(out string liftname, out lift.LiftStatus lift))
{
service.model.MissionInfo missionInfo = manager.MissionManager.GetF1FinishedD2ToC1Mission(agv);
if(missionInfo!=null)
{
Node src = manager.NodeManager.GetNode(SettingString.LIFT_D2, NodeType.Lift);
Node dest = manager.NodeManager.GetNode(SettingString.LIFT_C1,NodeType.Lift);
JobParam jobParam = new JobParam(src, dest,null,missionInfo);
return new F1LiftD2ToLiftC1Job(jobParam);
}
}
}
return null;
}
}
}
...@@ -19,6 +19,8 @@ namespace DeviceLibrary.bean.jobType ...@@ -19,6 +19,8 @@ namespace DeviceLibrary.bean.jobType
service.model.MissionInfo missionInfo = manager.MissionManager.GetF1ReceiveMission(agv); service.model.MissionInfo missionInfo = manager.MissionManager.GetF1ReceiveMission(agv);
if(missionInfo!=null) if(missionInfo!=null)
{ {
if (service.model.MissionInfo.IsFinishedProdcut(missionInfo))
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);
......
...@@ -33,7 +33,7 @@ namespace DeviceLibrary ...@@ -33,7 +33,7 @@ namespace DeviceLibrary
Node src = manager.NodeManager.GetNode(liftname, NodeType.Lift); Node src = manager.NodeManager.GetNode(liftname, NodeType.Lift);
string[] destTmp = lift.destinationPoint.Split(','); string[] destTmp = lift.destinationPoint.Split(',');
string[] dests = destTmp.Distinct().ToArray(); string[] dests = destTmp.Distinct().ToArray();
Node dest = manager.NodeManager.GetNode(dests.Length > 1 ? dests[0] : lift.destinationPoint, NodeType.Node); Node dest = manager.NodeManager.GetNode(dests.Length > 1 ? dests[0] : missionInfo.destinationPoint, NodeType.Node);
JobParam jobParam = new JobParam(src, dest, null, missionInfo); JobParam jobParam = new JobParam(src, dest, null, missionInfo);
if(dests.Length>1) if(dests.Length>1)
{ {
......
using System; using DeviceLibrary.manager;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
...@@ -7,9 +8,9 @@ using System.Threading.Tasks; ...@@ -7,9 +8,9 @@ using System.Threading.Tasks;
namespace DeviceLibrary.bean.jobType namespace DeviceLibrary.bean.jobType
{ {
/// <summary> /// <summary>
/// 取料并送入电梯内 /// 从线体取料并送入电梯内
/// </summary> /// </summary>
public class F1StoreToLiftJobType:JobType public class LineToLiftJobType:JobType
{ {
public override Job GetNewJob(AgvInfo agv) public override Job GetNewJob(AgvInfo agv)
{ {
...@@ -17,7 +18,7 @@ namespace DeviceLibrary.bean.jobType ...@@ -17,7 +18,7 @@ namespace DeviceLibrary.bean.jobType
return null; return null;
else if (agv.Scope.Floor.Equals(1)) else if (agv.Scope.Floor.Equals(1))
{ {
service.model.MissionInfo missionInfo = manager.MissionManager.GetDeliverMission(agv,out string liftname); service.model.MissionInfo missionInfo = manager.MissionManager.GetF1DeliverMission(agv,out string liftname);
if(missionInfo!=null) if(missionInfo!=null)
{ {
Node src = manager.NodeManager.GetNode(missionInfo.sourcePoint, NodeType.Node); Node src = manager.NodeManager.GetNode(missionInfo.sourcePoint, NodeType.Node);
...@@ -33,7 +34,32 @@ namespace DeviceLibrary.bean.jobType ...@@ -33,7 +34,32 @@ namespace DeviceLibrary.bean.jobType
return null; return null;
} }
JobParam jobParam = new JobParam(src, dest, null, missionInfo); JobParam jobParam = new JobParam(src, dest, null, missionInfo);
return new F1StoreToLiftJob(jobParam); //任务状态变更
MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.已分配, out string msg);
return new LineToLiftJob(jobParam);
}
}
else
{
service.model.MissionInfo missionInfo = manager.MissionManager.GetFinishedDeliverMission(agv, out string liftname);
if (missionInfo != null)
{
Node src = manager.NodeManager.GetNode(missionInfo.sourcePoint, NodeType.Node);
Node dest = manager.NodeManager.GetNode(liftname, NodeType.Lift);
if (src == null)
{
Common.LogUtil.error($"无法生成任务,起始点不存在:{missionInfo.sourcePoint}");
return null;
}
if (dest == null)
{
Common.LogUtil.error($"无法生成任务,电梯不存在:{liftname}");
return null;
}
JobParam jobParam = new JobParam(src, dest, null, missionInfo);
//任务状态变更
MissionManager.SetMissionState(missionInfo.missionId, service.model.MissionState.已分配, out string msg);
return new LineToLiftJob(jobParam);
} }
} }
return null; return null;
......
...@@ -34,17 +34,17 @@ namespace DeviceLibrary.lift ...@@ -34,17 +34,17 @@ namespace DeviceLibrary.lift
return true; return true;
return false; return false;
} }
/// <summary> /// <summary>
/// 请求使用电梯 /// 请求使用电梯
/// </summary> /// </summary>
/// <param name="liftId"></param> /// <param name="liftId"></param>
/// <param name="missionInfo"></param> /// <param name="missionInfo"></param>
/// <param name="isback">是否是返回</param> /// <param name="isback">是否是返回</param>
public static bool Request(service.model.MissionInfo missionInfo, AgvInfo agvInfo, bool isback = false) public static bool Request(service.model.MissionInfo missionInfo, AgvInfo agvInfo, bool isback = false, bool needCall = true)
{ {
service.model.SendInInfo info; service.model.SendInInfo info;
bool rtn=false; bool rtn = false;
if (isback)//返回 if (isback)//返回
{ {
if (!AGVManager.GetsysClientBy(missionInfo.sourceFloor, missionInfo.liftName, out string destclient)) if (!AGVManager.GetsysClientBy(missionInfo.sourceFloor, missionInfo.liftName, out string destclient))
...@@ -56,14 +56,14 @@ namespace DeviceLibrary.lift ...@@ -56,14 +56,14 @@ namespace DeviceLibrary.lift
{ {
liftId = missionInfo.liftName, liftId = missionInfo.liftName,
destinationFloor = missionInfo.sourceFloor, destinationFloor = missionInfo.sourceFloor,
destinationPoint = missionInfo.sourcePoint, destinationPoint = missionInfo.sourcePoint,
destinationClient = destclient, destinationClient = destclient,
sourceFloor = missionInfo.destinationFloor, sourceFloor = missionInfo.destinationFloor,
sourceClient = agvInfo.Client sourceClient = agvInfo.Client,
}; };
rtn= HttpManager.RequestSendIn(info); rtn = HttpManager.RequestSendIn(info);
if (rtn) if (rtn)
HttpManager.AGVCall(new service.model.DoorInfo { liftId= missionInfo.liftName, sourceClient=agvInfo.Client, sourceFloor=missionInfo.destinationFloor}); HttpManager.AGVCall(new service.model.DoorInfo { liftId = missionInfo.liftName, sourceClient = agvInfo.Client, sourceFloor = missionInfo.destinationFloor });
} }
else else
{ {
...@@ -83,7 +83,7 @@ namespace DeviceLibrary.lift ...@@ -83,7 +83,7 @@ namespace DeviceLibrary.lift
destinationPoint = missionInfo.destinationPoint, destinationPoint = missionInfo.destinationPoint,
}; };
rtn = HttpManager.RequestSendIn(info); rtn = HttpManager.RequestSendIn(info);
if (rtn) if (rtn && needCall)
HttpManager.AGVCall(new service.model.DoorInfo { liftId = missionInfo.liftName, sourceClient = agvInfo.Client, sourceFloor = missionInfo.sourceFloor }); HttpManager.AGVCall(new service.model.DoorInfo { liftId = missionInfo.liftName, sourceClient = agvInfo.Client, sourceFloor = missionInfo.sourceFloor });
} }
return rtn; return rtn;
...@@ -91,12 +91,12 @@ namespace DeviceLibrary.lift ...@@ -91,12 +91,12 @@ namespace DeviceLibrary.lift
/// <summary> /// <summary>
/// AGV离开 /// AGV离开
/// </summary> /// </summary>
/// <param name="liftId"></param>
/// <param name="agvInfo"></param> /// <param name="agvInfo"></param>
/// <param name="continueUse">是否继续使用电梯</param>
/// <returns></returns> /// <returns></returns>
public static bool AGVLeave(string liftId, AgvInfo agvInfo) public static bool AGVLeave(string liftId, AgvInfo agvInfo, bool continueUse = true)
{ {
bool rtn = HttpManager.AGVLeave(new service.model.DoorInfo() { liftId = liftId, sourceClient = agvInfo.Client, sourceFloor = agvInfo.Scope.Floor }); bool rtn = HttpManager.AGVLeave(new service.model.DoorInfo() { liftId = liftId, sourceClient = agvInfo.Client, sourceFloor = agvInfo.Scope.Floor, continueUse = continueUse });
ResetLiftOccupiedAgv(liftId); ResetLiftOccupiedAgv(liftId);
Common.LogUtil.info($"{agvInfo.Name} 离开 {liftId}:{rtn}"); Common.LogUtil.info($"{agvInfo.Name} 离开 {liftId}:{rtn}");
return rtn; return rtn;
...@@ -113,7 +113,19 @@ namespace DeviceLibrary.lift ...@@ -113,7 +113,19 @@ namespace DeviceLibrary.lift
Common.LogUtil.info($"{agvInfo.Name} 呼叫 {rtn}"); Common.LogUtil.info($"{agvInfo.Name} 呼叫 {rtn}");
return rtn; return rtn;
} }
/// <summary>
/// 成品入库送到楼下
/// 只针对D2电梯
/// </summary>
/// <param name="liftId"></param>
/// <param name="hasFullFinished"></param>
/// <returns></returns>
public static bool SetFinishedState(string liftId, bool hasFullFinished)
{
bool rtn = HttpManager.SetFinishedState(new service.model.FinishedInfo() { liftId = liftId, HasFullFinishedShelf = hasFullFinished });
Common.LogUtil.info($"设置电梯{liftId}成品状态为{hasFullFinished}");
return rtn;
}
/// <summary> /// <summary>
/// 检查离开信号发送情况 /// 检查离开信号发送情况
/// </summary> /// </summary>
...@@ -141,6 +153,21 @@ namespace DeviceLibrary.lift ...@@ -141,6 +153,21 @@ namespace DeviceLibrary.lift
return false; return false;
} }
/// <summary> /// <summary>
/// 有成品架子需要离开
/// </summary>
/// <param name="liftId"></param>
/// <param name="client"></param>
/// <param name="liftStatus"></param>
/// <returns></returns>
public static bool HasFinishedShelfNeedLeave(string liftId, string client, out LiftStatus liftStatus)
{
liftStatus = GetLiftStatus(liftId);
liftStatus.missionId = manager.MissionManager.GetMissionIdByFinishedShelfInLift(liftId);
if (!liftStatus.missionId.Equals(""))
return true;
return false;
}
/// <summary>
/// 检查该任务agv是否获得电梯控制权 /// 检查该任务agv是否获得电梯控制权
/// </summary> /// </summary>
/// <param name="liftId"></param> /// <param name="liftId"></param>
...@@ -157,7 +184,7 @@ namespace DeviceLibrary.lift ...@@ -157,7 +184,7 @@ namespace DeviceLibrary.lift
/// 占用电梯的agv /// 占用电梯的agv
/// </summary> /// </summary>
/// <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].OccupiedAgv = agvIp;
} }
......
...@@ -44,5 +44,9 @@ namespace DeviceLibrary.lift ...@@ -44,5 +44,9 @@ namespace DeviceLibrary.lift
/// 目的地点位 /// 目的地点位
/// </summary> /// </summary>
public string destinationPoint { get; set; } = ""; public string destinationPoint { get; set; } = "";
/// <summary>
/// 成品空架子标识
/// </summary>
public bool HasEmptyFinishedShelf { get; set; } = false;
} }
} }
...@@ -63,7 +63,7 @@ namespace DeviceLibrary ...@@ -63,7 +63,7 @@ namespace DeviceLibrary
jobTypes = new List<JobType>(); jobTypes = new List<JobType>();
jobTypes.Add(new LiftToLinesJobType()); jobTypes.Add(new LiftToLinesJobType());
jobTypes.Add(new F1LiftToStoreJobType()); jobTypes.Add(new F1LiftToStoreJobType());
jobTypes.Add(new F1StoreToLiftJobType()); jobTypes.Add(new LineToLiftJobType());
//jobTypes.Add(new LineToLineJobType()); //jobTypes.Add(new LineToLineJobType());
jobTypes.Add(new LineOneToManyJobType()); jobTypes.Add(new LineOneToManyJobType());
jobTypes.Add(new ChargeJobType()); jobTypes.Add(new ChargeJobType());
......
...@@ -106,8 +106,7 @@ namespace DeviceLibrary ...@@ -106,8 +106,7 @@ namespace DeviceLibrary
if (node != null) if (node != null)
break; break;
} }
} }
} }
if (task != null) if (task != null)
......
...@@ -316,6 +316,44 @@ namespace DeviceLibrary ...@@ -316,6 +316,44 @@ namespace DeviceLibrary
return false; return false;
} }
static string finished = AppConfigHelper.GetValue(SettingString.Lift_Server) + "finishedProdcut";
/// <summary>
/// AGV呼叫
/// </summary>
/// <param name="doorInfo"></param>
/// <returns></returns>
public static bool SetFinishedState(service.model.FinishedInfo info)
{
try
{
string resultStr = HttpHelper.Post(finished, JsonHelper.SerializeObject(info));
Result data = JsonHelper.DeserializeJsonToObject<Result>(resultStr);
if (data == null)
{
log.Warn($"SetFinishedState fail:{JsonHelper.SerializeObject(info)}");
return false;
}
else
{
if (data.code.Equals(0))
{
log.Info($"SetFinishedState info:{JsonHelper.SerializeObject(info)},result:code={data.code},msg={data.msg},data={data.data}");
return true;
}
else
{
log.Warn($"SetFinishedState info:{JsonHelper.SerializeObject(info)},result:code={data.code},msg={data.msg},data={data.data}");
return false;
}
}
}
catch (Exception e)
{
log.Error("SetFinishedState", e);
}
return false;
}
......
...@@ -8,7 +8,6 @@ using System.Text; ...@@ -8,7 +8,6 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using DeviceLibrary.service.model;
namespace DeviceLibrary.manager namespace DeviceLibrary.manager
{ {
public class MissionManager public class MissionManager
...@@ -104,7 +103,16 @@ namespace DeviceLibrary.manager ...@@ -104,7 +103,16 @@ namespace DeviceLibrary.manager
public static string GetMissionIdByShelfInLift(string liftId) public static string GetMissionIdByShelfInLift(string liftId)
{ {
int id = MissionInfos.FindIndex(s=> liftId.Equals(s.liftName) && int id = MissionInfos.FindIndex(s=> liftId.Equals(s.liftName) &&
(s.State==MissionState.电梯运行 || s.State == MissionState.返回电梯运行)); (s.state==MissionState.电梯运行 || s.state == MissionState.返回电梯运行));
if (id > -1)
return MissionInfos[id].missionId;
return "";
}
public static string GetMissionIdByFinishedShelfInLift(string liftId)
{
int id = MissionInfos.FindIndex(s => liftId.Equals(s.liftName) && s.projectType.Equals(ProjectType.成品入库)
&& (s.state.Equals(MissionState.等待成品回收) || s.state == MissionState.电梯运行
|| s.state == MissionState.返回电梯运行));
if (id > -1) if (id > -1)
return MissionInfos[id].missionId; return MissionInfos[id].missionId;
return ""; return "";
...@@ -155,11 +163,11 @@ namespace DeviceLibrary.manager ...@@ -155,11 +163,11 @@ namespace DeviceLibrary.manager
} }
/// <summary> /// <summary>
/// 获取送料任务,以准备执行 F1StoreToLiftJobType /// 获取1F送料任务,以准备执行 F1StoreToLiftJobType
/// </summary> /// </summary>
/// <param name="missionType"></param> /// <param name="missionType"></param>
/// <returns></returns> /// <returns></returns>
public static MissionInfo GetDeliverMission(AgvInfo agv, out string liftname) public static MissionInfo GetF1DeliverMission(AgvInfo agv, out string liftname)
{ {
MissionInfo missionInfo = null; MissionInfo missionInfo = null;
liftname = ""; liftname = "";
...@@ -168,7 +176,7 @@ namespace DeviceLibrary.manager ...@@ -168,7 +176,7 @@ namespace DeviceLibrary.manager
if (Monitor.TryEnter(lockObj, 1000)) if (Monitor.TryEnter(lockObj, 1000))
{ {
missionInfo = MissionInfos.Find(s => s.sourceWorkshop.Equals(agv.Scope.Workshop) && missionInfo = MissionInfos.Find(s => s.sourceWorkshop.Equals(agv.Scope.Workshop) &&
s.State.Equals(MissionState.创建) && s.state.Equals(MissionState.创建) &&
agv.Scope.Tasks.Contains(s.projectType.ToString())); agv.Scope.Tasks.Contains(s.projectType.ToString()));
if (missionInfo != null && AgvCanGetMission(missionInfo)) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
...@@ -193,10 +201,45 @@ namespace DeviceLibrary.manager ...@@ -193,10 +201,45 @@ namespace DeviceLibrary.manager
} }
return null; return null;
} }
public static MissionInfo GetFinishedDeliverMission(AgvInfo agv, out string liftname)
{
MissionInfo missionInfo = null;
liftname = "";
try
{
if (Monitor.TryEnter(lockObj, 1000))
{
missionInfo = MissionInfos.Find(s => s.sourceWorkshop.Equals(agv.Scope.Workshop) &&
s.state.Equals(MissionState.创建) &&
agv.Scope.Tasks.Contains(s.projectType.ToString())&&
s.projectType.Equals(ProjectType.成品入库));
if (missionInfo != null && AgvCanGetMission(missionInfo))
{
liftname = GetLiftName(missionInfo);
if (liftname.Equals(""))
{
return null;
}
SetMissionOccupied(missionInfo, agv);
Log.Info($"执行成品入库任务[{agv.Name}][起始地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo;
}
}
}
catch (Exception e)
{
Log.Error("操作 fixMissionInfos 超时", e);
}
finally
{
Monitor.Exit(lockObj);
}
return null;
}
static bool AgvCanGetMission(MissionInfo missionInfo) static bool AgvCanGetMission(MissionInfo missionInfo)
{ {
return string.IsNullOrEmpty(missionInfo.OccupiedAgv); return string.IsNullOrEmpty(missionInfo.occupiedAgv);
} }
/// <summary> /// <summary>
/// 获取接收料任务,以准备执行 LiftToLinesJobType /// 获取接收料任务,以准备执行 LiftToLinesJobType
...@@ -211,7 +254,7 @@ namespace DeviceLibrary.manager ...@@ -211,7 +254,7 @@ namespace DeviceLibrary.manager
if (Monitor.TryEnter(lockObj, 1000)) if (Monitor.TryEnter(lockObj, 1000))
{ {
missionInfo = MissionInfos.Find(s => s.destinationWorkshop.Equals(agv.Scope.Workshop) && missionInfo = MissionInfos.Find(s => s.destinationWorkshop.Equals(agv.Scope.Workshop) &&
(s.State >= MissionState.到达电梯 && s.State <= MissionState.电梯到达) && agv.Scope.Tasks.Contains(s.projectType.ToString())); (s.state >= MissionState.到达电梯 && s.state <= MissionState.电梯到达) && agv.Scope.Tasks.Contains(s.projectType.ToString()));
if (missionInfo != null && AgvCanGetMission(missionInfo)) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
SetMissionOccupied(missionInfo, agv); SetMissionOccupied(missionInfo, agv);
...@@ -243,7 +286,7 @@ namespace DeviceLibrary.manager ...@@ -243,7 +286,7 @@ namespace DeviceLibrary.manager
if (Monitor.TryEnter(lockObj, 1000)) if (Monitor.TryEnter(lockObj, 1000))
{ {
missionInfo = MissionInfos.Find(s => s.sourceWorkshop.Equals(agv.Scope.Workshop) && missionInfo = MissionInfos.Find(s => s.sourceWorkshop.Equals(agv.Scope.Workshop) &&
(s.State >= MissionState.返回到达电梯内 && s.State <= MissionState.返回电梯到达) && agv.Scope.Tasks.Contains(s.projectType.ToString())); (s.state >= MissionState.返回到达电梯内 && s.state <= MissionState.返回电梯到达) && agv.Scope.Tasks.Contains(s.projectType.ToString()));
if (missionInfo != null && AgvCanGetMission(missionInfo)) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
SetMissionOccupied(missionInfo, agv); SetMissionOccupied(missionInfo, agv);
...@@ -262,6 +305,74 @@ namespace DeviceLibrary.manager ...@@ -262,6 +305,74 @@ namespace DeviceLibrary.manager
} }
return null; return null;
} }
/// <summary>
/// 获取1楼回收空成品料任务
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
public static MissionInfo GetF1FinishedD2ToC1Mission(AgvInfo agv)
{
MissionInfo missionInfo = null;
try
{
if (Monitor.TryEnter(lockObj, 1000))
{
missionInfo = MissionInfos.Find(s => s.sourceWorkshop.Equals(agv.Scope.Workshop) &&
(s.state.Equals(MissionState.等待成品回收)) && agv.Scope.Tasks.Contains(s.projectType.ToString())
&& s.projectType.Equals(ProjectType.成品入库));
if (missionInfo != null && AgvCanGetMission(missionInfo))
{
SetMissionOccupied(missionInfo, agv);
Log.Info($"执行1F成品回收任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo;
}
}
}
catch (Exception e)
{
Log.Error("操作 fixMissionInfos 超时", e);
}
finally
{
Monitor.Exit(lockObj);
}
return null;
}
/// <summary>
/// 获取1楼送满成品料任务
/// </summary>
/// <param name="agv"></param>
/// <returns></returns>
public static MissionInfo GetF1SendFullFinishedC1ToD2Mission(AgvInfo agv)
{
MissionInfo missionInfo = null;
try
{
if (Monitor.TryEnter(lockObj, 1000))
{
missionInfo = MissionInfos.Find(s => s.sourceWorkshop.Equals(agv.Scope.Workshop) &&
(s.state >= MissionState.到达电梯 && s.state <= MissionState.电梯到达)
&& agv.Scope.Tasks.Contains(s.projectType.ToString())
&& s.projectType.Equals(ProjectType.成品入库));
if (missionInfo != null && AgvCanGetMission(missionInfo)&& missionInfo.missionId.StartsWith("P101"))
{
SetMissionOccupied(missionInfo, agv);
Log.Info($"执行1F成品入库任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo;
}
}
}
catch (Exception e)
{
Log.Error("操作 fixMissionInfos 超时", e);
}
finally
{
Monitor.Exit(lockObj);
}
return null;
}
/// <summary> /// <summary>
/// 获取同一层任务:点到点,以准备执行 /// 获取同一层任务:点到点,以准备执行
...@@ -277,7 +388,7 @@ namespace DeviceLibrary.manager ...@@ -277,7 +388,7 @@ namespace DeviceLibrary.manager
{ {
missionInfo = MissionInfos.Find(s => s.destinationWorkshop.Equals(agv.Scope.Workshop) && missionInfo = MissionInfos.Find(s => s.destinationWorkshop.Equals(agv.Scope.Workshop) &&
s.sourceWorkshop.Equals(agv.Scope.Workshop) && s.projectType.Equals(ProjectType.半成品领用) && s.sourceWorkshop.Equals(agv.Scope.Workshop) && s.projectType.Equals(ProjectType.半成品领用) &&
(s.State == MissionState.创建) && agv.Scope.Tasks.Contains(s.projectType.ToString())); (s.state == MissionState.创建) && agv.Scope.Tasks.Contains(s.projectType.ToString()));
if (missionInfo != null && AgvCanGetMission(missionInfo)) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
SetMissionOccupied(missionInfo, agv); SetMissionOccupied(missionInfo, agv);
...@@ -313,7 +424,7 @@ namespace DeviceLibrary.manager ...@@ -313,7 +424,7 @@ namespace DeviceLibrary.manager
s.sourceWorkshop.Equals(agv.Scope.Workshop) && s.sourceWorkshop.Equals(agv.Scope.Workshop) &&
(s.projectType.Equals(ProjectType.PCB领用) || s.projectType.Equals(ProjectType.包材领用)) (s.projectType.Equals(ProjectType.PCB领用) || s.projectType.Equals(ProjectType.包材领用))
&& &&
(s.State >= MissionState.创建) && agv.Scope.Tasks.Contains(s.projectType.ToString())); (s.state >= MissionState.创建) && agv.Scope.Tasks.Contains(s.projectType.ToString()));
if (missionInfo != null && AgvCanGetMission(missionInfo)) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
SetMissionOccupied(missionInfo,agv); SetMissionOccupied(missionInfo,agv);
......
...@@ -103,7 +103,7 @@ namespace DeviceLibrary ...@@ -103,7 +103,7 @@ namespace DeviceLibrary
} }
else else
{ {
if (missionInfo.State.Equals(MissionState.创建)) if (missionInfo.state.Equals(MissionState.创建))
{ {
MissionManager.SetMissionState(missionInfo.missionId, MissionState.取消,out string msg); MissionManager.SetMissionState(missionInfo.missionId, MissionState.取消,out string msg);
result.msg = msg; result.msg = msg;
......
...@@ -20,5 +20,9 @@ namespace DeviceLibrary.service.model ...@@ -20,5 +20,9 @@ namespace DeviceLibrary.service.model
/// 架子来源层 /// 架子来源层
/// </summary> /// </summary>
public int sourceFloor { get; set; } = 0; public int sourceFloor { get; set; } = 0;
/// <summary>
/// 继续使用电梯
/// </summary>
public bool continueUse { get; set; } = true;
} }
} }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DeviceLibrary.service.model
{
public class FinishedInfo
{
/// <summary>
/// 电梯标识
/// </summary>
public string liftId { get; set; } = "";
public bool HasFullFinishedShelf { get; set; } = false;
}
}
...@@ -18,7 +18,7 @@ namespace DeviceLibrary.service.model ...@@ -18,7 +18,7 @@ namespace DeviceLibrary.service.model
/// <summary> /// <summary>
/// 任务状态 /// 任务状态
/// </summary> /// </summary>
public MissionState State { get; set; } public MissionState state { get; set; }
/// <summary> /// <summary>
/// 使用的电梯名称 /// 使用的电梯名称
/// </summary> /// </summary>
...@@ -26,8 +26,8 @@ namespace DeviceLibrary.service.model ...@@ -26,8 +26,8 @@ namespace DeviceLibrary.service.model
/// <summary> /// <summary>
/// 占用的AGV名称 /// 占用的AGV名称
/// </summary> /// </summary>
public string OccupiedAgv { get; set; } = string.Empty; public string occupiedAgv { get; set; } = string.Empty;
public string JobName { get { return string.Format("[{0}->{1} {2}任务]", sourceWorkshop, destinationWorkshop, projectType.ToString()); } } public string jobName { get { return string.Format("[{0}->{1} {2}任务]", sourceWorkshop, destinationWorkshop, projectType.ToString()); } }
/// <summary> /// <summary>
/// 取车的位置 /// 取车的位置
/// </summary> /// </summary>
...@@ -126,17 +126,23 @@ namespace DeviceLibrary.service.model ...@@ -126,17 +126,23 @@ namespace DeviceLibrary.service.model
} }
public void SetState(MissionState missionState) public void SetState(MissionState missionState)
{ {
State = missionState; state = missionState;
} }
public string Remark { get; set; } public string Remark { get; set; }
public void SetAgvOccupied(string agvname) public void SetAgvOccupied(string agvname)
{ {
OccupiedAgv = agvname; occupiedAgv = agvname;
} }
public void ResetOccupied() public void ResetOccupied()
{ {
OccupiedAgv = string.Empty; occupiedAgv = string.Empty;
}
public static bool IsFinishedProdcut(MissionInfo missionInfo)
{
if (missionInfo == null)
return false;
return missionInfo.projectType.Equals(ProjectType.成品入库);
} }
} }
...@@ -196,7 +202,8 @@ namespace DeviceLibrary.service.model ...@@ -196,7 +202,8 @@ namespace DeviceLibrary.service.model
/// <summary> /// <summary>
/// 完成 /// 完成
/// </summary> /// </summary>
完成 完成,
等待成品回收
} }
/// <summary> /// <summary>
/// 项目类型 /// 项目类型
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!