using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace HH.WCS.Mobox3.AnGang.Helpers {
|
public class AgvHelper {
|
/// <summary>
|
/// AGV 任务状态优先级:1->3->4->5->6->2
|
/// </summary>
|
private static readonly int[] _agvTaskStatePri = { 0, 1, 6, 2, 3, 4, 5 };
|
|
/// <summary>
|
/// AGV 状态变化表:1->3->4->5->6->2 | 0->0 | 2->0
|
/// </summary>
|
private static readonly int[] _agvNextState = new int[] { 0, 3, 0, 4, 5, 6, 2 };
|
|
/// <summary>
|
/// 判断AGV状态是否为合法的下个状态(包含检查状态是否为任务状态)
|
/// </summary>
|
/// <remarks>
|
/// 1. 前后状态只要有不合法都会返回 <see langword="false"/><br/>
|
/// 2. nextState 可以与 lastState 相同
|
/// </remarks>
|
/// <param name="lastState"></param>
|
/// <param name="nextState"></param>
|
/// <returns></returns>
|
public static bool IsNextStateOk(int lastState, int nextState) {
|
var lastPri = GetPri(lastState);
|
var nextPri = GetPri(nextState);
|
return lastPri != 0 && nextPri != 0 && lastPri <= nextPri;
|
}
|
|
/// <summary>
|
/// 获取AGV当前状态的下个状态:不合法或为 2(完成) 时返回 0
|
/// </summary>
|
/// <param name="curState"></param>
|
/// <returns></returns>
|
public static int GetNextState(int curState) {
|
if (!IsTaskState(curState)) return 0;
|
return _agvNextState[curState];
|
}
|
|
/// <summary>
|
/// 判断 AGV 状态是否为正常的执行任务状态:134562
|
/// </summary>
|
/// <param name="state"></param>
|
/// <returns></returns>
|
private static bool IsTaskState(int state) {
|
return state > 0 && state < 7;
|
}
|
|
/// <summary>
|
/// GetTaskStatePri:获取 AGV 任务状态的优先级(包含检查状态是否为任务状态)
|
/// </summary>
|
/// <param name="state"></param>
|
/// <returns></returns>
|
private static int GetPri(int state) {
|
if (!IsTaskState(state)) { return 0; }
|
return _agvTaskStatePri[state];
|
}
|
}
|
}
|