Как можно реализовать автоматическую прокладку кабеля по заданным трассам?
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как можно реализовать автоматическую прокладку кабеля по заданным трассам?

Как можно реализовать автоматическую прокладку кабеля по заданным трассам?

Ответ
Поиск в этой теме
Непрочитано 16.12.2024, 11:34 #1
Как можно реализовать автоматическую прокладку кабеля по заданным трассам?
posetitel
 
Регистрация: 16.10.2013
Сообщений: 395

Форумчане, подскажите, с чего начать, какие функции или методы реализовать, какая вообще может быть логика работы программы автоматической раскладки кабеля по заданным трассам?
Сам код не требуется, я хочу понять принцип работы будущей программы.
Для удобства дальнейшего обсуждения пусть будет блок с атрибутами А, Б, В, Г, Д в виде окружности с центром в исходных точках. Есть полилинии в слое "трасса", которые соединяют эти точки.
Задача создать новую полилинию, которая ляжет от точки А до Б по существующей трассе
Просмотров: 3773
 
Непрочитано 16.12.2024, 12:17
1 | #2
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,172


Когда-то видел научные статьи лохматых годов на эту тему, надеюсь, их еще можно найти. Там все было серьезно, с графами, оценками оптимальности, и т.п.
А вы для себ какую задачу ставите? Просто прокладывать кабели хоть как-нибудь, или с учетом всяких ограничений, заполняемости трасс, минимизации длины и т.п.?
Готовые проги типа CS Кабельное хозяйство не рассматриваете?

Последний раз редактировалось kp+, 16.12.2024 в 12:23.
kp+ вне форума  
 
Непрочитано 16.12.2024, 13:48
#3
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


чтобы что-то проложить автоматически - сначала надо будет задать кучу параметров-ограничений... по сути создать информационную модель. Это мечта менеджеров - нажал кнопку и все само до сдачи заказчику. Реально в "одно лицо" (насколько понимаю) можно создать ассистентов-помощников, которые будут считать, проверять, маркировать и т.д. Но прокладку самих трасс оставьте живым людям)
Сергей812 вне форума  
 
Автор темы   Непрочитано 16.12.2024, 13:55
#4
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


Так задание допустимых путей "полилинии в слое "трасса", которые соединяют эти точки" - это и есть параметры-ограничения.
Изначально пользователь вычерчивает возможные варианты, а алгоритм потом уже раскидывает кабели по этим вариантам
posetitel вне форума  
 
Непрочитано 16.12.2024, 14:20
#5
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от posetitel Посмотреть сообщение
Так задание допустимых путей "полилинии в слое "трасса", которые соединяют эти точки" - это и есть параметры-ограничения.
Изначально пользователь вычерчивает возможные варианты, а алгоритм потом уже раскидывает кабели по этим вариантам
кабели не просто так раскидываются - а к оборудованию (и между оборудованием). И далеко не всегда все оборудование известно сразу (пока из смежников "вытрясешь" ТЗ), не говоря уже об постоянных правках-корректировках. А потом еще корректировки во время монтажа - а автораскладка (если как-то не "заморозить" уже сделанное) взяла и переложила кабели - как ей показалось оптимальнее на данный момент. Поэтому не существует каких-то общепризнанных лидеров среди ПО в области полностью автоматического проектирования - хотя крупные разработчики ПО явно могут себе позволить всех нужных специалистов для реализации.
Сергей812 вне форума  
 
Автор темы   Непрочитано 16.12.2024, 14:42
#6
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


это все правильно, но я пока шагаю от простого к сложному. пока требуется минимальная реализация раскладки по существующим подготовленным трассам (дерево графов и прочие сопутствующие термины)
posetitel вне форума  
 
Непрочитано 16.12.2024, 14:46
#7
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,172


Цитата:
Сообщение от posetitel Посмотреть сообщение
Так задание допустимых путей "полилинии в слое "трасса", которые соединяют эти точки" - это и есть параметры-ограничения
Рано или поздно придется учесть ограничения длины кабеля и количества поворотов, допустимой нагрузки на тот или иной участок, допустимости совместной прокладки разных кабелей и т.п.
Возможно, стоит скачать демы уже разработанных комплексов вроде вышеупомянутого, чтобы понять, что они могут, что нет, и как это подходит именно вам. И чего не хватает именно вам. Чтоб если изобретать велосипед, то хотя бы не самый уродливый...
PS а пользоваться программой будете вы один или как? Потому что если коллеги скажут "нам этого не надо, и указаний от начальства не было", а начальству надо и того меньше - то нет повести печальнее на свете ...

