using Hanhe.iWCS.Business;
|
using Hanhe.iWCS.Common;
|
using Hanhe.iWCS.Event;
|
using Hanhe.iWCS.Interface;
|
using Hanhe.iWCS.MData;
|
using Hanhe.iWCS.Model;
|
using MongoDB.Bson;
|
using MongoDB.Driver;
|
using MongoDB.Driver.Builders;
|
using System;
|
using System.Linq;
|
using System.Threading;
|
using static Hanhe.iWCS.JingmenGEMNorthProtocol.PLCControl;
|
using static Hanhe.iWCS.JingmenGEMNorthProtocol.ProcessHelper;
|
|
namespace Hanhe.iWCS.JingmenGEMNorthProtocol
|
{
|
/// <summary>
|
/// 事件监听处理和触发事件回调
|
/// </summary>
|
public class EnentListen : IEnentListen
|
{
|
private EquipmentCommandEQBLL CommandEQBLL = new EquipmentCommandEQBLL();
|
private ICallTaskProcessing iCallTask = new ICallTaskProcessing();
|
static object locker = new object();
|
static object lock1027 = new object();
|
static object lock10001 = new object();
|
static object lock10017 = new object();
|
static object lock10018 = new object();
|
static EnentListen() {
|
}
|
/// <summary>
|
/// 事件订阅
|
/// </summary>
|
/// <param name="currActionModel">当前动作模型</param>
|
/// <returns></returns>
|
public bool EnentSubscribe(TN_I_TASK_DTL_ACTION currActionModel) {
|
try {
|
EventDelegate eventDelegate = new EventDelegate();
|
eventDelegate.CurrActionModel = currActionModel;
|
//eventDelegate.iSleep = 3000;
|
eventDelegate.StartListening();
|
|
return true;
|
}
|
catch (Exception ex) {
|
throw new Exception(ex.Message);
|
}
|
}
|
|
private SortByDocument sortBy = new SortByDocument { { "createTime", 1 } };
|
/// <summary>
|
/// 事件监听处理
|
/// </summary>
|
/// <param name="currActionModel">当前动作模型</param>
|
/// <returns>true:条件成立 false:条件不成立</returns>
|
public bool MonitorProcess(TN_I_TASK_DTL_ACTION currActionModel) {
|
bool bResult = false;
|
string msg = string.Empty;
|
#region 处理任务状态
|
if (currActionModel.CN_N_ACTION_CODE == 1027)
|
{
|
lock (lock1027)
|
{
|
var request = MongoDBSingleton.Instance.FindAll<Mongo_AGV_TASK_STATE>();
|
|
if (request.Count > 0)
|
{
|
request.ForEach(a =>
|
{
|
try
|
{
|
CMMLog.Info($"进入workflowToDeviceDriver,CN_S_TASK_NO:{a.TaskNo},CN_N_ACTION_CODE:{a.State},CN_S_DEVICE_CODE:{a.ForkliftNo},Ext2:{a.LockNo},Ext3:{a.ExtData}");
|
new ProtocolAnalysis().workflowToDeviceDriver(new TN_I_TASK_DTL_ACTION { CN_S_TASK_NO = a.TaskNo, CN_N_ACTION_CODE = a.State, CN_S_DEVICE_CODE = a.ForkliftNo, Ext2 = a.LockNo, Ext3 = a.ExtData });
|
MongoDBSingleton.Instance.Remove<Mongo_AGV_TASK_STATE>(Query.EQ("_id", a._id), RemoveFlags.Single);
|
}
|
catch (Exception ex)
|
{
|
CMMLog.Error(ex.Message, ex);
|
}
|
});
|
}
|
Thread.Sleep(1000);
|
}
|
|
}
|
#endregion
|
#region 3楼设备任务
|
|
#region 写入员工 和 物料 信息 (测试用)
|
if (currActionModel.CN_N_ACTION_CODE == 10017)
|
{
|
//lock (lock1027)
|
//{
|
// CMMLog.Info("WriteEmpAndItemInfoTwo 写入员工和物料信息开始");
|
// ERPService.WriteEmpAndItemInfoTwo();
|
// CMMLog.Info("WriteEmpAndItemInfoTwo 写入员工和物料信息结束");
|
//
|
// Thread.Sleep(5000);
|
//}
|
}
|
|
#endregion
|
|
#region 10001-读取包装线信号-3楼包装取料--已完成(已完成) 一期
|
if (currActionModel.CN_N_ACTION_CODE == 10001)
|
{
|
var list = Settings.GetPlcInfo().Where(a => a.enable == 1 && a.deviceType == "1").ToList();
|
if (list.Count > 0)
|
{
|
list.ForEach(a =>
|
{
|
// 包装机启动时读取【翻页通道】,根据页号获取五条数据,然后写入包装机
|
//ERPService.WriteItemInfo(a);
|
//ERPService.WriteEmpInfo(a);
|
|
PLCControl.CheckPackingMachine(a);
|
});
|
}
|
|
Thread.Sleep(1500);
|
}
|
#endregion
|
|
#region 10002-读取包装线信号-3楼包装取料--已完成(已完成) 二期
|
if (currActionModel.CN_N_ACTION_CODE == 10002)
|
{
|
var list = Settings.GetPlcInfo().Where(a => a.enable == 1 && a.deviceType == "22").ToList();
|
if (list.Count > 0)
|
{
|
list.ForEach(a =>
|
{
|
// 包装机启动时读取【翻页通道】,根据页号获取五条数据,然后写入包装机
|
//ERPService.WriteItemInfo(a);
|
//ERPService.WriteEmpInfo(a);
|
|
PLCControl.CheckPackingMachineTwo(a);
|
});
|
}
|
|
Thread.Sleep(1500);
|
}
|
#endregion
|
|
#region 10003-读取包装线信号-3楼包装取料--(已完成) 一号厂房
|
if (currActionModel.CN_N_ACTION_CODE == 10003)
|
{
|
var list = Settings.GetPlcInfo().Where(a => a.enable == 1 && a.deviceType == "24").ToList();
|
if (list.Count > 0)
|
{
|
list.ForEach(a =>
|
{
|
// 包装机启动时读取【翻页通道】,根据页号获取五条数据,然后写入包装机
|
//ERPService.WriteItemInfo(a);
|
//ERPService.WriteEmpInfo(a);
|
|
PLCControl.CheckPackingMachineThree(a);
|
});
|
}
|
|
Thread.Sleep(1500);
|
}
|
#endregion
|
|
#region 10004-读取叠包机信号(三楼双层缓存架入叠盘机流程)-3楼缓存架入叠托--已完成(待测试)
|
if (currActionModel.CN_N_ACTION_CODE == 10004)
|
{
|
var list = Settings.GetPlcInfo().Where(a => a.enable == 1 && (a.deviceType == "3" || a.deviceType == "26")).ToList();
|
if (list.Count > 0)
|
{
|
list.ForEach(a =>
|
{
|
PLCControl.CacheStackingMouth(a);
|
});
|
}
|
Thread.Sleep(1500);
|
}
|
#endregion
|
|
#region 10005-读包装机信号(包装机补空托流程)-3楼包装补空--已完成(待测试)
|
if (currActionModel.CN_N_ACTION_CODE == 10005)
|
{
|
var list = Settings.GetPlcInfo().Where(a => a.enable == 1 && (a.deviceType == "1" || a.deviceType == "22" || a.deviceType == "24")).ToList();
|
if (list.Count > 0)
|
{
|
list.ForEach(a =>
|
{
|
CMMLog.Info($"包装机补空,ip:{a.ip}");
|
PLCControl.PickUpBlank(a);
|
Thread.Sleep(1000);
|
});
|
}
|
Thread.Sleep(3000);
|
}
|
#endregion
|
|
#region 10006-打包线空托补料请求(3楼拆盘机补空托 一号厂房拆盘补空托)-3楼拆盘补空--已完成(待测试)
|
if (currActionModel.CN_N_ACTION_CODE == 10006)
|
{
|
var plc = Settings.GetPlcInfo().Where(a => a.enable == 1 && (a.deviceType == "6" || a.deviceType == "27")).FirstOrDefault();
|
if (plc != null)
|
{
|
if (PickUpEndFree(plc.location))
|
{
|
PLCControl.CheckPackingLineEmpty(plc);
|
}
|
}
|
//Thread.Sleep(500);
|
}
|
#endregion
|
|
#region 10007-叠盘机满托下线(3楼叠盘下线)-3楼叠盘下线--已完成(待测试)
|
if (currActionModel.CN_N_ACTION_CODE == 10007)
|
{
|
var plc = Settings.GetPlcInfo().Where(a => a.enable == 1 && (a.deviceType == "15" || a.deviceType == "28")).FirstOrDefault();
|
if (plc != null)
|
{
|
if (PickUpStartFree(plc.location))
|
{
|
PLCControl.StackingLineEmpty(plc);
|
}
|
}
|
//Thread.Sleep(500);
|
}
|
#endregion
|
|
#region 10008-打包线下线-3楼打包下线--已完成(待测试)
|
if (currActionModel.CN_N_ACTION_CODE == 10008)
|
{
|
var list = Settings.GetPlcInfo().Where(a => a.enable == 1 && (a.deviceType == "4" || a.deviceType == "29")).ToList();
|
if (list.Count > 0)
|
{
|
list.ForEach(a =>
|
{
|
CMMLog.Info($"打包下线,deviceType:{a.deviceType}");
|
PLCControl.CheckPackingLineFull(a);
|
});
|
}
|
//Thread.Sleep(500);
|
}
|
#endregion
|
#endregion
|
|
#region 1000-电梯任务处理--待确认
|
if (currActionModel.CN_N_ACTION_CODE == 1000)
|
{
|
ProcessHelper.CheckElevatorTask();
|
//Thread.Sleep(500);
|
}
|
#endregion
|
|
#region 2000-充电任务--无需改动
|
if (currActionModel.CN_N_ACTION_CODE == 2000)
|
{
|
ProcessHelper.AGVBatteryTime();
|
Thread.Sleep(500);
|
}
|
#endregion
|
|
#region 2001-包装机写电量--已完成(待测试)
|
if (currActionModel.CN_N_ACTION_CODE == 2001)
|
{
|
PLCControl.WriteBattery();
|
}
|
#endregion
|
|
#region 10009-任务动作线程
|
|
if (currActionModel.CN_N_ACTION_CODE == 10009)
|
{
|
lock (locker)
|
{
|
var request = MongoDBSingleton.Instance.FindAll<ActionControlModel>();
|
|
if (request.Count > 0)
|
{
|
request.ForEach(a =>
|
{
|
try
|
{
|
if (a.actionNo == "1") SecondWeightActionOne(a);
|
}
|
catch (Exception ex)
|
{
|
CMMLog.Error($"10010" + ex.Message, ex);
|
}
|
});
|
}
|
}
|
|
Thread.Sleep(3000);
|
}
|
|
#endregion
|
|
#region 10010-写入小车状态
|
if (currActionModel.CN_N_ACTION_CODE == 10010)
|
{
|
//PLCControl.changeSignal();
|
}
|
#endregion
|
|
#region 10011-ERP变更功能
|
if (currActionModel.CN_N_ACTION_CODE == 10011)
|
{
|
ERPService.SendERPTaskCompleteFunc();
|
}
|
#endregion
|
|
#region 10012-ERP变更功能 将物料表数据插入中间表 北区
|
if (currActionModel.CN_N_ACTION_CODE == 10012)
|
{
|
lock (lock10017)
|
{
|
ERPService.insertMidTable();
|
}
|
}
|
#endregion
|
|
#region 10013-ERP变更功能 将物料表数据插入中间表 一号厂房
|
if (currActionModel.CN_N_ACTION_CODE == 10013)
|
{
|
lock (lock10018)
|
{
|
ERPService.insertMidTableTwo();
|
}
|
}
|
#endregion
|
|
#region 10014-写入货位信息 三元车间
|
if (currActionModel.CN_N_ACTION_CODE == 10014)
|
{
|
ERPService.insertLocInfo();
|
Thread.Sleep(3000);
|
}
|
#endregion
|
|
return bResult;
|
}
|
|
|
|
/// <summary>
|
/// 触发回调处理
|
/// </summary>
|
/// <param name="currActionModel">当前动作模型</param>
|
/// <returns></returns>
|
public bool EventCallbacks(TN_I_TASK_DTL_ACTION currActionModel) {
|
bool bResult = true;
|
//测试码检测
|
if (currActionModel.CN_N_ACTION_CODE == 99999) {
|
}
|
return bResult;
|
}
|
|
private DateTime GetTime(int hour, int min = 0,int second = 0) {
|
var now = DateTime.Today;
|
var dt = new DateTime(now.Year, now.Month, now.Day, hour, min, second);
|
Console.WriteLine(dt.ToString());
|
return dt;
|
}
|
public class Mongo_AGV_TASK_STATE
|
{
|
public ObjectId _id { get; set; }
|
public int State { get; set; }
|
public string TaskNo { get; set; }
|
public string ForkliftNo { get; set; }
|
public string LockNo { get; set; }
|
/// <summary>
|
/// 扩展参数 可接收任何变量目前对应ext3
|
/// </summary>
|
public string ExtData { get; set; }
|
}
|
|
}
|
}
|