| | |
| | | using HH.WCS.Mobox3.AnGang.dispatch; |
| | | using HH.WCS.Mobox3.AnGang.models; |
| | | using HH.WCS.Mobox3.AnGang.process; |
| | | using HH.WCS.Mobox3.AnGang.config; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using System; |
| | |
| | | public static ReturnResult OperateAgvTaskStatus(AgvTaskState model) { |
| | | var result = new ReturnResult(); |
| | | try { |
| | | if (model.state > 0 && model.state < 1000) { |
| | | if (model.state > 0) { |
| | | // AGV 执行任务的逻辑处理 |
| | | if (!AgvTaskProcessOk(model)) { |
| | | // 执行不OK,说明没有找到任务 |
| | |
| | | if (TN_Task.S_TYPE == TaskName.产品入库 || TN_Task.S_TYPE == TaskName.产品部分回库) { |
| | | var captureTask = Task.Run(() => { |
| | | CapturePic(TN_Task); |
| | | LogHelper.Info("拍照Task结束"); |
| | | LogHelper.Info($"{TN_Task}:拍照Task结束"); |
| | | }); |
| | | } |
| | | |
| | |
| | | else { |
| | | var weight = float.Parse(data[0].parameter_varchar200_up); |
| | | cgDetail.F_QTY = weight; |
| | | tn_task.F_WEIGHT = weight; |
| | | |
| | | if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => it.F_QTY).ExecuteCommand() <= 0) { |
| | | LogHelper.Info("修改物料表重量失败"); |
| | | return; |
| | | using (var tran = db.Ado.UseTran()) { |
| | | if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => it.F_QTY).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | LogHelper.Info("修改物料表重量失败"); |
| | | return; |
| | | } |
| | | |
| | | if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => it.F_WEIGHT).ExecuteCommand() <= 0) { |
| | | tran.RollbackTran(); |
| | | LogHelper.Info("修改任务表重量失败"); |
| | | return; |
| | | } |
| | | |
| | | tran.CommitTran(); |
| | | } |
| | | |
| | | LogHelper.Info($"修改任务号{tn_task.S_CODE}物料重量为{weight}", "HosttoagvTask"); |
| | | if (weight > 2000) { |
| | | LogHelper.Info($"物料重量超过2t", "HosttoagvTask"); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | // 只当之前指定终点货架后,才尝试计算终点货位 |
| | | if (cgDetail.F_QTY > 1500) { |
| | | // 重量超过1.5t,需要选择1-3层货架 |
| | | if (cgDetail.F_QTY > 2000) { |
| | | // 重量超过 2t |
| | | endLoc = null; |
| | | LogHelper.Info("重量超过2t,不允许入库"); |
| | | return; |
| | | } |
| | | else if (cgDetail.F_QTY > 1500) { |
| | | // 重量超过1.5t,需要选择1-2层货架 |
| | | endLoc = db.Queryable<TN_Location>() |
| | | .First(a => a.N_ROW == row && a.N_LAYER <= 3 |
| | | .First(a => a.N_ROW == row && a.N_LAYER <= 2 |
| | | && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "无" && a.C_ENABLE == "Y"); |
| | | } |
| | | else if (cgDetail.F_QTY > 0) { |
| | | // 重量未超过1.5t,在指定货架随便选择1个 |
| | | endLoc = db.Queryable<TN_Location>().First(a => a.N_ROW == row |
| | | && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "无" && a.C_ENABLE == "Y"); |
| | | endLoc = db.Queryable<TN_Location>().Where(a => a.N_ROW == row |
| | | && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "无" && a.C_ENABLE == "Y") |
| | | .OrderBy(a => a.N_LAYER > 2 ? 0 : 1).First(); // 优先选层级高的 |
| | | } |
| | | else { |
| | | // 没有接收到重量,或重量出错 |
| | |
| | | return; |
| | | } |
| | | |
| | | LogHelper.Info($"修改任务号{tn_task.S_CODE}物料重量为{weight}", "HosttoagvTask"); |
| | | |
| | | } |
| | | catch (Exception ex) { |
| | | LogHelper.Info($"发生了错误:{ex.Message}"); |
| | |
| | | } |
| | | } |
| | | |
| | | public static ReturnResult SafetyInteraction(SafetyInteractionInfo model) { |
| | | var gzResult = new ReturnResult(); |
| | | //var db = new SqlHelper<object>().GetInstance(); |
| | | //ModbusHelper.Relink(); |
| | | |
| | | //var productionLineInfo = Settings.ProductionLines[0]; |
| | | //var prodLineDevice = new ProductionLineDevice(productionLineInfo.PlcIp, productionLineInfo.PlcPort); |
| | | //if (!prodLineDevice.LoadDeviceStateOk()) { |
| | | // LogHelper.Info("加载设备信息失败"); |
| | | //} |
| | | |
| | | //var tn_task = db.Queryable<TN_Task>().First(a => a.S_CODE == model.task_no); |
| | | //if (tn_task == null) { |
| | | // LogHelper.Info($"任务号 '{model.task_no}' 不存在"); |
| | | //} |
| | | |
| | | //if (prodLineDevice.SystemState == 1 |
| | | // && prodLineDevice.FullOffline == 1 && tn_task.S_TYPE == "成品胶下线-托盘(WMS)") { |
| | | // if (!prodLineDevice.SetAgvPicking(1)) { |
| | | // LogHelper.Info("写入输送线 PLC 失败"); |
| | | // } |
| | | //} |
| | | |
| | | //if (prodLineDevice.SystemState == 1 |
| | | // && prodLineDevice.AllowAgvPlacePallet == 1 && tn_task.S_TYPE == "空托盘上线(WMS)") { |
| | | // if (!prodLineDevice.SetAgvPlacingPallet(1)) { |
| | | // LogHelper.Info("写入输送线 PLC 失败"); |
| | | // } |
| | | //} |
| | | |
| | | //LogHelper.Info(JsonConvert.SerializeObject(prodLineDevice, Formatting.Indented)); |
| | | // DOC 4. 站台申请安全交互 RCS->WMS |
| | | public static gzResult SafetyInteraction(SafetyInteractionInfo model) { |
| | | var gzResult = new gzResult() { |
| | | code = 0, |
| | | msg = "success" |
| | | }; |
| | | // 目前该项目没有站台安全交互的功能 |
| | | return gzResult; |
| | | } |
| | | } |