PPS на форуме уже есть один стартап по прокладке кабелей. Смотрели?
https://forum.dwg.ru/showthread.php?...E1%E5%EB%E5%E9

Последний раз редактировалось kp+, 16.12.2024 в 14:54.
kp+ вне форума  
 
Автор темы   Непрочитано 16.12.2024, 14:53
#8
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


Существующие проги, в частности CS Кабельное хозяйство, довольно громоздкие. Там реализован функционал оценки заполняемости лотка при выборе трассы, взаиморезервирование кабелей и прочие тонкие моменты. Для реализации моих целей получается из пушки по воробьям. У меня (пока) все проще: есть пара десятков кабелей, есть штук шесть-семь ветвящихся трасс (иногда с кольцом). Надо автоматизировать процесс раскидывания этих кабелей.
PS пользоваться буду я, соответственно все ограничения, накладываемые на программу, буду держать в голове.
Скорее всего потом программа будет разрастаться, но надо хоть от чего-то оттолкнуться, пока с этим засада.
posetitel вне форума  
 
Непрочитано 16.12.2024, 14:57
#9
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,172


Цитата:
Сообщение от posetitel Посмотреть сообщение
PS пользоваться буду я, соответственно все ограничения, накладываемые на программу, буду держать в голове
Вы хорошо подумали, что игра стоит свеч?


Цитата:
Сообщение от posetitel Посмотреть сообщение
Существующие проги, в частности CS Кабельное хозяйство, довольно громоздкие.
Здесь смотрели?
https://forum.dwg.ru/showthread.php?...E1%E5%EB%E5%E9
kp+ вне форума  
 
Автор темы   Непрочитано 16.12.2024, 15:08
#10
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


смотрел, есть еще похожая тема
https://forum.dwg.ru/showthread.php?t=57484 но в ней автор давно пропал
в первой теме автоматической раскладки вроде бы нет,
во второй теме есть какое-то начальное описание алгоритма в хэлпе, но пока не сильно понятнее становится.
вот ищу поддержки тут.
posetitel вне форума  
 
Непрочитано 16.12.2024, 15:11
#11
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от posetitel Посмотреть сообщение
PS пользоваться буду я, соответственно все ограничения, накладываемые на программу, буду держать в голове.
обычно автоматизация разрабатывается с совершенно противоположной целью - держать не всю информацию в голове, а только текущие оперативные данные в краткосрочной памяти (и общее понимание - что вообще нужно сделать по объекту, естественно).
Сергей812 вне форума  
 
Непрочитано 16.12.2024, 19:46
1 | #12
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,705


Насколько я понимаю, тут нужно обратиться к расчету строительных сетевых графиков, только вместо продолжительности работ тут будет длина участка трассы.
Через расчет можно найти критический путь, который и будет требуемым маршрутом прокладки кабеля.
nickname2019 вне форума  
 
Непрочитано 17.12.2024, 10:17
1 | #13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


ну и возможный ассистент - рисуется полилиния-кабель от оконечного оборудования до групповой прокладки кабелей (ГПК), затем дается команда типа "по существующему кабелю" и выбирается эта ГПК. Если кабелей в ГПК несколько - диалог выбора нужного кабеля и по трассе выбранного кабеля автоматически создается кабель до нужного щита (так как построение нового кабеля идет просто поверх выбранного кабеля в ГП, то пройдет и по тем же стоякам). Ну и при этом фиксировать информацию о соединениях для последующего построения КЖ. Это в реализации гораздо проще автораскладки)
Сергей812 вне форума  
 
Автор темы   Непрочитано 17.12.2024, 12:31
#14
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


