| | |
| | | |
| | | } |
| | | |
| | | internal static void CheckOutWork() { |
| | | //读自己的中间表,我们自己的表有表有个字段计数,计数小于最大值,继续出库,一次生成一条任务 |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 待定,此项目plc怎么对接还不确定 |
| | | /// </summary> |
| | | internal static void CheckDevice() { |
| | | //检测输送线状态 |
| | | |
| | | S7Helper.ReadStr("plc1", 100, 1, 8); |
| | | S7Helper.ReadBit("plc1", 101, 1, 2); |
| | | S7Helper.ReadInt("plc1", 102, 1, 6); |
| | | //1 设备plc的ip deviceNo 自动建立连接 |
| | | //2 设备对应的通讯项和线体类型(输送线入口、输送线出口、提升机的入口。。。。)起始读的偏移地址,写的偏移地址 |
| | | //{ "deviceNo":"5","code":"9001","location":"F1CJ-SSX1-01","writeAddr900":0,"writeAddr905":-1,"writeAddr710":0,"readAddr901":2,"readAddr902":0,"lineType":1}, |
| | | //3 通讯项自动读plc,读到的数据根据lineType做处理,自动创建任务或者更新任务状态(创建一个设备动作或任务动作,如果是任务动作有个线程去读) |
| | | } |
| | | |
| | | // 定时器(单位:分钟) |
| | | private static System.Timers.Timer aTimer = new System.Timers.Timer(Settings.WaitTime * 60000); |
| | | private static System.Timers.Timer bTimer = new System.Timers.Timer(Settings.WaitTime * 60000); |
| | | |
| | | private static string flag1 = null; |
| | | private static string flag2 = null; |
| | | |
| | | internal static void CheckEndLoc() { |
| | | |
| | | foreach (var item in ApiHelper.cacheInstockInfos) |
| | | { |
| | | var instockInfo = item.Value; |
| | | var end = WMSHelper.GetInstockEnd(instockInfo.item, instockInfo.endArea); |
| | | LogHelper.Info("终点货位:" + JsonConvert.SerializeObject(end), "TSSG"); |
| | | if (end != null) |
| | | { |
| | | ApiHelper.Instock(instockInfo); |
| | | ApiHelper.cacheInstockInfos.Remove(item); |
| | | LogHelper.Info("缓存信息生成入库任务,并删除缓存信息:" + JsonConvert.SerializeObject(item), "TSSG"); |
| | | return; |
| | | } |
| | | |
| | | if (item.Key == "192.168.1.160" && instockInfo.UDID != flag1) |
| | | { |
| | | flag1 = instockInfo.UDID; |
| | | |
| | | // 挂钩Elapsed事件以提供定时器信号 |
| | | aTimer.Elapsed -= OnTimedEvent1; |
| | | aTimer.Elapsed += OnTimedEvent1; |
| | | |
| | | // 设置自动重置为true(意味着定时器会重复触发) |
| | | aTimer.AutoReset = false; |
| | | |
| | | aTimer.Stop(); // 确保定时器停止 |
| | | aTimer.Enabled = true; // 启动定时器 |
| | | } |
| | | |
| | | if (item.Key == "192.168.1.161" && instockInfo.UDID != flag2) |
| | | { |
| | | flag2 = instockInfo.UDID; |
| | | |
| | | // 挂钩Elapsed事件以提供定时器信号 |
| | | aTimer.Elapsed -= OnTimedEvent2; |
| | | aTimer.Elapsed += OnTimedEvent2; |
| | | |
| | | // 设置自动重置为true(意味着定时器会重复触发) |
| | | aTimer.AutoReset = true; |
| | | |
| | | aTimer.Stop(); // 确保定时器停止 |
| | | aTimer.Enabled = true; // 启动定时器 |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | private static void OnTimedEvent1(Object source, ElapsedEventArgs e) |
| | | { |
| | | foreach (var item in ApiHelper.cacheInstockInfos) |
| | | { |
| | | var instockInfo = item.Value; |
| | | if (instockInfo.UDID == flag1) { |
| | | if (Settings.BufferArea != null && Settings.BufferArea != "") { |
| | | item.Value.endArea = Settings.BufferArea; |
| | | LogHelper.Info("ip:" + item.Key + "信号等待时间超时,变更终点库区为缓存区", "TSSG"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | private static void OnTimedEvent2(Object source, ElapsedEventArgs e) |
| | | { |
| | | foreach (var item in ApiHelper.cacheInstockInfos) |
| | | { |
| | | var instockInfo = item.Value; |
| | | if (instockInfo.UDID == flag2) |
| | | { |
| | | if (Settings.BufferArea != null && Settings.BufferArea != "") |
| | | { |
| | | item.Value.endArea = Settings.BufferArea; |
| | | LogHelper.Info("ip:" + item.Key + "信号等待时间超时,变更终点库区为缓存区", "TSSG"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // 自动移库 |
| | | internal static void AutoShiftStock() |
| | | { |
| | | var startLoc = WMSHelper.GetShiftStockStart(Settings.BufferArea); |
| | | if (startLoc != null) { |
| | | var end = WMSHelper.GetInstockEnd(startLoc.LocCntrRel.CntrItemRel.S_ITEM_CODE); |
| | | if (end != null) { |
| | | var wcsTask = new WCSTask |
| | | { |
| | | S_OP_NAME = "入库", |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_TYPE = "下线入库", |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_END_LOC = end.S_CODE, |
| | | S_SCHEDULE_TYPE = "NDC", |
| | | N_CNTR_COUNT = 1, |
| | | S_CNTR_CODE = startLoc.LocCntrRel.S_CNTR_CODE, |
| | | N_START_LAYER = startLoc.N_CURRENT_NUM, |
| | | N_END_LAYER = end.N_CURRENT_NUM + 1 |
| | | }; |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | { |
| | | LocationHelper.LockLoc(startLoc.S_CODE, 2); |
| | | LocationHelper.LockLoc(end.S_CODE, 1); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 移库单移库 |
| | | /// </summary> |
| | | public static void ShiftStockOrder() { |
| | | List<TN_YiKuDetail> tN_YiKuDetails = WMSHelper.getShiftOrderDetail(); |
| | | foreach (var item in tN_YiKuDetails) |
| | | { |
| | | if (item.N_QTY > item.N_COMPLETE_NUM) { |
| | | Location startLoc = WMSHelper.GetShiftStockStart(item.S_START_AREA, item.S_START_ROW); |
| | | Location endLoc = WMSHelper.GetShiftStockEnd(item.S_END_AREA, item.S_END_ROW); |
| | | if (startLoc != null && endLoc != null && !WMSHelper.isRowLock(endLoc)) |
| | | { |
| | | var wcsTask = new WCSTask |
| | | { |
| | | S_OP_CODE = item.S_NO, |
| | | S_OP_NAME = "移库单移库", |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_TYPE = "移库", |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_SCHEDULE_TYPE = "NDC", |
| | | N_CNTR_COUNT = 1, |
| | | S_CNTR_CODE = startLoc.LocCntrRel.S_CNTR_CODE, |
| | | N_START_LAYER = startLoc.N_CURRENT_NUM, |
| | | N_END_LAYER = endLoc.N_CURRENT_NUM + 1 |
| | | }; |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | { |
| | | LocationHelper.LockLoc(startLoc.S_CODE, 2); |
| | | LocationHelper.LockLoc(endLoc.S_CODE, 1); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | } |