/
dAshkova
/
luna_CoDeSys
Обзор
Документация
Войти
/
dAshkova
/
luna_CoDeSys
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
dummy.py
113 строк
6 KB
parovoZZ
добавлен dummy
25 мар 2026, 18:46
25 мар 2026, 18:46
3c911e7
Код
Авторство
О чём код?
# -*- coding: utf-8 -*- # 1. Ищем вообще всё, что называется "Application" (обычно это имя по умолчанию) # Если вы переименовали приложение, замените строку на ваше имя apps = projects.primary.find("Application", recursive=True) if not apps: # 2. Если по имени не нашли, ищем любой объект, у которого есть дочерние POU # (Приложение — это единственный объект, который содержит Task Configuration) all_objs = projects.primary.find("*", recursive=True) apps = [obj for obj in all_objs if obj.get_name() == "Application" or "Task Configuration" in [c.get_name() for c in obj.get_children()]] if apps: app_obj = apps[0] # ПЛК — это всегда родитель приложения plc_obj = app_obj.parent system.write_message(Severity.Warning, "Найдено приложение: " + app_obj.get_name()) system.write_message(Severity.Warning, "Название ПЛК (родитель): " + plc_obj.get_name()) else: system.write_message(Severity.Warning, "Не удалось найти Application, попробуем перебор корня...") # 3. Прямой перебор верхнего уровня (сразу под проектом обычно идут Device) root_children = projects.primary.get_children() for child in root_children: # В CODESYS устройства обычно лежат в корне system.write_message(Severity.Warning, "Объект в корне: " + child.get_name()) # Проверяем корень проекта if projects.primary: root_children = projects.primary.get_children() if not root_children: system.write_message(Severity.Warning, "Корень проекта пуст") for child in root_children: # Выводим имя каждого объекта в корне name = child.get_name() system.write_message(Severity.Information, "Объект в корне: " + str(name)) # Если это ПЛК, у него внутри должно быть приложение sub_children = child.get_children() for sub in sub_children: system.write_message(Severity.Information, " -- Вложенный объект: " + str(sub.get_name())) else: system.write_message(Severity.Error, "Нет открытого проекта") system.write_message(Severity.Information, " ------ Следующий скрипт -----") # Проходим по всем объектам в корне проекта for root_obj in projects.primary.get_children(): # Ищем внутри этого объекта узел 'Plc Logic' (признак ПЛК в Astra IDE) plc_logic_nodes = root_obj.find("Plc Logic", recursive=False) if plc_logic_nodes: plc_logic = plc_logic_nodes[0] plc_name = root_obj.get_name() # Это ваш 'FFS_SAU' или 'STATION' system.write_message(Severity.Information, "--- Найдено устройство: " + plc_name + " ---") # Теперь достаем приложения внутри этого 'Plc Logic' apps = plc_logic.find("Application", recursive=False) if apps: for app in apps: system.write_message(Severity.Information, " Приложение: " + app.get_name()) else: system.write_message(Severity.Warning, " В " + plc_name + " нет узла Application") else: # Пропускаем служебные объекты (Project Settings, VisualizationStyle и т.д.) continue system.write_message(Severity.Information, " ------ Следующий скрипт -----") # 1. Перебираем все объекты первого уровня (корневые узлы ПЛК) for plc_root in projects.primary.get_children(): # 2. Ищем внутри узел "Plc Logic" (ваш 100% маркер ПЛК) # Используем find с точным именем, так как оно фиксировано logic_nodes = plc_root.find("Plc Logic", recursive=False) if logic_nodes: logic_node = logic_nodes[0] plc_name = plc_root.get_name() system.write_message(Severity.Information, ">>> ОБНАРУЖЕН ПЛК: " + plc_name) # 3. Ищем все приложения внутри "Plc Logic" по их ТИПУ (GUID) # Это найдет приложение, даже если оно переименовано в "MySuperApp" apps = logic_node.get_children() if apps: for app in apps: app_name = app.get_name() system.write_message(Severity.Information, " [+] Приложение: " + app_name) # 4. Здесь можно искать остальные сущности внутри приложения (GVL, POU и т.д.) # Например, перебором всех детей приложения: for entity in app.get_children(): system.write_message(Severity.Information, " - Сущность: " + entity.get_name()) else: system.write_message(Severity.Warning, " [!] В узле Plc Logic приложения не найдены") else: # Это не ПЛК (например, Project Settings или VisualizationStyle) continue