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

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

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

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

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

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


Когда-то видел научные статьи лохматых годов на эту тему, надеюсь, их еще можно найти. Там все было серьезно, с графами, оценками оптимальности, и т.п.
А вы для себ какую задачу ставите? Просто прокладывать кабели хоть как-нибудь, или с учетом всяких ограничений, заполняемости трасс, минимизации длины и т.п.?
Готовые проги типа 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
Сообщений: 394


Так задание допустимых путей "полилинии в слое "трасса", которые соединяют эти точки" - это и есть параметры-ограничения.
Изначально пользователь вычерчивает возможные варианты, а алгоритм потом уже раскидывает кабели по этим вариантам
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
Сообщений: 394


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

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


Цитата:
Сообщение от 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
Сообщений: 394


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

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


Цитата:
Сообщение от 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
Сообщений: 394


смотрел, есть еще похожая тема
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,704


Насколько я понимаю, тут нужно обратиться к расчету строительных сетевых графиков, только вместо продолжительности работ тут будет длина участка трассы.
Через расчет можно найти критический путь, который и будет требуемым маршрутом прокладки кабеля.
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
Сообщений: 394


Поиск в интернете и советы форумчан навели на тему графов, поэтому пока работаю в эту сторону. Есть непонятки с построением графа.
Думаю, отдельную тему создавать не стоит, спрошу здесь.
Народ, подскажите алгоритм или логику, чтобы граф из прилагаемой картинки представить в виде матрицы или двумерного массива, где по вертикали и по горизонтали отложены вершины от 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
Просмотров: 18
Размер:	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,153


Цитата:
Сообщение от 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,153


Цитата:
Сообщение от 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
Сообщений: 394


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

ПС код приводить скорее всего смысла особого нет, дело точно не в коде, но на всякий случай:
Код:
[Выделить все]
     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 вне форума  
Ответ
Вернуться   Форум 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