Поиск в интернете и советы форумчан навели на тему графов, поэтому пока работаю в эту сторону. Есть непонятки с построением графа.
Думаю, отдельную тему создавать не стоит, спрошу здесь.
Народ, подскажите алгоритм или логику, чтобы граф из прилагаемой картинки представить в виде матрицы или двумерного массива, где по вертикали и по горизонтали отложены вершины от 1 до 5 соответственно, а на пересечении вершин вставлены длины между этими точками, если между точками связи нет, нужно проставить ноль.
матрица будет такая:
...1 2 3 4 5
1 010 0 0 0
210 0 7 5 0
3 0 7 0 0 9
4 0 5 0 0 0
5 0 0 9 0 0
на картинке соответственно в кружке показан номер узла, он соответствует вертикальным и горизонтальным столбцам матрицы, зеленым - длина ребра, проставляется в матрицу на пересечении соответствующих узлов, синим показано наличие ребер между узлами.
Список отрезков, соответствующих ребрам, я получу, координаты вершин тоже получу, а вот как передать это все в массив - не представлю. Расскажите логику или алгоритм. Нумерация вершин не принципиальна, привел просто для наглядности.
Миниатюры
Нажмите на изображение для увеличения
Название: На форум 2.png
Просмотров: 23
Размер:	24.6 Кб
ID:	265947  
posetitel вне форума  
 
Непрочитано 17.12.2024, 17:37
1 | #15
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Для вашего частного случая алгоритм:
1. Помещаем любой (например, №4) из узлов с одиночным ребром в стек и в список посещенных.
2. Извлекаем узел №4 со стека. Ищем все узлы, связанные ребрами с узлом №4 и которые при этом нет в списке посещенных - это будет узел №2.
3. Заносим узел №2 в стек и в список посещенных.
4. Извлекаем узел №2 со стека, ищем по ребрам еще не посещенные узлы - это будут №1 и №3. Заносим эти узлы в стек и в список посещенных.
5. Извлекаем узел №1 из стека - а у него в соседях по ребрам нет не посещённых узлов. Поэтому на этом шаге в стек ничего не уходит.
6. Извлекаем узел №3 из стека - у него в соседях остался только узел №5, который и отправиться в стек и список посещенных.
7. Извлекаем узел №5 из стека - и опять него в соседях по ребрам нет не посещённых узлов. Поэтому на этом шаге в стек ничего не уходит.
8. Стек пуст - все узлы графа пройдены. При этом в списке посещенных будет 4-2-1-3-5.
9. Анализируем узлы графа - кто имеет только одно ребро: №4, №1 и №5. Теперь берем полученную ранее последовательность:

4-2-1-3-5 первая ветка 4-2-1
вторая ветка 4-2-(1 пропускаем, так как одно ребро)-3-5

ну а посчитать длины этих веток уже не проблема.

Цитата:
Сообщение от posetitel Посмотреть сообщение
Думаю, отдельную тему создавать не стоит, спрошу здесь.
это не тема, это на целый раздел тянет минимум, имхо
Сергей812 вне форума  
 
Непрочитано 17.12.2024, 17:46
1 | #16
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,172


Цитата:
Сообщение от posetitel Посмотреть сообщение
а вот как передать это все в массив - не представлю.
Вы на каком языке будете писать? Если на лиспе, то вот хороший пример работы с матрицами:
https://www.lee-mac.com/matrixtransf...functions.html
kp+ вне форума  
 
Непрочитано 18.12.2024, 14:24
1 | #17
Tom2k7


 
Регистрация: 11.10.2011
Сообщений: 27


Это вариации на тему алгоритма Дейкстры. Поиск кратчайшего пути в графе. Задаются точки и ребра с весами (длинами) между ними. Строится оптимальный путь от и до. Даже для вба есть реализация этого алгоритма на сайтах посвященных экселю. Задача сводится к формированию массива ребер из объектов акада. И оптимизации вызовов алгоритма, не для каждой пары точек, а, скажем, для одного родительского узла и всех дочерних. Ну и рисования трасс в конце по результатам работы
Tom2k7 вне форума  
 
Непрочитано 18.12.2024, 16:49
1 | #18
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,172


Цитата:
Сообщение от Tom2k7 Посмотреть сообщение
Строится оптимальный путь от и до. Даже для вба есть реализация этого алгоритма на сайтах посвященных экселю.
И даже для акада на лиспе. Сам не проверял, но вот оно:
https://github.com/tsao100/Shortest-Path
kp+ вне форума  
 
