111
cjs
2025-06-20 5a87419030eff0b13e8d29e2d5b770c73c9b49ca
111
8个文件已修改
142 ■■■■ 已修改文件
HH.WCS.Mobox3.NongFuLinZhi/api/ApiModel.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.NongFuLinZhi/api/WmsController.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.NongFuLinZhi/core/WCSCore.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.NongFuLinZhi/core/WMSCore.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.NongFuLinZhi/models/LinZhiWorkOrder.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.NongFuLinZhi/process/DeviceProcess.cs 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.NongFuLinZhi/wms/WMSHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.NongFuLinZhi/api/ApiModel.cs
@@ -26,15 +26,11 @@
        /// </summary>
        public class AgvTaskState
        {
            public int State { get; set; }
            public string No { get; set; }
            public string ForkliftNo { get; set; }
            public string ErrCode { get; set; }
            public string LockNo { get; set; }
            public string Ext1 { get; set; }
            public string Ext2 { get; set; }
            public string N_CNTR_COUNT { get; set; }
            public string ExtData { get; set; }
            public int state { get; set; }
            public string task_no { get; set; }
            public string forklift_no { get; set; }
            public string lock_no { get; set; }
            public string ext_data { get; set; }
        }
        /// <summary>
        /// hosttoagv上报车辆状态(参数在hosttoagv服务配置,可修改)
