using HH.WCS.Mobox3.NFLZ.device;
|
using HH.WCS.Mobox3.NFLZ.process;
|
using HH.WCS.Mobox3.NFLZ.util;
|
using HH.WCS.Mobox3.NFLZ.wms;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
using static System.Runtime.CompilerServices.RuntimeHelpers;
|
|
namespace HH.WCS.Mobox3.NFLZ.core
|
{
|
/// <summary>
|
/// 定时轮询任务
|
/// </summary>
|
internal class Monitor
|
{
|
internal static void CheckThirdOutWork() {
|
//第三方读中间表
|
//var db= new SqlHelper<object>().GetInstance("中间表的sql连接字符串");
|
// db.Queryable<object>
|
|
//读到了出库单,插入到我们的表
|
|
|
}
|
|
internal static void CheckOutWork() {
|
//读自己的中间表,我们自己的表有表有个字段计数,计数小于最大值,继续出库,一次生成一条任务
|
|
}
|
|
|
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做处理,自动创建任务或者更新任务状态(创建一个设备动作或任务动作,如果是任务动作有个线程去读)
|
}
|
|
/// <summary>
|
/// 瓶盖转运
|
/// </summary>
|
internal static void BottleBlankTransportation()
|
{
|
var db = new SqlHelper<object>().GetInstance();
|
var jbwInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖入库接驳位" && a.enable == 1).FirstOrDefault();
|
if (jbwInfo != null)
|
{
|
var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == jbwInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").Includes(a => a.LocCntrRel).First();
|
if (locInfo != null)
|
{
|
LogHelper.Info($"【瓶盖转运】瓶坯接驳位查询到需入库的瓶坯,货位编码:{locInfo.S_CODE}");
|
if (locInfo.LocCntrRel != null)
|
{
|
//创建作业
|
WMSHelper.CreateOpTask(locInfo.S_CODE, "", "入库", "瓶盖转运", locInfo.LocCntrRel.S_CNTR_CODE, "瓶盖");
|
}
|
else
|
{
|
LogHelper.Info($"【瓶盖转运】当前货位未绑定托盘码,货位编码:{locInfo.S_CODE}");
|
}
|
}
|
}
|
else
|
{
|
LogHelper.Info("【瓶盖转运】瓶坯接驳位未配置");
|
}
|
}
|
|
/// <summary>
|
/// 半成品工单监控
|
/// </summary>
|
/// <exception cref="NotImplementedException"></exception>
|
internal static void BCPWorkSurveillance()
|
{
|
//瓶盖翻斗机工单
|
//开启,查询 瓶盖非急产急用 物料是否满,不满则补充物料
|
//关闭, 1、查询 瓶盖空托 是否还有托盘,有则入库 2、查询瓶盖非即产即用 是否有物料, 有则入库
|
//瓶坯翻斗机
|
//开启,查询是否为非即产即用,如果为非即产即用,则判断瓶坯非即产即用库区是否满, 不满则补空物料
|
//关闭,查询 瓶坯非即产即用 瓶坯即产即用A 瓶坯即产即用B 是否有物料,有则入库
|
//瓶坯注塑机
|
//开启,查询 瓶坯空托 是否空托数量大于3托,如果不大于,则补空托
|
//关闭,查询 瓶坯空托 是否有空托,有则入库
|
|
|
|
//判断当前半成品工单是否有执行中的任务
|
//工单类型: 1、农夫林芝-瓶坯机 2、农夫林芝-瓶盖翻斗机 3、农夫林芝-瓶坯翻斗机
|
bool PPZUUSE = false; //瓶坯机是否使用
|
bool PPFDUSE = false; //瓶坯翻斗机是否使用
|
bool PGFDUSE = false; //瓶盖翻斗机是否使用
|
|
var db = new SqlHelper<object>().GetInstance();
|
var workList = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_WorkState == "执行中").ToList();
|
if (workList.Count > 0)
|
{
|
foreach (var a in workList)
|
{
|
if (a.S_PLineNo == "农夫林芝-瓶坯机")
|
{
|
PPZUUSE = true;
|
}
|
else if (a.S_PLineNo == "农夫林芝-瓶盖翻斗机")
|
{
|
PGFDUSE = true;
|
}
|
else
|
{
|
PPFDUSE = true;
|
}
|
}
|
}
|
|
//瓶坯机使用,则从 瓶坯库区 补充空托到 瓶坯空托 ,未使用,则将 瓶坯空托 的空托 移到 瓶坯库区
|
//瓶坯翻斗机使用,则从 瓶坯库区 补充空托到 瓶坯即产即用/瓶坯非即产即用 ,未使用,则将 瓶坯即产即用/瓶坯非即产即用 的空托 移到 瓶坯库区
|
//瓶盖翻斗机使用,则从 瓶盖库区 补充空托到 瓶坯非即产即用 ,未使用,则将 瓶坯非即产即用 的空托 移到 瓶盖库区
|
|
TaskProcess.BCPYiKu(PPZUUSE, "瓶坯注塑机");
|
TaskProcess.BCPYiKu(PPFDUSE, "瓶坯翻斗机");
|
TaskProcess.BCPYiKu(PGFDUSE, "瓶盖翻斗机");
|
|
}
|
|
|
}
|
}
|