Admin
2025-11-25 18828b299d8208cfba1e70b08ba86b4e9c5b91f5
´úÂë¹ÜÀí/WCS/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SpeStackerCraneJob/SpeStackerCraneJob.cs
@@ -64,6 +64,8 @@
        {
            try
            {
                //WriteLog.Write_Log("23");
                SpeStackerCrane speStackerCrane = (SpeStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                if (speStackerCrane != null)
                {
@@ -76,6 +78,25 @@
                        {
                            CommonStackerCrane_AGVTaskCompletedEventHandler(getStackerObject, speStackerCrane);
                        }
                        //判断当前设备是入库还是出库
                        if (GetDeviceAddress.OutbounMotherChildCartbool(speStackerCrane.DeviceCode))
                        {
                            //判断当前安全门是否为绿色灯
                            if (GetDeviceAddress.ReadAqmDecicStice(1))
                            {
                                return null;
                            }
                        }
                        else
                        {
                            //判断入库端安全门是否正常
                            if (GetDeviceAddress.ReadAqmDecicStice(2))
                            {
                                return null;
                           }
                        }
                        if (getStackerObject.RgvCraneAutoStatusValue == RgvCraneAutoStatus.Automatic &&
                        getStackerObject.StaclerkJobJobStatusValue == RGV_Rgvtaskstutas.Ready && getStackerObject.RgvCraneWorkStatusValue == RGVStepprocess.NoAction)
@@ -139,8 +160,15 @@
            }
            else if (getStackerObject.StaclerkJobJobStatusValue == RGV_Rgvtaskstutas.AbnormalCompletion && getStackerObject.CurrentRgvtaskid != 0 && getStackerObject.CurrentRgvtaskid != 30001)
            {
                //修改任务状态为异常完成
                _taskService.HandleInAbnormal(getStackerObject.CurrentRgvtaskid);
                //写入异常完成报警信息
                speStackerCrane.Communicator.Write<short>("DB101.36", 1);
                //speStackerCrane.Communicator.Write<short>("DB101.36", 1);   //写入报警
                speStackerCrane.SetValue(RGV_taskcoDBName.RGV_taskcomplete, 1);
                speStackerCrane.SetValue(RGV_taskcoDBName.RGV_taskcomplete, 0);
            }
        }
        #endregion
@@ -179,7 +207,7 @@
                    => GoodsPlacedCorridor(RGVTaskdevice),    //子车放货任务(已完成)
                ((int)RGVEquipment.Mothertrailer, RgvEquipmentStatus.HasCargo)
                    => MotherVehicleMovement(RGVTaskdevice),        //(已完成)
                    => MotherVehicleMovement(RGVTaskdevice),        //母车移动(已完成)
                _ => null
            };
@@ -190,23 +218,32 @@
        public Dt_Task? ForkliftUnloading(AGVStation RGVTaskdevice)
        {
            Dt_Task dt_Task = _taskService.GetInkouFinhuoTask(RGVTaskdevice.ChildPosiDeviceCode);
            if (dt_Task == null) return null;
            //判断HCJ是否有货
            if (GetDeviceAddress.HCJIsstock(dt_Task.NextAddress))
            {
                //判断子车是否在接驳台下
                var zichestation = _agvStationService.OutGetZicheDeepHCJ(1061);
                int ziche = GetDeviceAddress.GetEquipmentlocation(zichestation.ChildPosiDeviceCode);
                if ((ziche == zichestation.WaitmomentOne || ziche == zichestation.WaitmomentTwo || ziche == zichestation.MotherCarDeviceCode || ziche == zichestation.MotherCardeputy || ziche == zichestation.HCJStorageaddress) && ziche != 1021)
                if ((ziche == zichestation.WaitmomentOne || ziche == zichestation.WaitmomentTwo || ziche == zichestation.MotherCarDeviceCode || ziche == zichestation.MotherCardeputy || ziche == zichestation.HCJStorageaddress) && ziche != 1021 && ziche !=0)
                {
                    //获取这个接驳台是否有取货任务
                    Dt_Task zitask = _taskService.ViceChariotPickupTask2(RGVTaskdevice.ChildPosiDeviceCode);
                    if (zitask == null)
                    {
                        return dt_Task;
                    }
                }
                else
                {
                    //如果没货,则下发移动任务
                    RGVMovetask(RGVTaskdevice.HCJStorageaddress, RGVTaskdevice.ChildPosiDeviceCode);
                }
            }
            else
            {
                //如果没货,则下发移动任务
                RGVMovetask(RGVTaskdevice.HCJStorageaddress, RGVTaskdevice.ChildPosiDeviceCode);
            }
            return null;
        }
@@ -218,6 +255,10 @@
            //获取子车取货任务
            Dt_Task dt_Task = _taskService.ViceChariotPickupTask(RGVTaskdevice.ChildPosiDeviceCode);
            if (dt_Task == null) return null;
            //判断HCJ站台是否有货
            if (GetDeviceAddress.HCJIsstock(dt_Task.CurrentAddress)) return null;
            if (RGVTaskdevice.Station_Area == 6)    //外侧进取货,则需要判断子车当前位置
            {
                if (getStackerObject.RGVCurrentlocation == RGVTaskdevice.WaitmomentOne)
@@ -244,22 +285,19 @@
                                }
                                else if (mu2 == InMotherVehicle.Motherinlaw)
                                {
                                    RGVMovetask(InMotherVehicle.ZicheMotherinlaw, InMotherVehicle.ChildPosiDeviceCode);
                                    //判断母车是否有任务
                                    Dt_Task muche1task = _taskService.MothermachinemovementTask2(InMotherVehicle.ChildPosiDeviceCode);
                                    if (muche1task == null)
                                    {
                                        RGVMovetask(InMotherVehicle.ZicheMotherinlaw, InMotherVehicle.ChildPosiDeviceCode);
                                    }
                                }
                            }
                        }
                        //=============================新增当去取货时进行判断巷道,看能不能提前拉出母车
                        return dt_Task;
                    }
                    //去掉原因:在该出子车去取货,可直接穿过无货母车,拖车
                    /*else
                    {
                        Dt_Task task = _taskService.MothermachinemovementTask2(RGVTaskdevice.ChildPosiDeviceCode);
                        if (task == null)
                        {
                            RGVMovetask(mu1rgv.Motherinlaw, mu1rgv.ChildPosiDeviceCode);
                        }
                    }*/
                }
                else if (getStackerObject.RGVCurrentlocation == RGVTaskdevice.WaitmomentTwo)    //则需要判断两个母车的位子
