using System;
|
using System.Threading.Tasks;
|
|
using HH.WCS.Mobox3.DSZSH.Consts;
|
using HH.WCS.Mobox3.DSZSH.Devices;
|
using HH.WCS.Mobox3.DSZSH.Helpers;
|
using HH.WCS.Mobox3.DSZSH.Models;
|
using HH.WCS.Mobox3.DSZSH.ServiceCore;
|
|
using Newtonsoft.Json;
|
|
using static HH.WCS.Mobox3.DSZSH.Dtos.Request.AgvRequest;
|
using static HH.WCS.Mobox3.DSZSH.Dtos.Response.AgvResponse;
|
|
namespace HH.WCS.Mobox3.DSZSH.Services {
|
public class AgvService {
|
public static ReturnResult OperateAgvTaskStatus(AgvTaskState model) {
|
var result = new ReturnResult();
|
try {
|
switch (model.state) {
|
case 1023:
|
case 1025:
|
|
break;
|
case 1012:
|
break;
|
case 1004:
|
break;
|
case 1103:
|
break;
|
default:
|
// AGV 执行任务的逻辑处理
|
if (!AgvTaskProcessOk(model)) {
|
// 执行不OK,说明没有找到任务
|
result.ResultCode = 1;
|
result.ResultMsg = $"根据Model.No未找到对应的任务,{model.task_no}";
|
LogHelper.Info(result.ResultMsg, "API");
|
return result;
|
}
|
break;
|
}
|
|
result.ResultCode = 0;
|
result.ResultMsg = "success";
|
LogHelper.Info(result.ResultMsg, "API");
|
return result;
|
}
|
catch (Exception ex) {
|
result.ResultCode = -1;
|
result.ResultMsg = $"发生了异常:+{ex.Message}";
|
LogHelper.Info(result.ResultMsg, "Error");
|
return result;
|
}
|
|
}
|
|
/// <summary>
|
/// 执行 AGV 任务,查询不到任务返回 <see langword="false"/>
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
private static bool AgvTaskProcessOk(AgvTaskState model) {
|
var TN_Task = TaskHelper.GetTask(model.task_no); // 根据当前model编号查询任务
|
if (TN_Task == null) { return false; }
|
|
if (model.state > 7) {
|
//安全请求等
|
TaskHelper.OperateReq(model.task_no, model.state, model.forklift_no, model.ext_data);
|
return true;
|
}
|
|
// AGV 任务 134562(7) 状态处理
|
switch (model.state) {
|
case AgvStateCode.执行:
|
TaskHelper.Begin(TN_Task, model.forklift_no); // 已推送的任务的状态改成执行
|
break;
|
case AgvStateCode.开始取货:
|
TaskHelper.UpdateStatus(TN_Task, "开始取货"); // 任务状态改成开始取货
|
break;
|
case AgvStateCode.取货完成:
|
TaskHelper.UpdateStatus(TN_Task, "取货完成"); // 任务状态改成取货完成
|
TaskHelper.OperateStatus(TN_Task, 4); // 起点容器货位解绑,解锁起点
|
|
if (TN_Task.S_TYPE == TaskName.成品胶出库) {
|
var nextOutboundTask = Task.Run(() => {
|
OutboundCore.UpdateTaskState(SpotStateCode.任务执行完成);
|
});
|
}
|
|
break;
|
case AgvStateCode.开始卸货:
|
TaskHelper.UpdateStatus(TN_Task, "开始卸货"); // 任务状态改成开始卸货
|
break;
|
case AgvStateCode.卸货完成:
|
TaskHelper.UpdateStatus(TN_Task, "卸货完成"); // 任务状态改成卸货完成
|
TaskHelper.OperateStatus(TN_Task, 6); // 终点容器货位绑定,解锁终点
|
break;
|
case AgvStateCode.完成:
|
TaskHelper.End(TN_Task); // 任务状态改成结束
|
|
if (TN_Task.S_TYPE == TaskName.抽检_出库) {
|
var checkCompleteTask = Task.Run(() => {
|
CheckCore.UpdateTaskState(SpotStateCode.任务执行完成);
|
});
|
}
|
|
break;
|
case AgvStateCode.异常:
|
TaskHelper.OperateStatus(TN_Task, 7); // 异常处理
|
TaskHelper.Fail(TN_Task); // 任务状态改成错误
|
break;
|
}
|
|
// 将AGV执行状态,加入TN_Task_Action表中
|
TaskHelper.AddActionRecord(model.task_no, model.state, model.forklift_no, model.ext_data);
|
//调用第三方接口(如果有)TaskProcess.ReportStatus,添加任务动作关系表
|
|
return true;
|
}
|
|
|
|
public static ReturnResult SafetyInteraction(SafetyInteractionInfo model) {
|
var gzResult = new ReturnResult();
|
var db = DbHelper.GetDbClient();
|
ModbusHelper.Relink();
|
|
try {
|
|
|
var prodLineInfo = AppStart.Settings.Config.ProductionLines[0];
|
var prodLineDevice = new ProductionLineDevice(prodLineInfo.PlcIp, prodLineInfo.PlcPort);
|
if (!prodLineDevice.LoadDeviceStateOk()) {
|
LogHelper.Info("加载设备信息失败");
|
}
|
|
var tn_task = db.Queryable<TN_Task>().First(a => a.S_CODE == model.TaskNo);
|
if (tn_task == null) {
|
LogHelper.Info($"任务号 '{model.TaskNo}' 不存在");
|
}
|
|
// 待修改:补充不同分支AGV判断
|
if (prodLineDevice.SystemState == 1) {
|
if (prodLineDevice.FullOffline == 1 && tn_task.S_TYPE == TaskName.托盘_满托下线入库) {
|
prodLineDevice.AgvPicking = 1;
|
}
|
if (prodLineDevice.AllowAgvPlacePallet == 1 && tn_task.S_TYPE == TaskName.托盘_空托上线) {
|
prodLineDevice.AgvPlacingPallet = 1;
|
}
|
}
|
|
LogHelper.Info(JsonConvert.SerializeObject(prodLineDevice, Formatting.Indented));
|
return gzResult;
|
}
|
catch (Exception ex) {
|
LogHelper.Info($"发生了异常:{ex.Message}");
|
return gzResult;
|
}
|
}
|
}
|
}
|