Commit f03add52 张东亮

step时间分别计时

1 个父辈 ec01efbe
......@@ -75,7 +75,7 @@ namespace BLL
res = new Result() { Succeed = false, ResultData = null, ErrorMessage = "rfid=null" };
Log.Error(string.Format("Unlock Request(POST) Failed [emptyStation={0},rfid=null]", emptyStation));
}
else if (rfid.StartsWith("A"))
else if (rfid.ToUpper().StartsWith("A"))
{
res = new Result() { Succeed = false, ResultData = null, ErrorMessage = $"rfid={rfid} can not be unlock" };
Log.Error(string.Format("Unlock Request(POST) Failed [emptyStation={0},rfid=null]", emptyStation));
......@@ -115,10 +115,10 @@ namespace BLL
}
if (Common.GetNodeNameByLineName(line, out string value))
{
if (RFID.StartsWith("A"))
if (RFID.ToUpper().StartsWith("A"))
{
res = new Result() { Succeed = false, ResultData = null, ErrorMessage = $"rfid={RFID} can not be unlock" };
Log.Error(string.Format("Unlock Request(POST) Failed [emptyStation={0},rfid={1}]", line,RFID));
Log.Error(string.Format("Unlock Request(GET) Failed [emptyStation={0},rfid={1}]", line,RFID));
}
else if (!Common.missionManager.AddMission(value, RFID.ToUpper()))
{
......
......@@ -31,18 +31,12 @@ namespace AGVControl
/// 当前任务的执行状态
/// </summary>
public string CurTaskState { get; set; } = "Wait";
/// <summary>
/// Job开始时间
/// </summary>
public DateTime StartJobTime { get; set; } = DateTime.Now;
/// <summary>
/// Job名称
/// </summary>
public string JobName { get; set; } = "";
protected void RecordRunLog(Agv_Info agv, string JobStep, string runInfo, string targetPlace)
{
Common.RunLogInfo(new RunInfo(agv.Name.PadLeft(4, '0'), JobName, targetPlace, JobStep, runInfo, StartJobTime));
}
/// <summary>
/// 更新任务信息
/// </summary>
......
......@@ -79,7 +79,10 @@ namespace AGVControl
return step.ToString();
}
public void RecordRunLog(Agv_Info agv, string JobName, string runInfo, string targetPlace)
{
Common.RunLogInfo(new RunInfo(agv.Name.PadLeft(4, '0'), JobName, targetPlace, CurStep(), runInfo, startTime));
}
}
}
......@@ -22,7 +22,6 @@ namespace AGVControl
public ChargeJob(string agvPlae)
{
this.agvPlace = agvPlae;
JobName = "充电任务";
}
......@@ -50,6 +49,7 @@ namespace AGVControl
string msg = agv.Name + " ";
bool rtn = false;
agv.Msg = "";
JobName = "充电任务";
//runInfo = "充电任务:";
CurTaskState = Common.GetTakJobState(CurTaskID);
if (curJobStep.IsStep(CHARGE_STEP.NONE))
......@@ -145,6 +145,8 @@ namespace AGVControl
{
if (Common.CheckTaskFinished(agv, SettingString.DoorAirOut, CurTaskState))
{
JobName = "待机任务";
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.Standby);
curJobStep.ToNextStep(CHARGE_STEP.WAIT_AGV_REACH_4D_DOOR);
runInfo = "电量充足[" + agv.Battery + "%],从当前位置" + agvPlace + "回到待机位,先到4D门";
msg += runInfo;
......@@ -159,6 +161,8 @@ namespace AGVControl
{
if (agv.Battery > Common.chargeStatus.chargeMax)
{
JobName = "待机任务";
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.Standby);
curJobStep.ToNextStep(CHARGE_STEP.WAIT_REACH_STANDBY);
runInfo = "电量充足[" + agv.Battery + "%],从当前位置" + agvPlace + "回到待机位";
msg += runInfo;
......@@ -170,6 +174,8 @@ namespace AGVControl
{
if (!Common.StatusCharge(agv))
{
JobName = "待机任务";
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.Standby);
curJobStep.ToNextStep(CHARGE_STEP.WAIT_REACH_STANDBY);
runInfo = "电量[" + agv.Battery + "%]小于最大电量[" + Common.chargeStatus.chargeMax + "%],充电桩有小车,从当前位置" + agvPlace + "回到待机位";
msg += runInfo;
......@@ -180,6 +186,7 @@ namespace AGVControl
}
else
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.AutoCharge);
curJobStep.ToNextStep(CHARGE_STEP.WAIT_REACH_CHARGE_STATION);
runInfo = "电量[" + agv.Battery + "%]小于最大电量[" + Common.chargeStatus.chargeMax + "%],从当前位置" + agvPlace + "回到充电位";
msg += runInfo;
......@@ -194,6 +201,7 @@ namespace AGVControl
{
if (Common.CheckTaskFinished(agv, CurTaskName))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.AutoCharge);
curJobStep.ToNextStep(CHARGE_STEP.WAIT_REACH_CHARGE_OK);
runInfo = "充电任务分配完成,去充电并等待任务";
msg += runInfo;
......@@ -206,6 +214,8 @@ namespace AGVControl
{
if (agv.Battery >= Common.chargeStatus.chargeMax)
{
JobName = "待机任务";
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.AutoCharge);
curJobStep.ToNextStep(CHARGE_STEP.WAIT_REACH_STANDBY);
runInfo = "电量充足,回待机位";
msg += runInfo;
......@@ -216,6 +226,7 @@ namespace AGVControl
}
else if (agv.Battery >= Common.chargeStatus.chargeMin)
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.AutoCharge);
Job job = Common.control.GetJob(agv);
if (job != null && !(job is ChargeJob))
{
......@@ -223,7 +234,7 @@ namespace AGVControl
runInfo = "充电过程检测到任务,电量[" + agv.Battery + "%]大于最小电量[" + Common.chargeStatus.chargeMin + "%],中断充电执行任务";
msg += runInfo;
curJobStep.Msg = msg;
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.AutoCharge);
return job;
}
......@@ -233,6 +244,7 @@ namespace AGVControl
{
if (agv.Battery >= Common.chargeStatus.chargeMax)
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.AutoCharge);
curJobStep.ToNextStep(CHARGE_STEP.END);
runInfo = "充电完成";
msg += runInfo;
......@@ -240,6 +252,7 @@ namespace AGVControl
}
else if (agv.Battery >= Common.chargeStatus.chargeMin)
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.AutoCharge);
Job job = Common.control.GetJob(agv);
if (job != null && !(job is ChargeJob))
{
......@@ -247,7 +260,7 @@ namespace AGVControl
msg += runInfo;
curJobStep.Msg = msg;
Common.chargeStatus.ClearRandomChargeInfo(agv);
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.AutoCharge);
return job;
}
}
......@@ -259,6 +272,8 @@ namespace AGVControl
{
if (Common.CheckTaskFinished(agv, SettingString.Standby, CurTaskState))
{
JobName = "待机任务";
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.Standby);
curJobStep.ToNextStep(CHARGE_STEP.END);
runInfo = "充电完成,到达待机位";
msg += runInfo;
......@@ -271,15 +286,17 @@ namespace AGVControl
Job job = Common.control.GetJob(agv);
if (job != null && !(job is ChargeJob))
{
JobName = "待机任务";
runInfo = "在待机位检测到任务,执行任务";
msg += runInfo;
curJobStep.Msg = msg;
Common.chargeStatus.ClearRandomChargeInfo(agv);
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.Standby);
return job;
}
else if (job == null && agv.Battery < Common.chargeStatus.chargeMax / 2)
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.Standby);
curJobStep.ToNextStep(CHARGE_STEP.NONE);
runInfo = "在待机位暂无任务,且当前电量小于" + Common.chargeStatus.chargeMax / 2 + "%,去充电位";
msg += runInfo;
......@@ -287,7 +304,7 @@ namespace AGVControl
Common.chargeStatus.ClearRandomChargeInfo(agv);
}
}
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
return this;
}
......
......@@ -67,7 +67,7 @@ namespace AGVControl
runInfo = "小车在产线 " + agvPlace + " 准备返回时检测到 " + nodeName + " 有空料架";
msg += runInfo;
curJobStep.Msg = msg;
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, nodeName);
return new GoEmptyShelfLineJob(agvPlace, nodeName, rfid);
}
else
......@@ -169,13 +169,14 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.Standby, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.Standby);
Job job = Common.control.GetJob(agv);
if (job == null && agv.Battery < Common.chargeStatus.chargeMax)
{
runInfo = "到达待机位,电量[" + agv.Battery + "]小于最大电量[" + Common.chargeStatus.chargeMax + "],暂无任务,去充电";
msg += runInfo;
curJobStep.Msg = msg;
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.AutoCharge);
return new ChargeJob("");
}
else
......@@ -183,13 +184,14 @@ namespace AGVControl
runInfo = "到达待机位,检测到新任务,执行任务";
msg += runInfo;
curJobStep.Msg = msg;
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.Standby);
return job;
}
}
else
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.Standby);
if (Common.FindEmptyShelfNode(agv, out string nodeName, true))
{
int i = Common.agvInfo.FindIndex(s => s.CurJob is GoEmptyShelfLineJob && ((GoEmptyShelfLineJob)s.CurJob).EmptyShelfPlace.Equals(nodeName));
......@@ -201,7 +203,7 @@ namespace AGVControl
runInfo = "小车在产线 " + agvPlace + " 准备返回时检测到 " + nodeName + " 有空料架";
msg += runInfo;
curJobStep.Msg = msg;
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, nodeName);
return new GoEmptyShelfLineJob(agvPlace, nodeName, rfid);
}
}
......@@ -212,7 +214,7 @@ namespace AGVControl
runInfo = "从产线" + agvPlace + "回待机位过程中,检测到A6出满料,去A6";
msg += runInfo;
curJobStep.Msg = msg;
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.A6);
return new GoFullShelfStationJob(SettingString.Standby);
}
}
......@@ -223,6 +225,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.DoorAirOut, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.DoorAirOut);
curJobStep.ToNextStep(EMPTY_AGV_BACK_STEP.WAIT_AGV_REACH_4D_DOOR);
runInfo = "从产线" + agvPlace + "回待机位,先到4D门";
msg += runInfo;
......@@ -236,6 +239,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.DoorCToD, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.DoorCToD);
if (Common.FindEmptyShelfNode(agv, out string nodeName, true))
{
int i = Common.agvInfo.FindIndex(s => s.CurJob is GoEmptyShelfLineJob && ((GoEmptyShelfLineJob)s.CurJob).EmptyShelfPlace.Equals(nodeName));
......@@ -247,7 +251,7 @@ namespace AGVControl
runInfo = "小车在产线 " + agvPlace + " 准备返回时检测到 " + nodeName + " 有空料架";
msg += runInfo;
curJobStep.Msg = msg;
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, nodeName);
return new GoEmptyShelfLineJob(agvPlace, nodeName, rfid);
}
}
......@@ -258,7 +262,7 @@ namespace AGVControl
runInfo = "从产线" + agvPlace + "到达4D门,检测到A6出满料,去A6";
msg += runInfo;
curJobStep.Msg = msg;
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.A6);
return new GoFullShelfStationJob(SettingString.DoorCToD);
}
......@@ -266,12 +270,11 @@ namespace AGVControl
runInfo = "从产线" + agvPlace + "到达4D门,暂无任务,去充电位";
msg += runInfo;
curJobStep.Msg = msg;
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.AutoCharge);
return new ChargeJob(SettingString.DoorCToD);
}
}
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
return this;
}
/// <summary>
......
......@@ -116,6 +116,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.DoorAirOut, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.DoorAirOut);
curJobStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_DOOR);
runInfo = "出风淋门,前往4D门";
msg += runInfo;
......@@ -129,6 +130,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.DoorCToD, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.DoorCToD);
if (Common.CheckA5A6State(agv, shelfType, out string nodeName))
{
EmptyShelfTargetPlace = nodeName;
......@@ -153,8 +155,10 @@ namespace AGVControl
else if (curJobStep.IsStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_STANDBY))
{
CurTaskState = Common.GetTakJobState(CurTaskID);
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.Standby);
if (Common.CheckA5A6State(agv, shelfType, out string nodeName))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, EmptyShelfTargetPlace);
EmptyShelfTargetPlace = nodeName;
curJobStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_A5A6);
runInfo = "待机位检测到双层线需要料架,送往双层线 " + EmptyShelfTargetPlace;
......@@ -169,6 +173,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, EmptyShelfTargetPlace, CurTaskState) && EmptyShelfTargetPlace.StartsWith("A"))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, EmptyShelfTargetPlace);
curJobStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_DOUBLE_LINE_RESPONSE);
runInfo = "AGV到达 " + EmptyShelfTargetPlace + ",并发送入料架请求[ReadyEnter]";
msg += runInfo;
......@@ -184,6 +189,7 @@ namespace AGVControl
{
if (!agv.CurTaskName.Equals("Leave"))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, EmptyShelfTargetPlace);
curJobStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT__EMPTY_SHELF_IN_DOUBLE_LINE);
runInfo = "收到双层线入料架请求[ReadyEnter]的响应 " + EmptyShelfTargetPlace + "入料架,小车链条运行";
msg += runInfo;
......@@ -199,6 +205,7 @@ namespace AGVControl
if (tryTimes < 3)
return this;
tryTimes = 0;
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.Standby);
curJobStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_STANDBY);
runInfo = "双层线" + EmptyShelfTargetPlace + "暂不需要空料架,从[" + EmptyShelfTargetPlace + "]到待机位";
msg += runInfo;
......@@ -219,7 +226,7 @@ namespace AGVControl
runInfo = "在双层线检测到任务,执行任务";
msg += runInfo;
curJobStep.Msg = msg;
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, agv.Place);
return job;
}
else
......@@ -229,7 +236,7 @@ namespace AGVControl
curJobStep.Msg = msg;
agv.RFID = "";
agv.BoxDestInfo = "";
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.AutoCharge);
return new ChargeJob(SettingString.DoubleLine_Name_Prefix);
}
......@@ -243,7 +250,6 @@ namespace AGVControl
else if (curJobStep.IsStep(EMPTY_SHELF_BACK_STEP.END))
{
}
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
return this;
}
......
......@@ -62,7 +62,7 @@ namespace AGVControl
}
private JobStep<ENTER_LEAVE_SHELF_STEP> EnterLeaveShelfStep = new JobStep<ENTER_LEAVE_SHELF_STEP>(ENTER_LEAVE_SHELF_STEP.NONE);
private JobStep<ENTER_LEAVE_SHELF_STEP> curJobStep = new JobStep<ENTER_LEAVE_SHELF_STEP>(ENTER_LEAVE_SHELF_STEP.NONE);
public override Job Execute(Agv_Info agv)
{
......@@ -71,7 +71,7 @@ namespace AGVControl
agv.Msg = runInfo;
//if (!CurTaskID.Equals(-1) && Common.mir.Get_Task_State(CurTaskID, out string st))
// CurTaskState = st;
if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.NONE))
if (curJobStep.IsStep(ENTER_LEAVE_SHELF_STEP.NONE))
{
if (ActionType.Equals(eEnterLeaveType.Leave))
{
......@@ -79,10 +79,10 @@ namespace AGVControl
//msg = "AGV到达 " + LineName + ",并发送入料架请求[ReadyEnter]";
//EnterLeaveShelfStep.Msg = msg;
//Common.server.ReadyEnter(LineName);
EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_IN_LINE);
curJobStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_IN_LINE);
runInfo = LineName + "入料架,小车链条运行";
msg += runInfo;
EnterLeaveShelfStep.Msg = msg;
curJobStep.Msg = msg;
rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Leave"]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
}
......@@ -92,57 +92,57 @@ namespace AGVControl
//msg = "AGV到达 " + LineName + ",并发送出料架请求[ReadyLeave]";
//EnterLeaveShelfStep.Msg = msg;
//Common.server.ReadyLeave(LineName);
EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_OUT_LINE);
curJobStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_OUT_LINE);
runInfo = LineName + "出料架,小车链条运行";
msg += runInfo;
EnterLeaveShelfStep.Msg = msg;
curJobStep.Msg = msg;
rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Enter"]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
}
}
else if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT_LINE_ReadyEnter_RESPONSE))
else if (curJobStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT_LINE_ReadyEnter_RESPONSE))
{
int id = Common.FindNode(LineName);
ClientNode node = Common.nodeInfo[id];
if (node.StateEquals(eNodeStatus.MayEnter))
{
EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_IN_LINE);
curJobStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_IN_LINE);
runInfo= "收到产线入料架请求[ReadyEnter]的响应, " + LineName + "入料架,小车链条运行";
msg += runInfo;
EnterLeaveShelfStep.Msg = msg;
curJobStep.Msg = msg;
rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Leave"]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
}
else if (EnterLeaveShelfStep.IsTimeOut(15000, out TimeSpan timeOutValue))
else if (curJobStep.IsTimeOut(15000, out TimeSpan timeOutValue))
{
EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.NONE);
curJobStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.NONE);
runInfo = "AGV到达 " + LineName + ",15秒后重新向产线发送入料架请求[ReadyEnter]";
msg += runInfo;
EnterLeaveShelfStep.Msg = msg;
curJobStep.Msg = msg;
}
}
else if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT_LINE_ReadyLeave_RESPONSE))
else if (curJobStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT_LINE_ReadyLeave_RESPONSE))
{
int id = Common.FindNode(LineName);
ClientNode node = Common.nodeInfo[id];
if (node.StateEquals(eNodeStatus.MayLeave))
{
EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_OUT_LINE);
curJobStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_OUT_LINE);
runInfo= "收到产线出料架请求[ReadyLeave]的响应, " + LineName + "出料架,小车链条运行";
msg += runInfo;
EnterLeaveShelfStep.Msg = msg;
curJobStep.Msg = msg;
rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Enter"]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
}
else if (EnterLeaveShelfStep.IsTimeOut(15000, out TimeSpan timeOutValue))
else if (curJobStep.IsTimeOut(15000, out TimeSpan timeOutValue))
{
EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.NONE);
curJobStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.NONE);
runInfo= "AGV到达 " + LineName + ",15秒后重新向产线发送入料架请求[ReadyLeave]";
msg += runInfo;
EnterLeaveShelfStep.Msg = msg;
curJobStep.Msg = msg;
}
}
else if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_IN_LINE))
else if (curJobStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_IN_LINE))
{
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckEnterOrLeaveFinished(agv, "Leave", CurTaskState))
......@@ -151,12 +151,12 @@ namespace AGVControl
//EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.END);
runInfo= "料架进入" + LineName + "完成 [" + RFID + "]";
msg += runInfo;
EnterLeaveShelfStep.Msg = msg;
curJobStep.Msg = msg;
agv.RFID = "";
return new EmptyAGVBackJob(LineName);
}
else if (EnterLeaveShelfStep.IsTimeOut(60000, out TimeSpan timeOutValue))
else if (curJobStep.IsTimeOut(60000, out TimeSpan timeOutValue))
{
//链条停止
runInfo= "料架在[" + LineName + "]离开小车超时[" + timeOutValue.ToString("f1") + "秒],请检查料架离开小车的情况";
......@@ -165,7 +165,7 @@ namespace AGVControl
}
}
else if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_OUT_LINE))
else if (curJobStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_OUT_LINE))
{
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckEnterOrLeaveFinished(agv, "Enter", CurTaskState))
......@@ -174,11 +174,11 @@ namespace AGVControl
//EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.END);
runInfo = "料架在" + LineName + "出去完成 [" + RFID + "]";
msg += runInfo;
EnterLeaveShelfStep.Msg = msg;
curJobStep.Msg = msg;
Common.missionManager.DelMission(LineName,RFID);
return new EmptyShelfBackJob(LineName,eShelfType.BigShelf);
}
else if (EnterLeaveShelfStep.IsTimeOut(60000, out TimeSpan timeOutValue))
else if (curJobStep.IsTimeOut(60000, out TimeSpan timeOutValue))
{
//链条停止
runInfo= "料架在[" + LineName + "]进入小车超时[" + timeOutValue.ToString("f1") + "秒],请检查料架进入小车的情况";
......@@ -187,7 +187,7 @@ namespace AGVControl
}
}
else if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.END))
else if (curJobStep.IsStep(ENTER_LEAVE_SHELF_STEP.END))
{
}
......
......@@ -57,6 +57,7 @@ namespace AGVControl
string msg = agv.Name + " ";
bool rtn = false;
agv.Msg = runInfo;
//runInfo = "回收空料架任务:";
int nodeIdx = Common.FindNode(EmptyShelfPlace);
if (curJobStep.IsStep(TAKE_EMPTY_STEP.NONE))
......@@ -185,6 +186,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.DoorAirOut, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.DoorAirOut);
//4C风淋门内->风淋门外,到达风淋门外
if (agvPlae.StartsWith(SettingString.C4_Name_Prefix) && EmptyShelfPlace.StartsWith(SettingString.C4_Name_Prefix))//4C->4C
{
......@@ -231,6 +233,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.DoorAirIn, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.DoorAirIn);
//4C风淋门外->风淋门内
curJobStep.ToNextStep(TAKE_EMPTY_STEP.ASSIGN_AGV_TASK);
runInfo = "到达风淋门内,开始任务[" + agvPlae + "->" + EmptyShelfPlace + "]" + "[RFID=" + RFID + "]";
......@@ -243,6 +246,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.DoorDToC, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.DoorDToC);
if (Common.Check4CTarget(agv, EmptyShelfPlace))//被占用
{
curJobStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_REACH_TEMP_PLACE);
......@@ -278,6 +282,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.C4_STANDBY1, CurTaskState) || Common.CheckTaskFinished(agv, SettingString.C4_STANDBY2, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, agv.Place);
if (!Common.Check4CTarget(agv, EmptyShelfPlace))//未占用
{
curJobStep.ToNextStep(TAKE_EMPTY_STEP.ASSIGN_AGV_TASK);
......@@ -293,6 +298,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.DoorCToD, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, EmptyShelfPlace);
curJobStep.ToNextStep(TAKE_EMPTY_STEP.ASSIGN_AGV_TASK);
runInfo = "开始执行回收空料架任务[" + agvPlae + "->" + EmptyShelfPlace + "]" + "[RFID=" + RFID + "]";
msg += runInfo;
......@@ -301,7 +307,7 @@ namespace AGVControl
}
else if (curJobStep.IsStep(TAKE_EMPTY_STEP.ASSIGN_AGV_TASK))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, EmptyShelfPlace);
if (nodeIdx > -1)
{
curJobStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_AGV_START_TASK);
......@@ -323,6 +329,7 @@ namespace AGVControl
{
if (agv.CurTaskState.Equals(SettingString.Executing))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, EmptyShelfPlace);
curJobStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_REACH_PLACE);
runInfo = "AGV开始向目的地[" + EmptyShelfPlace + "]移动" + "[RFID=" + RFID + "]";
msg += runInfo;
......@@ -343,6 +350,7 @@ namespace AGVControl
//}
//else
{
curJobStep.RecordRunLog(agv, JobName, runInfo, EmptyShelfPlace);
curJobStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_LINE_RESPONSE);
runInfo = "AGV到达 " + EmptyShelfPlace + " 向产线发送出料架请求[ReadyLeave]" + "[RFID=" + RFID + "]";
msg += runInfo;
......@@ -377,6 +385,7 @@ namespace AGVControl
agv.HasError = false;
if (!agv.CurTaskName.Equals("Enter"))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, EmptyShelfPlace);
curJobStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_TAKE_EMPTY_SHELF);
runInfo = "收到产线出料请求[ReadyLeave]的响应 " + EmptyShelfPlace + "出料架,小车链条运行" + "[RFID=" + RFID + "]";
msg += runInfo;
......@@ -399,6 +408,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckEnterOrLeaveFinished(agv, "Enter", CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, EmptyShelfPlace);
agv.HasError = false;
ClientNode node = Common.nodeInfo[nodeIdx];
//回收空料架数量减少1
......@@ -408,7 +418,6 @@ namespace AGVControl
runInfo = "空料架在[" + EmptyShelfPlace + "]进入小车完成" + "[RFID=" + RFID + "]";
msg += runInfo;
curJobStep.Msg = msg;
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
//4DfeederOut默认大料架
//if (agv.Place.Equals(SettingString.D4FeederOut))
//return new EmptyShelfBackJob(EmptyShelfPlace, eShelfType.BigShelf);
......@@ -436,7 +445,6 @@ namespace AGVControl
{
}
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
return this;
}
......
......@@ -75,6 +75,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.agvMission["CheckShelf"].Equals(agv.CurTaskGUID) && agv.CurTaskState.Equals(SettingString.Done))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfStationPlace);
rtn = Common.mir.Get_IO_Status(agv, out bool[] input, out bool[] output);
if (rtn)
{
......@@ -171,6 +172,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.DoorAirOut, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfStationPlace);
curJobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.WAIT_AGV_REACH_DOOR);
runInfo = "过风淋门,向4D门运行,再到双层线入料口" + FullShelfStationPlace;
msg += runInfo;
......@@ -185,6 +187,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.DoorCToD, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfStationPlace);
curJobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.WAIT_AGV_REACH_A6);
runInfo = "到达4D门,准备运动到双层线入料口" + FullShelfStationPlace;
msg += runInfo;
......@@ -199,6 +202,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, FullShelfStationPlace, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfStationPlace);
ClientNode node = Common.nodeInfo.Find(s => s.Name.Equals(SettingString.A6)
&& (s.StateEquals(eNodeStatus.NeedLeave) || s.StateEquals(eNodeStatus.NeedEnterLeave)) && !s.RFID.Equals("00"));
if (node != null && node.Name.Equals(SettingString.A6))
......@@ -251,6 +255,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.Standby, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, SettingString.Standby);
curJobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.END);
runInfo = "到达待机位";
msg += runInfo;
......@@ -272,6 +277,7 @@ namespace AGVControl
{
if (!agv.CurTaskName.Equals("Enter"))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfStationPlace);
curJobStep.ToNextStep(GO_FULL_SHELF_STATION_STEP.WAIT__FULL_SHELF_IN_AGV);
runInfo = "收到双层线出料架请求[ReadyLeave]的响应 " + FullShelfStationPlace + "出料架,小车链条运行";
msg += runInfo;
......@@ -294,6 +300,7 @@ namespace AGVControl
else if (curJobStep.IsStep(GO_FULL_SHELF_STATION_STEP.WAIT__FULL_SHELF_IN_AGV))
{
CurTaskState = Common.GetTakJobState(CurTaskID);
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfStationPlace);
if (Common.CheckEnterOrLeaveFinished(agv, "Enter", CurTaskState))
{
agv.HasError = false;
......@@ -301,7 +308,7 @@ namespace AGVControl
runInfo = FullShelfStationPlace + "满料架进入小车完成";
msg += runInfo;
curJobStep.Msg = msg;
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfStationPlace);
return new SendFullShelfToLineJob(FullShelfDestInfo);
}
else if (curJobStep.IsTimeOut(60000, out TimeSpan timeOutValue))
......@@ -315,7 +322,6 @@ namespace AGVControl
}
}
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
return this;
}
......
......@@ -65,6 +65,7 @@ namespace AGVControl
// CurTaskState = st;
if (curJobStep.IsStep(SEND_FULL_SHELF_STEP.NONE))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfPlace);
AGVManager.AgvRemoveRfid(RFID);
if (FullShelfPlace.StartsWith(SettingString.C4_Name_Prefix))
{
......@@ -91,6 +92,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.DoorDToC, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfPlace);
if (Common.Check4CTarget(agv, FullShelfPlace))//被占用
{
curJobStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_REACH_TEMP_PLACE);
......@@ -129,7 +131,8 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.DoorAirIn, CurTaskState))
{
curJobStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_LINE);
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfPlace);
curJobStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_LINE);
runInfo = "送往[" + FullShelfPlace + "][RFID=" + RFID + "]";
msg += runInfo;
curJobStep.Msg = msg;
......@@ -142,6 +145,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, SettingString.C4_STANDBY1, CurTaskState) || Common.CheckTaskFinished(agv, SettingString.C4_STANDBY2, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfPlace);
if (!Common.Check4CTarget(agv, FullShelfPlace))//未占用
{
if (Common.CheckIsInAirDoor(FullShelfPlace))
......@@ -172,6 +176,7 @@ namespace AGVControl
CurTaskState = Common.GetTakJobState(CurTaskID);
if (Common.CheckTaskFinished(agv, FullShelfPlace, CurTaskState))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfPlace);
//if (FullShelfPlace.Equals(SettingString.C4FeederIn))
//{
// runInfo = "AGV到达 " + FullShelfPlace + "完成";
......@@ -195,6 +200,7 @@ namespace AGVControl
runInfo = "AGV到达 " + FullShelfPlace + ",并等待大料架[" + RFID + "]库位转移";
msg += runInfo;
curJobStep.Msg = msg;
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfPlace);
}
else
{
......@@ -218,7 +224,7 @@ namespace AGVControl
agv.BoxDestInfo = "";
msg += runInfo;
curJobStep.Msg = msg;
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfPlace);
return new EmptyShelfBackJob(FullShelfPlace, eShelfType.BigShelf);
}
}
......@@ -233,6 +239,7 @@ namespace AGVControl
agv.HasError = false;
if (!agv.CurTaskName.Equals("Leave"))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfPlace);
curJobStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT__SHELF_IN_LINE);
runInfo = "收到产线入料架请求[ReadyEnter]的响应 " + FullShelfPlace + "入料架,小车链条运行";
msg += runInfo;
......@@ -251,11 +258,12 @@ namespace AGVControl
agv.RFID = "";
agv.BoxDestInfo = "";
AGVManager.UpdateStatus(RFID, FullShelfPlace);
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfPlace);
return new EmptyAGVBackJob(FullShelfPlace);
}
else if (curJobStep.IsTimeOut(15000, out TimeSpan timeOutValue))
{
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfPlace);
curJobStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_LINE);
runInfo = "AGV到达 " + FullShelfPlace + ",15秒后重新向产线发送入料架请求[ReadyEnter]";
msg += runInfo;
......@@ -267,6 +275,7 @@ namespace AGVControl
else if (curJobStep.IsStep(SEND_FULL_SHELF_STEP.WAIT__SHELF_IN_LINE))
{
CurTaskState = Common.GetTakJobState(CurTaskID);
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfPlace);
if (Common.CheckEnterOrLeaveFinished(agv, "Leave", CurTaskState))
{
agv.HasError = false;
......@@ -276,7 +285,7 @@ namespace AGVControl
agv.RFID = "";
agv.BoxDestInfo = "";
AGVManager.UpdateStatus(RFID, FullShelfPlace);
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
curJobStep.RecordRunLog(agv, JobName, runInfo, FullShelfPlace);
return new EmptyAGVBackJob(FullShelfPlace);
}
else if (curJobStep.IsTimeOut(60000, out TimeSpan timeOutValue))
......@@ -292,7 +301,6 @@ namespace AGVControl
//{
//}
RecordRunLog(agv, curJobStep.CurStep(), runInfo, agv.Place);
return this;
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!