Commit a11957e5 张东亮

增加自动任务重发

1 个父辈 36baed89
......@@ -94,6 +94,19 @@ namespace DeviceLibrary
AGVManager.agvInfo[i].SetKanban();
if (!CheckOnline(i)) continue;
bool change = false;
if (!AGVManager.agvInfo[i].TaskRunState.IsAllocatingTask && AGVManager.agvInfo[i].IsUse && AGVManager.agvInfo[i].CurJob != null && AGVManager.agvInfo[i].TaskRunState.TaskID.Equals(-1))
{
if (!MiR_API.Get_MissionByDescrp(AGVManager.agvInfo[i]))
{
AGVManager.agvInfo[i].CurJob.ResendTask(AGVManager.agvInfo[i]);
log.Info($"{AGVManager.agvInfo[i].Name}:Task=-1处理,Fleet无任务,重发任务:{AGVManager.agvInfo[i].TaskRunState.Task.Name}");
}
else
{
log.Info($"{AGVManager.agvInfo[i].Name}:Task=-1处理,Fleet有任务,自动赋值FleetTaskID={AGVManager.agvInfo[i].TaskRunState.TaskID}");
}
}
MiR_API.Get_Task_State(AGVManager.agvInfo[i]);
Thread.Sleep(50);
MiR_API.Get_IO_Status(AGVManager.agvInfo[i]);
......
......@@ -22,7 +22,7 @@ namespace DeviceLibrary
//不为空,且与上一个消息不一样才打印
if (!value.Equals(msg))
{
//LogUtil.info(value);
LogUtil.info(value);
}
}
msg = value;
......
......@@ -185,6 +185,7 @@ namespace DeviceLibrary
{
try
{
info.TaskRunState.IsAllocatingTask = true;
info.TaskRunState.ResetInfo();
log.Debug(string.Format("{0} Add_Mission [{1}]", info.Name, info.TaskRunState.Task.Guid));
......@@ -192,14 +193,23 @@ namespace DeviceLibrary
Del_Mission(info);
string url = "http://" + info.IP + "/api/v2.0.0/mission_queue";
string body = "{\"mission_id\":\"" + info.TaskRunState.Task.Guid + "\"}";
//string body = "{\"mission_id\":\"" + info.TaskRunState.Task.Guid + "\"}";
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(2021, 1, 1, 8, 0, 0)); // 当地时区
long timeStamp = (long)(DateTime.Now - startTime).TotalSeconds; // 相差秒数
info.TaskRunState.TaskTimeStamp = timeStamp.ToString();
string body = "{\"mission_id\":\"" + info.TaskRunState.Task.Guid + "\",\"robot_id\":" + info.ID + ",\"description\":\"" + $"{info.TaskRunState.Task.Name}-{info.TaskRunState.TaskTimeStamp}-{info.ID}" + "\"}";
string json = HttpPost(url, info.IP, info.Authorization, body);
if (string.IsNullOrWhiteSpace(json)) return false;
if (string.IsNullOrWhiteSpace(json))
{
info.TaskRunState.IsAllocatingTask = false;
return false;
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null)
{
info.TaskRunState.IsAllocatingTask = false;
return false;
}
log.Debug("URL: " + url + "\n" + "Return: " + json);
......@@ -209,15 +219,20 @@ namespace DeviceLibrary
if (s == info.TaskRunState.Task.Guid && !string.IsNullOrEmpty(id))
{
info.TaskRunState.TaskID = Convert.ToInt32(id);
info.TaskRunState.IsAllocatingTask = false;
log.Debug(string.Format("{0} Add_Mission [{1}]", info.Name, info.TaskRunState.Task.Name));
return true;
}
else
{
info.TaskRunState.IsAllocatingTask = false;
return false;
}
}
catch (Exception ex)
{
log.Error("Add_Mission", ex);
info.TaskRunState.IsAllocatingTask = false;
return false;
}
}
......@@ -232,21 +247,30 @@ namespace DeviceLibrary
{
try
{
info.TaskRunState.IsAllocatingTask = true;
info.TaskRunState.ResetInfo();
//防止上一个任务已执行但返回失败时,删除任务
Del_Mission(info);
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(2021, 1, 1, 8, 0, 0)); // 当地时区
long timeStamp = (long)(DateTime.Now - startTime).TotalSeconds; // 相差秒数
info.TaskRunState.TaskTimeStamp = timeStamp.ToString();
string ip = AppConfigHelper.GetValue(SettingString.FLEET);
string url = "http://" + ip + "/api/v2.0.0/mission_scheduler";
string body = "{\"mission_id\":\"" + info.TaskRunState.Task.Guid + "\",\"robot_id\":" + info.ID + "}";
string body = "{\"mission_id\":\"" + info.TaskRunState.Task.Guid + "\",\"robot_id\":" + info.ID + ",\"description\":\"" + $"{info.TaskRunState.Task.Name}-{info.TaskRunState.TaskTimeStamp}-{info.ID}" + "\"}";
string json = HttpPost(url, info.IP, info.Authorization, body);
if (string.IsNullOrWhiteSpace(json)) return false;
if (string.IsNullOrWhiteSpace(json))
{
info.TaskRunState.IsAllocatingTask = false;
return false;
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null)
{
log.Error($"{info.Name} Add_Mission_Fleet Fail URL: " + url + "\n" + "Return: " + json);
info.TaskRunState.IsAllocatingTask = false;
return false;
}
string s = dic["mission_id"].ToString();
......@@ -255,14 +279,20 @@ namespace DeviceLibrary
{
info.TaskRunState.TaskID = Convert.ToInt32(id);
log.Debug(string.Format("{0} Add_Mission_Fleet [{1}]", info.Name, info.TaskRunState.Task.Name));
info.TaskRunState.IsAllocatingTask = false;
return true;
}
else
{
info.TaskRunState.IsAllocatingTask = false;
return false;
}
}
catch (Exception ex)
{
log.Error("Add_Mission_Fleet", ex);
info.TaskRunState.IsAllocatingTask = false;
return false;
}
}
......@@ -279,7 +309,8 @@ namespace DeviceLibrary
try
{
string url = "http://" + info.IP + "/api/v2.0.0/missions/search?whitelist=guid,name";
string body = "{\"filters\" :[]}";
// string body = "{\"filters\" :[]}";
string body = "{\"filters\" : [{\"fieldname\": \"description\", \"operator\": \"LIKE\", \"value\": \"" + info.TaskRunState.Task.Name + "-" + info.TaskRunState.TaskTimeStamp + "-" + info.ID + "\"}]}";
string json = HttpPost(url, info.IP, info.Authorization, body);
if (string.IsNullOrWhiteSpace(json)) return false;
......@@ -302,6 +333,88 @@ namespace DeviceLibrary
}
}
public static bool Get_MissionByDescrp(Agv_Info info)
{
if (info.UseFleet)
return Get_Fleet_Mission_Info(info);
else
return Get_Mission(info);
}
/// <summary>
/// 获取所有任务列表
/// </summary>
/// <param name="info"></param>
/// <param name="mission">任务(名称,guid)</param>
/// <returns></returns>
public static bool Get_Mission(Agv_Info info)
{
try
{
string url = "http://" + info.IP + "/api/v2.0.0/missions/search?whitelist=guid,name";
// string body = "{\"filters\" :[]}";
string body = "{\"filters\" : [{\"fieldname\": \"description\", \"operator\": \"LIKE\", \"value\": \"" + info.TaskRunState.Task.Name + "-" + info.TaskRunState.TaskTimeStamp + "-" + info.ID + "\"}]}";
string json = HttpPost(url, info.IP, info.Authorization, body);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
object[] obj = (object[])serializer.DeserializeObject(json);
if (obj == null) return false;
Dictionary<string, object> dic;
if (obj.Length > 0)
{
dic = (Dictionary<string, object>)obj[0];
info.TaskRunState.TaskID = long.Parse(dic["id"].ToString());
if (info.TaskRunState.TaskID == -1)
return false;
return true;
}
return false;
}
catch (Exception ex)
{
log.Error("Get_Mission", ex);
return false;
}
}
/// <summary>
/// 获取Fleet任务队列
/// </summary>
/// <param name="info"></param>
/// <param name="mission"></param>
/// <returns></returns>
public static bool Get_Fleet_Mission_Info(Agv_Info info)
{
try
{
string ip = AppConfigHelper.GetValue(SettingString.FLEET);
string url = "http://" + ip + "/api/v2.0.0/mission_scheduler/search";
string body = "{\"filters\" : [{\"fieldname\": \"description\", \"operator\": \"LIKE\", \"value\": \"" + info.TaskRunState.Task.Name + "-" + info.TaskRunState.TaskTimeStamp + "-" + info.ID + "\"}]}";
string json = HttpPost(url, info.IP, info.Authorization, body);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
object[] obj = (object[])serializer.DeserializeObject(json);
if (obj == null) return false;
Dictionary<string, object> dic;
if (obj.Length > 0)
{
dic = (Dictionary<string, object>)obj[0];
info.TaskRunState.TaskID = long.Parse(dic["id"].ToString());
if (info.TaskRunState.TaskID == -1)
return false;
return true;
}
return false;
}
catch (Exception ex)
{
log.Error("Get_Fleet_Mission_Info", ex);
return false;
}
}
/// <summary>
/// 获取当前任务队列guid
/// </summary>
......@@ -661,7 +774,7 @@ namespace DeviceLibrary
string s = response.Content;
s = s.Replace("\n", "");
s = s.Replace(" ", "");
log.Debug(string.Format("HttpPost URL: {0}; Body: {1} Return: {2} [StatusCode={3},ResponseStatus={4},]", url, body, s, response.StatusCode, response.ResponseStatus));
log.Info(string.Format("HttpPost URL: {0}; Body: {1} Return: {2} [StatusCode={3},ResponseStatus={4}]", url, body, s, response.StatusCode, response.ResponseStatus));
return s;
}
......
......@@ -15,9 +15,17 @@ namespace DeviceLibrary
/// <summary>
/// AGV任务ID
/// </summary>
public int TaskID { get; set; } = -1;
public long TaskID { get; set; } = -1;
/// <summary>
/// 任务开始时间戳
/// </summary>
public string TaskTimeStamp { get; set; }
/// <summary>
/// 正在分配任务
/// </summary>
public bool IsAllocatingTask = false;
/// <summary>
/// AGV任务
/// </summary>
public AgvTask Task { get; set; } = new AgvTask();
......
......@@ -101,6 +101,7 @@ namespace DeviceLibrary
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
JobRunStep.ToNextStep(RunStep.WAIT_AGV_REACH_A6);
WarehouseSigManager.TargetWithFix.CurPlace = JobParam.TargetNode.Name;
runInfo = $"去{JobParam.TargetNode.Name}接料";
JobRunStep.Msg = runInfo;
AllocateTask(agv, JobParam.TargetNode.Name);
......@@ -111,7 +112,6 @@ namespace DeviceLibrary
{
if (agv.TaskRunState.CheckTaskFinished(agv.Name))
{
WarehouseSigManager.TargetWithFix.CurPlace = JobParam.TargetNode.Name;
JobRunStep.ToNextStep(RunStep.WAIT_DOUBLE_LINE_RESPONSE);
runInfo = "到达 " + JobParam.TargetNode.Name + ",并发送出库请求";
JobRunStep.Msg = runInfo;
......
......@@ -14,8 +14,11 @@ namespace DeviceLibrary
/// <returns></returns>
public override Job GetNewJob(Agv_Info agv)
{
if (agv.Battery < ChargePileManager.GetChargePiles().BatteryMax && ChargePileManager.HasEmpty(agv,out string chargename))
return new ChargeJob(new bean.JobParam(agv.Place,manager.NodeManager.GetNodeByType(NodeType.AutoCharge)));
//Common.LogUtil.info($"{agv.Battery},{ChargePileManager.GetChargePiles().BatteryMax},{ChargePileManager.HasEmpty(agv, out string chargename)}");
if (agv.Battery < ChargePileManager.GetChargePiles().BatteryMax && ChargePileManager.HasEmpty(agv,out string chargename1))
{
return new ChargeJob(new bean.JobParam(agv.Place, manager.NodeManager.GetNodeByType(NodeType.AutoCharge)));
}
else
return new StandyJob(new bean.JobParam(agv.Place, manager.NodeManager.GetNodeByType(NodeType.Standby)));
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!