партнерский раздел
ФорумПредложения по развитиюМаленький FAQ по скриптам

Предложения по развитию » Маленький FAQ по скриптам

Последние дни мне пришлось потратить на изучение языка написания скриптов Орион-Про. Документация по языку преОтвратнейшая. Примеров использования операторов и комманд нет, в сети фиг что найдешь. Каждую строку приходится просто "Рожать в Бою" методом перебора.
В связи с этим буду сюда выкладывать кусочки примеров которые удалось раскопать. Прошу сюда ничего лишнего не писать. Может кому-то пригодится в будущем. И огромное спасибо тем, кто из пользователей отвечает на мои "Чайниковские" вопросы.

3 года 5 месяцев назад

avatar
Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

2 ответа

Я буду постепенно изменять данноесообщение при наличии свободного времени, не критикуйте и не изменяйте его пожалуйста. Если есть что дополнить пишите ниже, я потом перенесу
.
Итак:
__________________________________________________________ Скрипт ______________________________________Сценарий
Переменные
Перем РабочееМесто1;
Перем РабочиеМеста1;
Перем Компьютер1;
Перем Компьютеры1;
Перем Реле1;
Перем Реле1Тег;
НачалоСценария

Попытка
Компьютеры1 = СоздатьОбъект( "Компьютеры" );
Компьютер1 = Компьютеры1.ПолучитьПоИд(1);
РабочиеМеста1 = Компьютер1.РабочиеМеста();
РабочееМесто1 = РабочиеМеста1.ПолучитьПоТипуСетевогоМеста("Ядро");


--------------------------------------------------- Как назначить переменной  реальное устройство (реле или ШС) ------------------------------------

Самый простой способ чтобы не прописывать кучу длинных строк это получить прибор поИД, ИД это "Пользовательский номер" любого устройства в системе. К каждому реле или шлейфу привязан свой ИД. Этот номер можно посмотреть в АБД, если выбрать мышкой нужный шлейф то в окошке "Элемент" можно увидеть этот номер. Номер уникален в системе и его использование позволяет избежать громоздких конструкций типа """Реле1 = РабочееМесто1.Порт1.Пульт1.Прибор1.Выходы().ПолучитьПоАдресу( "1.2.3.4" )"""

СП1 у меня в системе который я мучаю имеет четыре реле с номерами 143,144,145 и 146. Мучаю я первое, поэтому его номер и будем использовать.Реле1 = РабочееМесто1.Выходы().ПолучитьПоИД( 143 );

//------------------------------ Как задать переменную (символьную??? нгепойму как описать, короче чтобы проверку проводить там просто "Реле1.Тег" не работает почему-то приходится отдельную переменную создавать-----------------------Реле1Тег = Реле1.Тег();
Если не ПустоеЗначение( Реле1Тег ) Тогда


----------------------------------------------------- Как вывести сообщение в окошко "скрипты" Ядра ОЗ. Полезно при отладке.-----------------------------------------

---------------------- Простое текстовое сообщение ----------------------------Сообщить( "Проверка тега - какой-то Тег присутствует", 0 );
----------------------- Вывести Дату и Время -------------------------------------Сообщить( ТекущаяДата() + " " + ТекущееВремя() + " ", 0 );
---------------------- Вывести содержимое переменной или Тега  (Спасибо – Волков Андрей  за подсказку)--------------------------Сообщить( Строка(Реле1.Тег()) + " " , 0 );
.
----------------------------------------------------- Как изменить Тег -----------------------------------------Реле1.ПоместитьВТег(401);
Сообщить( "тег - 401 разместили.", 1 );
Реле1.ПоместитьВТег(402);
Сообщить( "тег - 402 разместили.", 1 );


.
--------------------------------------------------------- Как проверит содержимое тега ------------------------------------------
Если Реле1.Тег() == 401 Тогда
Сообщить( "Реле Тег 401 Выход", 1 );
Иначе
Сообщить( "Реле Тег Не 401 Выход", 2 );
КонецЕсли;
-----------------------------------------------------------------------------------------------------------------------------------------------------
.
КонецЕсли;
Исключение Сообщить("Произошло исключение, шаг Тег",0);
КонецПопытки;
КонецСценария

3 года 5 месяцев назад

avatar
Как задать переменную реального реле

Поясните, что это значит?
Может так:Реле1 = РабочееМесто1.Порт1.Пульт1.Прибор1.Выходы().ПолучитьПоАдресу( "1.2.3.4" )

А Вы попробовали тот код, что я Вам с соседней ветке дал?

