wxw
3 天以前 60f0db204b1ef475b8a14ab309e8eeac0db5e208
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -89,12 +89,18 @@
                    {
                        break;//出库锁定打开则不执行出库任务
                    }
                    //判断该巷道有没有到达取货工位的入库任务,优先执行入库任务再执行移库/出库任务
                    var taskIn = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.TaskType == TaskTypeEnum.In && s.EndRoadway == modDevice.StationNum && !string.IsNullOrEmpty(s.EndLocate));
                    if (taskIn != null)
                    {
                        break;
                    }
                    PlcTaskInfo taskInfo = new PlcTaskInfo();
                    if (modTask.TaskType == TaskTypeEnum.Move)
                    {
                        // 移库目标地址
                        taskInfo = PLCCommon.GetEndPai(modTask.EndRoadway.Substring(1, 2), modTask.EndLocate.Substring(2, 2),
                        taskInfo = PLCCommon.GetEndPai(modTask.EndLocate.Substring(0, 2), modTask.EndLocate.Substring(2, 2),
                                    modTask.EndLocate.Substring(0, 2), modTask.EndLocate.Substring(4, 2),
                                    modTask.EndLocate.Substring(6, 2));
                        
@@ -265,7 +271,7 @@
                        // 写入跺机任务下发完成
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "830");
                        // 将任务待执行改为正在执行
                        // 将移库任务待执行改为正在执行
                        _db.Updateable<WcsTask>()
                            .SetColumns(s => s.Status == TaskStatusEnum.Doing)
                            .Where(s => s.Id == modTask.Id)
@@ -1481,7 +1487,7 @@
                    }
                    //向WMS申请巷道
                    strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo, (int)palletHeightVal);
                    strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo, (int)palletHeightVal, Convert.ToString(palletWeightVal));
                    if (!strMsg.Contains("-1"))
                    {
@@ -2210,7 +2216,7 @@
                        {
                            // 跺机非空闲等待
                            break;
                        }
                        }
                        // 给PLC写入任务数据
                        var listResult = new List<Result>();
@@ -2808,6 +2814,7 @@
                            var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
                            break;
                        }
                        int chaNum = 0;
                        for (int i = 1; i <= boxNum; i++)
                        {
                            // 获取箱条码
@@ -2818,8 +2825,11 @@
                            if (string.IsNullOrEmpty(boxNo))
                            {
                                Log.Error(string.Format("码垛工位{0},箱码为null插码失败!请人工强制结批。", modDevice.StationNum));
                                // 写入插入结果 2:插码失败
                                plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
                                break;
                            }
                            Log.Information($"PLC请求插码,托盘号:{palletNo},箱码:{boxNo}");
                            // 验证箱码表是否存在此箱码
                            var boxInfo = _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.BoxNo == boxNo).ToList();
                            if (boxInfo.Count == 0)
@@ -2844,20 +2854,24 @@
                                plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
                                break;
                            }
                            chaNum++;
                        }
                        // 插码成功
                        var retVal2 = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1");
                        if (retVal2.IsSucceed)
                        if (chaNum == boxNum)
                        {
                            //更新已插码数量
                            checkTaskMedel.BoxCount += boxNum;
                            _db.Updateable(checkTaskMedel).ExecuteCommand();
                        }
                        else
                        {
                            // 写入失败
                            Log.Error(string.Format("写入PLC插码结果失败,码垛工位{1},托盘号{2}", modDevice.StationNum, palletNo));
                        }
                            // 插码成功
                            var retVal2 = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1");
                            if (retVal2.IsSucceed)
                            {
                                //更新已插码数量
                                checkTaskMedel.BoxCount += boxNum;
                                _db.Updateable(checkTaskMedel).ExecuteCommand();
                            }
                            else
                            {
                                // 写入失败
                                Log.Error(string.Format("写入PLC插码结果失败,码垛工位{1},托盘号{2}", modDevice.StationNum, palletNo));
                            }
                        }
                    }
                    break;
                case "40":