интелект прграмирование 476. Руководство по программированию Версия 5 Москва 2008 2 Содержание 1 Введение 3 2
Скачать 421.07 Kb.
|
Ай-Ти-Ви групп Программный комплекс «Интеллект» Руководство по программированию Версия 1.5 Москва 2008 2 Содержание 1 Введение 3 2 Инструментарий программирования 4 2.1 Отладочное окно ........................................................................................................................4 2.2 Синтаксический анализатор ......................................................................................................5 2.3 Рекомендуемый порядок написания программ .........................................................................6 3 Описание синтаксиса 8 3.1 Описание переменных ...............................................................................................................8 3.2 Описание процедур....................................................................................................................8 3.3 Описание операторов...............................................................................................................12 3.4 Операции и выражения............................................................................................................16 3.5 Описание функций...................................................................................................................19 3.6 Примеры скриптов ...................................................................................................................36 3.7 Описание реакций объектов системы......................................................................................49 3.7.1 GRABBER .................................................................................................................49 3.7.2 CAM ..........................................................................................................................51 3.7.3 MONITOR .................................................................................................................53 3.7.4 AUDIO.......................................................................................................................57 3.7.5 DIALOG ....................................................................................................................58 3.7.6 MMS ..........................................................................................................................59 3.7.7 MAIL_MESSAGE......................................................................................................59 3.7.8 VDIAL .......................................................................................................................60 3.7.9 RELE..........................................................................................................................61 3.7.10 RAY ...........................................................................................................................61 3.7.11 VNS ...........................................................................................................................61 3 1 Введение Программирование в системе Интеллект предназначено для более гибкого управления объектами, а также управления взаимодействия между объектами системы Интеллект. 4 2 Инструментарий программирования 2.1 Отладочное окно В системе "Интеллект" существует возможность в реальном времени просматривать все события и реакции, происходящие в системе. Для этого служить отладочное окно, которое можно включить\выключить через реестр Windows или с помощью утилиты tweaki.exe Включение Отладочного окна 1. Через реестр Windows По пути в реестре HKEY_LOCAL_MACHINE\SOFTWARE\ITV\Intellect Изменить строковый параметр Debug в значение "1", "2" или "3". 2. Через утилиту Tweaki.exe (по пути :\\Intellect\tools) В разделе Intellect, значение Debug Mode выставить равным "1" или "2" Выключение Отладочного окна 1. Через реестр Windows По пути в реестре HKEY_LOCAL_MACHINE\SOFTWARE\ITV\Intellect Изменить строковый параметр Debug в значение "None" 2. Через утилиту Tweaki.exe (по пути :\\Intellect\tools) В разделе Intellect, значение Debug Mode выставить равным "0" Работа с Отладочным окном При включенном Отладочным окне в реестре, при следующем запуске системы Интеллект в главном меню системы появится дополнительная команда, которая включает и выключает Отладочное окно при работающей системе: 5 Если включить эту команду, то появится само отладочное окно: Свойства Отладочного окна 1. Отладочное окно может менять свои размеры с помощью мыши. 2. Отладочное окно всегда находится поверх других окон. 3. Чтобы прочитать и скопировать строчку из отладочного окна, активируйте эту строчку и нажмите правую клавишу мыши. Обязательно закройте это добавочное окно, если его не используете. 2.2 Синтаксический анализатор Встроенный синтаксический анализатор позволяет отслеживать правильность написания основных зарегистрированных слов, таких как OnEvent, DoReact, OnTime, Wait, Sleep и др. Эти зарегистрированные слова отмечаются черным цветом в поле текста программы. Следует отметить что за правильностью написания параметров команд, анализатор не следит, и нужно быть особенно внимательным в этих случаях. 6 Для изменения размера шрифта используйте сочетания клавиш CTRL и + для увеличения шрифта CTRL и - для уменьшения шрифта 2.3 Рекомендуемый порядок написания программ 1. Постановка общей задачи. 2. Разбитие задачи на подзадачи. 3. Написание подзадач и их отладка. 7 4. Поиск и исправление ошибок Постановка общей задачи Нужно четко представлять что должно происходить в системе при определенных событиях. Определить ID устройств, участвующих в генерации событий и действий. Разбитие задачи на подзадачи Если задача подразумевает обработку нескольких различных событий, то имеет смысл четко представить действия системы на каждое их этих событий. По возможности нужно исключить возможность бесконечного зацикливания выполнения скриптов, т.е исключить всяческие рекурсивные действия, если конечно они не предусматривают выполнение поставленной задачи. Написание подзадач и их отладка Наиболее сложным в написании скриптов является написание списка действий с возможным использованием логических и циклических операций. По опыту эта часть программирования наиболее долго отлаживается. Зачастую генерация события, требующая обработки, является не очень удобной, тем более на реальном объекте, например срабатывание пожарного датчика или движение по камере, достаточно удаленной от места программирования - от сервера с Ядром системы. В этом случае рекомендуется на этапе отладки действий генерировать событие вручную, самое удобное - это запуск пустой макрокоманды. После отладки тела скрипта в событие вместо запуска пустой макрокоманды подставляется реальное событие. Кроме того можно проверить и наоборот - убедиться в правильности написания реального события не запуская списка действий можно вставив вместо списка действий - запуск пустой макрокоманды и посмотреть ее выполнение в отладочном окне. Поиск и исправление ошибок Встроенный синтаксический анализатор на этапе запуска программы проверяет правильность написания названий функций, но не проверяет правильность расстановки ключевых символов - запятых, точек с запятой, вложенности скобок. Поэтому ошибки, если они есть, будут проявляться только на этапе исполнения тела программы. 8 3 Описание синтаксиса Скрипт состоит из набора процедур. Все операторы выполняемые внутри процедур формируются в блоки {..}. Если нужно вставить комментарий, то перед комментарием требуется поставить спецсимволы // . 3.1 Описание переменных Все переменные, используемые в системе – строковые. Для сравнения строковых переменных и значений используется функция: boolstrequal (стока1,строка2). Функция "boolstrequal" возвращает значение, отличное от нуля, если строки равны (см. пункт "Описание функций"). Для произведения целочисленных действий используется функция: str(строка1) (см. Описание функций). 3.2 Описание процедур Существуют 3 стандартные процедуры, которые могут быть выполнены при возникновении соответствующего события: OnInit() – Используется для инициализации переменных (задания первоначальных значений), которые будут в дальнейшем использоваться при выполнении скриптов. Выполняется до старта всех модулей системы. Рекомендуется использовать один вызов процедуры на все существующие скрипты. Пример использования OnInit() { flag=1; num=8; //на старте системы будут проинициализированы переменные } 9 OnTime (день недели (1-7), день-месяц-год, часы, минуты, секунды) – Запуск в определенный момент времени. OnTime(W,D,X,Y,H,C,S) { //W - день недели ( 0 - понедельник, 6 - воскресенье); //D - дата в формате "число-месяц-год", 16 августа 2001 года это "16- 08-01" //X,Y - зарезервировано //H - час //C - минуты //S - секунды // ВЫПОЛНЯЯ СРАВНЕНИЕ С ПАРАМЕТРАМИ ДАЛЕЕ УКАЗЫВАЕТСЯ ДЕЙСТВИЕ } Примеры использования OnTime(W,"16-08-01",X,Y,"11","11","30") { // помещенный здесь код сработает 16 августа 2001 года в 11 часов 11 минут 30 секунд } OnTime(W,D,X,Y,"11","11","30") { // помещенный здесь код сработает каждый день в 11 часов 11 минут 30 секунд } OnTime(W,"16-08-01",X,Y,H,C,S) { // помещенный здесь код ,будет срабатывать 16 августа 2001 года 10 // каждую секунду } OnTime(W,"16-08-01",X,Y,"11","11",S) { // помещенный здесь код ,будет срабатывать 16 августа 2001 года // c 11 часов 11 минут по 11 часов 12 минут каждую секунду } OnTime("0",D,X,Y,"21","0","0") { // помещенный здесь код ,будет срабатывать каждый понедельник // в 21 часов 00 минут 00 секунд } OnEvent(тип источника, номер, событие) – запуск по определенному событию от объекта системы. Основная процедура при написании cкриптов. Примеры использования OnEvent("GRAY","1","ON") { // Выполнится при замыкании луча 1 } OnEvent("CAM","12","MD_START") { // Выполнится при сработке детектора движения на камере 12 } Каждая процедура, имеющая параметры, может встречаться в коде много раз с различными параметрами. При возникновении события система выполнит те из них, параметры которого совпадут с параметрыми возникшего события. 11 Параметр процедуры может быть определенным или нет. В первом случае его значение берется в кавычки, в последнем случае параметр обозначается латинскими буквами и процедура будет выполнена для всех событий, для которых его можно определить. Примеры использования OnEvent("GRAY","1","ON") { // Выполнится при замыкании луча 1 i=1; i=i+1; //т.к. переменные строковые, то сумма будет равна «11» j=1; j=str(j+1); // str - это функция преобразования числа к строке. Внутри функции str вначале происходит конвертация всех строковых переменных (в случае их наличия) в целочисленные, затем происходит сложение чисел, следовательно сумма будет равна «2» } OnEvent("GRAY",N,"ON") // Выполнится при замыкании любого луча { if(strequal(N,"3") { // выполнится если это луч 3 } } Создание собственных процедур Все собственные процедуры описанные в скрипте должны находиться в том же теле программы и перед процедурами, в которых они вызываются. procedure ProcedureName(список параметров) { 12 \\тело процедуры } Внимание! Имена параметров должны состоять из одного символа, в верхнем регистре. Примеры использования procedure ProcedureName(A,B) { n=A+" "+B; //при запуске макроса 1 n=«Макрокоманда 1», при запуске макроса 16 n=«Макрокоманда 16» } OnEvent("MACRO",N,"RUN") { a1=N; a2="Макрокоманда"; ProcedureName(a2,a1); } 3.3 Описание операторов Список операторов используемых для описания действий: DoReact(тип объекта,номер,действие[,параметры]) – выполнить действие Пример использования OnEvent("GRAY","1","ON") { DoReact("GRELE","1","ON"); //при замыкании луча 1 замкнуть реле1 } 13 DoCommand(командная строка) – запуск командной строчки Пример использования OnEvent("GRAY","1","ON") { DoCommand("notepad.exe"); //при замыкании луча 1 запустить «Блокнот» } Wait(кол-во секунд) - ждать N секунд Sleep(кол-во миллисекунд) - ждать N миллисекунд Операторы ожидания должны быть выделены в отдельный поток. Отдельный поток выделяется квадратными скобками. Пример. При замыкании Луча 1 Реле 1 будет замыкаться на 5 сек. Пример использования OnEvent("GRAY","1","ON") { [ DoReact("GRELE","1","ON"); Wait(5); DoReact("GRELE","1","OFF"); // При замыкании Луча 1 Реле 1 будет замыкаться на 5 сек. ] } Функция проверки состояния объекта: CheckState(тип объекта,номер,состояние) – результат будет равен 1 если состояние объекта соответствует действительности, иначе 0. В качестве параметров могут быть выражения. Константные значения берутся в кавычки. Пример использования OnEvent("GRAY","1","ON") 14 { if(CheckState("CAM","2","ALARMED")) { DoReact("GRELE","1","ON"); //при замыкание луча 1 проверяется состояние камеры 2 и если состояние «Тревога», то замкнуть реле1 } } Условный оператор if(выражение) { … // если результат выражения не 0 } else { … // если результат выражения равен 0 } Часть оператора else {} может отсутствовать. Пример использования OnEvent ("MACRO","1","RUN") { x=5; if(x>10) {y=2;} else {y=3;} // если "x" больше чем 10 то y=2 иначе y=3 } Оператор цикла for(выражение 1; выражение 2; выражение 3) 15 { … } выражение 1 выполнится в начале цикла, пока выражение 2 истинно, будет выполняться тело цикла, после каждого выполнения тела цикла будет выполняться выражение 3 Примеры использования OnEvent ("MACRO","1","RUN") { // постановка 3х зон болида на охрану при запуске макрокоманды 1 for(x=1;x<4;x=str(x+1)) { DoReact ("BOLID_ZONE",x,"ARM"); } } OnEvent ("GRAY","1","ON") { // При замыкании луча 1 реле 1 будет замыкаться и размыкаться с с интервалом в 1 сек и это будет происходить 10 раз [ for(i=0;i<10;i=str(i+1)) { DoReact("GRELE","1","ON"); Wait(1); DoReact("GRELE","1","OFF"); Wait(1); } ] } 16 3.4 Операции и выражения Оператор Общее описание, пример использования Операции сравнения > Оператор сравнения – больше. Пример смотрите в «if» и «for» < Оператор сравнения – больше. Пример смотрите в «if» и «for» Арифметические операции + Операция сложение. Пример использования: OnEvent ("MACRO","1","RUN") { x=5; y=10; i=x+y; // складывает как строковые т.е. 5+10=510 e=str(x+y); // складывает как числа 5+10=15 } - Операция вычитание. Пример использования: OnEvent ("MACRO","1","RUN") { x=5; y=10; i=x-y; // вычитание как числа 5-10=-5 e=str(x-y); // вычитание как числа 5-10=-5 } * Умножение. Пример использования: OnEvent ("MACRO","1","RUN") { x=5; 17 Оператор Общее описание, пример использования y=10; i=x*y; // умножает как числа 5*10=50 e=str(x*y); // умножает как числа 5*10=50 } / Деление. Пример использования: OnEvent ("MACRO","1","RUN") { x=5; y=10; i=x/y; // делит как числа 5/10=0.5 e=str(x/y); // делит как числа 5/10=0.5 } % Остаток от целочисленного деления. Пример использования. OnEvent ("MACRO","1","RUN") { a=1120.0; b=100; e=a%b; // остаток от целочисленного деления.. т.е. 1100 делится на 100 а 20 это остаток. // если делится без остатка то результат = 0 } ( ) Группа арифметических операций. Пример использования. OnEvent ("MACRO","1","RUN") { x=100/((5*8)/1.028); } Логические операции && Оператор логическое И. Пример использования: OnEvent ("MACRO","1","RUN") 18 Оператор Общее описание, пример использования { a=1; b=2; z=3; if((a} else {x=0;} } ! Оператор логического отрицания. Пример использования: OnEvent ("CAM",N,"MD_START") { if(!(strequal(N,”1”,))) { DoReact(“GRELE”,”1”,””ON) } else { DoReact(“GRELE”,”2”,””ON) } } 19 3.5 Описание функций Функции (В квадратных скобках указано количество исполняемых параметров) Общее описание, пример использования МАТЕМАТИЧЕСКИЕ sin[1] Тригонометрическая функция расчета синуса угла. Формат: y=sin(x); где: y- значение функции, x-аргумент (в радианах) Пример: y=sin(1.6) Полученное событие: Event : CORE VAR_CHANGED nt_obj_id<1>,value<0.997495>,name сos[1] Тригонометрическая функция расчета косинуса угла. Формат: y=cos(x); где: y-значение функции, x-аргумент (в радианах) Пример: y=cos(2.2) Полученное событие: Event : CORE VAR_CHANGED int_obj_id<1>,value<- 0.588501>,name tan[1] Тригонометрическая функция, возвращает тангенс угла. Формат: y=tan(x); где: y-значение функции, x-аргумент (в радианах) Пример: y=tan(1) Полученное событие: Event : CORE VAR_CHANGED int_obj_id<1>,value<1.557408>,name |