using HH.WCS.Mobox3.YNJT_PT.api;
|
using HH.WCS.Mobox3.YNJT_PT.device;
|
using HH.WCS.Mobox3.YNJT_PT.models;
|
using HH.WCS.Mobox3.YNJT_PT.process;
|
using HH.WCS.Mobox3.YNJT_PT.util;
|
using HH.WCS.Mobox3.YNJT_PT.wms;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
using System.Timers;
|
|
namespace HH.WCS.Mobox3.YNJT_PT.core
|
{
|
/// <summary>
|
/// 定时轮询任务
|
/// </summary>
|
internal class Monitor
|
{
|
internal static void CheckThirdOutWork() {
|
//第三方读中间表
|
//var db= new SqlHelper<object>().GetInstance("中间表的sql连接字符串");
|
// db.Queryable<object>
|
|
//读到了出库单,插入到我们的表
|
|
|
}
|
|
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);
|
}
|
}
|
}
|
}
|
}
|
|
}
|
}
|