скрипт орион про запись в файл символ перевода строки

FORUM_NAME: АРМ Орион Про версии до 1.20
Описание: АРМ "Орион Про" — пакет программного обеспечения для аппаратно-программного комплекса ИСО "Орион", на котором реализуются системы охранной сигнализации, контроля и управления доступом, охранного видеонаблюдения, автоматика противопожарных систем, сопряженные с инженерными системами объектов.
Справочная информация, руководства для АРМ Орион Про версии до 1.20
Модератор: Модераторы
lamyk
Автор темы
lamyk
Автор темы
Репутация: 0
Сообщения: 90
Зарегистрирован: 17.04.2013
С нами: 3 года 7 месяцев
Профессия: Наладчик

Непрочитанное сообщение #1 lamyk » 19.06.2013, 09:03

не могу сообразить каким образом сформировать файл типа
переменная1
переменная2
переменная3


получается только в одну строчку типа переменная1 переменная2 переменная3
кто-нибудь в курсе как организовать перевод строки?

AlexRuden
AlexRuden
Возраст: 39
Репутация: 0
Сообщения: 1096
Зарегистрирован: 13.01.2012
С нами: 4 года 10 месяцев
Профессия: Наёмник.
Откуда: Россия.

Непрочитанное сообщение #2 AlexRuden » 27.06.2013, 21:31

lamyk писал(а):не могу сообразить каким образом сформировать файл типа
переменная1
переменная2
переменная3


получается только в одну строчку типа переменная1 переменная2 переменная3
кто-нибудь в курсе как организовать перевод строки?
Нет, год назад я спрашивал у ТП. Сделать нельзя. Делай смещение в 100-200 символов и сохраняй в файл - потом копируй в Ворд и будет счастие))
Курите man'ы , господа.

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1670
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #3 pet-and » 28.06.2013, 00:09

AlexRuden писал(а): Сделать нельзя.
Я это делал в виндовом блокноте. Закончилась строчка, жмем ентер, 1.11 sp5 все это нормально переварил.

AlexRuden
AlexRuden
Возраст: 39
Репутация: 0
Сообщения: 1096
Зарегистрирован: 13.01.2012
С нами: 4 года 10 месяцев
Профессия: Наёмник.
Откуда: Россия.

Непрочитанное сообщение #4 AlexRuden » 29.06.2013, 07:36

pet-and писал(а):
AlexRuden писал(а): Сделать нельзя.
Я это делал в виндовом блокноте. Закончилась строчка, жмем ентер, 1.11 sp5 все это нормально переварил.
Причем тут это? Процесс должен быть автоматизирован - я не собираюсь 1000 раз жать ентер при выводе в файл информации о состоянии заслонок ОЗ при ТО (рабочий-дежурный-рабочий режим заслонок).Запустил сценарий и ушел курить 10 минут пока идет проверка заслонок и вывод результата в файл (со смещением). Далее копипаст в Ворд и на печать - всё наглядно и хорошо. Ну а вам предлагаю сидеть и жать ентер...
Курите man'ы , господа.

lamyk
Автор темы
lamyk
Автор темы
Репутация: 0
Сообщения: 90
Зарегистрирован: 17.04.2013
С нами: 3 года 7 месяцев
Профессия: Наладчик

Непрочитанное сообщение #5 lamyk » 01.07.2013, 10:53

решил следующим образом
сделал текстовик с энтером
загнал в переменную содержимое чтениеизфайла enter.txt
сделал записьвфайл файлсданными.txt НеобходимыеДанные + переменная с энтером

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1670
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #6 pet-and » 26.08.2013, 15:57

Созрела идея написания следующего скрипта: есть некоторое количество выходов, необходимо запускать их по очереди и отслеживать события, происходящие в системе (нарушение/восстановление шлейфов), ну а дальше все это закинуть в файл.
Никак не могу разобраться, как же заставить скрипт отслеживать не какой-то конкретный раздел/шлейф, а любое событие в системе?

AlexRuden
AlexRuden
Возраст: 39
Репутация: 0
Сообщения: 1096
Зарегистрирован: 13.01.2012
С нами: 4 года 10 месяцев
Профессия: Наёмник.
Откуда: Россия.

