111
cjs
2025-06-23 8accda250de2a637336a40e04085e1a0cb556c5c
HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
@@ -5,13 +5,15 @@
using HH.WCS.Mobox3.NFLZ.util;
using HH.WCS.Mobox3.NFLZ.wms;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Xml.Linq;
using static HH.WCS.Mobox3.NFLZ.api.OtherModel;
using static HH.WCS.Mobox3.NFLZ.dispatch.NDC;
using static HH.WCS.Mobox3.NFLZ.dispatch.NDCApi;
using static HH.WCS.Mobox3.NFLZ.wms.WMSHelper.AddChangeModel;
namespace HH.WCS.Mobox3.NFLZ.process
@@ -144,15 +146,18 @@
            if (mst.S_TYPE.Contains("空托上线"))
            {
                LogHelper.Info($"{mst.S_TYPE}卸货完成,写入信号");
                //根据起点判断是A口还是B口
                var locCode = mst.S_END_LOC;
                var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
                if (devInfo != null)
                if(state == 6)
                {
                    var signal = devInfo.TN_Location[0] == mst.S_END_LOC ? "3F 00 10 0D 0A" : "3F 00 20 0D 0A";
                    if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}任务卸货完成,写入信号:{signal},ip:{devInfo.address}");
                    //根据起点判断是A口还是B口
                    var locCode = mst.S_END_LOC;
                    var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
                    if (devInfo != null)
                    {
                        var signal = devInfo.TN_Location[0] == mst.S_END_LOC ? "3F 00 10 0D 0A" : "3F 00 20 0D 0A";
                        if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}任务卸货完成,写入信号:{signal},ip:{devInfo.address}");
                    }
                    else LogHelper.Info($"设备未找到,货位号:{mst.S_END_LOC}");
                }
                else LogHelper.Info($"设备未找到,货位号:{mst.S_END_LOC}");
            }
            if (mst.S_TYPE.Contains("满托上线"))
            {
@@ -174,7 +179,7 @@
                var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
                if (devInfo != null)
                {
                    var signal = "3F 00 12 22 00 0D 0A";
                    var signal = "3F 00 12 21 0D 0A";
                    if (state == 1102) signal = "3F 00 10 20 0D 0A";
                    if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}任务取货完成,写入信号:{signal},ip:{devInfo.address}");
                }
@@ -183,15 +188,18 @@
            if (mst.S_TYPE.Contains("满托下线"))
            {
                LogHelper.Info($"{mst.S_TYPE}取货完成,写入信号");
                //根据起点判断是A口还是B口
                var locCode = mst.S_START_LOC;
                var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
                if (devInfo != null)
                if(state == 4)
                {
                    var signal = devInfo.TN_Location[0] == mst.S_START_LOC ? "3F 00 10 0D 0A" : "3F 00 20 0D 0A";
                    if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}任务取货完成,写入信号:{signal},ip:{devInfo.address}");
                    //根据起点判断是A口还是B口
                    var locCode = mst.S_START_LOC;
                    var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
                    if (devInfo != null)
                    {
                        var signal = devInfo.TN_Location[0] == mst.S_START_LOC ? "3F 00 10 0D 0A" : "3F 00 20 0D 0A";
                        if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}任务取货完成,写入信号:{signal},ip:{devInfo.address}");
                    }
                    else LogHelper.Info($"设备未找到,货位号:{mst.S_START_LOC}");
                }
                else LogHelper.Info($"设备未找到,货位号:{mst.S_START_LOC}");
            }
        }
@@ -654,7 +662,6 @@
            if (state == 6)//卸货完成
            {
                claimGoodsTime(mst, state);
                writeSignal(mst);
                CacheBitUpdate(mst, false);
            }
            if (state == 7)
@@ -708,7 +715,7 @@
                string startArea = "";
                LinZhiBCPWorkOrder bcpW = null;
                bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_WorkNo == mst.S_WORK_NO && a.S_WorkState == "执行中").First();
                LogHelper.Info($"满托任务生成处理,工单:{JsonConvert.SerializeObject(bcpW)}");
                if (mst.S_TYPE.Contains("瓶盖"))
                {
                    //瓶盖无即产即用和非即产即用
@@ -728,6 +735,7 @@
                    }
                    else
                    {
                        LogHelper.Info($"瓶胚翻斗机非即产满框 查找");
                        string areaName = bcpW.S_PLineNo.Split('-')[1].Substring(0, 1) + "号瓶胚翻斗机非即产满框";
                        startArea = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault().areaCode;
                        startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea);
@@ -744,7 +752,7 @@
                    var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoca.S_CODE).First();
                    if (cntrInfo != null)
                    {
                        WMSHelper.CreateOpTask(startLoca.S_CODE, mst.S_START_LOC, "出库", taskType, cntrInfo.S_CNTR_CODE);
                        WMSHelper.CreateOpTask(startLoca.S_CODE, mst.S_START_LOC, "出库", taskType, cntrInfo.S_CNTR_CODE,"","",bcpW.S_WorkNo);
                    }
                    else LogHelper.Info($"未绑定托盘,货位号:{startLoca.S_CODE}");
                }