@@ -324,6 +362,29 @@
                    {
                        return dt_Task;
                    }
                    //判断内侧是否有货,是否有任务
                    if (int.Parse(dt_Task.TargetAddress) == (int)StorageAisleEnum.LaneThree || int.Parse(dt_Task.TargetAddress) == (int)StorageAisleEnum.LaneFour)
                    {
                        int taraddress = int.Parse(dt_Task.TargetAddress);
                        var InMotherVehicle = _agvStationService.ObtainCcordingTunnel(taraddress);    //获取到需要入库的母车(2巷道)
                        int mu2 = GetDeviceAddress.GetEquipmentlocation(InMotherVehicle.ChildPosiDeviceCode); //此时的RGV应该无货
                        if (GetDeviceAddress.Mucheywhaddres(InMotherVehicle.ChildPosiDeviceCode))   //判断无货
                        {
                            if (mu2 == InMotherVehicle.Motherinlaw)
                            {
                                //判断母车是否有任务
                                Dt_Task muche1task = _taskService.MothermachinemovementTask2(InMotherVehicle.ChildPosiDeviceCode);
                                if (muche1task == null)
                                {
                                    RGVMovetask(InMotherVehicle.ZicheMotherinlaw, InMotherVehicle.ChildPosiDeviceCode);
                                }
                            }
                        }
                    }
                }
                else if (getStackerObject.RGVCurrentlocation == RGVTaskdevice.WaitmomentTwo)    //需要判断3巷道母车是否在取货站台