Непрочитанное сообщение #7 AlexRuden » 26.08.2013, 17:46

pet-and писал(а):Никак не могу разобраться, как же заставить скрипт отслеживать не какой-то конкретный раздел/шлейф, а любое событие в системе?
В АБД в "Инспекторе/События" на вкладке "Компьютер" есть "Изменение состояния". Кладете туда скрипт со строкой

Код: Выделить всё

Событие1= ПолучитьСобытие();
Далее -

Код: Выделить всё

СобытиеСкрипта
(*)Событие() : Объект - возвращает объект «Событие».
(*)ВремяиДата() : Число - возвращает время и дату события.
(*)Прибор() : Объект - возвращает прибор, на котором произошло событие.
(*)Элемент() : Объект - возвращает объект («Шлейф», «Реле», «Считыватель»,
«Камера»), которому принадлежит событие.
(*)Объект() : Объект - возвращает раздел или группу разделов, зоне которого
принадлежит событие.
(*)Пароль() : Объект - возвращает пароль.
(*)Дверь() : Объект - возвращает дверь для событий СКД.
(*)РежимПрохода() : Число - возвращает режим прохода для событий СКД
(0 - проход, 1 - вход, 2 - выход).
(*)ЗонаДоступа() : Объект - возвращает зону доступа для событий СКД.

(!!!) Объект «СобытиеСкрипта» возвращается только при вызове системной функции «ПолучитьСобытие».
Однако это сильно нагрузит Ядро Ориона. Я так делал, но не советую. Ради эксперимента пробуйте, может вам и понравится.
Курите man'ы , господа.

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1670
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #8 pet-and » 26.08.2013, 19:06

Про нагруз ядра, я заметил (дошел до этого сам, но была мысль, что делаю что-то не так, ядро виснет и все), ресурсы жрет аки слон и ничего не делает.
Другого пути стало быть нет? А жаль.
Просто на объекте 450, ну без малого, клапанов, монтажники вечно путают эти оранжевые/красные провода, а очень хотелось автоматизированно знать, какая релюха какой клапан движет. Прям БЕДА какая-то.
Придется через отчет за смену как-то выделываться.
А вообще, насчет темы данного разговора - не было идеи использовать какой-нибудь структурированный файл, FictionBook или HTML (а то я в прошлый-то раз не дочитал до конца названия темы, ну случается)?
Я так наспех попробовал, так файлик, написанный в одну строчку, без лишних пробелов, нужная прога отображает как надобно, хочешь табличку, а хочешь абзацами.

AlexRuden
AlexRuden
Возраст: 39
Репутация: 0
Сообщения: 1096
Зарегистрирован: 13.01.2012
С нами: 4 года 10 месяцев
Профессия: Наёмник.
Откуда: Россия.

Непрочитанное сообщение #9 AlexRuden » 26.08.2013, 19:24

pet-and писал(а):Просто на объекте 450, ну без малого, клапанов, монтажники вечно путают эти оранжевые/красные провода, а очень хотелось автоматизированно знать, какая релюха какой клапан движет. Прям БЕДА какая-то.
У вас на каждый клапан свое реле? Я делал проверку для клапанов , но там по отсекам отключение. Просто нужна была проверка на предмет работоспособности клапана, ежемесячно.

Спойлер

Код: Выделить всё

Сценарий
   Переменные
      Перем СерверОрион;
      Перем ШС;
      Перем ШС1;
      Перем ШС2;
      Перем ГруппыРазделовБД;
      Перем РучнойПуск;
      Перем Счетчик1;
      Перем Счетчик2;
      Перем Смещение;
      
