1
huanghongfeng
10 天以前 0b4792ff8245f9eac16e6d02452eb9a091f6f72b
´úÂë¹ÜÀí/WCS/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SpeStackerCraneJob/GetDeviceAddress.cs
@@ -9,10 +9,12 @@
using WIDESEA_Common.Log;
using System.Xml.Linq;
using SixLabors.ImageSharp;
using WIDESEAWCS_QuartzJob.Service;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
namespace WIDESEAWCS_Tasks.StackerCraneJob
{
    public class GetDeviceAddress
    {
@@ -25,9 +27,30 @@
        {
            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == ChildPosiDeviceCode);
            SpeStackerCrane speStackerCrane = (SpeStackerCrane)device;
            GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane);
            return getStackerObject.RGVCurrentlocation;
            if (speStackerCrane == null) return 0;
            DeviceProDTO? deviceProDTO = speStackerCrane.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == ChildPosiDeviceCode && x.DeviceProParamName == "RGVCurrentlocation" && x.DeviceProParamType == "RGVCurrentlocation");
            int MCGStatus = GetDeviceAddress.RGVGetLine(speStackerCrane, deviceProDTO.DeviceProAddress);
            return MCGStatus;
        }
        /// <summary>
        /// ä¼ å…¥è®¾å¤‡ï¼Œè¿”回设备信息
        /// </summary>
        /// <param name="ChildPosiDeviceCode">设备</param>
        /// <returns></returns>
        public static GetStackerObject GetChildDeviceCode(string ChildPosiDeviceCode)
        {
            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == ChildPosiDeviceCode);
            SpeStackerCrane speStackerCrane = (SpeStackerCrane)device;
            if (speStackerCrane == null)
            {
                Console.WriteLine($"读取到设备为空,设备编号:{ChildPosiDeviceCode},002");
                return null;
            }
            GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane);
            return getStackerObject;
        }
        /// <summary>
        /// ä¼ å…¥è®¾å¤‡ï¼Œè¿”回当前设备信息
@@ -38,9 +61,14 @@
        {
            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == ChildPosiDeviceCode);
            SpeStackerCrane speStackerCrane = (SpeStackerCrane)device;
            if (speStackerCrane == null)
            {
                Console.WriteLine($"读取到设备为空,设备编号:{ChildPosiDeviceCode},003");
                return 0;
            }
            GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane);
            if (getStackerObject.RgvCraneAutoStatusValue == RgvCraneAutoStatus.Automatic &&
                        getStackerObject.StaclerkJobJobStatusValue == RgvJobCraneStatus.Ready && getStackerObject.RgvCraneWorkStatusValue == RGVStepprocess.NoAction)
                        getStackerObject.StaclerkJobJobStatusValue == RGV_Rgvtaskstutas.Ready && getStackerObject.RgvCraneWorkStatusValue == RGVStepprocess.NoAction)
            {
                return getStackerObject.RGVCurrentlocation;
            }
@@ -60,9 +88,14 @@
        {
            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == ChildPosiDeviceCode);
            SpeStackerCrane speStackerCrane = (SpeStackerCrane)device;
            if (speStackerCrane == null)
            {
                Console.WriteLine($"读取到设备为空,设备编号:{ChildPosiDeviceCode},004");
                return 0;
            }
            GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane);
            if (getStackerObject.RgvCraneAutoStatusValue == RgvCraneAutoStatus.Automatic &&
                        getStackerObject.StaclerkJobJobStatusValue == RgvJobCraneStatus.Ready && getStackerObject.RgvCraneWorkStatusValue == RGVStepprocess.NoAction && getStackerObject.RgvCraneStatusValue == RgvEquipmentStatus.NoCargo)
                        getStackerObject.StaclerkJobJobStatusValue == RGV_Rgvtaskstutas.Ready && getStackerObject.RgvCraneWorkStatusValue == RGVStepprocess.NoAction && getStackerObject.RgvCraneStatusValue == RgvEquipmentStatus.NoCargo)
            {
                return getStackerObject.RGVCurrentlocation;
            }
