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

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

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

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

Форумчане, подскажите, с чего начать, какие функции или методы реализовать, какая вообще может быть логика работы программы автоматической раскладки кабеля по заданным трассам?
Сам код не требуется, я хочу понять принцип работы будущей программы.
Для удобства дальнейшего обсуждения пусть будет блок с атрибутами А, Б, В, Г, Д в виде окружности с центром в исходных точках. Есть полилинии в слое "трасса", которые соединяют эти точки.
Задача создать новую полилинию, которая ляжет от точки А до Б по существующей трассе
Просмотров: 3726
 
Непрочитано 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
Просмотров: 28
Размер:	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 вне форума  
Ответ
Вернуться   Форум 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