wankeda
昨天 6cc35000a6e138cfad96e7b02f8aeddcdb4ba6bf
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ElevatorJob/ElevatorJob.cs
@@ -14,41 +14,51 @@
        public Task Execute(IJobExecutionContext context)
        {
            // ä»Žä¸Šä¸‹æ–‡ä¸­èŽ·å– JobParams å¹¶è½¬æ¢ä¸º Roast ç±»åž‹
            CommonElevator elevator = (CommonElevator)context.JobDetail.JobDataMap.Get("JobParams");
            // åˆå§‹åŒ– AGV å˜é‡
            AGV agv = null;
            if (elevator == null)
            try
            {
                throw new Exception("未找到提升机设备参数。");
                // ä»Žä¸Šä¸‹æ–‡ä¸­èŽ·å– JobParams å¹¶è½¬æ¢ä¸º Roast ç±»åž‹
                //CommonElevator elevator = (CommonElevator)context.JobDetail.JobDataMap.Get("JobParams");
                CommonRoast elevator = (CommonRoast)context.JobDetail.JobDataMap.Get("JobParams");
                // åˆå§‹åŒ– AGV å˜é‡
                AGV agv = null;
                if (elevator == null)
                {
                    throw new Exception("未找到提升机设备参数。");
                }
                // è¿žæŽ¥ AGV
                // æ ¹æ®è®¾å¤‡åç§°å†³å®šæ˜¯æ­£æžè¿˜æ˜¯è´Ÿæž AGV
                List<string> agvNames = new List<string>() { "正极AGV", "负极AGV" }; //"正极AGV",
                foreach (var agvName in agvNames)
                {
                    // ä»Žå­˜å‚¨ä¸­æŸ¥æ‰¾æŒ‡å®šåç§°çš„设备
                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceName == agvName);
                    if (device != null)
                    {
                        agv = (AGV)device;
                    }
                    else
                    {
                        ConsoleHelper.WriteErrorLine($"未找到{agvName}设备参数。");
                        continue;
                    }
                    var elevatorNamesValues = GetDBElevatorNamesValues(agvName);
                    var agvNamesValues = GetDBAGVNamesValues(agvName);
                    DeviceInteraction(elevator, agv, elevatorNamesValues, agvNamesValues);
                }
            }
            catch (Exception ex)
            {
                throw;
            }
            // è¿žæŽ¥ AGV
            // æ ¹æ®è®¾å¤‡åç§°å†³å®šæ˜¯æ­£æžè¿˜æ˜¯è´Ÿæž AGV
            List<string> agvNames = new List<string>() { "正极AGV", "负极AGV" };
            foreach (var agvName in agvNames)
            {
                // ä»Žå­˜å‚¨ä¸­æŸ¥æ‰¾æŒ‡å®šåç§°çš„设备
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceName == agvName);
                if (device != null)
                {
                    agv = (AGV)device;
                }
                else
                {
                    ConsoleHelper.WriteErrorLine($"未找到{agvName}设备参数。");
                    continue;
                }
                var elevatorNamesValues = GetDBElevatorNamesValues(agvName);
                var agvNamesValues = GetDBAGVNamesValues(agvName);
                DeviceInteraction(elevator, agv, elevatorNamesValues, agvNamesValues);
            }
            return Task.CompletedTask;
        }
        public static void DeviceInteraction(CommonElevator elevator, AGV agv, List<string> elevatorNames, List<string> agvNames)
        public static void DeviceInteraction(CommonRoast elevator, AGV agv, List<string> elevatorNames, List<string> agvNames)
        {
            if (agv.DeviceName == "正极AGV")
            {
@@ -60,20 +70,20 @@
            }
        }
        private static void HandlePositiveAGV(CommonElevator elevator, AGV agv, List<string> elevatorNames, List<string> agvNames)
        private static void HandlePositiveAGV(CommonRoast elevator, AGV agv, List<string> elevatorNames, List<string> agvNames)
        {
            // æ­£æžAGV只需要处理前两个信号
            var elevatorSignal = elevator.Communicator.Read(elevatorNames[0], 100);
            var agvSignal = agv.Communicator.Read(agvNames[1], 100);
            agv.Communicator.Write(agvNames[0], elevatorSignal);
            elevator.Communicator.Write(agvNames[1], agvSignal);
            elevator.Communicator.Write(elevatorNames[1], agvSignal);
            ConsoleHelper.WriteInfoLine($"正极AGV交互: å†™å…¥ç”µæ¢¯ä¿¡å·[{elevatorSignal}]到{agvNames[0]}," +
                                       $"写入AGV信号[{agvSignal}]到{agvNames[1]}");
        }
        private static void HandleNegativeAGV(CommonElevator elevator, AGV agv, List<string> elevatorNames, List<string> agvNames)
        private static void HandleNegativeAGV(CommonRoast elevator, AGV agv, List<string> elevatorNames, List<string> agvNames)
        {
            // å®šä¹‰ä¿¡å·ç»„处理(起始索引,操作类型,日志描述)
            var operations = new List<(int startIdx, string type, string desc)>
@@ -104,7 +114,7 @@
            }
        }
        private static void ProcessSignalGroup(CommonElevator elevator, AGV agv, List<string> elevatorNames, List<string> agvNames, int startIdx, string operationType, string description)
        private static void ProcessSignalGroup(CommonRoast elevator, AGV agv, List<string> elevatorNames, List<string> agvNames, int startIdx, string operationType, string description)
        {
            const int GROUP_SIZE = 2; // æ¯ç»„处理2个信号
@@ -154,7 +164,7 @@
            ConsoleHelper.WriteInfoLine($"负极AGV交互({description}): ä¼ è¾“信号组[{logValues}]到目标地址[{logTargets}]");
        }
        private static void HandleSpecialSignals(CommonElevator elevator, AGV agv,
        private static void HandleSpecialSignals(CommonRoast elevator, AGV agv,
                                                List<string> elevatorNames, List<string> agvNames,
                                                int startIdx)
        {
@@ -260,10 +270,10 @@
                    "DB1002.18600",
                    "DB1002.18500",
                    "DB1002.18700",
                    "DB1002.18000",
                    "DB1002.18800",
                    "DB1002.19000",
                    "DB1002.18200",
                    "DB1002.18000",
                    "DB1002.18900",
                    "DB1002.19100"
                };