HH.WCS.Mobox3.NongFuLinZhi/api/WmsController.cs
@@ -25,14 +25,5 @@
        public SimpleResult Putaway_Order_In(Putaway_Order_In model) {
            return ApiHelper.Putaway_Order_In(model);
        }
    }
}
HH.WCS.Mobox3.NongFuLinZhi/core/WCSCore.cs
@@ -13,26 +13,26 @@
        public const string AlterControlSwitch01 = "1";//任务上报MES变更开发 1-开启 0-关闭
        public static void OperateAgvTaskStatus(AgvTaskState model) {
            if (string.IsNullOrEmpty(model.No)) {
            if (string.IsNullOrEmpty(model.task_no)) {
                //无任务号请求(交管)
                //DeviceProcess.Traffic(model.ForkliftNo, model.LockNo, model.State==1023);
            }
            else {
                var TN_Task = WCSHelper.GetTask(model.No);
                var TN_Task = WCSHelper.GetTask(model.task_no);
                if (TN_Task != null) {
                    if (model.State <= 7)
                    if (model.state <= 7)
                    {
                        if (!WCSHelper.CheckActionRecordExist(model.No, model.State))
                        if (!WCSHelper.CheckActionRecordExist(model.task_no, model.state))
                        {
                            //有任务号请求
                            switch (model.State)
                            switch (model.state)
                            {
                                case 1:
                                    WCSHelper.Begin(TN_Task);
                                    break;
                                #region MyRegion
                                case 3:
                                    WCSHelper.UpdateStatus(TN_Task, "开始取货", model.ForkliftNo);
                                    WCSHelper.UpdateStatus(TN_Task, "开始取货", model.forklift_no);
                                    //if (TN_Task.S_TYPE == "注塑库存满托下线(瓶坯)" || TN_Task.S_TYPE == "注塑即产满托下线(瓶坯)")
                                    //{
                                    //    TaskProcess.writeSignal(TN_Task);
@@ -40,6 +40,10 @@
                                    break;
                                case 4:
                                    WCSHelper.UpdateStatus(TN_Task, "取货完成");
                                    if (TN_Task.S_TYPE.Contains("满托下线"))
                                    {
                                        TaskProcess.writeSignal(TN_Task,4);
                                    }
                                    TaskProcess.OperateStatus(TN_Task, 4);
                                    break;
                                case 5:
@@ -47,6 +51,10 @@
                                    break;
                                case 6:
                                    WCSHelper.UpdateStatus(TN_Task, "卸货完成");
                                    if (TN_Task.S_TYPE.Contains("空托上线"))
                                    {
                                        TaskProcess.writeSignal(TN_Task,6);
                                    }
                                    TaskProcess.OperateStatus(TN_Task, 6);
                                    break;
                                #endregion
@@ -70,18 +78,18 @@
                                    //WMSHelper.End(TN_Task);
                                    break;
                            }
                            WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
                            WCSHelper.AddActionRecord(model.task_no, model.state, model.forklift_no, model.ext_data);
                            //调用第三方接口(如果有)TaskProcess.ReportStatus
                            TaskProcess.ThirdReportStatus(TN_Task, model.State, model.ForkliftNo);
                            TaskProcess.UpdateAgvNo(TN_Task, model.ForkliftNo);
                            if (AlterControlSwitch01 == "1") TaskProcess.GeneralInterFaceFunc(TN_Task, model.State.ToString(), model.ForkliftNo);
                            TaskProcess.ThirdReportStatus(TN_Task, model.state, model.forklift_no);
                            TaskProcess.UpdateAgvNo(TN_Task, model.forklift_no);
                            if (AlterControlSwitch01 == "1") TaskProcess.GeneralInterFaceFunc(TN_Task, model.state.ToString(), model.forklift_no);
                        }
                    }
                    else {
                        LogHelper.Info("安全请求交互");
                        //安全请求等
                        TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData);
                        WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
                        TaskProcess.OperateReq(model.task_no, model.state, model.forklift_no, model.ext_data);
                        WCSHelper.AddActionRecord(model.task_no, model.state, model.forklift_no, model.ext_data);
                    }
                }
            }
HH.WCS.Mobox3.NongFuLinZhi/core/WMSCore.cs
@@ -87,7 +87,11 @@
                                    N_CNTR_COUNT = 1,
                                    S_CNTR_CODE = a.S_CNTR_CODE,
                                    N_START_LAYER = startinfo.N_CURRENT_NUM,
                                    N_END_LAYER = endinfo.N_CURRENT_NUM + 1
                                    N_END_LAYER = endinfo.N_CURRENT_NUM + 1,
                                    S_TRAY_TYPE = a.S_TRAY_TYPE,
                                    S_WORK_NO = a.S_WORK_NO,
                                    S_ITEM_CODE = a.S_ITEM_CODE,
                                    S_NOTE = a.S_NOTE
                                };
                                if (WCSHelper.CreateTask(wcsTask))
                                {
HH.WCS.Mobox3.NongFuLinZhi/models/LinZhiWorkOrder.cs
@@ -4,7 +4,7 @@
namespace HH.WCS.Mobox3.NFLZ
{
    [SugarTable("TN_LinZhiorkOrder")]
    [SugarTable("TN_LinZhiWorkOrder")]
    public class LinZhiWorkOrder : BaseModel
    {
        /// <summary>
HH.WCS.Mobox3.NongFuLinZhi/process/DeviceProcess.cs
@@ -520,7 +520,7 @@
                {
                    LogHelper.Info("即产即用工单");
                    //即产即用在起点为线边
                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "瓶胚即产即用满框" && a.enable == 1).FirstOrDefault();
                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "瓶胚即产满框" && a.enable == 1).FirstOrDefault();
                    if (bcpInfo != null)
                    {
                        startArea = bcpInfo.areaCode;
@@ -574,19 +574,19 @@
                                    //初始状态,无托盘,直接上满托(非即产即用需要校验 套袋完成,即产即用直接使用)
                                    if (workInfo.S_UsingNow == "Y")
                                    {
                                        LogHelper.Info($"瓶胚即产即用满框 查找");
                                        LogHelper.Info($"瓶胚即产满框 查找");
                                        startLoca = getFDSXArea(db, workInfo, startArea);
                                    }
                                    else
                                    {
                                        LogHelper.Info($"瓶胚非即产库区 查找");
                                        LogHelper.Info($"瓶胚翻斗机非即产满框 查找");
                                        startLoca = getFDSXArea(db, workInfo, startArea);
                                    }
                                    if (startLoca != null)
                                    {
                                        //创建作业
                                        WMSHelper.CreateOpTask(startLoca.S_CODE, locCode, "出库", fullTaskType, startLoca.LocCntrRel.S_CNTR_CODE);
                                        WMSHelper.CreateOpTask(startLoca.S_CODE, locCode, "出库", fullTaskType, startLoca.LocCntrRel.S_CNTR_CODE, "", "", workInfo.S_WorkNo);
                                    }
                                }
                                else
@@ -594,7 +594,7 @@
                                    LogHelper.Info($"瓶坯翻斗机上有空托盘,生成空托下线任务,瓶坯翻斗机点位:{plc.TN_Location[0]}");
                                    //创建作业
                                    WMSHelper.CreateOpTask(locCode, "", "入库", emptyTaskType, plcLoca.S_CNTR_CODE);
                                    WMSHelper.CreateOpTask(locCode, "", "入库", emptyTaskType, plcLoca.S_CNTR_CODE, "", "", workInfo.S_WorkNo);
                                }
                            }
                        }
@@ -682,14 +682,14 @@
                                    if (startLoca != null)
                                    {
                                        //创建作业
                                        WMSHelper.CreateOpTask(startLoca.S_CODE, locCode, "出库", fullTaskType, startLoca.LocCntrRel.S_CNTR_CODE);
                                        WMSHelper.CreateOpTask(startLoca.S_CODE, locCode, "出库", fullTaskType, startLoca.LocCntrRel.S_CNTR_CODE,"","",workInfo.S_WorkNo);
                                    }
                                }
                                else
                                {
                                    LogHelper.Info($"瓶盖翻斗机上有空托盘,生成空托下线任务,瓶盖翻斗机点位:{locCode}");
                                    //创建作业
                                    WMSHelper.CreateOpTask(locCode, "", "入库", emptyTaskType, plcLoca.S_CNTR_CODE);
                                    WMSHelper.CreateOpTask(locCode, "", "入库", emptyTaskType, plcLoca.S_CNTR_CODE,"","",workInfo.S_WorkNo);
                                }
                            }
                        }