Непрочитано 18.12.2024, 17:21
1 | #19
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


только официальные запасы кабеля на монтаж и так ничтожные. Если еще и минимизировать все кабельные трассы...
Сергей812 вне форума  
 
Автор темы   Непрочитано 25.12.2024, 16:31
#20
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


Почему-то не приходили уведомления на почту, а я сам ушел с головой в ВБА, и сообщения не сразу увидел. Спасибо всем отписавшимся.
Именно алгоритм Дейкстры прикручиваю к своей задаче. На форуме по экселю подсказали и реализацию при переводе графа в программный вид.
Сейчас проблема возникла такая (хотя, наверное, это уже отдельная тема должна быть): написал код создания и вставки блока. Если имя не менять, но менять содержимое блока, то в модели появляются разные блоки с одинаковыми именами. Как такое может вообще быть? Нашел обрывочное полу-объяснение, что это какая-то ошибка автокада, и она вроде даже не критическая.
Расскажите подробнее, почему вставляются два разных блока с одинаковыми именами?
(написать код с проверкой наличия блоков с одинаковыми именами перед вставкой не прошу, мне просто непонятно, как так получается)

ПС код приводить скорее всего смысла особого нет, дело точно не в коде, но на всякий случай:
Код:
[Выделить все]
     plinePoint(0) = 0
    plinePoint(1) = 0
    plinePoint(2) = 10
    plinePoint(3) = 0
    basePoint(0) = 0
    basePoint(1) = 0
    basePoint(2) = 0
    insertionPoint(0) = 0
    insertionPoint(1) = 0
    insertionPoint(2) = 0    
    Dim newBlock As AcadBlock   
 ' Создание блока
    Set newBlock = acadDoc.Blocks.Add(basePoint, "Test")
 ' Создание полилиний и добавление их в блок
    Set pline = newBlock.AddLightWeightPolyline(plinePoint)
 ' Вставка блока в чертеж
   acadDoc.ModelSpace.InsertBlock insertionPoint, blockName, 1#, 1#, 1#, 0#

Последний раз редактировалось posetitel, 25.12.2024 в 16:38.
posetitel вне форума  
 
Непрочитано 03.01.2025, 23:11
#21
Dinoxromniy


 
Регистрация: 14.09.2020
Санкт-Петербург
Сообщений: 395


Цитата:
Сообщение от posetitel Посмотреть сообщение
о в модели появляются разные блоки с одинаковыми именами
Приложите такой файл к сообщению, интересно посмотреть.
Dinoxromniy вне форума  
 
Непрочитано 04.01.2025, 01:24
#22
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от posetitel Посмотреть сообщение
Расскажите подробнее, почему вставляются два разных блока с одинаковыми именами?
Динамический блок с разными параметрами.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 04.01.2025, 13:34
#23
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


Коллеги, сейчас баг из прошлого сообщения воспроизвести не могу. Запускаю код, блоки в чертеж вставляются, но в списке блоков имя указано единожды, дублирования имен нет.
Вроде с одной стороны и хорошо, понимание принципов работы с блоками в автокаде восстановилось. Зря побеспокоил, получается.
Но с другой стороны появился если можно так назвать незавершенный гештальт, я же точно помню, что у меня в процессе обкатки кода в списке блоков для вставки появлялось большое количество имен "Test", имя точно было одинаковое без дописок (1), (2) или (копия) или подобных. Может быть пока обкатывал код намудрил с переменными какими, может как-то криво вставлял блоки, не знаю. Ну и ладно, уже получается не актуально. Если вдруг проблема всплывет, обязательно файл сохраню.
posetitel вне форума  
 
Непрочитано 04.01.2025, 16:24
#24
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Имя блока - это ключ в таблице определений блоков БД чертежа. Если нарушена уникальность значения этого ключа в пределах БД чертежа - значит, чертеж "битый".
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.01.2025, 17:39
#25
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


видимо, когда появлялась такая ситуация, чертеж действительно был бит. это самое логичное объяснение
posetitel вне форума  
 
Непрочитано 04.01.2025, 17:58
#26
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


за целостностью БД чертежа следит сам акад - по сути акад играет роль СУБД (системы управления БД), с которой уже работает программист через соответствующий API.
Сергей812 вне форума  
 
