На главную страницу
Русский English
 


Поддержка
Форум
Техподдержка
Закрытый разделПерсональная

Авторизация

Запомнить меня на этом компьютере
  Забыли свой пароль?
  Регистрация



Поиск по сайту


Подписка

Изменение параметров

Hits 67418220
9570
Hosts 3608872
1909
Visitors 53570775
9245

90


Главная / Поддержка / Форумы / Макро

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

Версия для печати Версия для печати

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


Тема: «Расширение функционала » в форуме: Макро   Просмотров: 10942
 
Михаил Реутов
Постоянный посетитель
 
Всего сообщений: 224
Дата регистрации: 21.11.2007
Создано: 01.11.2010 12:19:14
 
 
Приветствую.
Если в ваших расчетных моделях системы шин одного класса напряжения представлены не одним узлом (разделены на две части) и ветви соединены с данными узлами с учетом фиксации, то ниже приведенный скрипт, наверное, будет полезен.
Отключение/включение узла с учетом фиксации присоединений:
Код

Dim xmlParser, node, n, n_1, n_2, nodes, node_1,vetv,node_2, ss, x, arr, pos
Set xmlParser = CreateObject("MSXML2.DOMD­ocument")
xmlParser.async = False
xmlParser.load "C:\Temp\ficsa.xml"
Set node = Rastr.Tables("node")
Set vetv = Rastr.Tables("vetv")
n = Replace(node.Cols("ny").Z­(aRow), "ny=", "")
Set nodes = xmlParser.selectNodes("/m­ain/ss/node[@key='" & n & "']")
If nodes.length = 1 Then
   Set ss = nodes(0).parentNode
   For Each x In ss.childNodes   
      If x.getAttribute("key") = n Then
         Set node_1 = x
         n_1 = CLng(node_1.getAttribute(­"key"))
      Else
         Set node_2 = x
         n_2 = CLng(node_2.getAttribute(­"key"))
      End If
   Next
   If node.Cols("sta").Z(aRow) = 0 Then 'узел включен
      node.Cols("sta").Z(aRow) = 1
      For Each x In node_1.childNodes   
         arr = Split(x.getAttribute("key­"),"-")
         vetv.SetSel "ip=" & Cstr(arr(0)) & "&iq=" & Cstr(arr(1)) & "&np=" & Cstr(arr(2))
         pos = vetv.FindNextSel(-1)
         If CLng(arr(0)) = n_1 Then vetv.Cols("ip").Z(pos) = n_2
         If CLng(arr(1)) = n_1 Then vetv.Cols("iq").Z(pos) = n_2
      Next
      vetv.SetSel "ip=" & Cstr(n_1) & "&iq=" & Cstr(n_2)   
      pos = vetv.FindNextSel(-1)
      if pos<>-1 then vetv.Cols("sta").Z(pos) = 1
      vetv.SetSel "ip=" & Cstr(n_2) & "&iq=" & Cstr(n_1)    
      pos = vetv.FindNextSel(-1)
      if pos<>-1 then vetv.Cols("sta").Z(pos) = 1
   Else 'узел отключен
      node.Cols("sta").Z(aRow) = 0
      For Each x In node_1.childNodes   
         arr = Split(x.getAttribute("key­"),"-")
         If CLng(arr(0)) = n_1 Then
            vetv.SetSel "ip=" & Cstr(n_2) & "&iq=" & Cstr(arr(1)) & "&np=" & Cstr(arr(2))
            pos = vetv.FindNextSel(-1)
            vetv.Cols("ip").Z(pos) = n_1   
         End If
         If CLng(arr(1)) = n_1 Then
            vetv.SetSel "ip=" & Cstr(arr(0)) & "&iq=" & Cstr(n_2) & "&np=" & Cstr(arr(2))
            pos = vetv.FindNextSel(-1)
            vetv.Cols("iq").Z(pos) = n_1   
         End If   
   
      Next
      vetv.SetSel "ip=" & Cstr(n_1) & "&iq=" & Cstr(n_2)   
      pos = vetv.FindNextSel(-1)
      if pos<>-1 then vetv.Cols("sta").Z(pos) = 0
      vetv.SetSel "ip=" & Cstr(n_2) & "&iq=" & Cstr(n_1)    
      pos = vetv.FindNextSel(-1)
      if pos<>-1 then vetv.Cols("sta").Z(pos) = 0
   End If
Else
   MsgBox "!!!"
End If

XML-файл (в данном случае ficsa.xml) имеет следующий вид:
Код

