Commit c0e131f3 张东亮

2号车出现在T5线未确认就走的的情况修复

1 个父辈 132ba046
...@@ -47,10 +47,12 @@ ...@@ -47,10 +47,12 @@
this.label12 = new System.Windows.Forms.Label(); this.label12 = new System.Windows.Forms.Label();
this.groupBox2 = new System.Windows.Forms.GroupBox(); this.groupBox2 = new System.Windows.Forms.GroupBox();
this.tabControlManual = new System.Windows.Forms.TabControl(); this.tabControlManual = new System.Windows.Forms.TabControl();
this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.tabPage5 = new System.Windows.Forms.TabPage(); this.tabPage5 = new System.Windows.Forms.TabPage();
this.txtShow = new System.Windows.Forms.TextBox(); this.txtShow = new System.Windows.Forms.TextBox();
this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel();
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();
...@@ -66,8 +68,8 @@ ...@@ -66,8 +68,8 @@
((System.ComponentModel.ISupportInitialize)(this.dgvInfos)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dgvInfos)).BeginInit();
this.tabPage3.SuspendLayout(); this.tabPage3.SuspendLayout();
this.groupBox2.SuspendLayout(); this.groupBox2.SuspendLayout();
this.tableLayoutPanel4.SuspendLayout();
this.tabPage5.SuspendLayout(); this.tabPage5.SuspendLayout();
this.tableLayoutPanel4.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// tableLayoutPanel3 // tableLayoutPanel3
...@@ -267,6 +269,8 @@ ...@@ -267,6 +269,8 @@
// //
// 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);
...@@ -312,6 +316,25 @@ ...@@ -312,6 +316,25 @@
this.tabControlManual.Size = new System.Drawing.Size(425, 258); this.tabControlManual.Size = new System.Drawing.Size(425, 258);
this.tabControlManual.TabIndex = 0; this.tabControlManual.TabIndex = 0;
// //
// tabPage5
//
this.tabPage5.Controls.Add(this.txtShow);
this.tabPage5.Location = new System.Drawing.Point(4, 22);
this.tabPage5.Name = "tabPage5";
this.tabPage5.Size = new System.Drawing.Size(1270, 282);
this.tabPage5.TabIndex = 5;
this.tabPage5.Text = "AGV定时上报内容";
this.tabPage5.UseVisualStyleBackColor = true;
//
// txtShow
//
this.txtShow.Dock = System.Windows.Forms.DockStyle.Fill;
this.txtShow.Location = new System.Drawing.Point(0, 0);
this.txtShow.Multiline = true;
this.txtShow.Name = "txtShow";
this.txtShow.Size = new System.Drawing.Size(1270, 282);
this.txtShow.TabIndex = 0;
//
// tableLayoutPanel4 // tableLayoutPanel4
// //
this.tableLayoutPanel4.ColumnCount = 1; this.tableLayoutPanel4.ColumnCount = 1;
...@@ -336,24 +359,22 @@ ...@@ -336,24 +359,22 @@
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;
// //
// tabPage5 // textBox1
// //
this.tabPage5.Controls.Add(this.txtShow); this.textBox1.Location = new System.Drawing.Point(319, 32);
this.tabPage5.Location = new System.Drawing.Point(4, 22); this.textBox1.Name = "textBox1";
this.tabPage5.Name = "tabPage5"; this.textBox1.Size = new System.Drawing.Size(218, 21);
this.tabPage5.Size = new System.Drawing.Size(1270, 282); this.textBox1.TabIndex = 47;
this.tabPage5.TabIndex = 5;
this.tabPage5.Text = "AGV定时上报内容";
this.tabPage5.UseVisualStyleBackColor = true;
// //
// txtShow // button1
// //
this.txtShow.Dock = System.Windows.Forms.DockStyle.Fill; this.button1.Location = new System.Drawing.Point(339, 73);
this.txtShow.Location = new System.Drawing.Point(0, 0); this.button1.Name = "button1";
this.txtShow.Multiline = true; this.button1.Size = new System.Drawing.Size(163, 41);
this.txtShow.Name = "txtShow"; this.button1.TabIndex = 48;
this.txtShow.Size = new System.Drawing.Size(1270, 282); this.button1.Text = "根据任务编号删除任务";
this.txtShow.TabIndex = 0; this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
// //
// FrmMain // FrmMain
// //
...@@ -381,10 +402,11 @@ ...@@ -381,10 +402,11 @@
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.tableLayoutPanel4.ResumeLayout(false);
this.tabPage5.ResumeLayout(false); this.tabPage5.ResumeLayout(false);
this.tabPage5.PerformLayout(); this.tabPage5.PerformLayout();
this.tableLayoutPanel4.ResumeLayout(false);
this.ResumeLayout(false); this.ResumeLayout(false);
} }
...@@ -412,6 +434,8 @@ ...@@ -412,6 +434,8 @@
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;
} }
} }
...@@ -13,6 +13,7 @@ using System.Windows.Forms; ...@@ -13,6 +13,7 @@ using System.Windows.Forms;
using Common; using Common;
using DeviceLibrary; using DeviceLibrary;
using DeviceLibrary.manager; using DeviceLibrary.manager;
using DeviceLibrary.service.model;
namespace AGVControl namespace AGVControl
{ {
...@@ -190,6 +191,21 @@ namespace AGVControl ...@@ -190,6 +191,21 @@ namespace AGVControl
LogUtil.logBox = this.richTextBox1; LogUtil.logBox = this.richTextBox1;
} }
} }
private void button1_Click(object sender, EventArgs e)
{
try
{
string missionId = textBox1.Text.Trim();
MissionInfo missionInfo = MissionManager.GetMission(missionId);
if(missionInfo != null)
{
MissionManager.DeleteById(missionId);
}
}
catch { }
}
private void dgvInfos_CellContentClick(object sender, DataGridViewCellEventArgs e) private void dgvInfos_CellContentClick(object sender, DataGridViewCellEventArgs e)
{ {
if (e.RowIndex == -1) if (e.RowIndex == -1)
......
...@@ -89,7 +89,7 @@ namespace DeviceLibrary.manager ...@@ -89,7 +89,7 @@ namespace DeviceLibrary.manager
string strPath = string.Format("/agvs/agv[@ip=\"{0}\"]", agv.IP); string strPath = string.Format("/agvs/agv[@ip=\"{0}\"]", agv.IP);
XmlElement selectXe = (XmlElement)xe.SelectSingleNode(strPath); //selectSingleNode 根据XPath表达式,获得符合条件的第一个节点. XmlElement selectXe = (XmlElement)xe.SelectSingleNode(strPath); //selectSingleNode 根据XPath表达式,获得符合条件的第一个节点.
//selectXe.SetAttribute("Type", dgvBookInfo.CurrentRow.Cells[0].Value.ToString());//也可以通过SetAttribute来增加一个属性 //selectXe.SetAttribute("Type", dgvBookInfo.CurrentRow.Cells[0].Value.ToString());//也可以通过SetAttribute来增加一个属性
selectXe.GetElementsByTagName("IsDebug").Item(0).InnerText = agv.Auto.ToString(); selectXe.GetElementsByTagName("IsDebug").Item(0).InnerText = agv.IsDebug.ToString();
xmlDoc.Save(File_AgvInfo); xmlDoc.Save(File_AgvInfo);
} }
public static void LoadNodeInfos(List<Node> nodes) public static void LoadNodeInfos(List<Node> nodes)
......
...@@ -250,7 +250,6 @@ namespace DeviceLibrary ...@@ -250,7 +250,6 @@ namespace DeviceLibrary
public class ExtendEquip public class ExtendEquip
{ {
public string IP { get; set; } public string IP { get; set; }
private bool buttonConfirmSig = false;
/// <summary> /// <summary>
/// 确认按钮 /// 确认按钮
/// </summary> /// </summary>
...@@ -264,13 +263,7 @@ namespace DeviceLibrary ...@@ -264,13 +263,7 @@ namespace DeviceLibrary
return false; return false;
else else
{ {
if (buttonConfirmSig) return GetIO();
return true;
else
{
buttonConfirmSig = GetIO();
return buttonConfirmSig;
}
} }
} }
...@@ -337,9 +330,8 @@ namespace DeviceLibrary ...@@ -337,9 +330,8 @@ namespace DeviceLibrary
public void Reset() public void Reset()
{ {
apiconfirmSig = false; apiconfirmSig = false;
buttonConfirmSig = false;
IOManager.WriteDO(IP, 0, 0); IOManager.WriteDO(IP, 0, 0);
Common.LogUtil.info($"线体按钮状态重置[{IP}]"); Common.LogUtil.info($"线体确认状态重置[{IP}]:apiconfirmSig={apiconfirmSig}");
} }
} }
/// <summary> /// <summary>
......
...@@ -96,7 +96,7 @@ namespace DeviceLibrary ...@@ -96,7 +96,7 @@ namespace DeviceLibrary
{ {
if (lift.LiftContext.IsDoorOpen(JobParam.CurTargetNode.Name, JobParam.GetMissionInfo().sourceFloor)) if (lift.LiftContext.IsDoorOpen(JobParam.CurTargetNode.Name, JobParam.GetMissionInfo().sourceFloor))
{ {
if (lift.LiftContext.HasShelfNeedLeave(JobParam.CurTargetNode.Name, agv.Client, out lift.LiftStatus liftStatus)) if (lift.LiftContext.HasShelfNeedLeave(JobParam.CurTargetNode.Name, agv.Client, out liftStatus))
{ {
JobRunStep.ToNextStep(RunStep.S1F_StoreToLift_05_01_ToTemp1); JobRunStep.ToNextStep(RunStep.S1F_StoreToLift_05_01_ToTemp1);
runInfo = $"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车"; runInfo = $"{JobParam.CurTargetNode.AliceName}已开门。电梯内有料车,去临时点1的卸料点,准备卸下车上料车";
...@@ -117,7 +117,7 @@ namespace DeviceLibrary ...@@ -117,7 +117,7 @@ namespace DeviceLibrary
AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff}"); AllocateTask(agv, $"{JobParam.CurTargetNode.Name}_{SettingString.TakeShelfOff}");
} }
} }
else if (JobRunStep.IsTimeOut(5) && !lift.LiftContext.CheckIfRequestOk(JobParam.CurTargetNode.Name, JobParam.GetMissionInfo())) else if (JobRunStep.IsTimeOut(20) && !lift.LiftContext.CheckIfRequestOk(JobParam.CurTargetNode.Name, JobParam.GetMissionInfo()))
{ {
JobRunStep.ToNextStep(RunStep.S1F_StoreToLift_04_CheckLiftStatus); JobRunStep.ToNextStep(RunStep.S1F_StoreToLift_04_CheckLiftStatus);
//请求电梯 //请求电梯
...@@ -299,6 +299,7 @@ namespace DeviceLibrary ...@@ -299,6 +299,7 @@ namespace DeviceLibrary
$"电梯卸车")); $"电梯卸车"));
runInfo = $"料车在{JobParam.CurTargetNode.AliceName}卸下完成,准备离开"; runInfo = $"料车在{JobParam.CurTargetNode.AliceName}卸下完成,准备离开";
ResetOccupiedAgv(JobParam.GetMissionInfo());
//任务状态变更 //任务状态变更
MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.到达电梯, out string msg); MissionManager.SetMissionState(JobParam.GetMissionInfo().missionId, service.model.MissionState.到达电梯, out string msg);
AllocateTask(agv, $"{SettingString.Leave}_{JobParam.CurTargetNode.Name}"); AllocateTask(agv, $"{SettingString.Leave}_{JobParam.CurTargetNode.Name}");
......
using Common; using Common;
using DeviceLibrary.bean; using DeviceLibrary.bean;
using DeviceLibrary.manager; using DeviceLibrary.manager;
using DeviceLibrary.service.model;
using System; using System;
namespace DeviceLibrary namespace DeviceLibrary
...@@ -169,6 +170,14 @@ namespace DeviceLibrary ...@@ -169,6 +170,14 @@ namespace DeviceLibrary
} }
return true; return true;
} }
/// <summary>
/// 清除AGV占用的任务
/// </summary>
/// <param name="missionInfo"></param>
protected void ResetOccupiedAgv(MissionInfo missionInfo)
{
missionInfo.ResetOccupied();
}
} }
} }
...@@ -224,8 +224,9 @@ namespace DeviceLibrary.bean.job ...@@ -224,8 +224,9 @@ namespace DeviceLibrary.bean.job
//上报位置 //上报位置
System.Threading.Thread.Sleep(1000); System.Threading.Thread.Sleep(1000);
} }
else if (JobRunStep.IsTimeOut(5) && !lift.LiftContext.CheckIfRequestOk(JobParam.SrcNode.Name, JobParam.GetMissionInfo())) else if (JobRunStep.IsTimeOut(20) && !lift.LiftContext.CheckIfRequestOk(JobParam.SrcNode.Name, JobParam.GetMissionInfo()))
{ {
JobRunStep.ToNextStep(RunStep.SD_LiftToLine_12_WaitDoorOpen);
//请求电梯 //请求电梯
lift.LiftContext.Request(JobParam.GetMissionInfo(), agv,true); lift.LiftContext.Request(JobParam.GetMissionInfo(), agv,true);
} }
...@@ -273,6 +274,7 @@ namespace DeviceLibrary.bean.job ...@@ -273,6 +274,7 @@ namespace DeviceLibrary.bean.job
JobRunStep.ToNextStep(RunStep.SD_LiftToLine_14_03_LeaveLift); JobRunStep.ToNextStep(RunStep.SD_LiftToLine_14_03_LeaveLift);
runInfo = $"在{JobParam.SrcNode.AliceName}卸下料车完成,准备离开"; runInfo = $"在{JobParam.SrcNode.AliceName}卸下料车完成,准备离开";
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
ResetOccupiedAgv(JobParam.GetMissionInfo());
AllocateTask(agv, $"{SettingString.Leave}_{JobParam.SrcNode.Name}"); AllocateTask(agv, $"{SettingString.Leave}_{JobParam.SrcNode.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,
...@@ -338,11 +340,11 @@ namespace DeviceLibrary.bean.job ...@@ -338,11 +340,11 @@ namespace DeviceLibrary.bean.job
JobRunStep.Msg = runInfo; JobRunStep.Msg = runInfo;
AllocateTask(agv, JobParam.SrcNode.Name); AllocateTask(agv, JobParam.SrcNode.Name);
} }
else if (JobRunStep.IsTimeOut(1, out double timeval)) else if (JobRunStep.IsTimeOut(20))
{ {
JobRunStep.ToNextStep(RunStep.SD_LiftToLine_14_03_RequestLift);
//请求电梯 //请求电梯
lift.LiftContext.Request(JobParam.GetMissionInfo(), agv, true); lift.LiftContext.Request(JobParam.GetMissionInfo(), agv, true);
System.Threading.Thread.Sleep(3000);
} }
} }
#endregion #endregion
......
...@@ -148,7 +148,10 @@ namespace DeviceLibrary.lift ...@@ -148,7 +148,10 @@ namespace DeviceLibrary.lift
{ {
liftStatus = GetLiftStatus(liftId); liftStatus = GetLiftStatus(liftId);
if (liftStatus.destinationClient.Equals(client)) if (liftStatus.destinationClient.Equals(client))
{
liftStatus.missionId = manager.MissionManager.GetMissionIdByShelfInLift(liftId);
return true; return true;
}
return false; return false;
} }
/// <summary> /// <summary>
......
...@@ -101,6 +101,14 @@ namespace DeviceLibrary.manager ...@@ -101,6 +101,14 @@ namespace DeviceLibrary.manager
return MissionInfos[id]; return MissionInfos[id];
return null; return null;
} }
public static string GetMissionIdByShelfInLift(string liftId)
{
int id = MissionInfos.FindIndex(s=> liftId.Equals(s.liftName) &&
(s.State==MissionState.电梯运行 || s.State == MissionState.返回电梯运行));
if (id > -1)
return MissionInfos[id].missionId;
return "";
}
public static void Add(MissionInfo mission) public static void Add(MissionInfo mission)
{ {
try try
...@@ -159,16 +167,19 @@ namespace DeviceLibrary.manager ...@@ -159,16 +167,19 @@ namespace DeviceLibrary.manager
{ {
if (Monitor.TryEnter(lockObj, 1000)) if (Monitor.TryEnter(lockObj, 1000))
{ {
missionInfo = MissionInfos.Find(s => s.sourceWorkshop.Equals(agv.Scope.Workshop) && s.State.Equals(MissionState.创建) && missionInfo = MissionInfos.Find(s => s.sourceWorkshop.Equals(agv.Scope.Workshop) &&
s.State.Equals(MissionState.创建) &&
agv.Scope.Tasks.Contains(s.projectType.ToString())); agv.Scope.Tasks.Contains(s.projectType.ToString()));
if (missionInfo != null) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
liftname = GetLiftName(missionInfo); liftname = GetLiftName(missionInfo);
if (liftname.Equals("")) if (liftname.Equals(""))
{ {
return null; return null;
} }
SetMissionOccupied(missionInfo, agv);
Log.Info($"执行任务[{agv.Name}][起始地] {JsonHelper.SerializeObject(missionInfo)}"); Log.Info($"执行任务[{agv.Name}][起始地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo;
} }
} }
} }
...@@ -180,11 +191,15 @@ namespace DeviceLibrary.manager ...@@ -180,11 +191,15 @@ namespace DeviceLibrary.manager
{ {
Monitor.Exit(lockObj); Monitor.Exit(lockObj);
} }
return missionInfo; return null;
} }
static bool AgvCanGetMission(MissionInfo missionInfo)
{
return string.IsNullOrEmpty(missionInfo.OccupiedAgv);
}
/// <summary> /// <summary>
/// 获取接收料任务,以准备执行 /// 获取接收料任务,以准备执行 LiftToLinesJobType
/// </summary> /// </summary>
/// <param name="missionType"></param> /// <param name="missionType"></param>
/// <returns></returns> /// <returns></returns>
...@@ -197,9 +212,11 @@ namespace DeviceLibrary.manager ...@@ -197,9 +212,11 @@ namespace DeviceLibrary.manager
{ {
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) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
SetMissionOccupied(missionInfo, agv);
Log.Info($"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"); Log.Info($"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo;
} }
} }
} }
...@@ -211,10 +228,10 @@ namespace DeviceLibrary.manager ...@@ -211,10 +228,10 @@ namespace DeviceLibrary.manager
{ {
Monitor.Exit(lockObj); Monitor.Exit(lockObj);
} }
return missionInfo; return null;
} }
/// <summary> /// <summary>
/// 获取1楼接收料任务,以准备执行 /// 获取1楼接收料任务,以准备执行 F1LiftToStoreJobType
/// </summary> /// </summary>
/// <param name="agv"></param> /// <param name="agv"></param>
/// <returns></returns> /// <returns></returns>
...@@ -227,9 +244,11 @@ namespace DeviceLibrary.manager ...@@ -227,9 +244,11 @@ namespace DeviceLibrary.manager
{ {
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) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
SetMissionOccupied(missionInfo, agv);
Log.Info($"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"); Log.Info($"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo;
} }
} }
} }
...@@ -241,7 +260,7 @@ namespace DeviceLibrary.manager ...@@ -241,7 +260,7 @@ namespace DeviceLibrary.manager
{ {
Monitor.Exit(lockObj); Monitor.Exit(lockObj);
} }
return missionInfo; return null;
} }
/// <summary> /// <summary>
...@@ -259,9 +278,11 @@ namespace DeviceLibrary.manager ...@@ -259,9 +278,11 @@ 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) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
SetMissionOccupied(missionInfo, agv);
Log.Info($"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"); Log.Info($"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo;
} }
} }
} }
...@@ -273,7 +294,7 @@ namespace DeviceLibrary.manager ...@@ -273,7 +294,7 @@ namespace DeviceLibrary.manager
{ {
Monitor.Exit(lockObj); Monitor.Exit(lockObj);
} }
return missionInfo; return null;
} }
/// <summary> /// <summary>
...@@ -293,9 +314,11 @@ namespace DeviceLibrary.manager ...@@ -293,9 +314,11 @@ namespace DeviceLibrary.manager
(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) if (missionInfo != null && AgvCanGetMission(missionInfo))
{ {
SetMissionOccupied(missionInfo,agv);
Log.Info($"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}"); Log.Info($"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return missionInfo;
} }
} }
} }
...@@ -307,38 +330,12 @@ namespace DeviceLibrary.manager ...@@ -307,38 +330,12 @@ namespace DeviceLibrary.manager
{ {
Monitor.Exit(lockObj); Monitor.Exit(lockObj);
} }
return missionInfo; return null;
}
/// <summary>
/// 获取电梯内的任务信息
/// </summary>
/// <param name="missionType"></param>
/// <returns></returns>
public static MissionInfo GetMissionInLift(AgvInfo agv)
{
MissionInfo missionInfo = null;
try
{
if (Monitor.TryEnter(lockObj, 1000))
{
missionInfo = MissionInfos.Find(s => s.destinationWorkshop.Equals(agv.Scope.Workshop) &&
(s.State >= MissionState.电梯运行 && s.State <= MissionState.电梯到达) && agv.Scope.Tasks.Contains(s.projectType.ToString()));
if (missionInfo != null)
{
Log.Info($"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
}
}
} }
catch (Exception e) static void SetMissionOccupied(MissionInfo missionInfo,AgvInfo agv)
{ {
Log.Error("操作 fixMissionInfos 超时", e); missionInfo.SetAgvOccupied(agv.Name);
} MissionChangedEvent?.Invoke();
finally
{
Monitor.Exit(lockObj);
}
return missionInfo;
} }
/// <summary> /// <summary>
/// 设置任务状态 /// 设置任务状态
...@@ -381,7 +378,7 @@ namespace DeviceLibrary.manager ...@@ -381,7 +378,7 @@ namespace DeviceLibrary.manager
MissionChangedEvent?.Invoke(); MissionChangedEvent?.Invoke();
} }
static void SetMissionState(MissionInfo missionInfo,MissionState missionState) static void SetMissionState(MissionInfo missionInfo, MissionState missionState)
{ {
missionInfo.SetState(missionState); missionInfo.SetState(missionState);
Log.Info($"设置任务[{missionInfo.missionId}] 状态为[{missionState}]成功"); Log.Info($"设置任务[{missionInfo.missionId}] 状态为[{missionState}]成功");
...@@ -451,7 +448,7 @@ namespace DeviceLibrary.manager ...@@ -451,7 +448,7 @@ namespace DeviceLibrary.manager
liftname = SettingString.LIFT_D2; liftname = SettingString.LIFT_D2;
} }
} }
else if(missionInfo.sourceWorkshop.Equals(SettingString._3C)) else if (missionInfo.sourceWorkshop.Equals(SettingString._3C))
{ {
if (missionInfo.destinationWorkshop.Equals(SettingString._4C)) if (missionInfo.destinationWorkshop.Equals(SettingString._4C))
{ {
...@@ -462,7 +459,7 @@ namespace DeviceLibrary.manager ...@@ -462,7 +459,7 @@ namespace DeviceLibrary.manager
case ProjectType.包材领用: case ProjectType.包材领用:
if (missionInfo.sourceWorkshop.StartsWith("-1")) if (missionInfo.sourceWorkshop.StartsWith("-1"))
{ {
if (missionInfo.destinationWorkshop.Equals(SettingString._4D)|| if (missionInfo.destinationWorkshop.Equals(SettingString._4D) ||
missionInfo.destinationWorkshop.Equals(SettingString._3D)) missionInfo.destinationWorkshop.Equals(SettingString._3D))
{ {
liftname = SettingString.LIFT_D8; liftname = SettingString.LIFT_D8;
...@@ -496,7 +493,7 @@ namespace DeviceLibrary.manager ...@@ -496,7 +493,7 @@ namespace DeviceLibrary.manager
case ProjectType.空台车领用: case ProjectType.空台车领用:
if (missionInfo.sourceWorkshop.StartsWith("1")) if (missionInfo.sourceWorkshop.StartsWith("1"))
{ {
if (missionInfo.destinationWorkshop.Equals(SettingString._4D)|| if (missionInfo.destinationWorkshop.Equals(SettingString._4D) ||
missionInfo.destinationWorkshop.Equals(SettingString._3D)) missionInfo.destinationWorkshop.Equals(SettingString._3D))
{ {
liftname = SettingString.LIFT_D2; liftname = SettingString.LIFT_D2;
......
...@@ -41,7 +41,9 @@ namespace DeviceLibrary.manager ...@@ -41,7 +41,9 @@ namespace DeviceLibrary.manager
} }
else if (item.Auto) else if (item.Auto)
{ {
if (item.CurJob != null && item.CurJob is StandyJob) if (item.IsDebug)
agvState.state = "调试中";
else if (item.CurJob != null && item.CurJob is StandyJob)
{ {
agvState.state = "归位中"; agvState.state = "归位中";
} }
...@@ -55,8 +57,6 @@ namespace DeviceLibrary.manager ...@@ -55,8 +57,6 @@ namespace DeviceLibrary.manager
agvState.missionId = item.CurJob.JobParam.GetMissionInfo().missionId; agvState.missionId = item.CurJob.JobParam.GetMissionInfo().missionId;
agvState.remark = item.CurJob.JobParam.GetMissionInfo().Remark; agvState.remark = item.CurJob.JobParam.GetMissionInfo().Remark;
} }
else if (item.IsDebug)
agvState.state = "调试中";
else else
agvState.state = "自动"; agvState.state = "自动";
} }
......
...@@ -16,22 +16,22 @@ namespace DeviceLibrary.service.model ...@@ -16,22 +16,22 @@ namespace DeviceLibrary.service.model
/// </summary> /// </summary>
public string missionId { get; set; } public string missionId { get; set; }
/// <summary> /// <summary>
/// 使用的电梯名称 /// 任务状态
/// </summary> /// </summary>
public string liftName { get; set; } public MissionState State { get; set; }
/// <summary> /// <summary>
/// 优先级。3最高,1最低 /// 使用的电梯名称
/// </summary> /// </summary>
//public int Priority { get; set; } = 1; public string liftName { get; set; }
/// <summary> /// <summary>
/// 是否可合并 /// 占用的AGV名称
/// </summary> /// </summary>
public bool canMerge { get; set; } public string OccupiedAgv { get; set; } = string.Empty;
public string JobName { get { return string.Format("[{0}->{1} {2}任务]", sourceWorkshop, destinationWorkshop, projectType.ToString()); } }
/// <summary> /// <summary>
/// 任务状态 /// 取车的位置
/// </summary> /// </summary>
public MissionState State { get; set; } public string sourcePoint { get; set; }
/// <summary> /// <summary>
/// 取车的车间 /// 取车的车间
/// </summary> /// </summary>
...@@ -62,24 +62,10 @@ namespace DeviceLibrary.service.model ...@@ -62,24 +62,10 @@ namespace DeviceLibrary.service.model
} }
} }
} }
public int destinationFloor
{
get
{
try
{
return int.Parse(destinationWorkshop.Substring(0, 1));
}
catch
{
return -1;
}
}
}
/// <summary> /// <summary>
/// 取车的位置 /// 目标点位,多个点位使用逗号分割
/// </summary> /// </summary>
public string sourcePoint { get; set; } public string destinationPoint { get; set; }
/// <summary> /// <summary>
/// 目标车间 /// 目标车间
/// </summary> /// </summary>
...@@ -96,15 +82,30 @@ namespace DeviceLibrary.service.model ...@@ -96,15 +82,30 @@ namespace DeviceLibrary.service.model
return ""; return "";
} }
} }
/// <summary> public int destinationFloor
/// 目标点位,多个点位使用逗号分割 {
/// </summary> get
public string destinationPoint { get; set; } {
try
{
return int.Parse(destinationWorkshop.Substring(0, 1));
}
catch
{
return -1;
}
}
}
/// <summary> /// <summary>
/// 空架子是否需要返回 /// 空架子是否需要返回
/// </summary> /// </summary>
public bool needBack { get; set; } public bool needBack { get; set; }
/// <summary> /// <summary>
/// 是否可合并
/// </summary>
public bool canMerge { get; set; }
/// <summary>
/// 产品类型 /// 产品类型
/// </summary> /// </summary>
public ProjectType projectType public ProjectType projectType
...@@ -129,7 +130,14 @@ namespace DeviceLibrary.service.model ...@@ -129,7 +130,14 @@ namespace DeviceLibrary.service.model
} }
public string Remark { get; set; } public string Remark { get; set; }
public string JobName { get { return string.Format("[{0}->{1} {2}任务]", sourceWorkshop, destinationWorkshop, projectType.ToString()); } } public void SetAgvOccupied(string agvname)
{
OccupiedAgv = agvname;
}
public void ResetOccupied()
{
OccupiedAgv = string.Empty;
}
} }
public enum MissionState public enum MissionState
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!