Автор темы   Непрочитано 09.01.2025, 10:27
#27
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


Появилась новая проблема, задачка, так сказать, со звездочкой.
В самом простом случае раскладка реализовывается с помощью поиска кратчайшего пути по алгоритму Дейкстры. Тут в части логики понятно.
Однако в реальности кабель часто раскидывают по свободным трассам, которые не являются кратчайшими. Проиллюстрирую картинкой, на которой Шк1, Шк2, Шк3, Шк4 - это шкафы, соединяемые кабелями, синие линии - это основная трасса (например, верхний лоток), зеленые линии - резервная трасса (например, нижний лоток). Синяя трасса от Шк1 до Шк2 при реализации алгоритма Дейкстры будет самая загруженная, через нее программа все кабели будет прокладывать. Кабели до Шк4 пойдут тоже по синей трассе через Шк3.
Разобью задачу на две части:
1) Как можно предусмотреть возможность распределения кабелей по трассам (основная и резервная, на картинке - синяя и зеленая) с учетом заполненности лотка?
2) Как можно реализовать прокладку кабеля от Шк2 до Шк4 минуя Шк3, по своей отдельной трассе?
Наверняка есть какие-то алгоритмы, которыми пользуются навигаторы, они еще выбор предлагают побыстрее но подлиньше ехать или помедленней по пробкам, но покороче.
Миниатюры
Нажмите на изображение для увеличения
Название: Пример трасс.png
Просмотров: 30
Размер:	8.7 Кб
ID:	266217  
posetitel вне форума  
 
Непрочитано 09.01.2025, 11:13
#28
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от posetitel Посмотреть сообщение
Наверняка есть какие-то алгоритмы, которыми пользуются навигаторы, они еще выбор предлагают побыстрее но подлиньше ехать или помедленней по пробкам, но покороче.
есть сильное подозрение - что навигаторы все-таки не на VBA написаны) Естественно, есть алгоритмы - у тех же программных комплексов для разводки многослойных печатных плат или проектирования сверхбольших интегральных схем такое математический аппарат наработан - что разводка кабельных трасс
Цитата:
Сообщение от posetitel Посмотреть сообщение
1) Как можно предусмотреть возможность распределения кабелей по трассам (основная и резервная, на картинке - синяя и зеленая) с учетом заполненности лотка?
2) Как можно реализовать прокладку кабеля от Шк2 до Шк4 минуя Шк3, по своей отдельной трассе?
это игрушки. Только, во первых - готовы ли вы потратить значительный кусок своей жизни на освоение всего этого (так как будете это все в одно лицо делать)?

И во вторых:
Цитата:
Сообщение от posetitel Посмотреть сообщение
Существующие проги, в частности CS Кабельное хозяйство, довольно громоздкие. Там реализован функционал оценки заполняемости лотка при выборе трассы, взаиморезервирование кабелей и прочие тонкие моменты
Сергей812 вне форума  
 
Автор темы   Непрочитано 09.01.2025, 11:30
#29
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


Аппетит пришел во время еды
Поначалу хотел простенькое на коленке накидать, а вот сейчас хочется все больше и больше.
Из каких соображений исхожу. До момента начала написания не понимал с какой стороны вообще подойти, даже не подозревал, что есть уже давно разработанный алгоритм нахождения кратчайшего пути. Может быть похожие алгоритмы есть и для моих задач, которые можно реализовать на ВБА. Ну, например, усовершенствованный алгоритм Дейкстры (название придумано). Наверняка же направление графов в математике развивалось и появлялись стандартные решения для большинства задач, в том числе и моих, которые просто надо положить на код. Понятно, что в навигаторах, в схемах разводки печатных плат все гораздо сложнее, со встроенными библиотеками и т.д. и т.п., но там и интерфейс соответствующий, а основа работы может давно известна и не так сложна.
posetitel вне форума  
 
Непрочитано 09.01.2025, 11:47
1 | #30
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


ну здесь скорее алгоритмы поиска всех путей в графе между двумя заданными точками, а не кратчайший путь
Сергей812 вне форума  
 
Автор темы   Непрочитано 09.01.2025, 11:56
#31
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


