| | |
| | | using MongoDB.Driver.Builders; |
| | | using MySql.Data.MySqlClient; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Net.Configuration; |
| | | using System.Text; |
| | | using System.Threading; |
| | | using System.Web.UI.WebControls.WebParts; |
| | | using static Hanhe.iWCS.JingmenGEMTwoProtocol.ApiHelper; |
| | | using static Hanhe.iWCS.JingmenGEMTwoProtocol.EnentListen; |
| | | using static Hanhe.iWCS.JingmenGEMTwoProtocol.MESHelper; |
| | | using static Hanhe.iWCS.JingmenGEMTwoProtocol.PLCControl; |
| | | using static Hanhe.iWCS.JingmenGEMTwoProtocol.ProtocolAnalysis; |
| | | using static System.Runtime.CompilerServices.RuntimeHelpers; |
| | | |
| | | namespace Hanhe.iWCS.JingmenGEMTwoProtocol |
| | | { |
| | |
| | | if(mst.CN_S_STATUS=="未执行" || mst.CN_S_STATUS == "待推送") |
| | | { |
| | | mst = MongoDBSingleton.Instance.FindOne<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", mst.CN_S_TASK_NO), "TN_I_TASK_MST"); |
| | | if (mst.CN_S_BUSS_TYPE == "辅材回库") |
| | | { |
| | | var CBTableList = MongoDBSingleton.Instance.FindAll<ConnectingBits>("ConnectingBits"); |
| | | foreach (var a in CBTableList) |
| | | { |
| | | if (string.IsNullOrEmpty(a.trayCode)) |
| | | { |
| | | string cntrType = mst.transportInfo[0].trayCode; |
| | | MongoDBSingleton.Instance.Update<ConnectingBits>(Query.EQ("Bit", a.Bit), Update.Set("trayCode", cntrType).Set("END_LOC", mst.CN_S_END_BIT), UpdateFlags.None); |
| | | |
| | | MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", mst.CN_S_TASK_NO), Update.Set("CN_S_END_BIT", a.Bit), UpdateFlags.None); |
| | | |
| | | new SqlHelper<object>().ExecuteSql($"update dbo.tn_am_task_mst set CN_S_END_BIT='{a.Bit}',CN_S_END_AGVBIT = '{StockInstance.Instance.GetAGVCodeForBitCode(a.Bit)}' where CN_S_TASK_NO = '{mst.CN_S_TASK_NO}'"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | StringBuilder sbMsg = new StringBuilder(); |
| | | var start = StockInstance.Instance.GetLocationInfoTwo(mst.CN_S_START_BIT); |
| | |
| | | //两个接驳平台 |
| | | if (mst.CN_S_START_BIT == conn[0].locCode || mst.CN_S_START_BIT == conn[1].locCode) |
| | | { |
| | | start.CN_N_AGV_LOCATION = Settings.GetConnectingbitsList().Where(a => a.locCode == mst.CN_S_START_BIT).First().agvSite[1]; |
| | | if(mst.CN_S_BUSS_TYPE == "辅材出库(二段)") |
| | | { |
| | | start.CN_N_AGV_LOCATION = Settings.GetConnectingbitsList().Where(a => a.locCode == mst.CN_S_START_BIT).First().agvSite[0]; |
| | | } |
| | | else |
| | | { |
| | | start.CN_N_AGV_LOCATION = Settings.GetConnectingbitsList().Where(a => a.locCode == mst.CN_S_START_BIT).First().agvSite[1]; |
| | | } |
| | | |
| | | } |
| | | if (mst.CN_S_END_BIT == conn[0].locCode || mst.CN_S_END_BIT == conn[1].locCode) |
| | | { |
| | | end.CN_N_AGV_LOCATION = Settings.GetConnectingbitsList().Where(a => a.locCode == mst.CN_S_END_BIT).First().agvSite[0]; |
| | | if(mst.CN_S_BUSS_TYPE == "辅材出库(二段)") |
| | | { |
| | | end.CN_N_AGV_LOCATION = Settings.GetConnectingbitsList().Where(a => a.locCode == mst.CN_S_END_BIT).First().agvSite[1]; |
| | | } |
| | | else |
| | | { |
| | | end.CN_N_AGV_LOCATION = Settings.GetConnectingbitsList().Where(a => a.locCode == mst.CN_S_END_BIT).First().agvSite[0]; |
| | | } |
| | | |
| | | } |
| | | } |
| | | if (conn.Count == 1) |
| | |
| | | if (mst.CN_S_END_BIT == conn[0].locCode) |
| | | { |
| | | end.CN_N_AGV_LOCATION = Settings.GetConnectingbitsList().Where(a => a.locCode == mst.CN_S_END_BIT).First().agvSite[0]; |
| | | } |
| | | } |
| | | |
| | | var conn1 = Settings.GetDGConnectingbitsList().Where(a => a.enable == 1).ToList(); |
| | | if (conn1.Count == 2) |
| | | { |
| | | //两个接驳平台 |
| | | if (mst.CN_S_START_BIT == conn1[0].locCode || mst.CN_S_START_BIT == conn1[1].locCode) |
| | | { |
| | | if (mst.CN_S_BUSS_TYPE == "电钴生产退库(二段)") |
| | | { |
| | | start.CN_N_AGV_LOCATION = Settings.GetDGConnectingbitsList().Where(a => a.locCode == mst.CN_S_START_BIT).First().agvSite[0]; |
| | | } |
| | | else |
| | | { |
| | | start.CN_N_AGV_LOCATION = Settings.GetDGConnectingbitsList().Where(a => a.locCode == mst.CN_S_START_BIT).First().agvSite[1]; |
| | | } |
| | | |
| | | } |
| | | if (mst.CN_S_END_BIT == conn1[0].locCode || mst.CN_S_END_BIT == conn1[1].locCode) |
| | | { |
| | | if (mst.CN_S_BUSS_TYPE == "电钴生产退库") |
| | | { |
| | | end.CN_N_AGV_LOCATION = Settings.GetDGConnectingbitsList().Where(a => a.locCode == mst.CN_S_END_BIT).First().agvSite[1]; |
| | | } |
| | | else |
| | | { |
| | | end.CN_N_AGV_LOCATION = Settings.GetDGConnectingbitsList().Where(a => a.locCode == mst.CN_S_END_BIT).First().agvSite[0]; |
| | | } |
| | | |
| | | } |
| | | } |
| | | if (conn1.Count == 1) |
| | | { |
| | | //一个接驳平台 |
| | | if (mst.CN_S_START_BIT == conn1[0].locCode) |
| | | { |
| | | if(mst.CN_S_BUSS_TYPE == "电钴生产退库(二段)") |
| | | { |
| | | start.CN_N_AGV_LOCATION = Settings.GetDGConnectingbitsList().Where(a => a.locCode == mst.CN_S_START_BIT).First().agvSite[0]; |
| | | } |
| | | else |
| | | { |
| | | start.CN_N_AGV_LOCATION = Settings.GetDGConnectingbitsList().Where(a => a.locCode == mst.CN_S_START_BIT).First().agvSite[1]; |
| | | } |
| | | |
| | | } |
| | | if (mst.CN_S_END_BIT == conn1[0].locCode) |
| | | { |
| | | if(mst.CN_S_BUSS_TYPE == "电钴生产退库") |
| | | { |
| | | end.CN_N_AGV_LOCATION = Settings.GetDGConnectingbitsList().Where(a => a.locCode == mst.CN_S_END_BIT).First().agvSite[1]; |
| | | } |
| | | else |
| | | { |
| | | end.CN_N_AGV_LOCATION = Settings.GetDGConnectingbitsList().Where(a => a.locCode == mst.CN_S_END_BIT).First().agvSite[0]; |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | |
| | | } |
| | | } |
| | | } |
| | | if (mst.CN_S_BUSS_TYPE == "缓存架入立库") |
| | | if (mst.CN_S_BUSS_TYPE == "缓存架入立库" || mst.CN_S_BUSS_TYPE == "电钴缓存架入立库" || mst.CN_S_BUSS_TYPE == "电钴生产退库") |
| | | { |
| | | TRow = "1"; |
| | | } |
| | |
| | | var endLoc = MongoDBSingleton.Instance.FindOne<MongoTN_AB_STOCK_LOCATION>(Query.EQ("CN_S_LOCATION_CODE", mst.CN_S_END_BIT), "MongoTN_AB_STOCK_LOCATION"); |
| | | if(startLoc != null && endLoc != null) |
| | | { |
| | | if(startLoc.CN_S_AREA_CODE == "CKHJ" || endLoc.CN_S_AREA_CODE == "CKHJ") |
| | | if(startLoc.CN_S_AREA_CODE == "CKHJ" || endLoc.CN_S_AREA_CODE == "CKHJ" || endLoc.CN_S_AREA_CODE == "CPTPFCHJ" || startLoc.CN_S_AREA_CODE == "CPTPFCHJ") |
| | | { |
| | | TRow = "1"; |
| | | } |
| | |
| | | if (code == 1012) |
| | | { |
| | | //卸货申请,先判断设备是否允许进料,如果是直接改参数,并通知设备 |
| | | if (mst.CN_S_BUSS_TYPE == "3楼包装取料" || mst.CN_S_BUSS_TYPE == "PDA打包下线") PLCControl.PickUpFullDoorUnload(plc.ip, mst.CN_S_TASK_NO);//进入3楼包装取料流程1012,ip:{plc.ip},task:{mst.CN_S_TASK_NO} |
| | | if (mst.CN_S_BUSS_TYPE == "3楼包装取料" || mst.CN_S_BUSS_TYPE == "PDA打包下线") PLCControl.PickUpFullDoorUnload(plc.ip, mst.CN_S_TASK_NO, mst.CN_S_BUSS_TYPE);//进入3楼包装取料流程1012,ip:{plc.ip},task:{mst.CN_S_TASK_NO} |
| | | if (mst.CN_S_BUSS_TYPE == "3楼复称入缓存架" || mst.CN_S_BUSS_TYPE == "3楼复称入缓存架NG") PLCControl.SecondWeightInCache1012(plc.ip, mst.CN_S_TASK_NO);//二期:直接改参数 |
| | | if (mst.CN_S_BUSS_TYPE == "3楼缓存架入叠托") TSHelper.GoToAGV(mst.CN_S_TASK_NO, 10, 1); |
| | | if (mst.CN_S_BUSS_TYPE == "3楼叠盘下线") PLCControl.StackingReqUnload(plc.deviceType, mst.CN_S_TASK_NO); |
| | | if (mst.CN_S_BUSS_TYPE == "3楼打包下线") PLCControl.PackingLineUnload1012(plc.ip, mst.CN_S_TASK_NO); |
| | | if (mst.CN_S_BUSS_TYPE == "辅材入库") PLCControl.fcrk(plc, true, mst.CN_S_TASK_NO); |
| | | if (mst.CN_S_BUSS_TYPE == "烘干机满托下线" || mst.CN_S_BUSS_TYPE == "剪切机空托下线" || mst.CN_S_BUSS_TYPE == "包装机满托下线") PLCControl.DGMachine(plc,mst.CN_S_TASK_NO,true); |
| | | } |
| | | if (code == 4) |
| | |
| | | if (mst.CN_S_BUSS_TYPE == "3楼打包下线") PLCControl.PackingLineComplete4(plc.ip, mst.CN_S_SOURCE_NO); |
| | | if (mst.CN_S_BUSS_TYPE != "3楼包装取料") WMSHelper.ExecuteState(mst.CN_S_SOURCE_NO, 4); |
| | | if (mst.CN_S_BUSS_TYPE == "3楼缓存架入叠托NG") PLCControl.CacheStackingMouth6(plc); |
| | | if (mst.CN_S_BUSS_TYPE == "辅材入库") PLCControl.fcrk(plc); |
| | | if (mst.CN_S_BUSS_TYPE == "辅材入库") PLCControl.fcrk(plc, false); |
| | | if (mst.CN_S_BUSS_TYPE == "烘干机满托下线" || mst.CN_S_BUSS_TYPE == "剪切机空托下线" || mst.CN_S_BUSS_TYPE == "包装机满托下线") PLCControl.DGMachine(plc, mst.CN_S_TASK_NO, false); |
| | | |
| | | } |
| | |
| | | // } |
| | | //} |
| | | } |
| | | if (mst.CN_S_BUSS_TYPE == "3楼成品出库" || mst.CN_S_BUSS_TYPE == "辅材出库") |
| | | if (mst.CN_S_BUSS_TYPE == "3楼成品出库") |
| | | { |
| | | //3楼成品出库任务拦截 |
| | | if (!OutWareTask(mst)) |
| | |
| | | { |
| | | result = true; |
| | | } |
| | | } |
| | | if (mst.CN_S_BUSS_TYPE == "辅材出库") |
| | | { |
| | | FCOutTask(mst); |
| | | } |
| | | if (mst.CN_S_BUSS_TYPE == "电钴生产退库") |
| | | { |
| | | SGTK(mst); |
| | | } |
| | | var bussTypeInfo = Settings.GetHouWeiCodeo().Where(a => a.location == mst.Ext1).FirstOrDefault(); |
| | | if (bussTypeInfo != null) |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 辅材出库 |
| | | /// </summary> |
| | | /// <param name="mst"></param> |
| | | private static void FCOutTask(TN_I_TASK_MST mst) |
| | | { |
| | | var CBInfo = Settings.GetConnectingbitsList().Where(a => a.enable == 1).ToList(); |
| | | if (CBInfo != null) |
| | | { |
| | | foreach (var a in CBInfo) |
| | | { |
| | | if (!string.IsNullOrEmpty(a.locCode)) |
| | | { |
| | | //在中间表中查找点位 |
| | | var CBTable = MongoDBSingleton.Instance.FindOne<ConnectingBits>(Query.EQ("Bit", a.locCode), "ConnectingBits"); |
| | | if (CBTable != null) |
| | | { |
| | | if (string.IsNullOrEmpty(CBTable.trayCode)) |
| | | { |
| | | //修改任务终点,并且将点位写入中间表 |
| | | MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", mst.CN_S_TASK_NO), Update.Set("CN_S_END_BIT", a.locCode), UpdateFlags.None); |
| | | |
| | | new SqlHelper<object>().ExecuteSql($"update dbo.tn_am_task_mst set CN_S_END_BIT='{a.locCode}',CN_S_END_AGVBIT = '{StockInstance.Instance.GetAGVCodeForBitCode(a.locCode)}' where CN_S_TASK_NO = '{mst.CN_S_TASK_NO}'"); |
| | | |
| | | MongoDBSingleton.Instance.Update<ConnectingBits>(Query.EQ("Bit", a.locCode), Update.Set("trayCode", mst.CN_S_BATCH_NO).Set("END_LOC", a.locCode), UpdateFlags.None); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //修改任务终点,并且将点位写入中间表 |
| | | MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", mst.CN_S_TASK_NO), Update.Set("CN_S_END_BIT", a.locCode), UpdateFlags.None); |
| | | |
| | | new SqlHelper<object>().ExecuteSql($"update dbo.tn_am_task_mst set CN_S_END_BIT='{a.locCode}',CN_S_END_AGVBIT = '{StockInstance.Instance.GetAGVCodeForBitCode(a.locCode)}' where CN_S_TASK_NO = '{mst.CN_S_TASK_NO}'"); |
| | | |
| | | MongoDBSingleton.Instance.Insert<ConnectingBits>(new ConnectingBits { Bit = a.locCode, trayCode = mst.CN_S_BATCH_NO, state = "0", END_LOC = a.locCode }); |
| | | } |
| | | } |
| | | else CMMLog.Debug("接驳位点位未配置"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 四钴生产退库 |
| | | /// 将任务拆分成两段任务,第一段任务终点改为接驳平台 |
| | | /// 二段任务从接驳平台入库 |
| | | /// </summary> |
| | | /// <param name="mst"></param> |
| | | private static void SGTK(TN_I_TASK_MST mst) |
| | | { |
| | | var CBInfo = Settings.GetDGConnectingbitsList().Where(a => a.enable == 1).ToList(); |
| | | if (CBInfo != null) |
| | | { |
| | | foreach (var a in CBInfo) |
| | | { |
| | | if (!string.IsNullOrEmpty(a.locCode)) |
| | | { |
| | | //在中间表中查找点位 |
| | | var CBTable = MongoDBSingleton.Instance.FindOne<DGConnectingBits>(Query.EQ("Bit", a.locCode), "DGConnectingBits"); |
| | | if (CBTable != null) |
| | | { |
| | | if (string.IsNullOrEmpty(CBTable.trayCode)) |
| | | { |
| | | //改任务的终点 |
| | | MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", mst.CN_S_TASK_NO), Update.Set("CN_S_END_BIT", a.locCode), UpdateFlags.None); |
| | | |
| | | new SqlHelper<object>().ExecuteSql($"update dbo.tn_am_task_mst set CN_S_END_BIT='{a.locCode}',CN_S_END_AGVBIT = '{StockInstance.Instance.GetAGVCodeForBitCode(a.locCode)}' where CN_S_TASK_NO = '{mst.CN_S_TASK_NO}'"); |
| | | |
| | | CMMLog.Debug($"生产退库:更改终点成功!"); |
| | | MongoDBSingleton.Instance.Update<DGConnectingBits>(Query.EQ("Bit", a.locCode), Update.Set("trayCode", mst.CN_S_BATCH_NO).Set("END_LOC",mst.CN_S_END_BIT), UpdateFlags.None); |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //改任务的终点 |
| | | MongoDBSingleton.Instance.Update<TN_I_TASK_MST>(Query.EQ("CN_S_TASK_NO", mst.CN_S_TASK_NO), Update.Set("CN_S_END_BIT", a.locCode), UpdateFlags.None); |
| | | |
| | | new SqlHelper<object>().ExecuteSql($"update dbo.tn_am_task_mst set CN_S_END_BIT='{a.locCode}',CN_S_END_AGVBIT = '{StockInstance.Instance.GetAGVCodeForBitCode(a.locCode)}' where CN_S_TASK_NO = '{mst.CN_S_TASK_NO}'"); |
| | | |
| | | CMMLog.Debug($"生产退库:更改终点成功!"); |
| | | //打包下线任务生成成功,向中间表插入数据 |
| | | |
| | | MongoDBSingleton.Instance.Insert<DGConnectingBits>(new DGConnectingBits { Bit = a.locCode, trayCode = mst.CN_S_BATCH_NO,END_LOC = mst.CN_S_END_BIT, state = "0" }); |
| | | break; |
| | | } |
| | | } |
| | | else CMMLog.Debug("生产退库接驳位点位未配置"); |
| | | } |
| | | } |
| | | else CMMLog.Debug("生产退库接驳位未配置"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 辅材入库流程 |
| | | /// </summary> |
| | | /// <param name="mst"></param> |
| | |
| | | { |
| | | //1、判断辅材入库终点是否有任务 |
| | | //2、判断输送线模式和中间表模式都是入库模式 |
| | | bool action = true; |
| | | var plc = Settings.GetPlcInfo().Where(a => a.deviceType == "18" && a.enable == 1).ToList(); |
| | | if (plc.Count > 0) |
| | | CMMLog.Debug("辅材入库流程 开始"); |
| | | |
| | | bool action = false; |
| | | var plc = Settings.GetPlcInfo().Where(a => a.location == mst.CN_S_START_BIT && a.enable == 1).First(); |
| | | if (plc != null) |
| | | { |
| | | foreach(var a in plc) |
| | | var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel |
| | | { |
| | | if(CheckStartFree(a.location) && CheckEndFree(a.location)) |
| | | dataNum = 1, |
| | | addr = plc.readAddr + 3, |
| | | host = plc.ip, |
| | | port = plc.port |
| | | }); |
| | | if (result != null && result.errCode == 0) |
| | | { |
| | | CMMLog.Debug($"辅材入库流程:读取滚筒机{plc.ip}通道号为:{plc.readAddr + 3}的值为:{result.result[0]}"); |
| | | if (result.result[0] == 1) |
| | | { |
| | | var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel |
| | | CMMLog.Debug($"辅材入库流程:输送线为 出库模式,输送线点位:{plc.location}"); |
| | | return action; |
| | | } |
| | | if (result.result[0] == 2) |
| | | { |
| | | //读取中间表模式 |
| | | var modelInfo = MongoDBSingleton.Instance.FindOne<ModeList>("ModeList"); |
| | | if (modelInfo != null) |
| | | { |
| | | dataNum = 1, |
| | | addr = a.readAddr + 3, |
| | | host = a.ip, |
| | | port = a.port |
| | | }); |
| | | if (result != null && result.errCode == 0) |
| | | { |
| | | CMMLog.Debug($"辅材入库流程:读取滚筒机{a.ip}通道号为:{a.readAddr + 3}的值为:{result.result[0]}"); |
| | | if (result.result[0] == 1) |
| | | if (modelInfo.Mode == "出库模式") |
| | | { |
| | | action = false; |
| | | CMMLog.Debug($"辅材入库流程:输送线为 出库模式,输送线点位:{a.location}"); |
| | | break; |
| | | CMMLog.Debug($"辅材入库流程:中间表 ModeList为 出库模式"); |
| | | return action; |
| | | } |
| | | else |
| | | { |
| | | //读取中间表模式 |
| | | var modelInfo = MongoDBSingleton.Instance.FindOne<ModeList>("ModeList"); |
| | | if(modelInfo != null) |
| | | { |
| | | if(modelInfo.Mode == "出库模式") |
| | | { |
| | | action = false; |
| | | CMMLog.Debug($"辅材入库流程:中间表 ModeList为 出库模式"); |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | action = false; |
| | | CMMLog.Debug("辅材入库流程:中间表 ModeList 为空"); |
| | | break; |
| | | } |
| | | action = true; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | CMMLog.Debug("辅材入库流程:中间表 ModeList 为空"); |
| | | return action; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | action = false; |
| | | CMMLog.Debug($"辅材入库流程:当前点位有任务,点位:{a.location}"); |
| | | break; |
| | | } |
| | | }; |
| | | } |
| | | |
| | | if (action) |
| | | { |
| | | //入库模式核验正确 判断货物是否到位 |
| | | var startPlc = plc.Where(a => a.location == mst.CN_S_START_BIT).First(); |
| | | if(startPlc != null) |
| | | result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel |
| | | { |
| | | var result = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel |
| | | { |
| | | dataNum = 1, |
| | | addr = startPlc.readAddr + 1, |
| | | host = startPlc.ip, |
| | | port = startPlc.port |
| | | }); |
| | | dataNum = 1, |
| | | addr = plc.readAddr + 1, |
| | | host = plc.ip, |
| | | port = plc.port |
| | | }); |
| | | |
| | | if (result != null && result.errCode == 0) |
| | | if (result != null && result.errCode == 0) |
| | | { |
| | | CMMLog.Debug($"辅材入库流程:读取滚筒机{plc.ip}通道号为:{plc.readAddr + 1}的值为:{result.result[0]}"); |
| | | if (result.result[0] == 2) |
| | | { |
| | | CMMLog.Debug($"辅材入库流程:读取滚筒机{startPlc.ip}通道号为:{startPlc.readAddr + 3}的值为:{result.result[0]}"); |
| | | if (result.result[0] == 2) |
| | | int[] num = new int[2] { 2, 1 }; |
| | | var wirteal = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti |
| | | { |
| | | int[] num = new int[2] { 2, 1 }; |
| | | var wirteal = OITcpHelper.RegisterWriteOutPutMulti(new OITcpHelper.RegisterWriteOutPutModelMulti |
| | | { |
| | | addr = startPlc.writeAddr + 1, |
| | | host = startPlc.ip, |
| | | data = num, |
| | | port = startPlc.port |
| | | }); |
| | | addr = plc.writeAddr + 1, |
| | | host = plc.ip, |
| | | data = num, |
| | | port = plc.port |
| | | }); |
| | | |
| | | return true; |
| | | } |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | |
| | | if (plc.Count > 0) |
| | | { |
| | | #region 判断输送线模式 变更注释 |
| | | //bool action = true; |
| | | //foreach(var a in plc) |
| | | //{ |
| | | // var modeResult = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel |
| | | // { |
| | | // dataNum = 1, |
| | | // addr = a.readAddr + 3, |
| | | // host = a.ip, |
| | | // port = a.port |
| | | // }); |
| | | // if (modeResult != null && modeResult.errCode == 0) |
| | | // { |
| | | // CMMLog.Debug($"OutWareTask:读取滚筒机{a.ip}通道号为:{a.readAddr + 3}的值为:{modeResult.result[0]}"); |
| | | // if (modeResult.result[0] == 2) |
| | | // { |
| | | // action = false; |
| | | // CMMLog.Debug($"OutWareTask:输送线为 入库模式,输送线点位:{a.location}"); |
| | | // break; |
| | | // } |
| | | // else |
| | | // { |
| | | // //读取中间表模式 |
| | | // var modelInfo = MongoDBSingleton.Instance.FindOne<ModeList>("ModeList"); |
| | | // if (modelInfo != null) |
| | | // { |
| | | // if (modelInfo.Mode == "入库模式") |
| | | // { |
| | | // action = false; |
| | | // CMMLog.Debug($"OutWareTask:中间表 ModeList为 入库模式"); |
| | | // break; |
| | | // } |
| | | // } |
| | | // else |
| | | // { |
| | | // action = false; |
| | | // CMMLog.Debug("OutWareTask:中间表 ModeList 为空"); |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | //}; |
| | | //if (!action) |
| | | //{ |
| | | // return false; |
| | | //} |
| | | |
| | | foreach(var a in plc) |
| | | { |
| | | bool action = false; |
| | | var modeResult = OITcpHelper.RegisterReadOutPut(new OITcpHelper.RegisterReadOutPutModel |
| | | { |
| | | dataNum = 1, |
| | | addr = a.readAddr + 3, |
| | | host = a.ip, |
| | | port = a.port |
| | | }); |
| | | if (modeResult != null && modeResult.errCode == 0) |
| | | { |
| | | CMMLog.Debug($"OutWareTask:读取滚筒机{a.ip}通道号为:{a.readAddr + 3}的值为:{modeResult.result[0]}"); |
| | | if (modeResult.result[0] == 2) |
| | | { |
| | | CMMLog.Debug($"OutWareTask:输送线为 入库模式,输送线点位:{a.location}"); |
| | | break; |
| | | } |
| | | else |
| | | { |
| | | //读取中间表模式 |
| | | var modelInfo = MongoDBSingleton.Instance.FindOne<ModeList>("ModeList"); |
| | | if (modelInfo != null) |
| | | { |
| | | if (modelInfo.Mode == "入库模式") |
| | | { |
| | | CMMLog.Debug($"OutWareTask:中间表 ModeList为 入库模式"); |
| | | } |
| | | else |
| | | { |
| | | action = true; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | CMMLog.Debug("OutWareTask:中间表 ModeList 为空"); |
| | | } |
| | | } |
| | | } |
| | | if (!action) |
| | | { |
| | | return false; |
| | | } |
| | | }; |
| | | |
| | | #endregion |
| | | |
| | | |
| | |
| | | } |
| | | CMMLog.Info("进入充电任务流程判断:执行结束!"); |
| | | } |
| | | |
| | | internal static void AGVBatteryTimeTwo() |
| | | { |
| | | var cpsInfo = MongoDBSingleton.Instance.FindAll<TN_B_CHARGE_PLAN_SET>("TN_B_CHARGE_PLAN_SET"); |
| | | if (cpsInfo.Count > 0) |
| | | { |
| | | foreach (var a in cpsInfo) |
| | | { |
| | | int agvNo = int.Parse(a.CN_S_NAME); |
| | | if(agvNo != 0) |
| | | { |
| | | //判断中间表 MarginAGV 是否有该AGV的数据 |
| | | var maInfo = MongoDBSingleton.Instance.FindOne<MarginAGV>(Query.EQ("agvNo", int.Parse(a.CN_S_NAME)), "MarginAGV"); |
| | | if (maInfo == null) |
| | | { |
| | | if (DateTime.Parse(a.CN_DT_START).AddMinutes(10) > DateTime.Now) |
| | | { |
| | | //当前时间在指定充电时间的10分钟之内 |
| | | var pileInfo = Settings.GetChargingPile().Where(b => b.agvNo == a.CN_S_NAME && b.enable == "1").FirstOrDefault(); |
| | | if(pileInfo != null) |
| | | { |
| | | int marginGroup = int.Parse(pileInfo.charginGroup); |
| | | TSHelper.SendChargeTask(a.CN_S_NAME, true); |
| | | //增加时间 |
| | | MongoDBSingleton.Instance.Insert<MarginAGV>(new MarginAGV { agvNo = agvNo, marginGroup = marginGroup, dateTime = DateTime.Now }); |
| | | } |
| | | else |
| | | { |
| | | CMMLog.Info($"充电任务,未配置当前车号,车号:{a.CN_S_NAME}"); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (maInfo.dateTime.AddMinutes(10) < DateTime.Now) |
| | | { |
| | | MongoDBSingleton.Instance.Remove<MarginAGV>(Query.EQ("id", maInfo.id), RemoveFlags.None); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | CMMLog.Info("充电任务流程异常,当前车号为0"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | /// <summary> |
| | |
| | | return WeekNumInMonth; |
| | | } |
| | | |
| | | internal static bool UpdateTaskState(string taskNo, int state) |
| | | { |
| | | var result = false; |
| | | try |
| | | { |
| | | string taskState = state == 3 ? "开始取货" : state == 4 ? "取货完成" : state == 5 ? "开始卸货" : state == 6 ? "卸货完成" : state == 2 ? "完成" : ""; |
| | | CMMLog.Info($"SQLServer 更新任务状态:任务号:{taskNo},更改状态:{taskState}"); |
| | | if (!string.IsNullOrEmpty(taskState)) result = new SqlHelper<SQL_TN_I_TASK_MST>().ExecuteSql($"update dbo.tn_am_task_mst set CN_S_STATUS='{taskState}' where CN_S_TASK_NO='{taskNo}'"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | CMMLog.Error($"SQLServer 更新任务状态异常:{ex.Message}"); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// SQL-AMS任务主表 |
| | | /// </summary> |
| | | [SugarTable("dbo.tn_am_task_mst")] |
| | | public class SQL_TN_I_TASK_MST |
| | | { |
| | | public string CN_S_BATCH_NO { get; set; } |
| | | public int CN_S_ORDER_NO { get; set; } |
| | | public string CN_S_TASK_NO { get; set; } |
| | | public string CN_S_SOURCE_SYS { get; set; } |
| | | public string CN_S_SOURCE_NO { get; set; } |
| | | public string CN_S_PROCESS_CODE { get; set; } |
| | | public string CN_S_TASK_TYPE { get; set; } |
| | | public string CN_S_START_AREA { get; set; } |
| | | public string CN_S_START_AREA_NAME { get; set; } |
| | | public string CN_S_START_BIT { get; set; } |
| | | public int CN_N_START_AGVBIT { get; set; } |
| | | public string CN_S_END_AREA { get; set; } |
| | | public string CN_S_END_AREA_NAME { get; set; } |
| | | public string CN_S_END_BIT { get; set; } |
| | | public int CN_N_END_AGVBIT { get; set; } |
| | | public string CN_S_STATUS { get; set; } |
| | | public string CN_S_BEF_STATUS { get; set; } |
| | | public string CN_S_BEFORE_NO { get; set; } |
| | | public string CN_S_AFTER_NO { get; set; } |
| | | public string CN_T_START_WORKING { get; set; } |
| | | public string CN_T_END_WORKING { get; set; } |
| | | public int CN_N_PRIORITY { get; set; } |
| | | public int CN_N_CUR_STEP { get; set; } |
| | | public string CN_S_CREATOR { get; set; } |
| | | public string CN_S_CREATOR_NAME { get; set; } |
| | | public string CN_T_CREATE { get; set; } |
| | | public string CN_S_MENDER { get; set; } |
| | | public string CN_S_MODIFY_NAME { get; set; } |
| | | public string CN_T_MODIFY { get; set; } |
| | | public string CN_S_TASK_MODEL { get; set; } |
| | | public string CN_S_EXT1 { get; set; } |
| | | public string CN_S_EXT2 { get; set; } |
| | | public string CN_S_EXT3 { get; set; } |
| | | public string CN_N_AGV_NO { get; set; } |
| | | public string CN_S_TRANSPORT_INFO { get; set; } |
| | | } |
| | | } |
| | | } |