liudl
5 天以前 04611220d6ec06fb328c85210b5e3d3e305cfb3d
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -29,6 +29,7 @@
    private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
    private static int fendao = 1;
    public static void OnChangeEvent(object sender, EventArgs e)
    {
@@ -218,11 +219,16 @@
                        //修改led屏信息
                        var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == taskInfo.EndStation && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business);
                        ledText += $"任务类型:{modTask.TaskType.GetDescription()}\n\n";
                        ledText += $"任务号:{modTask.TaskNo}\n";
                        //ledText += $"任务类型:{modTask.TaskType.GetDescription()}\n\n";
                        //ledText += $"任务号:{modTask.TaskNo}\n";
                        //ledText += $"托盘号:{modTask.PalletNo}\n\n";
                        //ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
                        //ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}";
                        ledText += $"名称:{modTask.SkuName}\n";
                        ledText += $"批号:{modTask.LotNo}\n";
                        ledText += $"入库数量:{modTask.Qty}\n";
                        ledText += $"托盘号:{modTask.PalletNo}\n\n";
                        ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
                        ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}";
                        LedDisplay(ledDevice.LedIP, ledText);
                    }
                }
@@ -453,13 +459,18 @@
                                    // led显示内容
                                    var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modTask.StartLocate && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business);
                                    ledText += $"入库完成\n\n";
                                    //ledText += $"入库完成\n\n";
                                    ledText += $"任务号:{modTask.TaskNo}\n";
                                    //ledText += $"任务号:{modTask.TaskNo}\n";
                                    //ledText += $"托盘号:{modTask.PalletNo}\n\n";
                                    //ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
                                    //ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}";
                                    ledText += $"名称:{modTask.SkuName}\n";
                                    ledText += $"批号:{modTask.LotNo}\n";
                                    ledText += $"入库数量:{modTask.Qty}\n";
                                    ledText += $"托盘号:{modTask.PalletNo}\n\n";
                                    ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
                                    ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}";
                                    LedDisplay(ledDevice.LedIP, ledText);
                                    // 此处添加不空跑业务
@@ -704,9 +715,9 @@
                        //listResult.Add(plcConn.SetPlcDBValue(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, storey));
                        PlcTaskInfo taskInfo = new PlcTaskInfo();
                        taskInfo = PLCCommon.GetEndPai(modTask.EndRoadway.Substring(1, 2), modTask.EndLocate.Substring(2, 2),
                                        modTask.EndLocate.Substring(0, 2), modTask.EndLocate.Substring(4, 2),
                                        modTask.EndLocate.Substring(6, 2));
                        taskInfo = PLCCommon.GetEndPai(endLocat.Substring(1, 2), endLocat.Substring(2, 2),
                                        endLocat.Substring(0, 2), endLocat.Substring(4, 2),
                                        endLocat.Substring(6, 2));
                        // 给PLC写入任务数据
                        var listResult = new List<Result>();
@@ -727,7 +738,7 @@
                        if (listResult.All(s => s.IsSucceed))
                        {
                            // 向跺机写入控制流程字
                            var res = modDevice.PLCUtil.SetPlcDBValue(modDevice.PosType, modDevice.WcsPos, "862");
                            var res = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "862");//写入开始放货信号
                            var modcTaskMonitor = new WcsTaskMonitor()
                            {
                                TaskNo = modTask.TaskNo,
@@ -924,6 +935,7 @@
    private static void ConveyorLine(WcsDeviceDto modDevice)
    {
        var plcConn = modDevice.PLCUtil;
        // 获取楼层数ceshi
        var louCeng = PLCCommon.GetRoadwayByStationNew(modDevice.StationNum);
        if (louCeng == "") 
@@ -1069,13 +1081,18 @@
                            // led显示内容
                            try
                            {
                                ledText += $"任务类型:{taskInfo.TaskType.GetDescription()}\n\n";
                                //ledText += $"任务类型:{taskInfo.TaskType.GetDescription()}\n\n";
                                ledText += $"任务号:{taskInfo.TaskNo}\n";
                                //ledText += $"任务号:{taskInfo.TaskNo}\n";
                                //ledText += $"托盘号:{taskInfo.PalletNo}\n\n";
                                //ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
                                //ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
                                ledText += $"名称:{taskInfo.SkuName}\n";
                                ledText += $"批号:{taskInfo.LotNo}\n";
                                ledText += $"入库数量:{taskInfo.Qty}\n";
                                ledText += $"托盘号:{taskInfo.PalletNo}\n\n";
                                ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
                                ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
                                LedDisplay(modDevice.LedIP, ledText);
                                
                            }
@@ -1251,11 +1268,15 @@
                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                            
                            var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business);
                            ledText += $"任务类型:{taskInfo.TaskType.GetDescription()}\n\n";
                            ledText += $"任务号:{taskInfo.TaskNo}\n";
                            //ledText += $"任务类型:{taskInfo.TaskType.GetDescription()}\n\n";
                            //ledText += $"任务号:{taskInfo.TaskNo}\n";
                            //ledText += $"托盘号:{taskInfo.PalletNo}\n\n";
                            //ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
                            //ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
                            ledText += $"名称:{taskInfo.SkuName}\n\n";
                            ledText += $"批号:{taskInfo.LotNo}\n";
                            ledText += $"入库数量:{taskInfo.Qty}\n";
                            ledText += $"托盘号:{taskInfo.PalletNo}\n\n";
                            ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
                            ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
                            LedDisplay(modDevice.LedIP, ledText);
                        }
                    }