НачалоСценария   
   СерверОрион          = СоздатьОбъект( "Ядро" );
   ГруппыРазделовБД       = СоздатьОбъект( "ГруппыРазделов" );
   
   ШС   = "";
   ШС1   = "";
   ШС2   = "";
   
   Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Запуск сценария .", 1 );
   Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Проверим состояние клапанов в исходном режиме. Ожидайте ...", 1 );
   
   Для Счетчик1 = 0 По ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Количество() - 1 Цикл
      Если Не ПустоеЗначение( ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ) ) Тогда
         Если  Не ПустоеЗначение( ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны() ) Тогда
            Для Счетчик2 = 0 По ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Количество() - 1 Цикл
               Если ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).ТипЭлемента() == "ШЛЕЙФ" Тогда
                  Если ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Состояние() == "ВОССТАНОВЛЕНИЕ ТЕХНОЛОГИЧЕСКОГО ШС" Тогда
                     ШС   =   ШС + "1";
                  Иначе
                     Если ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Состояние() == "НАРУШЕНИЕ ТЕХНОЛОГИЧЕСКОГО ШС" Тогда
                        ШС   =   ШС + "0";
                     Иначе
                        ШС   =   ШС + "2";
                     КонецЕсли;
                  КонецЕсли;
               КонецЕсли;
            КонецЦикла;
         КонецЕсли;
      КонецЕсли;
   КонецЦикла;
   
   РучнойПуск   =   СерверОрион.ЗапросОператору( "Снимите питание с клапанов." , 300, 7 ) ;
   Если   РучнойПуск == 6   Тогда
      Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Клапаны обесточены. ", 1 );
   Иначе
      Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Запуск отменен.", 2 );
      Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Конец сценария .", 1 );
      Возврат( 0 );
   КонецЕсли;
   
   Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Ждем 30 секунд.", 1 );
   Для Счетчик1 = 1 По 60 Цикл
      Задержка( 500 );
   КонецЦикла;
   Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Проверим состояние клапанов в рабочем режиме. Ожидайте ...", 1 );
   Для Счетчик1 = 0 По ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Количество() - 1 Цикл
      Если Не ПустоеЗначение( ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ) ) Тогда
         Если  Не ПустоеЗначение( ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны() ) Тогда
            Для Счетчик2 = 0 По ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Количество() - 1 Цикл
               Если ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).ТипЭлемента() == "ШЛЕЙФ" Тогда
                  Если ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Состояние() == "ВОССТАНОВЛЕНИЕ ТЕХНОЛОГИЧЕСКОГО ШС" Тогда
                     ШС1   =   ШС1 + "1";
                  Иначе
                     Если ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Состояние() == "НАРУШЕНИЕ ТЕХНОЛОГИЧЕСКОГО ШС" Тогда
                        ШС1   =   ШС1 + "0";
                     Иначе
                        ШС1   =   ШС1 + "2";
                     КонецЕсли;
                  КонецЕсли;
               КонецЕсли;
            КонецЦикла;
         КонецЕсли;
      КонецЕсли;
   КонецЦикла;
   
   РучнойПуск   =   СерверОрион.ЗапросОператору( "Подайте питание на клапаны." , 300, 7 ) ;
   Если   РучнойПуск == 6   Тогда
      Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Продолжаем сканирование. ", 1 );
   Иначе
      Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Запуск отменен.", 2 );
      Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Конец сценария .", 1 );
      Возврат( 0 );
   КонецЕсли;
   
   Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Ждем 200 секунд.", 1 );
   Для Счетчик1 = 1 По 400 Цикл
      Задержка( 500 );
   КонецЦикла;
   Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Проверим состояние клапанов в исходном режиме. Ожидайте ...", 1 );
   Для Счетчик1 = 0 По ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Количество() - 1 Цикл
      Если Не ПустоеЗначение( ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ) ) Тогда
         Если  Не ПустоеЗначение( ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны() ) Тогда
            Для Счетчик2 = 0 По ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Количество() - 1 Цикл
               Если ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).ТипЭлемента() == "ШЛЕЙФ" Тогда
                  Если ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Состояние() == "ВОССТАНОВЛЕНИЕ ТЕХНОЛОГИЧЕСКОГО ШС" Тогда
                     ШС2   =   ШС2 + "1";
                  Иначе
                     Если ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Состояние() == "НАРУШЕНИЕ ТЕХНОЛОГИЧЕСКОГО ШС" Тогда
                        ШС2   =   ШС2 + "0";
                     Иначе
                        ШС2   =   ШС2 + "2";
                     КонецЕсли;
                  КонецЕсли;
               КонецЕсли;
            КонецЦикла;
         КонецЕсли;
      КонецЕсли;
   КонецЦикла;

   Смещение = 1;
   Для Счетчик1 = 0 По ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Количество() - 1 Цикл
      Если Не ПустоеЗначение( ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ) ) Тогда
         Если  Не ПустоеЗначение( ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны() ) Тогда
            Для Счетчик2 = 0 По ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Количество() - 1 Цикл
               Если ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).ТипЭлемента() == "ШЛЕЙФ" Тогда
                  Сообщить( ".", 0 );
                  Если (Сред( ШС, Смещение, 1 ) == Сред( ШС1, Смещение, 1 ))И(Сред( ШС1, Смещение, 1 ) ==   Сред( ШС2, Смещение, 1 ))  Тогда
                     Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Клапан не меняет положение." + ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес(), 1 );
                     СерверОрион.ЗаписьВФайл( "c:\BOLID\состояние_клапанов.txt" , Смещение*128 , ТекущаяДата() + " " + ТекущееВремя() + " - Клапан не меняет положение." + ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес() );
                  Иначе
                     Если Сред( ШС, Смещение, 1 ) ==   Сред( ШС1, Смещение, 1 )  Тогда
                        Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Клапан не принял рабочее положение." + ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес(), 1 );
                        СерверОрион.ЗаписьВФайл( "c:\BOLID\состояние_клапанов.txt" , Смещение*128 , ТекущаяДата() + " " + ТекущееВремя() + " - Клапан не меняет положение." + ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес() );
                     КонецЕсли;
                     Если Сред( ШС1, Смещение, 1 ) ==   Сред( ШС2, Смещение, 1 )  Тогда
                        Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Клапан не принял исходное положение." + ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес(), 1 );
                        СерверОрион.ЗаписьВФайл( "c:\BOLID\состояние_клапанов.txt" , Смещение*128 , ТекущаяДата() + " " + ТекущееВремя() + " - Клапан не меняет положение." + ГруппыРазделовБД.ПолучитьПоИндексу( 100 ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес() );
                     КонецЕсли;
                  КонецЕсли;
                  Смещение = Смещение + 1;
               КонецЕсли;
            КонецЦикла;
         КонецЕсли;
      КонецЕсли;
   КонецЦикла;
   
   Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Конец сценария .", 1 );
   
КонецСценария
По результату выполнения скрипта ищем расположение неисправного клапана по проектной документации.
Курите man'ы , господа.

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1670
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #10 pet-and » 26.08.2013, 19:55

Я делал что-то похожее, но по-моему каким-то более сложным путем; оценю Ваш скрипт только завтра. Однако, засада в том, что я гарантированно не знаю, какое реле управляет каким клапаном, да и признаться, в каком состоянии шлейфы на клапане в штатном режиме, я также гарантированно не знаю. Дело в том, что положение клапана отображают КЦ АР8 (открыт/закрыт), поэтому парные КЦ будут на один клапан или нет - это вопрос вопросов.
Мне вот интересно, монтажники/проектировщики - они все такие?

AlexRuden
AlexRuden
Возраст: 39
Репутация: 0
Сообщения: 1096
Зарегистрирован: 13.01.2012
С нами: 4 года 10 месяцев
Профессия: Наёмник.
Откуда: Россия.

Непрочитанное сообщение #11 AlexRuden » 26.08.2013, 20:09

pet-and писал(а):Однако, засада в том, что я гарантированно не знаю, какое реле управляет каким клапаном, да и признаться, в каком состоянии шлейфы на клапане в штатном режиме, я также гарантированно не знаю. Дело в том, что положение клапана отображают КЦ АР8 (открыт/закрыт), поэтому парные КЦ будут на один клапан или нет - это вопрос вопросов.
Немного изменив и дополнив мой скрипт вы можете снять логи поведения реле и пар КЦ (найти зависимости) . Если клапан "играет" примерно 2 минуты, то вам нужно лишь запустить правильный скрипт на 450*2 минут и ждать результатов. Потом уже анализировать, где какие зависимости реле и КЦ. Можно эти зависимости заложить в БД или в скрипте - тогда скрипт опустит правильные пары и будет выводить в лог-файл только ошибки монтажников.
Могу выложить часть кода создания зависимостей на основе БД, но это вам врядли поможет - там нужна правильная организация структуры БД (я уже тут писал про универсальный скрипт).
Курите man'ы , господа.

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1670
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #12 pet-and » 26.08.2013, 20:22

AlexRuden писал(а):Зарегистрирован: 13.01.2012 - 11:01
Сообщения: 1000
Откуда: Россия.
Благодарил (а): 0 раз.
Поблагодарили: 52 раз.
Профессия: Наёмник.
Кстати, с юбилеем Вас, и огромное человеческое СПАСИБО.
Будем стремиться к лучшему. Как получится что-то более осмысленное выложу обязательно.

AlexRuden
AlexRuden
Возраст: 39
Репутация: 0
Сообщения: 1096
Зарегистрирован: 13.01.2012
С нами: 4 года 10 месяцев
Профессия: Наёмник.
Откуда: Россия.

Непрочитанное сообщение #13 AlexRuden » 26.08.2013, 20:49

Нафлудить можно много))

