На главную страницу RastrWin

Форум «Макро»


Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация


Тема: «Эквивалентирование » в форуме: Макро   Просмотров: 6887
 
Иван
Постоянный посетитель
 
Всего сообщений: 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").Cal­c 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.D­ictionary")
' сет районов на эквивалентирование
Set areaMap = CreateObject("Scripting.D­ictionary")

' индексируем узлы
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(node­Index, 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
 
 
Евгений! Большое спасибо! Всё работает!!!
и ещё добавили список пограничных узлов вообще здорово!
 
Профиль
Наверх



Читают тему
гостей: 1, пользователей: 0, из них скрытых: 0


Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация





Работает на «Битрикс: Управление сайтом» © «Битрикс», 2001-2006