Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
12.01.2012 16:07:48
|
Уважаемые разработчики !
Вот и возник ряд вопросов по технологии loop или иначе - циклическом повторении задач.
Вопрос первый :
loop.exe - это Rastr без оболочки или это совершенно другое независимое приложение.
Вопрос второй:
Чтобы добавить в цикл выполнение макроса - достаточно ли прописать его в xml - файле loop_raw_ti
Вопрос третий:
Где и как прописывается запуск стороннего приложения в виде exe файла.
Вопрос четвертый: Правильно ли я понимаю, что есть два способа запустить цикл - нажать к нопку Оценка на панели Rastr или же запустить файл loop_raw_ti.bat - -равнозначны ли эти способы ?
Заранее спасибо !
|
|
|
Максименко Дмитрий
Гость
|
Создано:
12.01.2012 17:24:14
|
|
Итак для начала по порядку и кратко:
1. loop.exe - это независимое приложение , предназначено для последовательного запуска задач. Умеет запускать .exe файлы, скрипты (через скрипт машину C:\WINDOWS\system32\cscript.exe), внутренние задачи:
VRDO,SETUP,CONVERT,CLEAR_DIR,SERVICE_INSTALL (основные)
2. Пока что я предлагаю не привязываться к конкретным названиям. Вот пример запуска скрипта:
<TASK NAME = "GET_TI_RND" ENABLE="0" PATH = "%WINDIR%\system32\cscript.exe" >
<PAR VAL = "C:\projects\fl\debug\LOOP\get_ti_rnd.vbs" />
<PAR VAL = "\\B" />
<PAR VAL = "\\U" />
<OK VAL = "0"/>
</TASK>
Хотя возможно что вас интересует как запустить макрос *.rbs находясь в оболочке в цикле ?
3. Пример запуска стороннего приложения в виде .exe файла:
<TASK NAME = "sp_cycle" ENABLE="0" PATH = "C:\projects\fl\debug\LOOP\TM\sp_cycle.exe" >
<PAR VAL = "cycle.cnf"/>
<OK VAL = "0"/>
т.е. можно запускать любой .exe файл с любым количеством параметров.
4. Функционал кнопки Оценка уже немного изменился, в вашем случае разница будет заключаться в указателях на растр, если запускать через батник то loop.exe создаст новый обьект растра, если запуск произведен из под растра, то будет использоваться уже созданный обьект растра. То же касается и задачи ВРДО по срезу - можно запускать из под оболочки, можно сторонне через loop_.bat.
|
|
|
Александр Александров
Администратор
Всего сообщений: 660
Дата регистрации: 31.05.2008
|
Создано:
12.01.2012 17:42:01
|
По вопросу 4 можно добавить, следующее: существует способ инсталляции службы в системе (ключ SERVICE_INSTALL), после чего за LOOP будет присматривать система и общение будет возможно лишь по средством системы управления службами Windows и его LOG файлов.
|
|
|
Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
12.01.2012 17:55:46
|
по вопросу 2 интерсует как запустить макрос rbs в цикле без запуска оболочки rastr.
Т.е. макрос должен отработать в объекте растра созданном loopом.
Задача прмиерно следующая - без запуска растра организовать циклическую оценку, на оцененном режиме организовать ряд вариантных расчетов(через собственно варианты или аварии из МДП). Для каждого вариантного режима оценить наличие нарушений и при необходимости запустить opf. По итогам работы opf найти использованное управление и кинуть его в протокол или ексел. И так по кругу.
|
|
|
Максименко Дмитрий
Гость
|
Создано:
12.01.2012 18:39:19
|
|
Ну в общем тогда процедура примерно следующая(преполагаю что оценка Космосом делается):
Запускаются задачи:
GET_TI
sp_cycle - в результате есть v_kos
в loop.exe есть внутренний таск \CONVERT
<TASK NAME = "CONVERT" ENABLE="0" PATH = "C:\projects\fl\debug\LOOP\loop.exe" >
<PAR VAL = "C:\projects\fl\debug\LOOP\TMP\log_CONVERT_.txt" />
<PAR VAL = "C:\projects\fl\debug\LOOP\loop.xml" />
<PAR VAL = "/CONVERT" />
<OK VAL = "1"/>
</TASK>
с параметрами:
<CONVERT
FILE = "C:\projects\fl\debug\LOOP\TMP\v_kos"
CONVFILE = "C:\projects\fl\debug\LOOP\TMP\rastr_file"
SHABL = "C:\projects\fl\debug\LOOP\TM\врдо.vrd"
/>
в результате будет сохранен файл rastr_file
следующий ТАСК запускает макрос (.vbs) в котором создается обьект растра , грузится файл rastr_file , выполняются необходимые расчеты и действия.
все таски прописываем напрмер в файле loop_cikl.xml
делаем .bat файл (loop_cikl.bat)
с содержимым типа:
CLS
start C:\projects\fl\debug\LOOP\loop.exe^
C:\projects\fl\debug\LOOP\TMP\log_LOOP_.txt^
C:\projects\fl\debug\LOOP\loop_cikl.xml
Далее если все получится можно будет заморочиться с сервисом.
|
|
|
Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
12.01.2012 20:14:17
|
Спасибо. Если получится обязуюсь отписаться о результатах.
|
|
|
Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
13.01.2012 23:10:43
|
Вот такой еще вопрос. Как я понял для успешного запуска vbs-скрипта он должен вернуть модулю loop код окончания, и этот код должен совпасть с прописанным в таске. Как это сделать ?
|
|
|
Александр Александров
Администратор
Всего сообщений: 660
Дата регистрации: 31.05.2008
|
Создано:
14.01.2012 00:39:41
|
По умолчанию скрипт всегда возвращает "0".
Вернуть другой код из скрипта:
WScript.Quit( -13 ) ' дальше ничего не будет выполнено
код успешного выполнения прописывается в тэге "<OK>"
в параметре "VAL":
<OK VAL = "0"/>
<OK VAL = "1"/>
<OK VAL = "2"/>
он может быть как один, так и несколько.
|
|
|
Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
16.01.2012 17:01:11
|
Подскажите пожалуйста, где зашита связь между модулем loop и ОИКом, а точнее где прописывается какой из доступных ОИКов будет использован для модуля get_ti
|
|
|
Александр Александров
Администратор
Всего сообщений: 660
Дата регистрации: 31.05.2008
|
Создано:
16.01.2012 17:08:02
|
loop ни к чему не привязан. Где у get_ti прописывается доступный ОИК я не в курсе по причине отсутствия доступа к какому-либо живому ОИКу .
|
|
|
Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
17.01.2012 22:26:35
|
Короткое резюме об использовании программного модуля loop:
1. Из всех доступных функций единственно полезной оказалась функция convert(космос->растр).
2. Имеющиеся в базовом варианте модули get_ti по сути являются фиктивными. Пришлось заменить их скриптом обращающимся к живому get_ti (точнее get_tm).
3. Вызов sp_cycle (собственно оценивание) также пришлось отключить. Причиной явилось следующее - при вызове модуля get_ti передача фокуса из данного модуля в вызвавшую его программу происходит практически мгновенно. Формирование же файлов с ти_тс занимает еще секунд 10-15. Таким образом sp_cycle вызывается на пустые файлы ти и, естественно, не работает.
В остальном все достаточно красиво.
|
|
|
Александр Александров
Администратор
Всего сообщений: 660
Дата регистрации: 31.05.2008
|
Создано:
17.01.2012 23:30:38
|
|
Цитата |
---|
3. Вызов sp_cycle (собственно оценивание) также пришлось отключить. Причиной явилось следующее - при вызове модуля get_ti передача фокуса из данного модуля в вызвавшую его программу происходит практически мгновенно. Формирование же файлов с ти_тс занимает еще секунд 10-15. Таким образом sp_cycle вызывается на пустые файлы ти и, естественно, не работает.
|
с get_ti/get_tm пока особых проблем не отмечено (мы уже порядка 3-4 раз настраивали его в ЦДУ) вот как
примерно выглядит часть настройки loop.xml в ЦДУ.
- <TASK NAME="get_ti_CDU" ENABLE="1" PATH="C:\kocmoc07\Get_TM\Get_TM.exe">
<PAR VAL="C:\PROGRA~1\RASTRW~1\LOOP\TMP" QUOTS="NO" />
<PAR VAL="[KDATE]" QUOTS="NO" />
<OK VAL="0" />
</TASK>
- <TASK NAME="CHECK_GET_TI" ENABLE="1" PATH="C:\PROGRA~1\RASTRW~1\LOOP\loop.exe">
<PAR VAL="C:\PROGRA~1\RASTRW~1\LOOP\TMP\log_CHECK_GET_TI_.txt" />
<PAR VAL="C:\PROGRA~1\RASTRW~1\LOOP\loop.xml" />
<PAR VAL="/CHECK_GET_TI" />
<OK VAL="1" />
</TASK>
- <TASK NAME="GET_TI_RND" ENABLE="0" PATH="%WINDIR%\system32\cscript.exe">
<PAR VAL="C:\PROGRA~1\RASTRW~1\LOOP\get_ti_rnd.vbs" />
<PAR VAL="\\B" />
<PAR VAL="\\U" />
<OK VAL="0" />
</TASK>
- <TASK NAME="sp_cycle" ENABLE="1" PATH="C:\PROGRA~1\RASTRW~1\LOOP\TM\sp_cycle.exe">
<PAR VAL="cycle.cnf" />
<OK VAL="0" />
</TASK>
- <TASK NAME="CHECK_SP_CYCLE" ENABLE="1" PATH="C:\PROGRA~1\RASTRW~1\LOOP\loop.exe">
<PAR VAL="C:\PROGRA~1\RASTRW~1\LOOP\TMP\log_CHECK_SP_CYCLE_.txt" />
<PAR VAL="C:\PROGRA~1\RASTRW~1\LOOP\loop.xml" />
<PAR VAL="/CHECK_SP_CYCLE" />
<OK VAL="1" />
</TASK>
1)Ни какой досрочной передачи фокуса в данном случае не отмечается
2) результат get_ti/get_tm нужно проверять
3) sp_cycle необходмо так же настраивать при помощи файла *.CNF. С ним известна всего одна беда, это коммутационные схемы Космоса, их недолжно быть в базовом файле, тогда все проходит на ура.
p.s. Пришлите плиз Ваши настройки LOOP, попробуем его настроить.
|
|
|
Максименко Дмитрий
Гость
|
Создано:
18.01.2012 10:13:16
|
Да, про досрочное выполнение последующих задач раньше не слышали и не сталкивались. Действительно хотелось бы взглянуть на ваши настройки LOOP. Ну а приостановку при необходимости можно сделать по деревенски- воткнуть таск паузы который будет запускать скрипт sleep (20000).
|
|
|
Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
18.01.2012 12:35:52
|
Цитата |
---|
Александр Александров пишет:
вот как
примерно выглядит часть настройки loop.xml в ЦДУ.
- <TASK NAME="get_ti_CDU" ENABLE="1" PATH="C:\kocmoc07\Get_TM\?Get_TM.exe">
<PAR VAL="C:\PROGRA~1\RASTRW~1?\LOOP\TMP" QUOTS="NO" />
<PAR VAL="[KDATE]" QUOTS="NO" />
<OK VAL="0" />
</TASK> |
Александр, может быть я чего то не понимаю, но у get_tm 5 параметров, два последних - debug level и dump необязательные - но три первых - папка , дата , и алиас БДРВ оика обязательны, а как раз третьего параметроа я у Вас и не вижу.
Правда дело может быть в том, что у коллег из ЦДУ один боевой ОИК. У нас их несколько и периодически один преключается на другой, так что без указания оика мне никак не обойтись.
|
|
|
Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
18.01.2012 12:40:14
|
Цитата |
---|
Максименко Дмитрий пишет:
Да, про досрочное выполнение последующих задач раньше не слышали и не сталкивались. Действительно хотелось бы взглянуть на ваши настройки LOOP. Ну а приостановку при необходимости можно сделать по деревенски- воткнуть таск паузы который будет запускать скрипт sleep (20000). |
В принципе обошелся следующим образом - впихнул в один скрипт вызовы get_tm и sp_cycle
Синтаксис примерно следующий
Return=WSShell.Run(...) в таком варианте пуск sp cycla идет как раз после самозакрытия окна get_tm.
|
|
|
Александр Александров
Администратор
Всего сообщений: 660
Дата регистрации: 31.05.2008
|
Создано:
18.01.2012 13:15:09
|
|
Цитата |
---|
Правда дело может быть в том, что у коллег из ЦДУ один боевой ОИК. У нас их несколько и периодически один преключается на другой, так что без указания оика мне никак не обойтись |
их вполне можно описать в
<PAR VAL="бла бла блаа1" QUOTS="NO" />
<PAR VAL="бла бла блаа2" QUOTS="NO" />
<PAR VAL="бла бла блаа3" QUOTS="NO" />
что и было сделано в ЦДУ.
Вот еще вариант ОДУ Юга:
<TASK NAME="GET_TI" ENABLE="1" PATH="c:\Program Files\RastrWin3\LOOP\TM\get_tm\Get_tm.exe" QUOTS="NO">
<PAR VAL="..\..\TMP" QUOTS="NO" />
<PAR VAL="[KDATE]" QUOTS="NO" />
<PAR VAL="/oik:ОДУ Юга СК7\" QUOTS="NO" />
<PAR VAL="/dump:1" QUOTS="NO" />
<PAR VAL="/debug_level:7" QUOTS="NO" />
<OK VAL="0" />
Если Вы нам пришлете коммандную строку получения ТИ из ОИК, мы Вам поможем её преобразовать в наш XML.
Цитата |
---|
таком варианте пуск sp cycla идет как раз после самозакрытия окна get_tm.
|
Это потому, что WSShell.Run не ждёт окончания порождённого им процесса. Вот справка по нему
WSShell.Run<Command>,<WindowStyle>,<WaitOnReturn>)
Назначение: создаёт новый независимый процесс, который запускает заданное приложение.
Параметры:
<Command> - строка, командная строка запуска приложения.
<WindowStyle> - необязательный, число. Определяет вид окна запускаемого приложения. Некоторые возможные значения:
0 - Не отображает окно.
1 - Активизирует и отображает окно.
2 - Активизирует окно и отображает его в свёрнутом виде.
3 - Активизирует окно и отображает его в максимизированном виде.
<WaitOnReturn> - необязательный, булево (число). True - сценарий возобновит работу только после завершения вызванного процесса. False (по умолчанию) - управление передаётся сразу обратно в сценарий.
Описание: если параметр "WaitOnReturn" установлен в True, метод возвращает код выхода вызванного приложения. Иначе метод всегда возвращает ноль.
|
|
|
Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
18.01.2012 16:55:55
|
Океюшки Спасибо за помощь. Попробую использовать возможности loop по максимуму с учетом всего вышесказанного.
|
|
|
Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
18.01.2012 18:37:39
|
Вот еще такая проблема встала - возможно ли использование динамического обмена данными с Excel для отображения результатов циклических расчетов ?
|
|
|
Александр Александров
Администратор
Всего сообщений: 660
Дата регистрации: 31.05.2008
|
Создано:
18.01.2012 19:47:58
|
Так далеко мы не зашли, сейчас есть лишь прототип с записью текстовых файлов и дампов неудачных циклов. По моему убеждению цикл и отображатель должны жить в отдельных процессах и быть как можно менее связанными.
|
|
|
Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
18.01.2012 21:55:13
|
Согласен. Но что менее связанное можно предложить, чем Loop и Excel ?
|
|
|
Александр Александров
Администратор
Всего сообщений: 660
Дата регистрации: 31.05.2008
|
Создано:
18.01.2012 22:26:15
|
Loop+БД+Rastr3
|
|
|
Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
18.01.2012 22:32:15
|
Что имеется в виду под БД ?
Что то близкое к мегаточке или например к Oracle
|
|
|
Александр Александров
Администратор
Всего сообщений: 660
Дата регистрации: 31.05.2008
|
Создано:
18.01.2012 23:57:28
|
Можно начать с Firebird, а там как пойдёт.
|
|
|
Андрей Семин
Постоянный посетитель
Всего сообщений: 225
Дата регистрации: 09.07.2007
|
Создано:
19.01.2012 14:17:25
|
Цитата |
---|
Александр Александров пишет:
2) результат get_ti/get_tm нужно проверять |
Правильно я понял, что этим занимается таск "CHECK_GET_TI" ? А можно рассказать немного поподробнее о тасках
"CHECK_GET_TI"
"GET_TI_RND"
"CHECK_SP_CYCLE" ?
|
|
|
Александр Александров
Администратор
Всего сообщений: 660
Дата регистрации: 31.05.2008
|
Создано:
19.01.2012 15:11:12
|
|
Взято из текущей инструкции администратора Растр3.
-------------------------------------------------------
Проверка результатов выполнения программы "get_ti"
LOOP.exe "PATH2LOG" "PATH2XML" "/CHECK_GET_TI"
"PATH2LOG" ? полный путь к логу программы (по молчанию "%RASTRWIN3%\LOOP\TMP\log_CHECK_GET_TI_.txt")
"PATH2XML" ? полный путь к XML настройкам программы (по молчанию %RASTRWIN3%\LOOP\loop.xml")
Проверяется содержимое файла "type", если первые два символа "ОК" то возвращается код успешного выполнения, иначе ошибка.
Соответствует тэг <CHECK_GET_TI>
Параметры:
@DIR_TI ? полный путь к директории с файлом "type" программы "get_ti".
-------------------------------------------------------
Проверка результатов выполнения программы "sp_cycle"
LOOP.exe "PATH2LOG" "PATH2XML" "/CHECK_SP_CYCLE"
"PATH2LOG" ? полный путь к логу программы (по молчанию "%RASTRWIN3%\LOOP\TMP\log_CHECK_SP_CYCLE_.log")
"PATH2XML" ? полный путь к XML настройкам программы (по молчанию %RASTRWIN3%\LOOP\loop.xml")
Проверяется содержимое файла "astra_k", если он содержит две строки, начинающиеся строчкой " 0" ? то возвращается код успешного выполнения, иначе ошибка.
Соответствует тэг <CHECK_SP_CYCLE>
Параметры:
@DIR_OC ? полный путь к директории с файлом "astra_k" программы "sp_cycle".
-------------------------------------------------------
GET_TI_RND - где-то у нас существует эмулятор обновления данных ТИ.
|
|
|