Вот куски кода с универсала. Тут идет привязка по названиям разделов, так нагляднее. Но побольшому счету это никому не пригодится))
На примере оповещения (код вентиляции великоват слишком)
Спойлер

Код: Выделить всё

...
...
...
АббревиатураОповещение      = "(АСО)";
...
...
...
Если КодСобытия == 3 //255 // "ДВА ПОЖАРА"
      Тогда
         //- Определим отсек по названию группового раздела
         //- Запуск зеркала скрипта с параметром АСО+АСДУ+ЭУ
         //-
         ГрРазделСобытия = 0;
         Если Не ПустоеЗначение ( СобытиеОрион.Объект().ГруппыРазделов() )
         Тогда   
            Для   Счетчик = 0 По СобытиеОрион.Объект().ГруппыРазделов().КоличествоЭлементов() - 1
            Цикл
               Если Лев( СобытиеОрион.Объект().ГруппыРазделов().Элемент( Счетчик ).Название() , ДлинаСтроки( АббревиатураПС ) ) == АббревиатураПС
               Тогда
                  ГрРазделСобытия = СобытиеОрион.Объект().ГруппыРазделов().Элемент( Счетчик ).Индекс();
                  Прервать;
               КонецЕсли;
            КонецЦикла;
         КонецЕсли;
         Если ГрРазделСобытия == 0
         Тогда
            Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Гр.Раздел " + АббревиатураПС + " не найден - авария скрипта №1. " , 2 );
            Возврат( 0 );
         КонецЕсли;

         ЯдроОрион.Шлейфы().Элемент( 6 ).ПоместитьВТег( ГрРазделСобытия );
         
         // Запуск зеркала скрипта с параметром АСО+АСДУ+ЭУ
         Для Счетчик = 2 По 4
         Цикл
            ЯдроОрион.Скрипты().ПолучитьПоИД( ИДСкрипта ).ПоместитьВТег( Счетчик );         
            ЯдроОрион.Скрипты().ПолучитьПоИД( ИДСкрипта ).ВыполнитьСценарий( 0 );
            Пока ЯдроОрион.Скрипты().ПолучитьПоИД( ИДСкрипта ).Тег() <> 1
            Цикл
               Задержка( 10 );
            КонецЦикла;
         КонецЦикла;
      КонецЕсли;