@@ -1280,16 +1301,16 @@
                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "托盘码");
                    var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
                    // 获取工位任务号信息
                    var modPosTaskNo = modDevice.listStation.FirstOrDefault(m => m.Text == "任务号");
                    var (taskRes, taskNoVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTaskNo.PlcPos);
                    if (!res.IsSucceed || !taskRes.IsSucceed)
                    {
                        break;
                    }
                    //var modPosTaskNo = modDevice.listStation.FirstOrDefault(m => m.Text == "任务号");
                    //var (taskRes, taskNoVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTaskNo.PlcPos);
                    //if (!res.IsSucceed || !taskRes.IsSucceed)
                    //{
                    //    break;
                    //}
                    string pallet = palletVal.ToString();
                    string taskNo = taskNoVal.ToString();
                    //string taskNo = taskNoVal.ToString();
                    // 获取任务信息
                    var modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.PalletNo == pallet && s.Status == TaskStatusEnum.Doing && s.TaskType == TaskTypeEnum.In && s.TaskNo == taskNo);
                    var modTask = _db.Queryable<WcsTask>().OrderByDescending(s=>s.CreateTime).First(s => s.IsDelete == false && s.PalletNo == pallet && s.Status == TaskStatusEnum.Doing && s.TaskType == TaskTypeEnum.In );//&& s.TaskNo == taskNo
                    if (modTask == null)
                    {
                        // 此托盘没有对应的转移任务 led显示
@@ -1458,14 +1479,19 @@
                        // led显示内容
                        // 根据目标工位号获取对应的LEDIP地址
                        var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId);
                        //var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId);
                        
                        ledText += $"出库完成\n\n";
                        ledText += $"任务号:{taskInfo.TaskNo}\n";
                        ledText += $"托盘号:{taskInfo.PalletNo}\n\n";
                        ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
                        ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
                        LedDisplay(ledDevice.LedIP, ledText);
                        //ledText += $"出库完成\n\n";
                        ////ledText += $"任务号:{taskInfo.TaskNo}\n";
                        ////ledText += $"托盘号:{taskInfo.PalletNo}\n\n";
                        ////ledText += $"起始位:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
                        ////ledText += $"目标位:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
                        //ledText += $"名称:{taskInfo.SkuName}\n";
                        //ledText += $"批号:{taskInfo.LotNo}\n";
                        //ledText += $"出库数量:{taskInfo.Qty}\n";
                        //ledText += $"分配数量:{taskInfo.CompleteQty}\n";
                        //ledText += $"托盘号:{taskInfo.PalletNo}\n\n";
                        //LedDisplay(ledDevice.LedIP, ledText);
                    }
                    // 反馈WMS出库完成
                    //TaskReques taskReques = new TaskReques();
@@ -1545,11 +1571,17 @@
                        // led显示内容
                        var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId);
                        
                        ledText += $"出库完成\n\n";
                        ledText += $"任务号:{modTask.TaskNo}\n";
                        ledText += $"出库完成\n";
                        //ledText += $"任务号:{modTask.TaskNo}\n";
                        //ledText += $"托盘号:{modTask.PalletNo}\n\n";
                        //ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
                        //ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}";
                        ledText += $"名称:{modTask.SkuName}\n";
                        ledText += $"批号:{modTask.LotNo}\n";
                        ledText += $"出库数量:{modTask.Qty}\n";
                        ledText += $"分配数量:{modTask.CompleteQty}\n";
                        ledText += $"托盘号:{modTask.PalletNo}\n\n";
                        ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
                        ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}";
                        LedDisplay(ledDevice.LedIP, ledText);
                    }
                    #endregion