@@ -837,7 +837,7 @@
                            if (startLoca != null)
                            {
                                //创建作业
                                WMSHelper.CreateOpTask(startLoca.S_CODE, deviceBit, "出库", taskType, startLoca.LocCntrRel.S_CNTR_CODE);
                                WMSHelper.CreateOpTask(startLoca.S_CODE, deviceBit, "出库", taskType, startLoca.LocCntrRel.S_CNTR_CODE, "", "", workInfo.S_WorkNo);
                            }
                            else
                            {
@@ -858,10 +858,10 @@
                            else
                            {
                                cntrCode = cntrInfo.S_CNTR_CODE;
                                TaskProcess.BindCntrItem(deviceBit, cntrCode, workInfo.S_ItemCode, "");
                                TaskProcess.BindCntrItem(cntrCode, workInfo.S_ItemCode, "", "");
                            }
                            //创建作业
                            WMSHelper.CreateOpTask(deviceBit, "", "入库", taskType, cntrCode);
                            WMSHelper.CreateOpTask(deviceBit, "", "入库", taskType, cntrCode,"","",workInfo.S_WorkNo);
                        }
                    }
                }
@@ -923,7 +923,7 @@
                    if ((LineState[mst.S_START_LOC.Trim()].status == "112100" || LineState[mst.S_START_LOC.Trim()].status == "112200") && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
                    {
                        //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1101, 18);
                        NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 1101, "18");
                        NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1101");
                        TaskProcess.sendSing(mst, 1101);
                    }
                }
@@ -932,11 +932,10 @@
                    LogHelper.Info($"查询输送线允许取满信号 允许取满信号={LineState[mst.S_START_LOC.Trim()].status} 时间间隔={DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds}", "安全交互");
                    if (mst.S_TYPE.Contains("满托下线"))
                    {
                        if ((LineState[mst.S_START_LOC.Trim()].status == "1122" || LineState[mst.S_START_LOC.Trim()].status == "1221") && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
                        if ((LineState[mst.S_START_LOC.Trim()].status.Substring(4,2) == "01" || LineState[mst.S_START_LOC.Trim()].status.Substring(6,2) == "02") && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
                        {
                            //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1101, 18);
                            NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 1101, "18");
                            TaskProcess.sendSing(mst, 1101);
                            NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1101");
                        }
                    }
                    else
@@ -944,7 +943,7 @@
                        if (LineState[mst.S_START_LOC.Trim()].status == "1220" && DateTime.Now.Subtract(LineState[mst.S_START_LOC.Trim()].modify).TotalSeconds < 10)
                        {
                            //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1101, 18);
                            NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 1101, "18");
                            NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1101");
                            TaskProcess.sendSing(mst, 1101);
                        }
                    }
@@ -968,7 +967,7 @@
                        if ((LineState[mst.S_END_LOC.Trim()].status == "112100" || LineState[mst.S_END_LOC.Trim()].status == "112200") && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
                        {
                            //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1103, 18);
                            NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 1103, "18");
                            NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1103");
                            TaskProcess.sendSing(mst, 1103);
                        }
                    }
@@ -977,10 +976,10 @@
                        LogHelper.Info($"查询输送线允许补空信号 允许补空信号={LineState[mst.S_END_LOC.Trim()].status} 时间间隔={DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds}", "安全交互");
                        if (mst.S_TYPE.Contains("空托上线"))
                        {
                            if ((LineState[mst.S_END_LOC.Trim()].status == "1122" || LineState[mst.S_END_LOC.Trim()].status == "1221") && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
                            if ((LineState[mst.S_END_LOC.Trim()].status.Substring(4,2) == "01" || LineState[mst.S_END_LOC.Trim()].status.Substring(6,2) == "02") && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
                            {
                                //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1103, 18);
                                NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 1103, "18");
                                NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1103");
                                TaskProcess.sendSing(mst, 1103);
                            }
                        }
@@ -989,7 +988,7 @@
                            if (LineState[mst.S_END_LOC.Trim()].status == "1021" && DateTime.Now.Subtract(LineState[mst.S_END_LOC.Trim()].modify).TotalSeconds < 10)
                            {
                                //NDCHelper.ChangeParam(mst.S_CODE.Trim(), 1103, 18);
                                NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 1103, "18");
                                NDCApi.ChangeOrderParam(mst.S_CODE.Trim(), 18, "1103");
                                TaskProcess.sendSing(mst, 1103);
                            }
                        }
HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
@@ -146,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("满托上线"))
            {
@@ -176,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}");
                }
@@ -185,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}");
            }
        }
@@ -656,7 +662,6 @@
            if (state == 6)//卸货完成
            {
                claimGoodsTime(mst, state);
                writeSignal(mst);
                CacheBitUpdate(mst, false);
            }
            if (state == 7)
@@ -730,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);
@@ -746,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}");
                }
HH.WCS.Mobox3.NongFuLinZhi/wms/WMSHelper.cs
@@ -602,7 +602,7 @@
            //修改作业状态 重新启动
            wmsTask.N_B_STATE = 2;
            WMSHelper.UpdateTaskState(wmsTask);
            WCSHelper.UpdateStorStatus(task.S_CNTR_CODE, 4);
            //WCSHelper.UpdateStorStatus(task.S_CNTR_CODE, 4);
        }