Ну ОК, положим, найдены все пути. Как вводить условие заполненности лотка?
Это же весовой коэффициент какой-то и этот коэффициент применяется не к длине, а второй независимый от длины должен быть.
posetitel вне форума  
 
Непрочитано 09.01.2025, 12:30
#32
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от posetitel Посмотреть сообщение
Ну ОК, положим, найдены все пути. Как вводить условие заполненности лотка?
Это же весовой коэффициент какой-то и этот коэффициент применяется не к длине, а второй независимый от длины должен быть.
а это уже как реализуете внутреннее представление дополнительной информации. Чтобы кабель "понимал" - где он на лотке, где в гофре и т.д. Здесь на форуме человек уже лет 25 потихоньку делает свою САПР на языке программирования Lazarus - это для понимания масштабов работ. В VBA смело умножайте сроки в два-три раза - так как язык программирования "немножко" устарел.
Сергей812 вне форума  
 
Автор темы   Непрочитано 09.01.2025, 13:38
#33
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


Вы про petro_f или про Frigate? Или есть еще кто-то?
posetitel вне форума  
 
Непрочитано 09.01.2025, 14:44
#34
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


автор zamtmn, программа zcad - хотя на форуме тема с нею убрана, но на гитхабе можете найти.
Сергей812 вне форума  
 
Автор темы   Непрочитано 09.01.2025, 14:50
#35
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


Понял, общался с ним.
posetitel вне форума  
 
Непрочитано 09.01.2025, 19:58
1 | #36
Tom2k7


 
Регистрация: 11.10.2011
Сообщений: 27


Цитата:
Сообщение от posetitel Посмотреть сообщение
Однако в реальности кабель часто раскидывают по свободным трассам, которые не являются кратчайшими.
Проходили это все.
1)Выбор быстрого пути основан на весах ребер (у вас это длины) и значит надо сделать так, чтобы короткий путь не был коротким.
Значит за всеми обьектами надо крепить данные, в которых, скажем, будет дополнительная длина на конкретном участке, и алгоритм будет стараться его обойти. Это решение в лоб. Наброс запаса к чистой длине - общее место при таких расчетах.

2)снабдить ребра и кабели свойствами/типами и просчитывать разные графы для разных типов систем последовательно. Т е поделить систему, скажем, на 220В, 24В и ОБЩУЮ и выставить свойства ребер, по которым что можно пускать. Ну и у кабелей выставить те же свойства. Тогда последовательно вызвать алгоритм Дейкстры для двух систем. Понятно, что ваш общий алгоритм должен быть многопроходным/инкрементальным.

Теперь общее замечание
алгоритм Дейкстры можно представить как фронт распространяющейся из одного центра волны. В электрике это обычно шкафы/коробки. Т е для сложных иерархических систем надо последовательно вызвать алгоритм для каждого родительского узла. По известному графу, или даже разным графам с учетом систем (п.2 выше). Ну все таки количество родительских узлов обычно меньше чем количество конечных. И за один проход мы получаем результат для 90% всех кабелей. за второй - 90% оставшихся. и тд. Но если запрещать/разрешать отдельные кабели, то это не сделать никак кроме как считать каждый кабель индивидуально, с проверкой условий прохождения по каждому ребру. Это конкретно напряжет счетную систему.

Есть и хорошие новости. Сам Дейкстра считает быстро. Все время занимает общение с API CADa.
Рекомендую писать в логи время работы по участкам кода, чтобы в будущем понять где возникают траблы.
вба не такой уж и медленный. В свое время я делал эту же задачу на вба, и потом перевел часть кода на VB.Net. И оказалось, что вба считает всего в 2-3 раза дольше. А вовсе не на порядок, как можно было ожидать. Т е, повторю, Дейкстра быстрый, и компы современные считают быстро. Проблемы со скоростью обмена с API када. Вот с теми свойствами ребер/узлов о которых я писал выше.
Tom2k7 вне форума  
 
Непрочитано 09.01.2025, 20:22
#37
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


а потом еще подумать о проверке: а то монтажники слегка "удивятся" - если какие-то одиночные кабели резко пойдут по другим трассам, потому-что алгоритм решил - что там свободнее/оптимальнее. Этот алгоритм автотрассировки еще долгое время придется отлаживать на реальных задачах.
Сергей812 вне форума  
 