@@ -83,9 +116,14 @@
        {
            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == ChildPosiDeviceCode);
            SpeStackerCrane speStackerCrane = (SpeStackerCrane)device;
            if (speStackerCrane == null)
            {
                Console.WriteLine($"读取到设备为空,设备编号:{ChildPosiDeviceCode},005");
                return false;
            }
            GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane);
            if (getStackerObject.RgvCraneAutoStatusValue == RgvCraneAutoStatus.Automatic &&
                        getStackerObject.StaclerkJobJobStatusValue == RgvJobCraneStatus.Ready && getStackerObject.RgvCraneWorkStatusValue == RGVStepprocess.NoAction)
                        getStackerObject.StaclerkJobJobStatusValue == RGV_Rgvtaskstutas.Ready && getStackerObject.RgvCraneWorkStatusValue == RGVStepprocess.NoAction)
            {
                return true;
            }
@@ -103,7 +141,7 @@
        /// <param name="SCAddress"></param>
        /// <param name="Interactivet"></param>
        /// <returns></returns>
        public static DeviceProDTO? GetDeviceProDTO(CommonStackerCrane Commonstacker, string SCAddress, string Interactivet)
        public static DeviceProDTO? GetDeviceProDTO(CommonConveyorLine Commonstacker, string SCAddress, string Interactivet)
        {
            return Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SCAddress && x.DeviceProParamName == Interactivet && x.DeviceProParamType == "ReadDeviceCommand");
        }
@@ -117,7 +155,7 @@
        /// <returns></returns>
        public static DeviceProDTO? GetRGVDeviceProDTO(SpeStackerCrane Commonstacker, string SCAddress, string Interactivet)
        {
            return Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SCAddress && x.DeviceProParamName == Interactivet && x.DeviceProParamType == "ReadDeviceCommand");
            return Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SCAddress && x.DeviceProParamName == Interactivet && x.DeviceProParamType == "RGV_Rgvtaskstutas");
        }
        /// <summary>
        /// è¯»å–设备信息
@@ -125,7 +163,7 @@
        /// <param name="conveyorLine"></param>
        /// <param name="DeviceProDataBlock"></param>
        /// <returns></returns>
        public static int GetLine(CommonStackerCrane Commonstacker, string DeviceProDataBlock)
        public static int GetLine(CommonConveyorLine Commonstacker, string DeviceProDataBlock)
        {
            return Commonstacker.Communicator.Read<short>(DeviceProDataBlock);
        }
@@ -156,7 +194,7 @@
        {
            //获取需要区分是否去入库与去不合格载货台任务
            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "HCJ2000");
            CommonStackerCrane Commonstacker = (CommonStackerCrane)device;
            CommonConveyorLine Commonstacker = (CommonConveyorLine)device;
            DeviceProDTO? deviceProDTO = GetDeviceProDTO(Commonstacker, Platformnumber.ToString(), "HCJ_GoodsStatus");
            int HCJGStatus = GetLine(Commonstacker, deviceProDTO.DeviceProAddress);
            if (HCJGStatus == 0)    //为无货