<?xml version="1.0" encoding="windows-1251"?>­
<main>
   <ss>
      <node key="7">
         <vetv key="7-9-0"/>
         <vetv key="7-12-1"/>
         <vetv key="7-12-3"/>
         <vetv key="5-7-1"/>
         <vetv key="7-43-1"/>
      </node>
      <node key="8">
         <vetv key="6-8-2"/>
         <vetv key="8-13-2"/>
         <vetv key="8-44-2"/>
      </node>
   </ss>
   <ss>
      <node key="5">
         <vetv key="1-5-3"/>
         <vetv key="5-7-1"/>
         <vetv key="5-11-0"/>
         <vetv key="5-36-0"/>
      </node>
      <node key="6">
         <vetv key="2-6-4"/>
         <vetv key="6-8-2"/>
         <vetv key="6-21-0"/>
      </node>
   </ss>
</main>

В XML-файле описывается два узла и ветви, зафиксированные на них.
Макрос работает медленно и с графикой нет решений - перерисовка после перефиксации только вручную.
Времени пока нет на доработку и усовершенствование данного макроса...
 
Профиль
Наверх
Михаил Реутов
Постоянный посетитель
 
Всего сообщений: 224
Дата регистрации: 21.11.2007
Создано: 01.11.2010 12:23:43
 
 
Да, забыл.
Данный макрос записывается в файл *.rbs и копируется в папку C:\\Program Files\\RastrWin\\contextm­acro. Далее "привязываем" в контекстные макросы на графику к узлам и называем например "Откл/вкл с фиксацией".
 
Профиль
Наверх
Евгений Машалов
Администратор

 
Всего сообщений: 1059
Дата регистрации: 23.04.2007
Создано: 01.11.2010 23:37:18
 
 
Круто. Спасибо. Может быть это в Макростудию поместить ? Не возражаете ?
 
Профиль
Наверх
Михаил Реутов
Постоянный посетитель
 
Всего сообщений: 224
Дата регистрации: 21.11.2007
Создано: 02.11.2010 08:47:55
 
 
Цитата
Евгений Машалов пишет:
Круто. Спасибо. Может быть это в Макростудию поместить ? Не возражаете ?
Не возражаю, но данный макрос буду дорабатывать: необходимо повысить "скорость" выполнения и сделать автоматическую перерисовку графики. Предлагаю поместить в Макростудию следующую редакцию.

Срузу же вопрос по теме.
После выполнения данного макроса Графика автоматически перерисовывается ("коряво") и экран центрируется в другом месте (где-то по середине всей Графики) отличном от позиции узла, над которым вызывался данный макрос.
Как отключить позиционирование экрана? или задать координаты? необходимо чтобы после выполнения данного макроса изображение "не улетало куда попало, а оставалось на месте".
После изменения топологии сети происходит автоматическая перерисовка графики. Удаленные элементы на Графике исчезают (но данные в Графике о них остаются), а новые, добавленные элементы отображаются на Графике (с парамерами отображения по умолчанию). Визуально отключить перерисоку Rastr.LockEvent=True ?
 
Профиль
Наверх
Андрей Крутенёв
Гость
 
Создано: 19.11.2010 11:01:22
 
 
время на посмотреть-на-работу-скри­пта отсутствует, поэтому не могли бы Вы подробней описать принцип действия сего чуда?
из представленного описания работы я ничего не понял, а листинг копать недосуг
 
Наверх
Михаил Реутов
Постоянный посетитель
 
Всего сообщений: 224
Дата регистрации: 21.11.2007
Создано: 19.11.2010 18:27:46
 
 
Цитата
Андрей Крутенёв пишет:
время на посмотреть-на-работу-скри­пта отсутствует, поэтому не могли бы Вы подробней описать принцип действия сего чуда?
из представленного описания работы я ничего не понял, а листинг копать недосуг

Для начала назначение XML-файла. В этом файле описываются пара узлов и ветви, зафиксированные за ними. Узел <ss> (типа система шин) включает в себя только два дочерних узла <node> (типа 1 и 2 СШ). Узел <node> имеет атрибут key - это номер узла. Узел <node> имеет дочерние узлы <vetv> - это зафиксированные за СШ присоединения. Узел <vetv> имеют атрибут key - номера начала, конца и параллельности ветви через "черточку".
Макрос в соответствии с XML-файлом будет отключать (или включать) узел. При этом ветви зафиксированные за ним будут изменять ?привязку? к узлам.
Например.
Два узла ny=1 и ny=2 (1СШ и 2СШ ), оба включены (sta = 0) и ветви
ip1&iq=2&np=0 - секционный выключатель
ip1&iq=3&np=0 ? присоединение ?1 к 1СШ
ip1&iq=4&np=0 ? присоединение ?2 к 1СШ
ip2&iq=5&np=0 ? присоединение ?3 к 2СШ
ip2&iq=6&np=0 ? присоединение ?4 к 2СШ
XML-файл следующий
Код

