IPC-610
2024-10-20 696b87e0f494eff98e1646fbde133430f22b1543
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)