@@ -434,7 +495,13 @@
                    }
                    else
                    {
                        RGVMovetask(Muche.ZicheMotherinlaw, Muche.ChildPosiDeviceCode);  //如果没有任务,则可以进行移动出来
                        //判断母车是否有任务
                        Dt_Task _Task1 = _taskService.MothermacTask(Muche.ChildPosiDeviceCode);
                        if (_Task1 == null)
                        {
                            RGVMovetask(Muche.ZicheMotherinlaw, Muche.ChildPosiDeviceCode);  //如果没有任务,则可以进行移动出来
                        }
                    }
                }
            }
@@ -480,7 +547,12 @@
                Dt_Task task = _taskService.MothermachinemovementTask2(Muche2.ChildPosiDeviceCode);   //获取到母车移动任务
                if (task == null)
                {
                    RGVMovetask(Muche2.ZicheMotherinlaw, Muche2.ChildPosiDeviceCode);  //如果没有任务,则可以进行移动出来
                    Dt_Task _Task1 = _taskService.MothermacTask(Muche2.ChildPosiDeviceCode);
                    if (_Task1 == null)
                    {
                        RGVMovetask(Muche2.ZicheMotherinlaw, Muche2.ChildPosiDeviceCode);  //如果没有任务,则可以进行移动出来
                    }
                }
            }
            return null;
@@ -511,7 +583,7 @@
                AGVStation Muche2 = _agvStationService.GetMothervehicle(aGVStation.MotherCardeputy);    //内侧母车
                int mucheaddre2 = GetDeviceAddress.GetEquipmentlocation(Muche2.ChildPosiDeviceCode);
                if ((neizichecurraddres == neiziche.WaitmomentOne || neizichecurraddres == neiziche.WaitmomentTwo) && task == null && mucheaddre1 == Muche.Motherinlaw && mucheaddre2 == Muche2.Motherinlaw)
                if ((neizichecurraddres == neiziche.WaitmomentOne || neizichecurraddres == neiziche.WaitmomentTwo) && task == null && neizichecurraddres != neiziche.HCJStorageaddress && mucheaddre1 == Muche.Motherinlaw && mucheaddre2 == Muche2.Motherinlaw)
                {
                    return _Task;
                }
@@ -624,8 +696,14 @@
            Dt_Task Muche2Task = _taskService.ObtainMuChetask(ZicheinnerSide.MotherCardeputy.ToString());
            if (Muche2Task == null) return null;
            //获取子车是否有任务
            Dt_Task zicheTASK = _taskService.GetChariotTaskBool(ZicheinnerSide.ChildPosiDeviceCode);
            if (zicheTASK != null) return null;
            //获取2巷道子车是否有任务
            var muche1 = _agvStationService.GetMothervehicle(ZicheinnerSide.MotherCarDeviceCode);
            Dt_Task Muche1 = _taskService.GetChariotTaskBool(muche1.ChildPosiDeviceCode.ToString());
            if(Muche1!=null) return null;
            return Muche2Task;
        }