Непрочитано 10.01.2025, 09:17
#38
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 178


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а это уже как реализуете внутреннее представление дополнительной информации. Чтобы кабель "понимал" - где он на лотке, где в гофре и т.д. Здесь на форуме человек уже лет 25 потихоньку делает свою САПР на языке программирования Lazarus - это для понимания масштабов работ. В VBA смело умножайте сроки в два-три раза - так как язык программирования "немножко" устарел.
Кстате, мы это реализовали, плюс уже создан механизм расчетов в Эксель и генерации однолинейных схем внутри эксель, с выводом в CAD. И я как электрик сейчас постоянно этим пользуюсь. Доволен
Я предлагал posetitel присоединится, он отказался. Сказал ему, если решил все таки писать, то пиши на C#. Он упрямится, руку набивает.

Цитата:
Сообщение от Tom2k7 Посмотреть сообщение
2)снабдить ребра и кабели свойствами/типами и просчитывать разные графы для разных типов систем последовательно. Т е поделить систему, скажем, на 220В, 24В и ОБЩУЮ и выставить свойства ребер, по которым что можно пускать. Ну и у кабелей выставить те же свойства. Тогда последовательно вызвать алгоритм Дейкстры для двух систем. Понятно, что ваш общий алгоритм должен быть многопроходным/инкрементальным.
Это очень похоже на то как я решил эту задачу. На каждого родителя свой граф, в него включаются все подключенные к нему устройства. Все пробегается и об считывается. Так же учитываются методы прокладки кабеля. Но я не рассчитывал заполняемость лотков, это повышает сложность задачи. В нашем случае вес ребра - это длина участка. Если мы хотим выбирать по заполняемости, тогда нужно делать другой граф где вес ребра это загруженность лотка. И тут дилемма, а что важнее загруженность лотка или длина кабеля. Я выбираю длину.

Цитата:
Сообщение от posetitel Посмотреть сообщение
2) Как можно реализовать прокладку кабеля от Шк2 до Шк4 минуя Шк3, по своей отдельной трассе?
Просто не ресуй трассу между Шк3 и Шк4, тогда кабель пройдет по другому.
То что я на кодил, тоже себя не однозначно ведет, когда есть закольцованность трасс. Когда проектирую, закольцованность стараюсь избегать.
veb86 вне форума  
 
Непрочитано 10.01.2025, 10:00
#39
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


просто надо понимать - что с попытками реализовать автопрокладку сначала придется делать тройную работу, как минимум: сгенерировал раскладку, проверил результат, если есть "косяки" - вносить изменения в алгоритм (и возможно, в "опорную" систему исходных данных), и по новой.
Offtop:
Цитата:
Сообщение от veb86 Посмотреть сообщение
Сказал ему, если решил все таки писать, то пиши на C#. Он упрямится, руку набивает.
когда устанет заниматься реализацией костылей вместо самих задач...)
Сергей812 вне форума  
 
Автор темы   Непрочитано 10.01.2025, 10:04
#40
posetitel


 
Регистрация: 16.10.2013
Сообщений: 395


Offtop: Небольшое отвлечение про язык написания. Уважаемый, veb86, просто на данном этапе пока не вижу принципиальной разницы на чем писать с точки зрения реализации своих идей: если нет понимания как построить логику работы программы, то и нет отличий в незнании как писать на VBA или в незнании как писать на С#. VBA интегрирован в акад, не надо ставить отдельные IDE, как пришла идея, так вызвал встроенный, опробовал, получилось - хорошо, нет - думаю дальше. Я не спорю, что на С# больше библиотек и возможностей, но если не знать, как работать, без разницы какие у тебя в сумке лежат инструменты. Поэтому пока VBA. Опять же, это не значит, что я прям ярый фанат, что только так и никак иначе.
По поводу не делать кольцевых схем совет не подходит. У меня будут кольцевые схемы в работе, поэтому специально привел упрощенный пример с ними. Если человек понимает, как с приведенным примером работать, значит можно научить и программу.
Совет с добавлением в вес ребра длины в зависимости от заполненности лотка надо побольше обдумать, как его реализовать.
Т.е. рассмотрим, получается, случай 1) из моего сообщения #27. С точки зрения монтажника и проектировщика зеленая и синяя трасса от Шк1 до Шк2 и Шк3 идентичны, а вот с точки зрения программы зеленая трасса длиннее. Как вариант, думаю, может имеет смысл в программе сначала сгруппировать кабели, которые должны быть проложены по этим трассам, потом просто принудительно разделить эти кабели на 2 группы и одну принудительно отправить по первой трассе, вторую по второй. Для этого сначала надо составлять наборы кабелей. В общем случае, когда идет одна общая трасса, потом она ветвится такие группы сделать будет сложнее.
Второй вариант - это составить две матрицы смежности, и поочередно использовать то одну, то вторую. Сильно приблизительный вариант раскладки получится, но как один из вариантов решения - почему бы и нет.
posetitel вне форума  
 