...
...
...
   // Зеркало скрипта АСО
   Если ( ЯдроОрион.Скрипты().ПолучитьПоИД( ИДСкрипта ).Тег() == 3 )
   Тогда
      ГрРазделСобытия = ЯдроОрион.Шлейфы().Элемент( 6 ).Тег();
      ЯдроОрион.Скрипты().ПолучитьПоИД( ИДСкрипта ).ПоместитьВТег( 1 );         
      Если ЯдроОрион.Шлейфы().Элемент( 2 ).Тег() == 0 // работает зеркало АСО, ждем ..
      Тогда
         //- Ждем максимум 10 минут
         Для Счетчик = 1 По 600
         Цикл
            Если ЯдроОрион.Скрипты().ПолучитьПоИД( ИДСкрипта ).Тег() == 100 // Прерывание работы всех систем
            Тогда
               Сообщить( АббревиатураОповещение + " - Работа прервана.", 1 );
               Возврат( 0 );
            КонецЕсли;
            Если ЯдроОрион.Шлейфы().Элемент( 2 ).Тег() == 2 // Все уже сделано до нас - выходим
            Тогда
               Сообщить( АббревиатураОповещение + " - Завершено.", 0 );
               Возврат( 0 );
            КонецЕсли;
            Задержка( 500 );
         КонецЦикла;
         Сообщить( АббревиатураОповещение + " - Завершено по истечении времени." , 2 );
         Возврат( 0 );
      КонецЕсли;
      Если ЯдроОрион.Шлейфы().Элемент( 2 ).Тег() == 2 // Все уже сделано до нас - выходим
      Тогда
         Сообщить( АббревиатураОповещение + " - Выполнено." , 0 );
         Возврат( 0 );
      КонецЕсли;
      Если ЯдроОрион.Шлейфы().Элемент( 2 ).Тег() == 1 // разрешено работать зеркалу АСО
      Тогда
         Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Начало зеркала " + АббревиатураОповещение + " .", 0 );
         Для   Счетчик2 = 0 По ЯдроОрион.ГруппыРазделов().КоличествоЭлементов() - 1
         Цикл
            Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Название() == АббревиатураОповещение
            Тогда
               Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().КоличествоЭлементов() > 0
               Тогда
                  Для Счетчик = 0 По ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().КоличествоЭлементов() - 1
                  Цикл
                     Если Не ПустоеЗначение ( ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ) )
                     Тогда
                        Если Не ПустоеЗначение ( ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Зоны() )
                        Тогда
                           Для Счетчик1 = 0 По ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Зоны().КоличествоЭлементов() - 1
                           Цикл
                              Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Зоны().Элемент( Счетчик1 ).ТипЭлемента() == "ВЫХОД"
                              Тогда
                                 Если ТактикаРелеПускОповещениеПриПожаре == "включить"
                                 Тогда
                                    ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Зоны().Элемент( Счетчик1 ).Включить( "0" );
                                    Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - ' " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Название() + " ' - Реле включили : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Зоны().Элемент( Счетчик1 ).Адрес() , 0 );
                                    Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Зоны().Элемент( Счетчик1 ).ЕстьСостояние( 401 ) == ИСТИНА
                                    Тогда
                                       Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - ' " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Название() + " ' - Реле включено : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Зоны().Элемент( Счетчик1 ).Адрес() , 0 );
                                    КонецЕсли;
                                 Иначе
                                    ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Зоны().Элемент( Счетчик1 ).Выключить( "0" );
                                    Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - ' " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Название() + " ' - Реле ввыключили : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Зоны().Элемент( Счетчик1 ).Адрес() , 0 );
                                    Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Зоны().Элемент( Счетчик1 ).ЕстьСостояние( 402 ) == ИСТИНА
                                    Тогда
                                       Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - ' " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Название() + " ' - Реле ввыключено : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик2 ).Разделы().Элемент( Счетчик ).Зоны().Элемент( Счетчик1 ).Адрес() , 0 );
                                    КонецЕсли;
                                 КонецЕсли;
                              КонецЕсли;
                           КонецЦикла;
                        КонецЕсли;
                     КонецЕсли;
                  КонецЦикла;
                  ЯдроОрион.Шлейфы().Элемент( 3 ).ПоместитьВТег( 2 );
                  Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Конец зеркала " + АббревиатураОповещение + " ." , 0 );
                  Возврат( 0 );
               Иначе
                  Прервать;
               КонецЕсли;
            КонецЕсли;
         КонецЦикла;
         // Сканируем только разделы, входящие в Гр.Разделы с именем 'АСО.???'
         Для   Счетчик = 0 По ЯдроОрион.ГруппыРазделов().КоличествоЭлементов() - 1
         Цикл
            Если Лев( ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Название() , ДлинаСтроки( АббревиатураОповещение ) ) == АббревиатураОповещение
            Тогда
               Для   Счетчик1 = 0 По ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().КоличествоЭлементов() - 1
               Цикл
                  // вкл реле в этом разделе