@@ -168,5 +206,146 @@
                return false;
            }
        }
        /// <summary>
        /// åˆ¤æ–­è®¾å¤‡æ˜¯å¦æœ‰è´§
        /// </summary>
        public static bool Mucheywhaddres(string DeviceCode)
        {
            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeviceCode);
            SpeStackerCrane Commonstacker = (SpeStackerCrane)device;
            DeviceProDTO? deviceProDTO = Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == DeviceCode && x.DeviceProParamName == "RgvEquipmentStatus" && x.DeviceProParamType == "RgvEquipmentStatus");
            int MCGStatus = GetDeviceAddress.RGVGetLine(Commonstacker, deviceProDTO.DeviceProAddress);
            if(MCGStatus== (int)RgvEquipmentStatus.NoCargo)
            {
                return true;
            }
            return false;
        }
        /// <summary>
        /// åˆ¤æ–­3个安全门状态
        /// </summary>
        public static bool AQMStatus(List<AGVStation> aGVStatList)
        {
            try
            {
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "HCJ2000");
                CommonConveyorLine Commonstacker = (CommonConveyorLine)device;
                foreach (var item in aGVStatList)
                {
                    DeviceProDTO? deviceProDTO = GetDeviceProDTO(Commonstacker, item.Station_code.ToString(), "HCJ_GoodsStatus");
                    int HCJGStatus = GetLine(Commonstacker, deviceProDTO.DeviceProAddress);
                    if (HCJGStatus != 0)    //为无货
                    {
                        return false;
                    }
                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
                throw;
            }
        }
        public static List<string> StationareaList = new List<string>() { "RGV111", "RGV116", "RGV110", "RGV112", "RGV114", "RGV115","RGV118" };
        public static bool OutbounMotherChildCartbool(string DeviceChildCode)
        {
            if (StationareaList.Contains(DeviceChildCode))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        public static bool OutbounMotherChildCartbool2(string DeviceChildCode)
        {
            if (DeviceChildCode=="RGV104" || DeviceChildCode == "RGV107")
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// è¯»å–子是否为手动
        /// </summary>
        public static bool OutRGVStatice()
        {
            bool rgvbool=false;
            foreach (string AGVStation in StationareaList)
            {
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == AGVStation);
                if (device == null) return false;
                SpeStackerCrane Commonstacker = (SpeStackerCrane)device;
                DeviceProDTO? deviceProDTO = Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == AGVStation && x.DeviceProParamName == "RgvCraneAutoStatus" && x.DeviceProParamType == "RgvCraneAutoStatus");
                int RGVState = GetDeviceAddress.RGVGetLine(Commonstacker, deviceProDTO.DeviceProAddress);
                if (RGVState == 0)
                {
                    rgvbool= true;
                }
            }
            return rgvbool;
        }
        public static bool WriteSecurityDoorpolice(string DeviceCode,string WriteType,int Writevalue)
        {
            try
            {
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeviceCode);
                if (device == null) return false;
                CommonConveyorLine commonConveyorLine = (CommonConveyorLine)device;
                DeviceProDTO? deviceProDTO = commonConveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == DeviceCode && x.DeviceProParamName == WriteType && x.DeviceProParamType == "DeviceCommand");
                return commonConveyorLine.Communicator.Write<short>(deviceProDTO.DeviceProDataBlock, (short)Writevalue);
            }
            catch (Exception)
            {
                return false;
                throw;
            }
        }
        public static List<string> AQMListdata = new List<string>() { "AQM001", "AQM002"};
        /// <summary>
        /// åˆ¤æ–­å®‰å…¨é—¨çŠ¶æ€
        /// </summary>
        /// <param name="aqmtype">1为出库安全门3号,2为入库安全门判断</param>
        /// <returns></returns>
        public static bool ReadAqmDecicStice(int aqmtype)
        {
            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "HCJ2000");
            CommonConveyorLine commonConveyorLine = (CommonConveyorLine)device;
            if (aqmtype == 1)
            {
                DeviceProDTO? deviceProDTO = commonConveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == "AQM003" && x.DeviceProParamName == "IndicatorStatus" && x.DeviceProParamType == "ReadDeviceCommand");
                short AQMldeng = commonConveyorLine.Communicator.Read<short>(deviceProDTO.DeviceProDataBlock);
                if (AQMldeng == 2) return false;
            }
            else
            {
                foreach (string aqmname in AQMListdata)
                {
                    DeviceProDTO? deviceProDTO = commonConveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == aqmname && x.DeviceProParamName == "IndicatorStatus" && x.DeviceProParamType == "ReadDeviceCommand");
                    short AQMldeng = commonConveyorLine.Communicator.Read<short>(deviceProDTO.DeviceProDataBlock);
                    if (AQMldeng == 2) return false;
                }
            }
            return true;
        }
    }
}