regim4ik
Заглянувший
Всего сообщений: 3
Дата регистрации: 05.08.2010
|
Создано:
05.08.2010 12:03:34
|
|
Насколько понимаю возможности макросов практически неограничены. Однако столкнулся с проблемой при проведении утяжеления необходимо чтоб расчет останавливался при достижении допустимого значения тока по конкретному элементу. Насколько понимаю в настоящее время утяжеление (расчет режима) останавливается при превышении допустимого предела по напряжению, который можно изменять. А вот с ограничениями по допустимым токам не могу понять можно ли каким нить образом реализовать. Вроде бы и уже добавили в РАСТР возможность заведения допустимых значений токовь по элементам, а вот до утяжеления, судя по всему, дело не дошло.
Если быть кратким, то у меня 2 вопроса основных:
1. Как реализовать остановку расчета режима при утяжелении при достижении допустимого значения тока элемента сети с учетом температуры?
2. Будет ли в новых версиях добавлена возможность контролировать не только диапазон изменения напряжения, но и контроль допустимого значения по току конкретного элемента?
Заранее благодарен!
|
|
|
Михаил Реутов
Постоянный посетитель
Всего сообщений: 224
Дата регистрации: 21.11.2007
|
Создано:
05.08.2010 14:05:16
|
Цитата |
---|
regim4ik пишет:
Как реализовать остановку расчета режима при утяжелении при достижении допустимого значения тока элемента сети с учетом температуры? |
Можно вот так:
Код |
---|
Dim kd, my_temp, v, row
my_temp = Rastr.SendCommandMain(8,"Введите температуру","",0)
Rastr.LockEvent=True
Rastr.LogEnable=False
Set v = Rastr.Tables("vetv")
v.Cols.Add "my_zagr", 1
kd = Rastr.step_ut("i")
Do
Rastr.CalcIdop CDbl(my_temp), CDbl(0), ""
v.SetSel "tip=0"
v.Cols("my_zagr").Calc "zag_i*1000"
v.SetSel "tip=1"
v.Cols("my_zagr").Calc "zag_it*1000"
v.SetSel "my_zagr>100"
row = v.FindNextSel(-1)
If row <> -1 Then
MsgBox "Утяжеление остановлено: загрузка ветви " & v.Cols("name").Z(row) & "по току больше 100 %"
Exit Do
End If
kd=Rastr.step_ut("z")
Loop While kd=0
v.Cols.Remove "my_zagr"
Rastr.LogEnable=True
Rastr.LockEvent=False
Rastr.SendChangeData 0,"","",0
Set v = Nothing
|
|
|
|
regim4ik
Заглянувший
Всего сообщений: 3
Дата регистрации: 05.08.2010
|
Создано:
05.08.2010 15:07:28
|
Ухх..спасибо Михаил за такую оперативность..
единственное стесняюсь спросить что же такое это таинственное "my_zagr" ? это контролируемый элемент(ы) ?? если да, то как мне иих прописать ?
|
|
|
Михаил Реутов
Постоянный посетитель
Всего сообщений: 224
Дата регистрации: 21.11.2007
|
Создано:
06.08.2010 08:17:37
|
Цитата |
---|
regim4ik пишет:
что же такое это таинственное "my_zagr" ? это контролируемый элемент(ы) ?? |
Это не контролируемые элементы. В таблице vetv (Ветви) есть два столбца zag_i и zag_it - токовая загрузка в % для ВЛ и трансформаторов соответственно. Формулы расчета этих параметров различны. my_zagr это "дополнительный" столбец, в который записывается токовая загрузка из zag_i и zag_it для ВЛ и ТР, короче, из двух столбцов "делается" один. Этот столбец my_zagr и мониторится на загрузку более 100 %. Хотя можно было этого всего не делать, а продумать более "хитрую" выборку перегруженных элементов.
|
|
|
regim4ik
Заглянувший
Всего сообщений: 3
Дата регистрации: 05.08.2010
|
Создано:
06.08.2010 15:57:40
|
Хм..легко сказать "делается"...для начинающего пользователя это совсем непросто..ладно будем постигать непостижимое..
|
|
|
carter2
Заглянувший
Всего сообщений: 1
Дата регистрации: 05.05.2011
|
Создано:
05.05.2011 19:37:33
|
А нельзя ли подсказать как изменится данный макрос если всегда контролируется определенная ветвь и токовая загрузка 98%.
Заранее спасибо
|
|
|
Михаил Одинцов
Постоянный посетитель
Всего сообщений: 148
Дата регистрации: 22.07.2008
|
Создано:
06.05.2011 00:43:30
|
Попробуйте поменять строку
v.SetSel "my_zagr>100"
на
v.SetSel "ip=%здесь номер начала ветви%&iq=%здесь номер конца ветви%&np=%здесь номер параллельности%&my_zagr>98"
Можно сделать и ввод с клавиатуры, но по мне это не очень удобно.
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 233
Дата регистрации: 03.05.2011
|
Создано:
20.07.2011 12:16:20
|
Подскажите, что не правильно делаю (не исключено что все ) при попытке написать макрос, который прерывает утяжеление при превышении допустимого тока 100% в отмеченных ветвях
Код |
---|
FUNCTION usl()
usl=-1
Set Table_vetv = Rastr.Tables("vetv")
Set Vetv_zagi = Table_vetv.Cols("zag_i")
Table_vetv.SetSel("sel="+CSTR(1))
FlagExit = False
CurrentRow_vetv=Table_vetv.FindNextSel(-1)
While (CurrentRow_vetv <>-1)
If (Vetv_zagi.z(CurrentRow_vetv)*1000>100) Then
Rastr.PrintP "превышение допустимого тока в ветви"
FlagExit = True
End If
Wend
If (FlagExit = True) Then
usl = 1
End If
END FUNCTION
|
|
|
|
Михаил Одинцов
Постоянный посетитель
Всего сообщений: 148
Дата регистрации: 22.07.2008
|
Создано:
20.07.2011 13:01:05
|
Мне кажется цикл перебора, где while, неправильно сделан. Нет следующей строки:
CurrentRow_vetv=Table_vet?v.FindNextSel(CurrentRow_vetv)
Она должна быть внутри while, но не if. Это нахождения следующего номера строки, у Вас по логике вещей должен быть бесконечный цикл while при работе при текущем коде, т.к. он как нашел первую ветвь по выборке, так ее и перебирает и не может выйти из цикла.
В if надо бы поместить k=-1, чтоб цикл закончить, если не хотите выводить список ветвей перегруженных.
И вообще выборку проще сразу наверно сделать:
"sel=1&zag_i>0.1" Если выборка непустая - то прекращайте утяжеление.
И мне кажется у Вас фактически по функционалу дублируются переменные usl и FlagExit, вторую можно убрать.
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 233
Дата регистрации: 03.05.2011
|
Создано:
20.07.2011 13:47:40
|
Цитата |
---|
Мне кажется цикл перебора, где while, неправильно сделан. Нет следующей строки:
CurrentRow_vetv=Table_vetv.FindNextSel(CurrentRow_vetv) |
Да возможно ее не хватало, потму что он действительно зацикливался на первом же шаге...
вот только теперь он мне пишет при расчете: "Объект с номером -1 отсутвует в таблице vetv". Откуда он берет этот -1?
Цитата |
---|
В if надо бы поместить k=-1, чтоб цикл закончить, если не хотите выводить список ветвей перегруженных.
И вообще выборку проще сразу наверно сделать:
"sel=1&zag_i>0.1" Если выборка непустая - то прекращайте утяжеление. |
Вот с этим не понял что и как вставить?
|
|
|
Михаил Одинцов
Постоянный посетитель
Всего сообщений: 148
Дата регистрации: 22.07.2008
|
Создано:
20.07.2011 14:27:42
|
|
"Объект с номером -1 отсутвует в таблице vetv". - это только на этой строке у Вас могла возникнуть такая ошибка:
(Vetv_zagi.z(CurrentRow_v?etv)*1000>100)
Значит она, что в выборке нет строк, т.е. вот по этой строке
CurrentRow_vetv=Table_vet?v.FindNextSel(-1),
CurrentRow_vetv принимает значение -1, т.е. нет строк удовлетворяющих выборке либо Вы перебрали уже все строки выборки и прога естественно не может считать Vetv_zagi.z(-1), ибо номер строки в столбце принимает значения от 0 до количества строк в таблице-1.
Но не понятно тогда почему у вас он зашел в цикл т.к. стоит
While (CurrentRow_vetv <>-1)
Мне сложно написать Вам прямо 100% работающее решение, т.к. я сейчас пишу в основном на С-образных вещах. Может Вы ее вставили не так, надо:
While (CurrentRow_vetv <>-1)
If (Vetv_zagi.z(CurrentRow_v?etv)*1000>100) Then
Rastr.PrintP "превышение допустимого тока в ветви"
FlagExit = True
End If
CurrentRow_vetv=Table_vet?v.FindNextSel(CurrentRow_vetv)
Wend
И вообще выборку проще сразу наверно сделать:
"sel=1&zag_i>0.1" Если выборка непустая - то прекращайте утяжеление.
Это я имел ввиду типа такого написать, ну логика алгоритма приведена, синтаксис может быть несколько не правильным.
Set Table_vetv = Rastr.Tables("vetv")
Table_vetv.SetSel("sel=1&zag_i>0.1")
k=Table_vet?v.FindNextSel(-1)
if k=-1 then
usl = -1
else
usl = 1
Rastr.PrintP "превышение допустимого тока в ветви"
end if
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 233
Дата регистрации: 03.05.2011
|
Создано:
20.07.2011 16:30:46
|
Да действительно вначале написал, перед If.
Теперь ошибки не возникает, но расчет прекращается после первого шага, хотя допустимый ток не превышает 100% ни в одной ветви, причем завершается так словно отработало условие
Vetv_zagi.z(CurrentRow_vetv)*100>100, т.к. выводится сообщение "превышение допустимого тока в ветви->"
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 233
Дата регистрации: 03.05.2011
|
Создано:
20.07.2011 16:40:36
|
А все разобрался! в выборке надо было еще указать, что бы проверка велась только в линиях, т.е.: Код |
---|
Table_vetv.SetSel("(sel="+CStr(1)+")&(tip="+CStr(0)+")") | . А то так он провверял в трансформаторах,а в них zag_i весьма велик)
|
|
|
Михаил Реутов
Постоянный посетитель
Всего сообщений: 224
Дата регистрации: 21.11.2007
|
Создано:
20.07.2011 20:37:01
|
я бы написал так
Код |
---|
Table_vetv.SetSel "(sel=" ?& CStr(1) & ")&(tip=" & CStr(0?) & ")"
|
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 233
Дата регистрации: 03.05.2011
|
Создано:
20.07.2011 21:55:20
|
А какая разница между написаниями? в чем преимущество Вашего способа или просто так правильней?
|
|
|
Михаил Реутов
Постоянный посетитель
Всего сообщений: 224
Дата регистрации: 21.11.2007
|
Создано:
21.07.2011 14:07:55
|
так правильней с точки зрения синтаксиса языка програмирования
|
|
|
Евгений Машалов
Администратор
Всего сообщений: 1042
Дата регистрации: 23.04.2007
|
Создано:
21.07.2011 19:56:46
|
А просто "sel=1&tip=0" ? Или в CStr могут быть не константы ?
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 233
Дата регистрации: 03.05.2011
|
Создано:
21.07.2011 22:02:44
|
в данном случае тут могут быть только константы.
а писал через cstr просто потому, что взял это из другого кода и решил так и оставить
|
|
|
Михаил Егорушкин
Посетитель
Всего сообщений: 53
Дата регистрации: 14.03.2011
|
Создано:
27.02.2012 15:40:08
|
Уважаемые пользователи ПК Растр. Вы много рассуждали о том как написать макрос утяжеления с отановкой при 100% загрузке ОТМЕЧЕННЫХ Ветвей. Прошу выложить итоговый Макрос, который прерывает утяжеление при превышении допустимого тока в отмеченных ветвях.
|
|
|
Михаил Егорушкин
Посетитель
Всего сообщений: 53
Дата регистрации: 14.03.2011
|
Создано:
27.02.2012 15:44:19
|
У кого нибудь есть Макрос, который прерывает утяжеление при уменьшении напряжения до заданного коэффициентом от номинального в отмеченном узле.
|
|
|
Александр Александров
Администратор
Всего сообщений: 657
Дата регистрации: 31.05.2008
|
Создано:
27.02.2012 16:28:39
|
Здравствуйте, в Растр3 появились функции контроля тока, напряжения, мощности при утяжелении. Утяжелении останавливается на первом нарушенном пределе:
http://rastrwin.ru/download/Files/_Help_UT_UPI_.rar
Мой вариант хэлпа к утяжелению с детальным разбором скрипта для остановки по условию:
http://rastrwin.ru/download/Files/_UT_.rar
|
|
|
Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
27.02.2012 18:50:52
|
А вот интересно как поведет себя алгоритм утяжеления если в нулевой точке уже есть перегрузки - пойдет ли он назад по вектору траектории ?
|
|
|
Александр Александров
Администратор
Всего сообщений: 657
Дата регистрации: 31.05.2008
|
Создано:
27.02.2012 19:21:45
|
Нет, сразу скажет, что обнаружил нарушения.
|
|
|
Иван
Постоянный посетитель
Всего сообщений: 233
Дата регистрации: 03.05.2011
|
Создано:
01.03.2012 22:27:44
|
Михаил Егорушкин,
если подождете недельку, то по приезду на работу скину вам макрос
Александр Александров,
а не подскажите как дополнить макрос, что бы при достижении перегрузки он совершал еще одну итерацию, но только по обратной траектории?
|
|
|
Александр Александров
Администратор
Всего сообщений: 657
Дата регистрации: 31.05.2008
|
Создано:
02.03.2012 11:21:42
|
Можно порекомендовать исследовать содержимое моего поста, тремя постами ранее. Представленного материала должно быть достаточно для создания либого утяжеления/ослабления.
|
|
|