//                  Сообщить( ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Название() , 1 );
//                  Сообщить( "АСО." + Прав( ЯдроОрион.ГруппыРазделов().ПолучитьПоИндексу( ГрРазделСобытия ).Название() , ( ДлинаСтроки( ЯдроОрион.ГруппыРазделов().ПолучитьПоИндексу( ГрРазделСобытия ).Название() ) - 3 ) ) , 2 );
                  Если ( ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Название() ) == ( АббревиатураОповещение + Прав( ЯдроОрион.ГруппыРазделов().ПолучитьПоИндексу( ГрРазделСобытия ).Название() , ( ДлинаСтроки( ЯдроОрион.ГруппыРазделов().ПолучитьПоИндексу( ГрРазделСобытия ).Название() ) - ВесАббр ) ) )
                  Тогда
//                     Сообщить(" Нашли ", 1 );
                     Для Счетчик2 = 0 По ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().КоличествоЭлементов() - 1
                     Цикл
                        Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).ТипЭлемента() == "ВЫХОД"
                        Тогда
                           Если ТактикаРелеПускОповещениеПриПожаре == "включить"
                           Тогда
                              ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Включить( "0" );
                              Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - ' " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Название() + " ' - Реле включили : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес() , 0 );
                              Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).ЕстьСостояние( 401 ) == ИСТИНА
                              Тогда
                                 Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - ' " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Название() + " ' - Реле включено : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес() , 0 );
                              КонецЕсли;
                           Иначе
                              ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Выключить( "0" );
                              Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - ' " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Название() + " ' - Реле ввыключили : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес() , 0 );
                              Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).ЕстьСостояние( 402 ) == ИСТИНА
                              Тогда
                                 Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - ' " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Название() + " ' - Реле ввыключено : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес() , 0 );
                              КонецЕсли;
                           КонецЕсли;
                        КонецЕсли;
                     КонецЦикла;
                     // найдем Гр.раздел, в который входит данный раздел и прочитаем время задержки включения реле в Гр.разделе
                     Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - " + АббревиатураОповещение + " - Ждем " + Строка( ЗадержкаРелеПускОповещениеПриПожареВГруппеТревоги ) + " секунд..." , 0 );
                     Для Счетчик2 = 1 По ЗадержкаРелеПускОповещениеПриПожареВГруппеТревоги
                     Цикл
                        Если ЯдроОрион.Скрипты().ПолучитьПоИД( ИДСкрипта ).Тег() == 100 // Прерывание работы всех систем
                        Тогда
                           Сообщить( АббревиатураОповещение + " - Работа прервана.", 1 );
                           Возврат( 0 );
                        КонецЕсли;
                        Задержка( 1000 );
                     КонецЦикла;
                     
                     Для Счетчик2 = 0 По ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().КоличествоЭлементов() - 1
                     Цикл
                        Для Счетчик1 = 0 По ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик2 ).Зоны().КоличествоЭлементов() - 1
                        Цикл
                           Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик2 ).Зоны().Элемент( Счетчик1 ).ТипЭлемента() == "ВЫХОД"
                           Тогда
                              Если ТактикаРелеПускОповещениеПриПожаре == "включить"
                              Тогда
                                 ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик2 ).Зоны().Элемент( Счетчик1 ).Включить( "0" );
                                 Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - " + АббревиатураОповещение + " - Реле включили : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик2 ).Зоны().Элемент( Счетчик1 ).Адрес() , 0 );
                                 Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик2 ).Зоны().Элемент( Счетчик1 ).ЕстьСостояние( 401 ) == ИСТИНА
                                 Тогда
                                    Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - " + АббревиатураОповещение + " - Реле включено : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик2 ).Зоны().Элемент( Счетчик1 ).Адрес() , 0 );
                                 КонецЕсли;
                              Иначе
                                 ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик2 ).Зоны().Элемент( Счетчик1 ).Выключить( "0" );
                                 Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - " + АббревиатураОповещение + " - Реле ввыключили : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик2 ).Зоны().Элемент( Счетчик1 ).Адрес() , 0 );
                                 Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик2 ).Зоны().Элемент( Счетчик1 ).ЕстьСостояние( 402 ) == ИСТИНА
                                 Тогда
                                    Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - " + АббревиатураОповещение + " - Реле ввыключено : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик2 ).Зоны().Элемент( Счетчик1 ).Адрес() , 0 );
                                 КонецЕсли;
                              КонецЕсли;
                           КонецЕсли;
                        КонецЦикла;
                     КонецЦикла;
                  КонецЕсли;
               КонецЦикла;
            КонецЕсли;
         КонецЦикла;
         // найдем остальные Гр.разделы с реле пуска оповещения
         Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - " + АббревиатураОповещение + " - Ждем " + Строка( ЗадержкаРелеПускОповещениеПриПожареВГруппах ) + " секунд..." , 0 );
         Для Счетчик2 = 1 По ЗадержкаРелеПускОповещениеПриПожареВГруппах
         Цикл
            Если ЯдроОрион.Скрипты().ПолучитьПоИД( ИДСкрипта ).Тег() == 100 // Прерывание работы всех систем
            Тогда
               Сообщить( "" + АббревиатураОповещение + " - Работа прервана.", 1 );
               Возврат( 0 );
            КонецЕсли;
            Задержка( 1000 );
         КонецЦикла;
         Для   Счетчик = 0 По ЯдроОрион.ГруппыРазделов().КоличествоЭлементов() - 1
         Цикл
            Если Лев( ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Название() , ДлинаСтроки( АббревиатураОповещение ) ) == АббревиатураОповещение
            Тогда
               Для   Счетчик1 = 0 По ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().КоличествоЭлементов() - 1
               Цикл
                  Для Счетчик2 = 0 По ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().КоличествоЭлементов() - 1
                  Цикл
                     Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).ТипЭлемента() == "ВЫХОД"
                     Тогда
                        Если ТактикаРелеПускОповещениеПриПожаре == "включить"
                        Тогда
                           ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Включить( "0" );
                           Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - ' " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Название() + " ' - Реле включили : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес() , 0 );
                           Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).ЕстьСостояние( 401 ) == ИСТИНА
                           Тогда
                              Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - ' " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Название() + " ' - Реле включено : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес() , 0 );
                           КонецЕсли;
                        Иначе
                           ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Выключить( "0" );
                           Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - ' " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Название() + " ' - Реле ввыключили : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес() , 0 );
                           Если ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).ЕстьСостояние( 402 ) == ИСТИНА
                           Тогда
                              Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - ' " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Название() + " ' - Реле ввыключено : " + ЯдроОрион.ГруппыРазделов().Элемент( Счетчик ).Разделы().Элемент( Счетчик1 ).Зоны().Элемент( Счетчик2 ).Адрес() , 0 );
                           КонецЕсли;
                        КонецЕсли;
                     КонецЕсли;
                  КонецЦикла;
               КонецЦикла;
            КонецЕсли;
         КонецЦикла;
         ЯдроОрион.Шлейфы().Элемент( 2 ).ПоместитьВТег( 2 );
         Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " - Конец зеркала " + АббревиатураОповещение + " .", 0 );
      КонецЕсли;
      Возврат( 0 );
   КонецЕсли;