@@ -2489,6 +2521,7 @@
                    {
                        lock (OLock)
                        {
                            Thread.Sleep(2000);
                            // 根据工位号,获取托盘号
                            var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false);
                            // 根据工位号获取 托盘线该工位号的配置信息
@@ -2587,6 +2620,10 @@
                            }
                            else
                            {
                                if (string.IsNullOrEmpty(palletNo))
                                {
                                    break;
                                }
                                // 根据托盘号,将组托信息插入boxinfolog表 并删除boxinfo表数据
                                var boxInfoList = _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.PalletNo == palletNo).ToList();
                                if (boxInfoList.Count <= 0)
@@ -2597,29 +2634,30 @@
                                    var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234");
                                    if (retVal.IsSucceed)
                                    {
                                        //更新任务表数量信息
                                        checkTaskMedel.Qty = 0;
                                        _db.Updateable(checkTaskMedel).ExecuteCommand();
                                        // 写入组托回复流程字
                                        retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
                                    }
                                    break;
                                }
                                #region
                                //判断托盘上的箱码是否已组盘
                                foreach (var item in boxInfoList)
                                {
                                    var groupBoxno = _db.Queryable<WcsBoxInfoLog>().Where(w => w.BoxNo == item.BoxNo).ToList();
                                    if (groupBoxno.Count>0)
                                    {
                                        Log.Error(string.Format("申请巷道失败,码垛工位{0},箱码信息不存在", modDevice.StationNum));
                                        // 写入交互工位目标地址
                                        var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234");
                                        if (retVal.IsSucceed)
                                        {
                                            // 写入组托回复流程字
                                            retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
                                        }
                                        break;
                                    }
                                }
                                //var groupBoxno = _db.Queryable<WcsBoxInfoLog>().Where(w => w.BoxNo == item.BoxNo).ToList();
                                //if (groupBoxno.Count>0)
                                //{
                                //    Log.Error(string.Format("申请巷道失败,码垛工位{0},箱码信息不存在", modDevice.StationNum));
                                //    // 写入交互工位目标地址
                                //    var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234");
                                //    if (retVal.IsSucceed)
                                //    {
                                //        // 写入组托回复流程字
                                //        retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
                                //    }
                                //    break;
                                //}
                                #endregion
                                // 组托成功后将信息存到log表
                                string sqlStr = $"insert into WCSBoxInfoLog select * from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'";
                                int insertCount = _db.Ado.ExecuteCommand(sqlStr);
@@ -2628,10 +2666,6 @@
                                    string sqlStr2 = $"delete from WCSBoxInfo where  IsDelete=0 and PalletNo='{palletNo}'";
                                    _db.Ado.ExecuteCommand(sqlStr2);
                                }
                                //组盘成功后清空分拣表当前托盘上物料数量
                                checkTaskMedel.Qty = 0;
                                _db.Updateable(checkTaskMedel).ExecuteCommand();
                                // 向WMS申请巷道
                                var http = new HttpService();
                                string TaskNo = "", EndLocate = "";
@@ -2640,10 +2674,23 @@
                                if (strMsg.Contains("-1"))
                                {
                                    Log.Error(string.Format("申请巷道失败,码垛工位{0};原因{1}", modDevice.StationNum, strMsg));
                                    // 写入交互工位目标地址
                                    var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234");
                                    if (retVal.IsSucceed)
                                    {
                                        //更新任务表数量信息
                                        checkTaskMedel.Qty = 0;
                                        _db.Updateable(checkTaskMedel).ExecuteCommand();
                                        // 写入组托回复流程字
                                        retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50");
                                    }
                                    break;
                                }
                                else
                                {
                                    //组盘成功后清空分拣表当前托盘上物料数量
                                    checkTaskMedel.Qty = 0;
                                    _db.Updateable(checkTaskMedel).ExecuteCommand();
                                    //判断是否结批中
                                    var (res, jiepi) = plcConn.GetPlcDBValue(checkTaskMedel.PosType, modDevice.DbNumber, checkTaskMedel.PosLot);
                                    if (jiepi == 2)//结批中