@@ -1093,8 +1101,16 @@
                        TsNo = 1;
                        // 坯盖任务下发参数获取
                        // 获取起终点的AGV站点
                        Extend1 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_START_LAYER).First().S_AGV_SITE;
                        Extend2 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC && a.N_LAYER == mst.N_END_LAYER).First().S_AGV_SITE;
                        Extend1 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_START_LOC).First().S_AGV_SITE;
                        Extend2 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC).First().S_AGV_SITE;
                        if (mst.N_START_LAYER > 1)
                        {
                            Extend1 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_START_LAYER).First().S_AGV_SITE;
                        }
                        if (mst.N_END_LAYER > 1)
                        {
                            Extend2 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_END_LAYER).First().S_AGV_SITE;
                        }
                        Extend3 = "0";
                        // 获取 任务参数4 DATA 数据
                        string startLayerValue = Convert.ToString(startLayer, 16).ToUpper();
@@ -1131,21 +1147,43 @@
                    Console.WriteLine($"[SendTask]:TaskNo={mst.S_CODE.Trim()},start={Extend1},end={Extend2}");
                    LogHelper.Info($"[SendTask]:TaskNo={mst.S_CODE.Trim()},start={Extend1},end={Extend2}");
                    bool action = true;
                    var dic = new Dictionary<string, string>();
                    //var dic1 = new Dictionary<string, string>();
                    //dic.Add("Pri", mst.N_PRIORITY.ToString());
                    //dic.Add("No", mst.S_CODE.Trim());
                    dic.Add("From", Extend1);
                    dic.Add("To", Extend2);
                    dic.Add("Func", Extend3);
                    dic.Add("Data", Extend4);
                    //var dic = new Dictionary<string, string>();
                    ////var dic1 = new Dictionary<string, string>();
                    ////dic.Add("Pri", mst.N_PRIORITY.ToString());
                    ////dic.Add("No", mst.S_CODE.Trim());
                    //dic.Add("From", Extend1);
                    //dic.Add("To", Extend2);
                    //dic.Add("Func", Extend3);
                    //dic.Add("Data", Extend4);
                    //
                    //if (ConveryTaskList.Contains(taskType) || taskType.Contains("移库"))
                    //{
                    //    dic.Add("ItemHeight", Extend5);
                    //    dic.Add("CntrType", Extend6);
                    //    dic.Add("FromCol", Extend7);
                    //    dic.Add("ToCol", Extend8);
                    //    if (taskType.Contains("移库") || taskType.Contains("成品下线") || taskType.Contains("零头下线"))
                    //    {
                    //        LogHelper.Info($"移库:Extend5:{Extend5},Extend6:{Extend6},Extend7:{Extend7},Extend8:{Extend8},");
                    //        if (Extend5 == "" || Extend6 == "" || Extend7 == "" || Extend8 == "")
                    //        {
                    //            action = false;
                    //        }
                    //    }
                    //}
                    var dic = new List<param>
                    {
                        new param() { name = "From", value = Extend1 },
                        new param() { name = "To", value = Extend2 },
                        new param() { name = "Func", value = Extend3 },
                        new param() { name = "Data", value = Extend4 }
                    };
                    if (ConveryTaskList.Contains(taskType) || taskType.Contains("移库"))
                    {
                        dic.Add("ItemHeight", Extend5);
                        dic.Add("CntrType", Extend6);
                        dic.Add("FromCol", Extend7);
                        dic.Add("ToCol", Extend8);
                        dic.Add(new param(){name = "ItemHeight", value = Extend5});
                        dic.Add(new param(){name = "CntrType", value = Extend6});
                        dic.Add(new param(){name = "FromCol", value = Extend7});
                        dic.Add(new param(){name = "ToCol", value = Extend8});
                        if (taskType.Contains("移库") || taskType.Contains("成品下线") || taskType.Contains("零头下线"))
                        {
                            LogHelper.Info($"移库:Extend5:{Extend5},Extend6:{Extend6},Extend7:{Extend7},Extend8:{Extend8},");
@@ -1155,13 +1193,13 @@
                            }
                        }
                    }
                    if (action)
                    {
                        var res = new AGVResult();
                        res = NDC.AddNewOrderNew(TsNo,mst.N_PRIORITY,mst.S_CODE, dic);
                        var res = new AgvApiResult();
                        //res = NDC.AddNewOrderNew(TsNo,mst.N_PRIORITY,mst.S_CODE, dic);
                        res = NDCApi.AddOrderNew(TsNo, mst.N_PRIORITY, mst.S_CODE,dic);
                        if (res != null && (res.Res.ErrCode == 0 || res.Res.ErrCode == 50009))
                        if (res != null && (res.err_code == 0 || res.err_code == 50009))
                        {
                            mst.N_B_STATE = 1;
                            WCSHelper.UpdateStatus(mst, "已推送");
@@ -1506,7 +1544,7 @@
                }
                if (result == null)
                {
                    result = TaskProcess.BCPInOrOut(db, true, "瓶胚即产满框缓存区", itemCode);
                    result = TaskProcess.BCPInOrOut(db, true, "瓶胚即产满框缓存", itemCode);
                }
                if(result == null)
                {