using HH.WCS.DaYang.device;
|
using HH.WCS.DaYang.models.other;
|
using HH.WCS.DaYang.process;
|
using HH.WCS.DaYang.util;
|
using HH.WCS.DaYang.wms;
|
using Opc.UaFx;
|
using Opc.UaFx.Client;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
|
namespace HH.WCS.DaYang.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);
|
|
//读取olma的信息
|
using (var client = new OpcClient("opc.tcp://localhost:4840/")) {
|
//client.Security.UserIdentity = new OpcClientIdentity("userName", "password");
|
client.Connect();
|
var temperature = client.ReadNode("ns=2;s=Temperature");
|
//temperature.Value
|
|
// Your code to interact with the server.
|
|
OpcReadNode[] commands = new OpcReadNode[] {new OpcReadNode("ns=2;s=Olma_Agv/Compoent_Nr"),
|
new OpcReadNode("ns=2;s=Olma_Agv/Quantity"),
|
new OpcReadNode("ns=2;s=Olma_Agv/Carriage_Selected"),
|
new OpcReadNode("ns=2;s=Olma_Agv/Carriage_in_Position"),
|
new OpcReadNode("ns=2;s=Olma_Agv/Request")};
|
|
OpcValue[] job = client.ReadNodes(commands).ToArray();
|
//根据请求创建创建任务
|
var item = job[0].Value.ToString();
|
var qty = (int)job[1].Value;
|
var bit = (int)job[2].Value;
|
var loc = bit == 1 ? "" : "";
|
var req = (int)job[4].Value;
|
if (req == 1) {
|
//叫料load请求,获取需要的物料信息和数量、终点,判断终点是否有任务,没有任务准备创建任务,去原材料库查找起点
|
}
|
if (req == 2) {
|
//unload请求,空托和余料回的请求,空托判断空托的尺寸,终点是空托库区堆叠,余料根据尺寸入原材料库
|
}
|
|
|
|
|
|
|
//写数据
|
//OpcStatus result = client.WriteNode("ns=2;s=Machine/Job/Cancel", true);
|
/*OpcWriteNode[] commands = new OpcWriteNode[] {
|
new OpcWriteNode("ns=2;s=Machine/Job/Number", "0002"),
|
new OpcWriteNode("ns=2;s=Machine/Job/Name", "MAN_F01_78910"),
|
new OpcWriteNode("ns=2;s=Machine/Job/Speed", 1220.5)
|
};
|
|
OpcStatusCollection results = client.WriteNodes(commands);*/
|
}
|
}
|
|
internal static void AutoTask() {
|
//自动将人工卸货区的物料转运到原材料库 lmbda
|
var db = new SqlHelper<object>().GetInstance();
|
var model = db.Queryable<ManualTaskSwitch>().Where(a => a.Area == "人工卸货区").First();
|
if (model != null && model.State == 0) {
|
//可以自动转运,并且此类型的任务数量小于2条,准备创建任务
|
if (db.Queryable<WCSTask>().Count(a => a.S_TYPE == "自动转运" && a.N_B_STATE < 3) < 3) {
|
//起点库区找到一个托盘
|
var start = db.Queryable<Location>().Where(a => a.S_AREA_CODE == "人工卸货区" && a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0).Includes(a => a.LocCntrRel, b => b.Container).First();
|
//根据货位找托盘,找到托盘后判断托盘类型
|
//找终点,原材料库的终点
|
if (start != null) {
|
//S_LOC_RULE
|
var zone = db.Queryable<Zone>().Where(a => a.S_AREA_CODE == "原材料库" && a.S_LOC_RULE == start.LocCntrRel.Container.S_SPEC).First(); ;
|
if (zone != null) {
|
var endLoc = db.Queryable<ZoneLoc>().Includes(a => a.Loc).Where(a => a.S_ZONE_CODE == zone.S_CODE && a.Loc.N_LOCK_STATE == 0 && a.Loc.N_CURRENT_NUM == 0).First();
|
if (endLoc != null) {
|
var end = endLoc.Loc;
|
WCSHelper.CreateTask(DateTime.Now.Ticks.ToString(), start, end, "自动转运", 3, 1, start.LocCntrRel.S_CNTR_CODE);
|
}
|
}
|
}
|
}
|
}
|
|
}
|
}
|
}
|