| | |
| | | internal class WCSCore { |
| | | public static void OperateAgvTaskStatus(AgvTaskState model) { |
| | | if (string.IsNullOrEmpty(model.No)) { |
| | | var alertorDevice = Settings.alertorLightInfos.Where(a => a.deviceNo == int.Parse(model.LockNo)).FirstOrDefault(); |
| | | if (model.State == 1023) |
| | | { |
| | | var result = HH.WCS.Mobox3.YNJT_PT.device.TcpClient.SendHexOnce(alertorDevice.address, 502, alertorDevice.turnLight); |
| | | LogHelper.Info("modbus 返回信号:" + result, "TSSG"); |
| | | } |
| | | |
| | | if (model.State == 1025) |
| | | { |
| | | var result = HH.WCS.Mobox3.YNJT_PT.device.TcpClient.SendHexOnce(alertorDevice.address, 502, alertorDevice.offLight); |
| | | LogHelper.Info("modbus 返回信号:" + result, "TSSG"); |
| | | } |
| | | } |
| | | else { |
| | | var TN_Task = WCSHelper.GetTask(model.No); |
| | |
| | | break; |
| | | case 5: |
| | | WCSHelper.UpdateStatus(TN_Task, "开始卸货"); |
| | | WCSHelper.UpdateStatus(TN_Task, "卸货完成"); |
| | | TaskProcess.OperateStatus(TN_Task, 6); |
| | | if (TN_Task.S_OP_NAME == "移库单移库") |
| | | { |
| | | var startLoc = LocationHelper.GetLoc(TN_Task.S_START_LOC); |
| | | var endLoc = LocationHelper.GetLoc(TN_Task.S_END_LOC); |
| | | |
| | | TN_YiKuDetail detail = new TN_YiKuDetail() |
| | | { |
| | | S_NO = TN_Task.S_OP_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_START_ROW = startLoc.N_ROW, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_END_ROW = endLoc.N_ROW |
| | | }; |
| | | WMSHelper.updateShiftOrderDetail(detail); |
| | | } |
| | | WCSHelper.End(TN_Task); |
| | | break; |
| | | case 6: |
| | | WCSHelper.UpdateStatus(TN_Task, "卸货完成"); |
| | | TaskProcess.OperateStatus(TN_Task, 6); |
| | | break; |
| | | #endregion |
| | | case 2: |
| | | // 修改工单状态 |
| | | /* WCSHelper.UpdateWorkOrderStatus(TN_Task.S_OP_CODE, "已完成");*/ |
| | | WCSHelper.End(TN_Task); |
| | | break; |
| | | case 7: |
| | | //判断是否收到过强制取消,有就不做任何处理 |
| | |
| | | { |
| | | //安全请求等 |
| | | TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData); |
| | | } |
| | | |
| | | if (model.State == 2) |
| | | { |
| | | var mst = WMSHelper.GetWmsTask(TN_Task.S_OP_CODE); |
| | | if (mst.S_END_LOC == TN_Task.S_END_LOC) |
| | | { |
| | | mst.N_B_STATE = 2; |
| | | WMSHelper.UpdateTaskState(mst); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | //终点托盘绑定 |
| | | if (LocationHelper.BindingLoc(wcsTask.S_END_LOC, new List<string> { wcsTask.S_CNTR_CODE })) { |
| | | //修改托盘状态为可用,增加库存量表,后面分拣出可以计算到 |
| | | ContainerHelper.Enable(wcsTask.S_CNTR_CODE, wcsTask.S_END_LOC); |
| | | /* ContainerHelper.Enable(wcsTask.S_CNTR_CODE, wcsTask.S_END_LOC);*/ |
| | | |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 创建最后一个任务 |
| | | /// </summary> |
| | | /// <param name="startLocCode"></param> |
| | | /// <param name="mst"></param> |
| | | /// <returns></returns> |
| | | public static WCSTask createLastTask(string startLocCode, WMSTask mst) |
| | | { |
| | | LogHelper.Info($"作业号:{mst.S_CODE},创建AGV出库任务", "WMS"); |
| | | var existTask = WCSHelper.GetTaskByStart(startLocCode); |
| | | if (existTask == null) |
| | | { |
| | | var startLoc = LocationHelper.GetLoc(startLocCode); |
| | | // 创建一段入库任务 |
| | | WCSTask wcsTask = new WCSTask() |
| | | { |
| | | S_OP_NAME = mst.S_OP_DEF_NAME, |
| | | S_OP_CODE = mst.S_CODE, |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_CNTR_CODE = mst.S_CNTR_CODE, |
| | | S_TYPE = mst.S_TYPE, |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_LOC = mst.S_END_LOC, |
| | | S_END_AREA = mst.S_END_AREA, |
| | | S_SCHEDULE_TYPE = "AGV", |
| | | N_PRIORITY = mst.N_PRIORITY, |
| | | T_START_TIME = DateTime.Now, |
| | | }; |
| | | |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | { |
| | | // 起点、接驳点、终点加锁 |
| | | LocationHelper.LockLoc(wcsTask.S_START_LOC, 2); |
| | | LocationHelper.LockLoc(wcsTask.S_END_LOC, 1); |
| | | |
| | | WMSHelper.UpdateTaskEnd(mst); |
| | | return wcsTask; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | } |
| | | } |