...
...
...

Слово "Зеркало скрипта" означает, что он сам себя запускает еще раз с определенными входными параметрами.

А по большому счету это медитация)), чтоб понять, что могут скрипты в Орионе...
Курите man'ы , господа.

lamyk
Автор темы
lamyk
Автор темы
Репутация: 0
Сообщения: 90
Зарегистрирован: 17.04.2013
С нами: 3 года 7 месяцев
Профессия: Наладчик

Непрочитанное сообщение #14 lamyk » 27.08.2013, 19:53

pet-and писал(а):Я делал что-то похожее, но по-моему каким-то более сложным путем; оценю Ваш скрипт только завтра. Однако, засада в том, что я гарантированно не знаю, какое реле управляет каким клапаном, да и признаться, в каком состоянии шлейфы на клапане в штатном режиме, я также гарантированно не знаю. Дело в том, что положение клапана отображают КЦ АР8 (открыт/закрыт), поэтому парные КЦ будут на один клапан или нет - это вопрос вопросов.
Мне вот интересно, монтажники/проектировщики - они все такие?
такая же ситуация
проект на клапана вообще без адресов был, в результате я делал скрипты на включение реле КПБшек и записывал карандашиком изменения АРок


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «АРМ Орион Про версии до 1.20»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 5 гостей

forum-bolid.ru : Отказ от ответственности