@@ -635,15 +713,11 @@
            Dt_Task Muche3Task = _taskService.ObtainMuChetask(ZicheinnerSide.MotherCarDeviceCode.ToString());
            if (Muche3Task == null) return null;
            //判断子车是否有有需要取货的任务
            Dt_Task zicheTASK = _taskService.GetChariotTaskBool(ZicheinnerSide.ChildPosiDeviceCode);
            //判断子车是否有要取HCJ任务
            Dt_Task zicheTASK = _taskService.GetHCJTaskBool(ZicheinnerSide.ChildPosiDeviceCode, ZicheinnerSide.HCJStorageaddress);
            if (zicheTASK != null) return null;
            if (curraddZiChe == ZicheinnerSide.WaitmomentTwo || curraddZiChe == ZicheinnerSide.WaitmomentOne)
            {
                return Muche3Task;
            }
            return null;
            return Muche3Task;
        }
        public Dt_Task? OutboundSideAisle4(int curraddZiChe, AGVStation ZicheinnerSide)
        {
@@ -651,25 +725,16 @@
            Dt_Task Muche4Task = _taskService.ObtainMuChetask(ZicheinnerSide.MotherCardeputy.ToString());
            if (Muche4Task == null) return null;
            //判断是否有需要取HCJ的任务
            Dt_Task zicheTASK = _taskService.GetChariotTaskBool(ZicheinnerSide.ChildPosiDeviceCode);
            if (zicheTASK != null) return null;
            if (curraddZiChe == ZicheinnerSide.WaitmomentOne)
            {
            //判断3巷道是否有出库的任务
            var muche3 = _agvStationService.GetMothervehicle(ZicheinnerSide.MotherCarDeviceCode);
            Dt_Task muchetask = _taskService.OutMothermaTask(muche3.ChildPosiDeviceCode);
            if (muchetask != null) return null;
            }
            if ( || curraddZiChe == ZicheinnerSide.WaitmomentTwo)
            {
                return Muche4Task;
            }
            return null;
            return Muche4Task;
        }
        #endregion
@@ -700,6 +765,16 @@
                            if (muche2addres == muchestation.Motherinlaw)
                            {
                                return dtTasks;
                            }
                            else
                            {
                                //如果母车无货,则下到里面去
                                bool NoCargobool = GetDeviceAddress.Mucheywhaddres(muchestation.ChildPosiDeviceCode);
                                if (NoCargobool)
                                {
                                    //下发母车移动任务
                                    RGVMovetask(muchestation.Motherinlaw, muchestation.ChildPosiDeviceCode);
                                }
                            }
                        }
                    }
@@ -737,6 +812,16 @@
                            {
                                return dtTasks;
                            }
                            else
                            {
                                //如果母车无货,则下到里面去
                                bool NoCargobool = GetDeviceAddress.Mucheywhaddres(muchestation.ChildPosiDeviceCode);
                                if (NoCargobool)
                                {
                                    //下发母车移动任务
                                    RGVMovetask(muchestation.Motherinlaw, muchestation.ChildPosiDeviceCode);
                                }
                            }
                        }
                    }
@@ -754,6 +839,25 @@
                                var mu2rgv = _agvStationService.GetMothervehicle(GdZiche.MotherCardeputy);
                                int mu2 = GetDeviceAddress.GetEquipmentlocation(mu2rgv.ChildPosiDeviceCode);
                                //需要判断母车是否有货,无货则下方至移动任务
                                bool NoCargobool = GetDeviceAddress.Mucheywhaddres(mu1rgv.ChildPosiDeviceCode);
                                if (NoCargobool)
                                {
                                    //下发母车移动任务
                                    RGVMovetask(mu1rgv.Motherinlaw, mu1rgv.ChildPosiDeviceCode);
                                }
                                bool NoCargobool2 = GetDeviceAddress.Mucheywhaddres(mu2rgv.ChildPosiDeviceCode);
                                if (NoCargobool2)
                                {
                                    //下发母车移动任务
                                    RGVMovetask(mu2rgv.Motherinlaw, mu2rgv.ChildPosiDeviceCode);
                                }
                                if (mu1 == mu1rgv.Motherinlaw && mu2 == mu2rgv.Motherinlaw)
                                {
@@ -819,7 +923,12 @@
                            int mucboject4 = GetDeviceAddress.GetEquipmentlocation(muchestation2.ChildPosiDeviceCode);
                            if (mucboject4 == muchestation2.Motherinlaw)
                            {
                                return task;
                                //判断叉车是否有取货任务
                                Dt_Task chachetask = _taskService.ChacheGetFinhuoTask("RGV118");
                                if(chachetask == null)
                                {
                                    return task;
                                }
                            }
                        }
