wxw
2024-09-28 c74091c0091c32daff05359a2de0f60872e9da71
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -861,6 +861,10 @@
        var plcConn = modDevice.PLCUtil;
        // 获取楼层数ceshi
        var louCeng = PLCCommon.GetRoadwayByStationNew(modDevice.StationNum);
        if (louCeng == "")
        {
            return;
        }
        switch (modDevice.Value.ToString())
        {
            case "320":
@@ -1345,20 +1349,95 @@
            #endregion
            #region 叫空托盘跺
            case "50":
                // plc申请空托
                {
                    // 调用WMS空托出库接口,返回出库任务存入出库表
                    // 写入
                    var strMsg = "";
                    var http = new HttpService();
                    strMsg = http.IssuePlnOutHouseWcs("1", "205");
                    if (!strMsg.Contains("-1"))
                    {
                        // 写入plc流程字60
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "60");
                    }
                    else
                    {
                        // 申请巷道失败!LED显示
                        Log.Error(string.Format($"工位号:{modDevice.StationNum}申请空托跺失败:{strMsg};"));
                    }
                }
                break;
            case "80":
                // 空托盘跺已到位
                {
                    // 调用wms任务出库任务完成
                    // 获取跺机点位配置
                    var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "任务号");
                    var (res, val) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTask.PlcPos);
                    // 根据任务号获取任务信息
                    if (res.IsSucceed)
                    {
                        string tasknoVal = val.ToString();
                        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};"));
                            break;
                        }
                        // 写入plc流程字90
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "90");
                        if (ret.IsSucceed)
                        {
                            // 改变任务状态
                            modTask.Status = TaskStatusEnum.Complete;
                            modTask.FinishDate = DateTime.Now;
                            _db.Updateable(modTask).ExecuteCommand();
                            HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
                            var modTaskMonitor = new WcsTaskMonitor()
                            {
                                TaskNo = modTask.TaskNo,
                                PlcId = modDevice.Id,
                                PlcName = modDevice.Text,
                                PalletNo = modTask.PalletNo,
                                Status = TaskStatusEnum.Complete,
                                StartLocat = modTask.StartLocate,
                                EndLocat = modTask.EndLocate,
                                InteractiveMsg = $"任务完成"
                            };
                            if (modTask.Origin == "WMS")
                            {
                                // 反馈WMS
                                var requestMode = new TaskRequestWMS()
                                {
                                    TaskNo = modTask.TaskNo,
                                    PalletNo = modTask.PalletNo,
                                    TaskType = ((int)TaskTypeEnum.Out).ToString(),
                                    TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
                                };
                                HttpService httpService = new HttpService();
                                var modResponseTask = httpService.RequestTask(requestMode).Result;
                                if (modResponseTask.StatusCode == 0)
                                {
                                    modTaskMonitor.InteractiveMsg = "任务完成,返回给WMS任务完成";
                                }
                                else
                                {
                                    Log.Error(string.Format("任务反馈失败:StatusCode:{0};Msg:{1}", modResponseTask.StatusCode, modResponseTask.Msg));
                                }
                            }
                            // 插入交互日志
                            _db.Insertable(modTaskMonitor).ExecuteCommand();
                            //下发任务日志
                            HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                        }
                    }
                }
                break;
            #endregion
            default: break;
        }
@@ -1724,14 +1803,22 @@
                                if (taskModel != null)
                                {
                                    // 获取入库取货工位
                                    string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2");
                                    string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2");
                                    // 写入托盘输送线码垛工位 目的工位,写入交互流程组托成功 执行入库{若需要可以写入任务号等等其他信息}
                                    var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue);
                                    if (retVal.IsSucceed)
                                    var listResult = new List<Result>();
                                    // 写入托盘输送线码垛工位 目的工位、任务号,写入交互流程组托成功 执行入库{若需要可以写入任务号等等其他信息}
                                    listResult.Add(plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue));
                                    var modPosTask = PLCTaskAction.plcPositions.First(s => s.Text == "任务号");
                                    listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, TaskNo));
                                    var modPosTaskType = PLCTaskAction.plcPositions.First(s => s.Text == "任务类型");
                                    var taskTypeStr = (int)taskModel.TaskType;
                                    listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
                                    if (listResult.All(s => s.IsSucceed))
                                    {
                                        // 写入组托回复流程字
                                        retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
                                        var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
                                        if (retVal.IsSucceed) 
                                        {
                                            // 将入库任务由正在执行改为正在执行