Русский
English
Главная
RastrWin
Программа
Последние изменения
Часто задаваемые вопросы
Аннотация
Лицензирование и защита от копирования
Права Windows для пользователя RastrWin
Курсы
Компонентная архитектура
Интерфейс
Инструкция по установке
Документация, видео, презентации
Свидетельство о регистрации
RastrKZ
RastrMDP
RastrOS
ZamerSeti
Архив
Bars-Lincor
Расчетная модель
Система моделирования
Последние изменения
Программа
Инструкция пользователя
Инсталляция
RUStab
Загрузка
Последние изменения
Поддержка
Поддержка
Форум
Техподдержка
Персональная
Макро студия
Макро студия
Автоматизация
Работа с SQL
Оценка параметров ЛЭП и ТР
Эффективность размыкания сети
Анализ напряжений в Excel
Автоматизация с "AutoIt"
Создание графа сети из режима
Передача графики в SVG
Вариантные расчеты
Импортозамещение
О нас
О компании
Фотогалерея
Пользователи
Отчеты об использовании своего имущества
Реквизиты
Поддержка
Форум
Техподдержка
Персональная
Авторизация
Запомнить меня на этом компьютере
Забыли свой пароль?
Регистрация
Поиск по сайту
Подписка
Новости Bars- Lincor
Новости RastrWin
Общие новости
Новости RUStab
Изменение параметров
Hits
67419608
10958
Hosts
3609297
2334
Visitors
53572081
10551
107
Главная
/
Поддержка
/
Форумы
/
Макро
Форум «Макро»
Версия для печати
Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация
Тема: «
Автоматизация расчётов. Статика.
» в форуме:
Макро
Просмотров: 13871
Dmitry Miroshnichenko
Заглянувший
Всего сообщений:
3
Дата регистрации:
16.11.2010
Создано:
16.11.2010 14:16:09
Здравствуйте!
Как и многие, столкнулся с проблемой автоматизации "однотипных" расчётов режимов энергосистем. В данный момент нахожусь на этапе "Расчёт статической устойчивости".
Предлагаю фрагмент алгоритма работы макроса.
При рассмотрении нормальной схемы (режима):
1) Загрузка исходных данных (режим, траектория, сечение);
2) Расчёт режима (фиксация перетока по сечению в исходной) схеме)
3)Утяжеление
3.1. Стандартный поиск Рпр. kod=Rastr.step_ut("i")
Далее, если во время утяжеления была зафиксирована токовая перегрузка любого элемента сечения, то макрос это отстреливает и при окончании утяжеления алгоритм подразумевает следующие действия:
а. Повторная загрузка файла режима (это для отката параметров режима)
б. Пропорциональное уменьшение (деление на константу) всех параметров "Траектории утяжеления" (для увеличения точности)
в. Запуск утяжеления и останов расчёта на следующем (после первой фиксации перегрузки по току) шаге.
г. Фиксация перетока в сечении и сравнение его значения с величиной Рпр(1-Кр).
К пункту Г: если рассчитывается "аварийное схема", то после фиксации токовой перегрузки и останова утяжеления- включается отключённая ветвь и рассчитывается режим. Тем самым определяется доаварийный переток.
Макрос написан и работоспособен, но почему-то не на всех схемах.
Проблема в том, что (по-моему) некорректно работает повторная загрузка исходных данных, которая прописана у меня следующим образом:
'*****ГЛАВНАЯ ЗАГРУЗКА ФАЙЛОВ (для первого расчёта)****************
Sub LoadData2
f.writeline "Полная загрузка..."
Rastr.NewFile "C:\Program Files\RastrWin\SHABLON\ре
жим.rg2"
Rastr.NewFile "C:\Program Files\RastrWin\SHABLON\се
чения.sch"
Rastr.NewFile "C:\Program Files\RastrWin\SHABLON\тр
аектория утяжеления.ut2"
Rastr.Load 1,"D:\test_st\rise\4_off.
rg2", "C:\Program Files\RastrWin\SHABLON\ре
жим.rg2"
Rastr.Load 1,"D:\test_st\А-Х.sch", "C:\Program Files\RastrWin\SHABLON\се
чения.sch"
Rastr.Load 1,"D:\test_st\а1.ut2", "C:\Program Files\RastrWin\SHABLON\тр
аектория утяжеления.ut2"
Rastr.rgm("p")
End Sub
'************************
***************
'****ВТОРАЯ ЗАГРУЗКА (для реализации утяжеления в аварийных схемах)******
Sub LoadData
Rastr.NewFile "C:\Program Files\RastrWin\SHABLON\ре
жим.rg2"
Rastr.Load 2,"D:\test_st\rise\4_off.
rg2", "C:\Program Files\RastrWin\SHABLON\ре
жим.rg2"
f.writeline "Загрузка..."
Rastr.rgm("p")
End Sub
'************************
*************
Спасибо. Делитесь своими соображениями.)
Профиль
Наверх
Михаил Одинцов
Постоянный посетитель
Всего сообщений:
148
Дата регистрации:
22.07.2008
Создано:
16.11.2010 14:47:12
Надо хотя бы написать в чем выражается его неработоспособность во всех схемах, может проблема и не в загрузке т.к. там сложно напортачить, а вдругих местах запросто.
Не очень ясно зачем Rastr.Load 2(!!!) при второй загрузке
б. Пропорциональное уменьшение (деление на константу) всех параметров "Траектории утяжеления" (для увеличения точности)
Не самое элегантное решение, не очень точное и будет времязатрантным при действительно большом объеме расчетов
в. Запуск утяжеления и останов расчёта на следующем (после первой фиксации перегрузки по току) шаге.
Таким образом вы не досчитаете предел по статике и по напряжению, зачем останавливать.
К пункту Г: если рассчитывается "аварийное схема", то после фиксации токовой перегрузки и останова утяжеления- включается отключённая ветвь и рассчитывается режим. Тем самым определяется доаварийный переток.
Тоже не самое элегантное решение, т.к. отключение одной ветви может вести за собой отключение других элементов, которые, я подозреваю, у вас не включатся.
Вообщем в Вашем макросе есть куда еще стремиться, удачи. Хотя смотря на сколько точные результаты Вы должны получить.
Профиль
Наверх
Dmitry Miroshnichenko
Заглянувший
Всего сообщений:
3
Дата регистрации:
16.11.2010
Создано:
16.11.2010 18:05:33
Все замечания по элегантности вполне уместны; просто это первый, начальный грубый этап, поэтому к точности без претензий. Проблема в самом "механизме".
Видимо, недостаточно точно рассказал о принципе работы макроса.
Рассматриваем "Аварийный режим", N-1.
1. Расчёт режима. Из таблицы "Сечения-Сечения" Определяем Р0. Начальный переток по сечению.
2. Запускается "утяжеление". Ищется предельная передаваемая мощность (по "напряжению"), Рпр. На каждом шаге утяжеления макрос фиксирует токовые нагрузки линий, составляющих сечение.
3. Определяется: Рпр*(1-Кр).
4. Если в процессе утяжеления (пункт 1) была зафиксирована токовая перегрузка, то после определения Рпр:
4.1. Повторная загрузка файла режима- аварийная схема.
4.2. Запуск "утяжеления" с уменьшенными параметрами "траектории".
4.3. Режим утяжеляется до момента первой токовой перегрузки линии.
4.4. Дальнейшие операции включения/отключения линий связаны с определением доаварийного перетока.
4.5. Таким образом, мы имеем два предела статической устойчивости: по току и по напряжению.
Формирование "расчётных схем" заключается в последовательном отключении линий контролируемого сечения, т.е. если сечение составляют 3 линии, то рассчитано будет четыре схемы (1 нормальная+3 аварийных). Макрос обращается к таблице "Сечения-Гр.Линий". Выбирает первую, ищет её в таблице "Ветви" и отключает.
Проблема:
а. при использовании команды Rastr.Load 1 корректно проходит только первый расчёт (нормальная схема). При повторных загрузках (Rastr/макрос) не находит соответствия между таблицами "Гр.Линий" и "Ветви".
б. методом научного тыка, были опробованы команды Rastr.Load 2 и Rastr.Load 3, и вроде всё заработало, но только применительно (почему-то????) к небольшим тестовым схемам (60 узлов). Если расчётная модель состоит, условно говоря, из 500 узлов, то всё- расчёты при повторных загрузках плывут.
Есть мысль создавать и сохранять массив с основными начальными параметрами режима, чтоб обращаться к нем вместо повторной загрузки файлов.
Но хотелось бы узнать, может есть какие-нибудь подводные камни при выполнении операций загрузки файлов?! Ведь в самом макросе задействованы только функции: расчёт режима, утяжеление и контроль токовых перегрузок.
Профиль
Наверх
Михаил Одинцов
Постоянный посетитель
Всего сообщений:
148
Дата регистрации:
22.07.2008
Создано:
16.11.2010 20:28:51
Просто мне пришлось как-то полностью перделать алгоритм поиска МДП, что равно полностью переписать макрос, поэтому сказал про элегентность и точность.
У меня нормально работает Rastr.Load 1, т.е. проблем нет никаких. Не понял что значит "не находит соответствия между таблицами "Гр.Линий" и "Ветви"", т.е. у меня тоже есть такой поиск - тоже все работает норм, нужно помнить что у линий есть номера параллельности и в таблице ветви могут быть линии с ip-iq в другом порядке, чем в гр.линий.
Мне кажется Вы не там ошибку ищете, т.к. этот макрос довольно сложная штука и ошибиться в программировании довольно легко. Вам нужно пошагово просмотреть расчет с контролем всех переменных чтобы определить место ошибки, т.е. если считаете что проблема в загрузке - контролируете ее, что загружаете именно нужные файлы. Что загружаете именно нужную траекторию, что делите все(!!!) составляющие шага утяжеления.
У Вас совпадает ручной и автоматический расчет для больших схем в нормальном режиме? А просто предельный переток рассчитаный вручную и макросом?
Посмотрите, не ведет ли отклюяение ветви к отключению других элементов.
Профиль
Наверх
Dmitry Miroshnichenko
Заглянувший
Всего сообщений:
3
Дата регистрации:
16.11.2010
Создано:
17.11.2010 00:45:37
Не находит соответствия м/у таблицами "Гр. Линий" и "Ветви" - это значит, что, обращаясь к таблице "Гр. линий" и считывая ?нач и ?кон, он не находит такого элемента в таблице "Ветви". Логика макроса предполагает нарушения порядка узлов начала и конца линии. Да и все нюансы с загрузкой файлов, коррекцией траектории и "сохранением" топологии схемы в связи с отключением линий учтены.
Что касается больших схем:
1. Действительно, при расчёте нормальных схем (первая-корректная загрузка) нормальные и предельные перетоки, полученные вручную, не совпадают с результатами работы макроса. В обоих случаях при расчётах используется "плоский старт".
2. Ну а повторная загрузка, так там вообще каша.
"Нездоровая" фигня.
Придётся перелопатить макрос. Но если у Вас есть (появились) какие-нибудь идеи или предположения...весь во внимании.
Профиль
Наверх
Михаил Одинцов
Постоянный посетитель
Всего сообщений:
148
Дата регистрации:
22.07.2008
Создано:
17.11.2010 12:52:50
Скорее всего у Вас ошибка в коде, просто аналогичные Вашим части алгоритма у меня работают, т.е. например поиск ветвей входящих в сечение (сразу оговорюсь, пишу макро через Excel)
Num - номер исследуемого сечения
For i = 0 To grline_g.Size - 1
If ns_g.z(i) = Num Then
выборка при "прямом порядке" следования ip-iq
vetv_v.setsel ("ip=" + Str(ip_g.z(i)) + "&iq=" + Str(iq_g.z(i)))
k = vetv_v.FindNextSel(-1)
While k <> -1
перебор всех найденный ветвей с различным номером параллельности
Wend
выборка при "обратном порядке" следования ip-iq
vetv_v.setsel ("ip=" + Str(iq_g.z(i)) + "&iq=" + Str(ip_g.z(i)))
k = vetv_v.FindNextSel(-1)
While k <> -1
перебор всех найденный ветвей с различным номером параллельности
Wend
End If
Next i
Ну, вообщем, если у вас утяжеление заканчивается в разных точках при ручном расчете и при автоматическом - это поблема явно, они, правда, у меня тоже иногда отличаются, но на доли шага. Зачем вам кстати Rastr.rgm("p")?, утяжеление делается просто черезе step_ut, после этого рассчитывать режим не надо. Если доаварийные переток считаете - то попробуйте просто обычный расчет. Ну а вообще надо детально проверять работу макроса, если такие результаты полчаются.
Профиль
Наверх
Михаил Реутов
Постоянный посетитель
Всего сообщений:
224
Дата регистрации:
21.11.2007
Создано:
23.11.2010 08:44:43
Приветствую.
У меня тоже есть подобный макрос в Excel.
Цитата
Михаил Одинцов пишет:
У Вас совпадает ручной и автоматический расчет для больших схем в нормальном режиме
Ниже приведен фрагмент кода утяжеления из макроса, результаты ручного и расчета с помощью макроса совпадают.
Код
rg_flag = (Rastr.rgm("p") = 0)
If rg_flag Then ' режим сразу не разошелся, значит, начинаем расчет !!!
Do
'...
'кое-какие действия
'...
STEP_NODE val_step
rg_flag = (Rastr.rgm("z") = 0)
Loop While rg_flag
Else
MsgBox "Режим разошелся на 1-ом шаге"
End If
Функция STEP_NODE осуществляет шаг утяжеления - изменяет нагрузку (генерацию) в узле, входной параметр val_step - величина шага.
Профиль
Наверх
Вадим
Гость
Создано:
24.07.2012 13:17:09
у меня тоже rastr не хочет после загрузки нового режима через команду rastr.load 1,имя, шаблон проводить манипуляции с таблицами
если в экселе попробовать
Код
Sub dd()
Set rastr = CreateObject("Astra.Rastr
")
sh_rg2 = "c:\Program Files\RastrWin\SHABLON\ре
жим.rg2" ' путь до шаблона rg2
rg2 = "c:\Project\dev\variant_r
as\regim.rg2" ' путь до файла rg2
rastr.Load 1, rg2, sh_rg2 ' загрузка файла
Set t_node = rastr.Tables("node") ' таблица узлы
Set t_node_ny = t_node.Cols("ny") ' таблица узлы кол. ny
MsgBox "Ny узла = " & t_node_ny.zn(0)
rastr.Load 1, rg2, sh_rg2 ' новая загрузка файла
MsgBox "Ny узла = " & t_node_ny.zn(0)
End Sub
то в итоге во втором сообщении не выведется номер узла.. если изменять режим загрузки с 1 на 2 и 3, то все выводится.. но конечно, хотелось бы через 1 загружать, чтоб косяки какие-нибудь не попали в расчет
Только повторная инициализации переменных после загрузки помогает..
Наверх
Михаил Реутов
Постоянный посетитель
Всего сообщений:
224
Дата регистрации:
21.11.2007
Создано:
30.07.2012 16:23:14
Цитата
Вадим пишет:
у меня тоже rastr не хочет после загрузки нового режима через команду rastr.load 1,имя, шаблон
Поробуйте после второй загрузки переменные t_node и t_node_ny занового инициалозировать.
Насчет возврата параметров (вместо повторной загрузки режима)
http://www.rastrwin.ru/su
pport/forum/...message750
Профиль
Наверх
Вадим
Гость
Создано:
30.07.2012 16:53:37
я так и сделал.. завел переменные в глобальные, и сделал подпрограмму загрузки, где после команды Load запускаю подпрограмму инициализации всех переменных
При методе без повторной загрузки есть вероятность все сохранить вместе с отключенными объектами, загрузка начальной схемы психологически более оправдана )
Можно так же делать карту отключений и считать сколько отключений до и после режима, потом восстанавливать тем самым отключенные объекты..
Наверх
Читают тему
гостей:
1
, пользователей:
0
, из них скрытых:
0
Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация
Программный комплекс «RastrWin»
© «RastrWin», 1988-2019