IPC-610
2024-10-20 696b87e0f494eff98e1646fbde133430f22b1543
bug修复
4个文件已修改
177 ■■■■■ 已修改文件
Admin.NET/WCS.Application/PLC/PLCCommon.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/PLC/PLCService.cs 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/PLC/PLCTaskAction.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Util/LedDll.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/PLC/PLCCommon.cs
@@ -328,7 +328,7 @@
    public static PLCUtil GetPlcIp(string startStation) 
    {
        string strIp = "";
        var conveyList1 = new List<string>() { "147", "145", "139", "137", "129", "127", "121", "119", "111", "109", "103", "101", "093", "091", "085", "083", "075", "073", "067", "065","033" };
        var conveyList1 = new List<string>() { "147", "145", "139", "137", "129", "127", "121", "119", "111", "109", "103", "101", "093", "091", "085", "083", "075", "073", "067", "065","033","039","044" ,"051","059"};
        var conveyList2 = new List<string>() { "205", "234", "252", "254", "260", "262", "270", "272", "278", "280", "288", "290", "294", "301", "307", "309", "315", "317", "325", "327", "331", "337" };
        var conveyList3 = new List<string>() { "401", "402", "405", "406", "409", "410", "413", "414", "417", "418", "421", "422", "425", "426", "429", "430", "433", "434", "437", "438" };
        if (conveyList1.Contains(startStation))
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -64,7 +64,7 @@
                // 跺机空闲,获取出库任务、移库任务
                {
                    // 获取任务信息
                    var modTask = _db.Queryable<WcsTask>().OrderBy(m => m.CreateTime).OrderBy(m => m.Levels, OrderByType.Asc)
                    var modTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime)
                        .First(s => s.Status == TaskStatusEnum.Wait && (s.TaskType == TaskTypeEnum.Out || s.TaskType == TaskTypeEnum.Move)
                        && s.StartRoadway == modDevice.StationNum);
                    if (modTask == null)
@@ -422,7 +422,7 @@
                                        }
                                        else
                                        {
                                            Log.Error(string.Format("任务反馈失败:StatusCode:{0};Msg:{1}", modResponseTask.StatusCode, modResponseTask.Msg));
                                            Log.Error(string.Format("c:StatusCode:{0};Msg:{1}", modResponseTask.StatusCode, modResponseTask.Msg));
                                        }
                                    }
                                    // 根据任务号获取起始工位地址,根据起始工位地址获取LEDIP 推送到LED屏幕。
@@ -897,11 +897,7 @@
                    // 申请巷道
                    string strMsg = "";
                    string taskModel = "";
                    // 判断是否演示模式
                    //if (PLCTaskAction.boDemo)
                    //{
                    //    taskModel = "1";// 演示模式
                    //}
                    // 获取工位托盘码信息
                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "托盘码");
                    var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
@@ -909,6 +905,46 @@
                    {
                        break;
                    }
                    var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "目的工位");
                    //判断入库锁定是否打开
                    if (PLCTaskAction.boEnterLock)
                    {
                        var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
                        if (res350.IsSucceed && palletVal350 != "350")
                        {
                            LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "申请入库 " + $"入库任务已锁定,请解锁后重试", "托盘号:" + palletVal);
                        }
                        // 写入输送线退回指令
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        if (ret.IsSucceed)
                        {
                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
                        }
                        break;
                    }
                    if (palletVal == null)
                    {
                        var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
                        if (res350.IsSucceed && palletVal350 != "350")
                        {
                            LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "申请入库 " + $"扫描托盘号失败!", "托盘号:" + palletVal);
                        }
                        // 写入输送线退回指令
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        if (ret.IsSucceed)
                        {
                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
                        }
                        break;
                    }
                    var http = new HttpService();
                    string TaskNo = "", EndLocate = "";
                    strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo);
@@ -943,13 +979,34 @@
                            // 通知任务界面任务已存在更新 请更新界面
                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                            // led显示内容
                            LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "申请入库 " + $"目标巷道:{EndLocate}", "托盘号:" + palletVal);
                            try
                            {
                                LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "申请入库 " + $"目标巷道:{taskInfo.EndRoadway}取货工位:{EndLocate}", "托盘号:" + palletVal);
                            }
                            catch (Exception ex)
                            {
                                Log.Error(ex.Message);
                            }
                        }
                    }
                    else
                    {
                        // 申请巷道失败!LED显示
                        var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
                        if (res350.IsSucceed && palletVal350 != "350")
                        {
                            LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "申请入库 " + $"申请巷道失败:{strMsg}", "托盘号:" + palletVal);
                        }
                        // 写入输送线退回指令
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        if (ret.IsSucceed)
                        {
                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
                        }
                        // 申请巷道失败!
                        Log.Error(string.Format($"申请巷道失败:{strMsg},读写plc错误"));
                    }
                }
@@ -1034,7 +1091,7 @@
                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                            // led显示内容
                            LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "入库中 " + $"目标巷道:{endLocatVlue}", "托盘号:" + palletVal);
                            LedDisplay(modDevice.LedIP, "工位:" + modDevice.StationNum, "申请入库 " + $"目标巷道:{modTask.EndRoadway}取货工位:{endLocatVlue}", "托盘号:" + palletVal);
                        }
                    }
