Иван
Постоянный посетитель
Всего сообщений: 233
Дата регистрации: 03.05.2011
|
Создано:
23.07.2018 18:34:33
|
добрый день.
А подскажите параметры эквивалентирования или они такие же как в расчетном методе?
Если так то как тогда мне задать, например Сохранение отмеченных узлов и Пересчет узлов в нагрузке?
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1059
Дата регистрации: 23.04.2007
|
Создано:
23.07.2018 18:45:19
|
Проще вызывать с пустым параметром. Выбрать нужные параметры можно в таблице "com_ekviv"
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 233
Дата регистрации: 03.05.2011
|
Создано:
23.07.2018 19:34:15
|
Ясно. Спасибо.
|
|
|
BRP
Заглянувший
Всего сообщений: 5
Дата регистрации: 15.05.2020
|
Создано:
02.03.2022 13:59:57
|
Здравствуйте! Для создания эквивалентной схемы в Растр приходится многократно выполнять однотипные действия по отметке узлов и запуска макроса объединения узлов, что занимает много времени. Как автоматизировать данную работу? Или как правильно изменить существующий макрос объединения узлов, чтобы список узлов для объединения был уже задан заранее в макросе? Спасибо
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1059
Дата регистрации: 23.04.2007
|
Создано:
02.03.2022 19:24:09
|
Зависит от количества узлов, которые Вы хотите отметить. Если их не очень много (несколько десятков), достаточно просто в макросе поставить отметки таким фрагментом
Код |
---|
Set nodeTable = Rastr.Tables("node")
'здесь стандартную растровскую выборку, можно отдельные номера, можно диапазоны
nodeTable.SetSel "ny=1001|ny=1005|ny=1115"
nodeTable.Cols("sel").Calc 1 |
Если узлов много, то может имеет смысл отметить их в таблице как нужно один раз, вывести таблицу в csv, а перед расчетом загружать эту таблицу с объединением по ключам. Загружать можно вручную с помощью команд экспорт/импорт csv (импорт в режиме "объединить"), или вставить чтение csv в данном режиме в макрос (см. команду ReadCSV в описании программного интерфейса)
|
|
|
BRP
Заглянувший
Всего сообщений: 5
Дата регистрации: 15.05.2020
|
Создано:
03.03.2022 10:59:12
|
Я правильно понимаю, что предложенные решения объединяют все отмеченные узлы в один? Возможно я некорректно выразился, внесу ясность. Узлов в расчетной модели до объединения ~200 шт., после эквивалентирования получается ~100 шт., процесс объединения узлов происходит попарно и однократно, т.е. узел 1 объединяется с узлом 3, узел 4 с 5 и т.д.
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1059
Дата регистрации: 23.04.2007
|
Создано:
03.03.2022 11:31:30
|
|
Да, давайте уточним что Вы подразумевали.
Цитата |
---|
приходится многократно выполнять однотипные действия по отметке узлов и запуска макроса объединения узлов |
Я понял что Вы используете макрос "Коррекция/Объединение узлов". Макрос предполагает что некоторые узлы отмечены, находит связи между любыми двумя отмеченными и объединяет эти два в один с соответствующими преобразованиями параметров. Процесс выполняется рекурсивно.
Мне показалось что вопрос состоит в том, как автоматизировать процедуру отметки узлов для многократного использования на разных схемах
Цитата |
---|
как правильно изменить существующий макрос объединения узлов, чтобы список узлов для объединения был уже задан заранее в макросе |
И вот я предложил два решения.
1. Вставить код с выборкой и отметкой узлов в существующий макрос в начале (можно сделать отдельный, только для ввода отметок и вызывать его перед объединением).
2. Отметить в какой-то схеме все нужные узлы, сохранить эту информацию в csv, и в каждую нужную схему этот загружать этот csv в режиме объединения. Это тоже можно либо с помощью коррекции макроса "Объединить узлы" командой типа ReadCSV, сделать отдельный макрос для загрузки csv или вообще загружать csv вручную.
|
|
|
BRP
Заглянувший
Всего сообщений: 5
Дата регистрации: 15.05.2020
|
Создано:
03.03.2022 12:38:03
|
Согласен, неверно описал вопрос/проблему. Попробую снова. В расчетной модели необходимо сэквивалентировать 200 узлов по заранее заданному алгоритму, т.е.:
Найти №узла 1 (заданного нами в тексте макроса) затем найти №узла 2 (также заданного нами в тексте макроса) и объединить эти два узла.
После по аналогии с вышеуказанным найти №узла 3 и № узла 4 - сэквивалентировать.
Повторять данный алгоритм пока не сэквивалентируем все, заданные в макросе узлы (200 шт.) в текущей расчетной модели, чтобы в итоге получить модель с 100 узлами. Как изменить существующий макрос объединения узлов, чтобы он работал по такому сценарию? Спасибо.
П.С.: в тексте макроса конкретные номера узлов какой с каким объединить(сэквивалентировать) намереваюсь вносить вручную.
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1059
Дата регистрации: 23.04.2007
|
Создано:
03.03.2022 12:41:21
|
Допустим узел 1, заданный в теле макроса, никак напрямую не связан с узлом 2, заданным в теле макроса. Их как объединить ? Вы предлагаете для этих двух узлов сделать эквивалентирование и получить некоторое количество эквивалентных связей ?
|
|
|
BRP
Заглянувший
Всего сообщений: 5
Дата регистрации: 15.05.2020
|
Создано:
03.03.2022 13:10:32
|
Объединять планируется однократно, только узлы связанные между собой ветвью, т.е. объединение несвязанных узлов не должно произойти, так как на этапе описания узлов в теле макроса заносятся узлы связанные между собой. Таким образом объединение двух узлов, несвязанных между собой, исключается. Пример: эквивалентируются 1 СШ 110 кВ ПС №1 и 2 СШ 110 кВ ПС №1, затем эвивалентируются 1 СШ 110 кВ ПС №2 и 2 СШ 110 кВ ПС №2 и т.д. (между системами шин каждой из подстанций будет ветвь с нулевым сопротивлением, т.е. выключатель)
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1059
Дата регистрации: 23.04.2007
|
Создано:
03.03.2022 14:01:39
|
Я наверное что-то упускаю. Если мы говорим об одном и том же макросе "Коррекция/Объединение узлов", то судя по комментариям в его начале он так и работает, как Вам нужно.
Код |
---|
' Макрос объединения отмеченных узлов по следующему алгоритму
' находится пара отмеченных узлов (n1,n2) связанных между собой ЛЭП (не трансформатор!)
' нагрузка, генерация, проводимости шунтов суммируются и заносятся в узел с большим
' номером, узел с меньшим номером удаляется и его ветви переносятся в узел с большим номером
' ЛЭП, соединявшая узлы удаляется ее потери добавляются к нагрузке узла с большим номером
' процесс поиски и объединения пар отмеченных узлов повторяется до тех пор пока они есть
' © Владимир Неуймин 26.1.2004 |
Единственное что в него нужно добавить - это автоматическую расстановку отметок узлов, которую я уже два раза описал в двух вариантах.
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1059
Дата регистрации: 23.04.2007
|
Создано:
03.03.2022 16:39:31
|
Если есть необходимость - можете обратиться в нашу ТП или СД СО. Можем устно обсудить в чем проблема.
|
|
|
BRP
Заглянувший
Всего сообщений: 5
Дата регистрации: 15.05.2020
|
Создано:
03.03.2022 16:58:16
|
Спасибо за консультацию, разобрался.
|
|
|
Виктор Кислюков
Посетитель
Всего сообщений: 21
Дата регистрации: 10.07.2024
|
Создано:
10.07.2024 15:16:11
|
Действительно, сложно и муторно отмечать узлы перед эквивалентирование, а если нужно эквалентировать сразу целый район!
А можно изобрести такой макрос, запустил его, указал район или районы и получил то, что надо всего считай в 2-3 шага, а не тыкать пока глаза не вылезут или эти танцы с бубном-csv .... и обязательно гарантии никакой, что отметится всё как надо...
Конечно желательно что бы стыковочные узла не участвовали, или их можно было бы указать....
помогите, пожалуйста!!!
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1059
Дата регистрации: 23.04.2007
|
Создано:
11.07.2024 03:43:20
|
|
Код |
---|
'список районов на эквивалентирование
AreasToReduce = "1,4,7"
Set nodes = Rastr.Tables("node")
Set nodeId = nodes.Cols("ny")
Set nodeArea = nodes.Cols("na")
' карта номеров узлов к индексам
Set nodeMap = CreateObject("Scripting.Dictionary")
' сет районов на эквивалентирование
Set areaMap = CreateObject("Scripting.Dictionary")
' индексируем узлы
for x = 0 to nodes.Size - 1
nodeMap.Add nodeId.Z(x), x
next
' заселяем сет районов
for each area in split(AreasToReduce,",")
areaMap.Add CInt(area), 0
next
Set sel = nodes.Cols("sel")
' дропаем отметки всех узлов
sel.Calc 0
' проходим по списку районов на эквивалентирование
for each area in areaMap
' отмечаем узлы, отнесенные к району на эквивалентирование
nodes.SetSel "na="& area
sel.Calc 1
next
' теперь сбрасываем отметки у пограничных узлов районов
' определяем их по наличию хотя бы одной линии, уходящей
' в неэквивалентируемый район
Set branches = Rastr.Tables("vetv")
Set ip = branches.Cols("ip")
Set iq = branches.Cols("iq")
' проходим по ветвям
for x = 0 to branches.Size - 1
' получаем индексы узлов ветви
ipX = nodeMap.Item(ip.Z(x))
iqX = nodeMap.Item(iq.Z(x))
' получаем номера районов между которыми ветвь
iparea = nodeArea.Z(ipX)
iqarea = nodeArea.Z(iqX)
' если ветвь между разными районами
if iparea <> iqarea Then
' снимаем отметки с пограничных узлов
' проверяя попадают ли они в эквивалентируемые районы
' и не эквивалентируемые районы
' по прямому и обратному направлению ветви
UnselectBoundaryNode ipx, iqarea
UnselectBoundaryNode iqx, iparea
End If
next
' снять отметку с узла, если он входит в эквивалентируемый
' район, но является пограничным
' nodeIndex - индекс узла
' iqArea - номер района другого узла ветви
Sub UnselectBoundaryNode(nodeIndex, iqArea)
' если узел отмечен (то есть он в эквивалентируемом районе)
' и ветвь от него уходит в неэквивалентируемый район - узел пограничный
if sel.Z(nodeIndex) and not areamap.Exists(iqArea) Then
Rastr.PrintP "Пограничный узел " & nodeId.Z(nodeIndex) & " - районы " & nodeArea.Z(nodeIndex) & " и " & iqArea
' и мы снимаем с него отметку
sel.Z(nodeIndex) = 0
End If
End Sub
|
gist
|
|
|
ПАУк
Посетитель
Всего сообщений: 21
Дата регистрации: 10.07.2024
|
Создано:
11.07.2024 14:08:17
|
Спасибо!!! Опробую и отпишусь!
|
|
|
ПАУк
Посетитель
Всего сообщений: 21
Дата регистрации: 10.07.2024
|
Создано:
12.07.2024 15:11:29
|
Извините, не работает...
пишет
недопустимый знак в строке 66
попробовал в двух рабочих моделях совсем простой (24 у., 2 р.) и достаточно сложной (300 у., 10р.)
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1059
Дата регистрации: 23.04.2007
|
Создано:
12.07.2024 16:47:26
|
Там внизу ссылочка - 'gist"
Форум просто корежит всякие символы рандомно
|
|
|
ПАУк
Посетитель
Всего сообщений: 21
Дата регистрации: 10.07.2024
|
Создано:
15.07.2024 15:26:03
|
Евгений! Большое спасибо! Всё работает!!!
и ещё добавили список пограничных узлов вообще здорово!
|
|
|