Непрочитано 10.01.2025, 10:08
1 | #41
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 178


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
просто надо понимать - что с попытками реализовать автопрокладку сначала придется делать тройную работу, как минимум: сгенерировал раскладку, проверил результат, если есть "косяки" - вносить изменения в алгоритм (и возможно, в "опорную" систему исходных данных), и по новой.
Я вижу два варианта для жизни электрика:
1. Идти во все готовое, подобные САПРы есть.
2. Если готов что то написать, то точно 100% писать. Жаль конечно что на VBA. (Я пока нисколько не жалею что потратил время на написание того что написал. У меня сейчас студентка на обучении, уже пользы много приносит, освещение расчитавыет в спец софте, светильники потом расставляет, параметры забивает, с трассами слегка помогаю. А дальше эксель все за нее рассчитает, начинаешь себя чувствовать полноценным главспецом, который занимается в основном проверками)

----- добавлено через ~14 мин. -----
Цитата:
Сообщение от posetitel Посмотреть сообщение
Т.е. рассмотрим, получается, случай 1) из моего сообщения #27. С точки зрения монтажника и проектировщика зеленая и синяя трасса от Шк1 до Шк2 и Шк3 идентичны
Не правда, они не идентичны, они отличаются по цвету. Я когда черчу освещение, синий цветом делаю рабочее, зеленым пунктирным аварийное. Трассы идут в разных лотках. Однозначно нужно принудительно отправлять кабели электроприемников по нужной им трассе, иначе будет очень плохо.

Цитата:
Сообщение от posetitel Посмотреть сообщение
Как вариант, думаю, может имеет смысл в программе сначала сгруппировать кабели, которые должны быть проложены по этим трассам, потом просто принудительно разделить эти кабели на 2 группы и одну принудительно отправить по первой трассе, вторую по второй. Для этого сначала надо составлять наборы кабелей. В общем случае, когда идет одна общая трасса, потом она ветвится такие группы сделать будет сложнее.
Разные варианты возможно. я сделал группирование с начало по трассам. Получил несколько графов трасс. Затем нашел все головные устройства (щит, ППКОП или что еще). И сформировал для каждого фидера ГУ, свой график маленький (точно не помню). И уже с каждым фидером и группой работал индивидуально.
Но в целом если сразу работать с большим граффом трассой, тогда можно добавлять вес к ребрам, при каждом последующем прохождением кабеля по этому ребру. Тем самым попробовать решить задачу наполняемости лотков))). Но я ее себе не ставил
veb86 вне форума  
 
Непрочитано 10.01.2025, 10:37
#42
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от posetitel Посмотреть сообщение
VBA интегрирован в акад, не надо ставить отдельные IDE
Заблуждаетесь. С 2010 акада (если не ошибаюсь) VBA единственный вид языка разработки - который нужно отдельно ставить не только для того, чтобы писать код. Без установленной среды разработки VBA даже готовая надстройка не запустится в акаде.
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как можно реализовать автоматическую прокладку кабеля по заданным трассам?

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли выцепить текст у таблиц? Как это можно реализовать на AutoLISP? lexluther LISP 15 19.03.2018 21:38
Можно ли моделировать Основания и Фундаменты в Лире САПР? Алексей_rus Лира / Лира-САПР 2 09.12.2014 12:48
Можно ли к ПГ подключить автоматическую систему пожаротушения? dextron3 Инженерные сети 3 17.04.2010 18:30
Можно ли такое реализовать в AutoCAD 2010? Shoorup Программирование 7 03.05.2009 23:33