| | |
| | | using HH.WCS.JiaTong.wms; |
| | | using Newtonsoft.Json; |
| | | using NLog.Fluent; |
| | | using NModbus; |
| | | using S7.Net; |
| | | using SqlSugar; |
| | | using System; |
| | |
| | | |
| | | public static object _lockCreateItem = new object(); |
| | | public static object _lockCreateTask = new object(); |
| | | |
| | | |
| | | /// <summary> |
| | | /// 立库任务下发=》创建任务 |
| | | /// </summary> |
| | |
| | | return result; |
| | | } |
| | | |
| | | |
| | | #region 创建任务 |
| | | if (endloc != null && startloc != null) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | LogHelper.Info("创建任务成功"); |
| | | } |
| | | else |
| | |
| | | if (startloc != null) |
| | | { |
| | | Start = model.InitialLocation; |
| | | var CntrRel = LocationHelper.GetLocCntrRel(startloc.S_CODE).FirstOrDefault(); |
| | | if (CntrRel != null) |
| | | { |
| | | CntrCode = CntrRel.S_CNTR_CODE; |
| | | } |
| | | else |
| | | { |
| | | result.code = "1"; |
| | | result.msg = $"创建任务失败,根据起点{model.InitialLocation}未找到对应货位绑定托盘托盘"; |
| | | AddErrorInfo("查找托盘失败", result.msg, Source); |
| | | return result; |
| | | } |
| | | |
| | | |
| | | } |
| | | endloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == model.TargetLocation).First(); |
| | | if (endloc != null) |
| | |
| | | var db = new SqlHelper<HangChaAGV>().GetInstance(); |
| | | DeviceInfoModel device = new DeviceInfoModel(); |
| | | |
| | | // List<DeviceInfos> deviceInfos = new List<DeviceInfos>();//叠盘机报错信息 |
| | | // List<AgvInfos> agvInfos = new List<AgvInfos>();//agv报错信息 |
| | | // List<DeviceInfos> deviceInfos = new List<DeviceInfos>();//叠盘机报错信息 |
| | | // List<AgvInfos> agvInfos = new List<AgvInfos>();//agv报错信息 |
| | | |
| | | //获取内存中叠盘机的报错信息 |
| | | //foreach (var dpjInfo in DeviceProcess.DpjInfoDirectory) |
| | |
| | | //} |
| | | // device.DeviceInfos = deviceInfos; |
| | | //获取车辆报警信息 |
| | | var agvDeviceInfo = db.Queryable<HangChaAGV>().ToList(); |
| | | if (agvDeviceInfo.Count > 0) |
| | | var agvDeviceInfos = db.Queryable<HangChaAGV>().ToList(); |
| | | if (agvDeviceInfos.Count > 0) |
| | | { |
| | | device.AgvQty = agvDeviceInfo.Count; |
| | | device.AgvErrorQty = agvDeviceInfo.FindAll(a => a.agvErrCode != "0" || int.Parse(a.errCode2) > 1 || int.Parse(a.faildCode) > 1).Count; |
| | | device.AgvChargeQty = agvDeviceInfo.FindAll(a => a.errCode2 == "1").Count; |
| | | device.AgvRunQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "0" && a.errCode2 == "0" && a.faildCode == "1").Count; |
| | | int chargeQty = 0; |
| | | int runQty = 0; |
| | | int Errorqty = 0; |
| | | foreach (var item in agvDeviceInfos) |
| | | { |
| | | |
| | | string[] battery = item.agvBattery.Split(',').ToArray(); |
| | | LogHelper.Info($"车辆信息上报 车号:{item.agvNo},battery:{JsonConvert.SerializeObject(battery)},错误码:{item.agvErrCode}、{item.errCode2}、{item.faildCode}"); |
| | | if (battery.Count() > 3) |
| | | { |
| | | if (battery[1] == "1") |
| | | { runQty++; } |
| | | if (battery[2] == "1") |
| | | { chargeQty++; } |
| | | if (!string.IsNullOrEmpty(item.agvErrCode) && int.Parse(item.agvErrCode) > 1) |
| | | { |
| | | Errorqty++; |
| | | break; |
| | | } |
| | | if (!string.IsNullOrEmpty(item.errCode2) && int.Parse(item.errCode2) > 1) |
| | | { |
| | | Errorqty++; |
| | | break; |
| | | } |
| | | if (!string.IsNullOrEmpty(item.faildCode) && int.Parse(item.faildCode) > 1) |
| | | { |
| | | Errorqty++; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | } |
| | | device.AgvQty = agvDeviceInfos.Count; |
| | | device.AgvErrorQty = Errorqty; |
| | | device.AgvChargeQty = chargeQty; |
| | | device.AgvRunQty = runQty; |
| | | //foreach (var agv in agvDeviceInfo) |
| | | //{ |
| | | // string agvErrorInfo = GetAgvAlarmSendCodeTwo(agv.agvNo, agv.agvErrCode, agv.errCode2, agv.faildCode); |
| | | // deviceInfos.Add(new DeviceInfos() { AgvNo = agv.agvNo, AgvInfo = agvErrorInfo }); |
| | | //} |
| | | } |
| | | // device.DeviceInfos = deviceInfos; |
| | | // device.DeviceInfos = deviceInfos; |
| | | |
| | | return device; |
| | | } |
| | |
| | | /// </summary> |
| | | /// <param name="forkliftNo"></param> |
| | | /// <param name="battery"></param> |
| | | /// <param name="agvCurrTaskInfo"></param> |
| | | /// <param name="errCode"></param> |
| | | /// <param name="errCode2"></param> |
| | | /// <param name="faildCode"></param> |
| | | internal static void AGVDeviceReceiveSet(string forkliftNo, string battery, string errCode, string errCode2, string faildCode) |
| | | { |
| | | lock (AGVDeviceReceiveLock) |
| | | |
| | | try |
| | | { |
| | | var db = new SqlHelper<HangChaAGV>().GetInstance(); |
| | | var agvDeviceInfo = db.Queryable<HangChaAGV>().Where(a => a.agvNo.Trim() == forkliftNo).First(); |
| | | var agvDeviceInfo = db.Queryable<HangChaAGV>().Where(a => a.agvNo.Trim() == forkliftNo.Trim()).First(); |
| | | if (agvDeviceInfo == null) |
| | | { |
| | | var agvInfo = new HangChaAGV() |
| | |
| | | } |
| | | else |
| | | { |
| | | //判断中间表信息有无变化,无变化不更新中间表 |
| | | if (agvDeviceInfo.agvErrCode == errCode && agvDeviceInfo.errCode2 == errCode2 && agvDeviceInfo.faildCode == faildCode) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | agvDeviceInfo.agvBattery = battery; |
| | | // agvDeviceInfo.agvCurrTaskInfo = agvCurrTaskInfo; |
| | | agvDeviceInfo.agvErrCode = errCode; |
| | |
| | | //if (int.Parse(agvDeviceInfo.agvBattery) >= 1000) |
| | | // agvDeviceInfo.agvRunStatus = ""; |
| | | db.Updateable(agvDeviceInfo).UpdateColumns(a => new |
| | | { a.agvBattery, a.agvCurrTaskInfo, a.agvErrCode, a.errCode2, a.faildCode, a.agvRunStatus }).ExecuteCommand(); |
| | | { a.agvBattery, a.agvErrCode, a.errCode2, a.faildCode }).ExecuteCommand(); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | LogHelper.Info($"AGVDeviceReceiveSet:Error:{ex}"); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | #region 数据模型 |