<?xml version="1.0" encoding="windows-1251"?>­?
<main>
   <ss>
      <node key="1">
         <vetv key="1-3-0"/>
         <vetv key="1-4-0"/>
      </node>
      <node key="2">
         <vetv key="2-5-0"/>
         <vetv key="2-6-0"/>
      </node>
   </ss>
</main>

После работы макроса над узлом ny=1 будет слудющее:
Узел ny=1 будет отключен (sta = 1), ny=2 останется включенным (sta = 0)
ip1&iq=2&np=0 - секционный выключатель будет отключен (sta = 1)
Ветви изменят ?привязку? к 2СШ
ip2&iq=3&np=0 ? присоединение ?1 к 2СШ
ip2&iq=4&np=0 ? присоединение ?2 к 2СШ
ip2&iq=5&np=0 ? присоединение ?3 к 2СШ
ip2&iq=6&np=0 ? присоединение ?4 к 2СШ

Если бы узел ny=1 был отключен то макрос бы выполнил обратные действия.
 
Профиль
Наверх
Андрей Крутенёв
Гость
 
Создано: 22.11.2010 14:49:06
 
 
Хм, а для чего это нужно?
Практической ценности не узрел что-то...
 
Наверх
Михаил Реутов
Постоянный посетитель
 
Всего сообщений: 224
Дата регистрации: 21.11.2007
Создано: 22.11.2010 16:30:40
 
 
Цитата
Андрей Крутенёв пишет:
Хм, а для чего это нужно?

Из первого сообщения: "Если в ваших расчетных моделях системы шин одного класса напряжения представлены не одним узлом (разделены на две части) и ветви соединены с данными узлами с учетом фиксации, то ниже приведенный скрипт, наверное, будет полезен. Отключение/включение узла с учетом фиксации присоединений".
Цитата
Андрей Крутенёв пишет:
Практической ценности не узрел что-то

Возможно. Смотря какая расчетная модель у Вас: если СШ одного класса представлены одним узлом, то макрос не применим к данным узлам.
 
Профиль
Наверх
Андрей Крутенёв
Гость
 
Создано: 24.11.2010 19:51:53
 
 
Нет, у нас есть шины, представленные двумя узлами расчётной модели, и фиксация линий на них, скажем, жёсткая.
Если я отключаю узел, то стандартно отключаются все ветви, подключённые к данному узлу.
Если я хочу включить узел с ветвями, подключёнными к нему я использую контекстный макрос.

Внимание вопрос: какова цель, зачем перекоммутировать ветви на другой узел?

П.С.: в представленном контексте фраза "Отключение/включение узла с учетом фиксации присоединений" не несёт никакой смысловой нагрузки.
 
Наверх
Михаил Реутов
Постоянный посетитель
 
Всего сообщений: 224
Дата регистрации: 21.11.2007
Создано: 24.11.2010 23:47:28
 
 
Цитата
какова цель, зачем перекоммутировать ветви на другой узел?

Как правило вывод в ремонт одной СШ сопровождается переводом всех присоединений на оставшуюся в работе СШ.
Цитата
П.С.: в представленном контексте фраза "Отключение/включение узла с учетом фиксации присоединений" не несёт никакой смысловой нагрузки.
Это некое короткое наименование, которое отображается в контекстном меню. Согласен, что "бредятина". Вы в праве назвать хоть как.
 
Профиль
Наверх
Олег Ишмяков
Заглянувший
 
Всего сообщений: 9
Дата регистрации: 12.07.2008
Создано: 25.11.2010 12:19:00
 
 
Если все присоединения переводятся на остающуюся в работе СШ с нарушением фиксации, то может просто в Растре включить ШСВ ??
на расчеты это не повлияет. Только на отображение.
 
Профиль
Наверх
Андрей Крутенёв
Гость
 
Создано: 25.11.2010 14:57:43
 
 
Вот и я о том же.
Зачем отключать ШСВ в модели и перефиксировать присоединения, если можно просто ничего не делать и оставить ШСВ включённым?
 
Наверх



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


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







Программный комплекс «RasrWin»
Программный комплекс «RastrWin»
© «RastrWin», 1988-2019