Налетов Константин 3 года 5 месяцев назад

1) Поправил и пояснил.
2) Спасибо, текст увидел, времени пока проверить не было, весь день сегодня с проволами возился.

Константин Рогозин 3 года 5 месяцев назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

Простой триггер. При первом запуске скрипта включает реле, при втором выключает.
Не вылизан, нет проверки пограничных ситуаций. Будет дорабатываться.
Тэги используются для определения и изменения состояний реле из других скриптов. Работающих совместно с этим скриптом.
В данной версии скрипт используется для включения выключения света с помощью одной кнопки вместо настенного выключателя в системе автоматизации здания. :) :) Кнопка подключена к входу ШС3 (ИД 215) на С2000-4 и расположена около входной двери.
PS:Времени много заниматься скриптами нету так как ковыряюсь с скриптами после работы, поэтому если кто может накидать таймер для ИК датчика подключенного на ШС2 (ИД 214)этого же считывателя для выключения света через 20 минут при отсутствии движжения в зоне ИК датчика буду признателен.

Сценарий
Переменные
Перем РабочееМесто1;
Перем РабочиеМеста1;
Перем Компьютер1;
Перем Компьютеры1;
Перем Реле147;
Перем Реле147Тег;
//Перем ВремяНачала;
НачалоСценария


Попытка
Компьютеры1 = СоздатьОбъект( "Компьютеры" );
Компьютер1 = Компьютеры1.ПолучитьПоИд(1);
РабочиеМеста1 = Компьютер1.РабочиеМеста();
РабочееМесто1 = РабочиеМеста1.ПолучитьПоТипуСетевогоМеста("Ядро");
Реле147 = РабочееМесто1.Выходы().ПолучитьПоИД( 147 );
Реле147Тег = Реле147.Тег();
Если не ПустоеЗначение( Реле147Тег ) Тогда
Сообщить( "Текущий Тег Реле147 = " + Строка(Реле147.Тег()) + " " , 0 );
Иначе
Сообщить( "Проверка тега - какой-либо Тег отсутствует", 0 );
КонецЕсли;

Сообщить( "Проверяем состояние контактов Реле", 1 );
Если Реле147.ЕстьСостояние( 401 ) == ИСТИНА Тогда
Сообщить( "Реле Включено", 1 );
Сообщить( "Реле выключаем", 1 );
Реле147.Выключить( "0" );
Сообщить( "Реле выключили", 1 );
Реле147.ПоместитьВТег(402);
Сообщить( "Тег - 402 разместили.", 1 );
КонецЕсли;

Сообщить( "Проверяем состояние контактов Реле", 1 );
Если Реле147.ЕстьСостояние( 402 ) == ИСТИНА Тогда
Сообщить( "Состояние реле 402 (Выключено), Реле включаем", 1 );
Реле147.Включить( "0" );
Сообщить( "Реле включили", 1 );
Реле147.ПоместитьВТег(401);
Сообщить( "Тег - 401 разместили.", 1 );
КонецЕсли;

Исключение Сообщить("Произошло исключение, шаг Тег",0);
КонецПопытки;
КонецСценария
 

3 года 5 месяцев назад

avatar
А зачем так сложно? 
Простой триггер:

Если Реле147.ЕстьСостояние( 401 ) == ИСТИНА
Тогда
Реле147.Выключить( "0" );
Иначе
Реле147.Включить( "0" );

Зачем тег?

Тремасов Константин Александрович 3 года 5 месяцев назад

Я дополнил сообщение ответами на все возможные вопросы. :)
Спасибо за внимание к этой теме.
.
Ваш вариант Триггера проще (он такой и должен быть), но как только появляется еще с десяток "Иначе" с другими тегами (других реле), то проще разбить пошагово когда включить а когда выключить, а когда проигнорировать и ничего не делать.
Часть скрипта просто вырезана.

PS: Я просто не смог решить задачу без "GOTO" "следующий логический блок", поэтому скрипт пошагово проверяет все условия.
Я так понимаю вариант как "ниже в снипете" в этих скриптах не возможен в принципе.:Start
IF A=1 goto Bl1
IF A=2 goto Bl2
IF A=3 goto END
:Bl1
Print
Goto Start
:Bl2
circle
Goto Start
:END

Константин Рогозин 3 года 5 месяцев назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

Добавить ответ

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

ПОКАЗАН

2855 раз

ЗАДАН

3 года 5 месяцев назад

По каждому вопросу/ответу можно добавлять комментарии. Комментарии предназначены для уточнения вопроса/ответа.