@@ -876,7 +985,7 @@
                GetStackerObject getStackerObject = GetDeviceAddress.GetChildDeviceCode(zichestation.ChildPosiDeviceCode);
                if (getStackerObject.StaclerkJobJobStatusValue != RGV_Rgvtaskstutas.Executing && getStackerObject.RgvCraneAutoStatusValue == RgvCraneAutoStatus.Automatic
                     && (getStackerObject.RGVCurrentlocation == zichestation.WaitmomentOne || getStackerObject.RGVCurrentlocation == zichestation.WaitmomentTwo) && getStackerObject.RGVCurrentlocation != zichestation.ZicheMotherinlaw)
                     && (getStackerObject.RGVCurrentlocation == zichestation.WaitmomentOne || getStackerObject.RGVCurrentlocation == zichestation.WaitmomentTwo || getStackerObject.RGVCurrentlocation==1171) && getStackerObject.RGVCurrentlocation != zichestation.ZicheMotherinlaw)
                {
                    RGVMovetask(GdZiche.Motherinlaw, GdZiche.ChildPosiDeviceCode);
                }
@@ -901,7 +1010,7 @@
                    {
                        RGVMovetask(GdZiche.WaitmomentOne, GdZiche.ChildPosiDeviceCode);
                    }
                    else if (GdZiche.MotherCardeputy == RGVCurrentlocation && RGVCurrentlocation == 1171)
                    else if (GdZiche.MotherCardeputy == RGVCurrentlocation || RGVCurrentlocation == 1171)
                    {
                        RGVMovetask(GdZiche.WaitmomentTwo, GdZiche.ChildPosiDeviceCode);
                    }
@@ -918,14 +1027,19 @@
            {
                if (GdZiche.Station_Area == 5)
                {
                    if (GdZiche.MotherCarDeviceCode == RGVCurrentlocation || GdZiche.HCJStorageaddress == RGVCurrentlocation)
                    Dt_Task task = _taskService.GetChariotTaskBool(GdZiche.ChildPosiDeviceCode);
                    if (task == null && RgvCraneStatusValue == (int)RgvEquipmentStatus.NoCargo)
                    {
                        RGVMovetask(GdZiche.WaitmomentOne, GdZiche.ChildPosiDeviceCode);
                        if (GdZiche.MotherCarDeviceCode == RGVCurrentlocation || GdZiche.HCJStorageaddress == RGVCurrentlocation)
                        {
                            RGVMovetask(GdZiche.WaitmomentOne, GdZiche.ChildPosiDeviceCode);
                        }
                        else if (GdZiche.MotherCardeputy == RGVCurrentlocation)
                        {
                            RGVMovetask(GdZiche.WaitmomentTwo, GdZiche.ChildPosiDeviceCode);
                        }
                    }
                    else if (GdZiche.MotherCardeputy == RGVCurrentlocation)
                    {
                        RGVMovetask(GdZiche.WaitmomentTwo, GdZiche.ChildPosiDeviceCode);
                    }
                }
                else
                {
@@ -952,6 +1066,13 @@
                            }
                        }
                    }else if(task != null && RgvCraneStatusValue == (int)RgvEquipmentStatus.NoCargo)
                    {
                        if (GdZiche.HCJStorageaddress == RGVCurrentlocation)
                        {
                            //如果在2巷道的母车,则可以放子车来1号等待点,如果在HCJ则可以让子车去2号
                            RGVMovetask(GdZiche.WaitmomentTwo, GdZiche.ChildPosiDeviceCode);
                        }
                    }
                }
            }