@@ -1421,7 +1478,7 @@
                        var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == false);
                        if (modTask == null)
                        {
                            Log.Error(string.Format($"工位号:{modDevice.StationNum}空托盘到达,未找到对应的任务!任务号{tasknoVal};"));
                            //Log.Error(string.Format($"工位号:{modDevice.StationNum}空托盘到达,未找到对应的任务!任务号{tasknoVal};"));
                            break;
                        }
                        // 写入plc流程字90
@@ -1963,7 +2020,10 @@
            LedDll Led = new LedDll();
            Led.LEDstr(ip, top, content, foot);
        }
        catch { }
        catch (Exception ex)
        {
            Log.Error(ex.Message);
        }
    }
    private static void Test(WcsDeviceDto modDevice)
Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -436,8 +436,10 @@
                                        {
                                            bl = true;
                                        }
                                        if (bl != modDevice.BoHaveItem)
                                        {
                                            modDevice.BoHaveItem = bl;
                                            var modInfo = new PlcPositionInfo() { Type = modPlc.Type, StationNum = modDevice.StationNum.PadLeft(3, '0'), BoHaveItem = bl };
                                            HubUtil.PublicPosition(modInfo);
                                            UpdatePosition(modInfo);
@@ -459,7 +461,7 @@
                            }
                        }
                    }
                    Thread.Sleep(300);
                    Thread.Sleep(3000);
                }
                catch (Exception ex)
                {
Admin.NET/WCS.Application/Util/LedDll.cs
@@ -988,6 +988,93 @@
    }
    /// <summary>
    /// LED显示
    /// </summary>
    /// <param name="m_Ip">LED屏幕IP地址</param>
    /// <param name="m_text">显示内容</param>
    public void ConsoleLeds(string m_Ip, string m_text)
    {
        m_ledWidth = 256;
        m_ledHeight = 160;
        m_ledColor = 1;
        m_ledGrayLevel = 0;
        try
        {
            Logger logger = LogManager.GetCurrentClassLogger();
            int nResult;
            LedDll.COMMUNICATIONINFO CommunicationInfo = new LedDll.COMMUNICATIONINFO();
            CommunicationInfo.LEDType = 0;
            //TCP通讯********************************************************************************
            CommunicationInfo.SendType = 0;                                                     // 设为固定IP通讯模式,即TCP通讯
            CommunicationInfo.IpStr = m_Ip;                                                     // 给IpStr赋值LED控制卡的IP
            CommunicationInfo.LedNumber = 1;                                                    // LED屏号为1,注意socket通讯和232通讯不识别屏号,默认赋1就行了,485必需根据屏的实际屏号进行赋值
            #region 创建一个节目
            IntPtr hProgram;                                                                    // 节目句柄
                                                                                                //注意此处屏宽高及颜色参数必需与设置屏参的屏宽高及颜色一致,否则发送时会提示错误
            hProgram = LedDll.LV_CreateProgramEx(m_ledWidth, m_ledHeight, m_ledColor, m_ledGrayLevel, 0);
            nResult = LedDll.LV_AddProgram(hProgram, 0, 0, 1);                                  // 添加一个节目,参数说明见函数声明注示
            if (nResult != 0)
            {
                string ErrStr = LedDll.LS_GetError(nResult);                                           // liudl  此处需记录Log
                throw new Exception(ErrStr);
            }
            #endregion
            #region 创建区域
            // 区域范围变量 参数设定
            LedDll.AREARECT AreaRect = new LedDll.AREARECT();//区域坐标属性结构体变量
            AreaRect.left = 0;
            AreaRect.top = 0;
            AreaRect.width = m_ledWidth;
            AreaRect.height = 106;
            LedDll.LV_AddImageTextArea(hProgram, 0, 2, ref AreaRect, 1);
            // 区域字体变量 参数设定
            LedDll.FONTPROP FontProp = new LedDll.FONTPROP();//文字属性
            FontProp.FontName = "宋体";
            FontProp.FontSize = 20;
            FontProp.FontColor = LedDll.COLOR_RED;
            FontProp.FontBold = 1;
            // 区域字体运行速度 带入方式
            LedDll.PLAYPROP PlayProp = new LedDll.PLAYPROP();
            PlayProp.InStyle = 0;
            PlayProp.DelayTime = 3;
            PlayProp.Speed = 2;
            // 多文本区域 用于显示托盘信息
            nResult = LedDll.LV_AddMultiLineTextToImageTextArea(hProgram, 0, 2, LedDll.ADDTYPE_STRING, m_text, ref FontProp, ref PlayProp, 0, 0);
            // 发送到LED屏幕
            nResult = LedDll.LV_Send(ref CommunicationInfo, hProgram);
            LedDll.LV_DeleteProgram(hProgram);
            #endregion
            if (nResult != 0)
            {
                string ErrStr;
                ErrStr = LedDll.LS_GetError(nResult);               // liudl 此处需要添加log
                logger.Error("返回错误信息A04:", ErrStr);
            }
        }
        catch (Exception ex)
        {
            // 不抛出异常,防止阻碍主程序运行; Liudl:此处需添加log
            //throw ex;
            Logger logger = LogManager.GetCurrentClassLogger();
            logger.Error("测试trycatch捕捉的信息:", ex.Message);
        }
    }
    /// <summary>
    /// 发送给LED 单独更新字幕区域
    /// </summary>
    /// <param name="m_ip">LED屏幕IP地址</param>