Документация для версии Интеллект 4.10.4. Документация на другие версии также доступна.

Предыдущая страница Описание функций  Описание реакций объектов системы Следующая страница


На странице:
 

Для наглядности и непосредственного закрепления написания скриптов ниже приведены примеры, которые помогут лучше разобраться в способах создания скриптов в системе.

Пример 1.

Выводить активную камеру на аналоговый монитор.

 

Реализация:

 

OnEvent ("MONITOR","1","ACTIVATE_CAM")
 
{
    DoReact ("CAM",cam,"MUX1");
}

 

Пример 2.

Запускать и останавливать патрулирование поворотника по макрокомандам.

 

Реализация:

 

OnEvent("MACRO","1","RUN")
 
{
    DoReact("TELEMETRY","1.1","PATROL_PLAY","tel_prior<1>");
}
 
OnEvent("MACRO","2","RUN")
 
{
    DoReact("TELEMETRY","1.1","STOP","tel_prior<1>");
}

 

Пример 3.

Выводить тревожную камеру в режим однократора.

 

Реализация:

 

OnEvent ("CAM",N,"MD_START")
 
{
    DoReact ("MONITOR","1","ACTIVATE_CAM","cam<"+N+">");
 
    DoReact ("MONITOR","1","KEY_PRESSED","key<SCREEN.1>");
}

 

Пример 4.

Пример бесконечного цикла и выхода из него. Старт цикла по макрокоманде №1, остановка по макрокоманде №2.

 

Реализация:

 

OnEvent("MACRO","1","RUN") //при запуске макрокоманды №1
 
{
    //квадратные скобки нужны для выделения оператора ожидания в отдельный поток
    [            
    flag=1;
    for(a=1;flag<2;a=1) //оператор цикла
    {
        Sleep(500); //оператор ожидания создает паузу в 500 миллисекунд
        ff="!!!!!!!!!!!!!!!!!!";
    }
    ]
 
}
 
OnEvent("MACRO","2","RUN") //при запуске макрокоманды №2
 
{
    flag=2;
}

 

Пример 5.

Тревожный монитор, на котором всегда остается видео от последней тревожной камеры.

 

Реализация:

 

OnInit()
{
    counter=0;
}
 
OnEvent("CAM",T,"MD_START")
{
    if(strequal(counter,"0"))
    {
        DoReact("MONITOR","2","REMOVE_ALL");
        DoReact("MONITOR","2","ADD_SHOW","cam<"+T+">");
    }
    counter=str(counter+1);
}

 

OnEvent("CAM",M,"MD_STOP")
{
    counter=str(counter-1);
    if(strequal(counter,"0"))
    {
        DoReact("MONITOR","2","ADD_SHOW","cam<"+M+">");
    }
}

 

Пример 6.

Проигрывание звукового файла от прихода одного события, до прихода другого события. (В данном случае это запуск макрокоманд).

Звуковой файл должен длиться не больше количества секунд, которое указано в операторе Wait.

 

Реализация:

 

OnEvent("MACRO","1","RUN")
 
{
    flag=1;
    [
    for(i=1;flag;i=1)
    {
        DoReact("PLAYER","1","PLAY_WAV","file<C:\Program Files\Intellect\Wav\cam_alarm_1.wav>");
        Wait(3);
    }
    ]
}
 
 
OnEvent("MACRO","8","RUN")
{
    flag=0;
}

 

Пример 7.

Есть 2 камеры с поворотными устройствами. Каждые 15 минут нужно повернуть камеры в пресет №1 (предустановка №1) и сделать скриншот. Имя файла – текущее время.

 

Реализация:

 

OnTime(W,D,X,Y,H,M, "01")
{
    if(strequal(M,"0"))
    {
        name=H+"_"+M+"_"+S+".jpg";
        //Камера 1 Поворотник 1.1
        name1="Камера1 "+name;
        DoReact("TELEMETRY","1.1","GO_PRESET","preset<1>,tel_prior<1>");
        DoReact("MONITOR","1","EXPORT_FRAME","cam<1>,file<d:\"+name1);
        //Камера 2 Поворотник 1.2
        name="Камера2 "+name;
        DoReact("TELEMETRY","1.2","GO_PRESET","preset<1>,tel_prior<1>");
        DoReact("MONITOR","1","EXPORT_FRAME","cam<2>,file<d:\"+name);
    }
 
    if(strequal(M,"15"))
    {
        name=H+"_"+M+"_"+S+".jpg";
        //Камера 1 Поворотник 1.1
        name1="Камера1 "+name;
        DoReact("TELEMETRY","1.1","GO_PRESET","preset<1>,tel_prior<1>");
        DoReact("MONITOR","1","EXPORT_FRAME","cam<1>,file<d:\"+name1);
        //Камера 2 Поворотник 1.2
        name="Камера2 "+name;
        DoReact("TELEMETRY","1.2","GO_PRESET","preset<1>,tel_prior<1>");
        DoReact("MONITOR","1","EXPORT_FRAME","cam<2>,file<d:\"+name);
    }
 
    if(strequal(M,"30"))
    {
        name=H+"_"+M+"_"+S+".jpg";
        //Камера 1 Поворотник 1.1
        name1="Камера1 "+name;
        DoReact("TELEMETRY","1.1","GO_PRESET","preset<1>,tel_prior<1>");
        DoReact("MONITOR","1","EXPORT_FRAME","cam<1>,file<d:\"+name1);
        //Камера 2 Поворотник 1.2
        name="Камера2 "+name;
        DoReact("TELEMETRY","1.2","GO_PRESET","preset<1>,tel_prior<1>");
        DoReact("MONITOR","1","EXPORT_FRAME","cam<2>,file<d:\"+name);
    }
 
    if(strequal(M,"45"))
    {
        name=H+"_"+M+"_"+S+".jpg";
        //Камера 1 Поворотник 1.1
        name1="Камера1 "+name;
        DoReact("TELEMETRY","1.1","GO_PRESET","preset<1>,tel_prior<1>");
        DoReact("MONITOR","1","EXPORT_FRAME","cam<1>,file<d:\"+name1);
        //Камера 2 Поворотник 1.2
        name="Камера2 "+name;
        DoReact("TELEMETRY","1.2","GO_PRESET","preset<1>,tel_prior<1>");
        DoReact("MONITOR","1","EXPORT_FRAME","cam<2>,file<d:\"+name);
    }
}

 

Пример 8.

Микрофон (OLXA_LINE) пишется не синхронно с камерой. По умолчанию микрофон не стоит на охране. Необходимо писать звук как по аккустопуску, так и по детекции от камеры.

 

Примечание.

Команды RECORD_START, RECORD_STOP для микрофона добавлены с версии 4.7.0

 

На сработку аккустопуска (ACCU_START) и детектора движения (MD_START) включается принудительная запись звука и увеличивается на единицу переменная flag. При окончании аккустопуска и детекции движения переменная flag уменьшается на единицу и запись звука останавливается, только если она равна нулю, т.е. нет ни аккустопуска, ни движения.

 

Реализация:

 

OnInit()
{
    flag=0;
}
 
OnEvent("CAM","3","MD_START")
{
    flag=str(flag+1);
    DoReact("OLXA_LINE","1","RECORD_START");
}
 
OnEvent("OLXA_LINE","1","ACCU_START")
{
    flag=str(flag+1);
    DoReact("OLXA_LINE","1","RECORD_START");
}
 
OnEvent("OLXA_LINE","1","ACCU_STOP")
{
    flag=str(flag-1);
    if (!(flag))
    {
        DoReact("OLXA_LINE","1","RECORD_STOP");
    }
}
 
OnEvent("CAM","3","MD_STOP")
{
    flag=str(flag-1);
    if (!(flag))
    {
        DoReact("OLXA_LINE","1","RECORD_STOP");
    }
}

 

Пример 9.

Есть определенное количество камер (num). Необходимо проверить работу детектора движения по всем камерам (можно использовать для проверки работоспособности датчиков охраны).

Для решения задачи используется эмуляция линейного символьного массива (строка), т.е. заполняется массив символов (у нас это символ «N»). Далее при сработке детектора движения по камере – меняется соответствующий (идентификатору камеры) элемент массива (меняется на "Y"). Таким образом, на выходе у нас символьный массив из «N» (камера не сработала) и «Y» (камера сработала). Подсчитывается количество сработок и выдается сообщение об общем количестве камер и количество камер, у которых сработал детектор. Старт проверки по Макрокоманде №1. Остановка по Макрокоманде №2.

 

Реализация:

 

OnInit()
{
    run=0;
}
 
OnEvent("MACRO","1","RUN")
{
    run=1; flag=""; num=8;
    for(i=1;i<str(num+1);i=str(i+1))
    {
        DoReact("CAM",i,"DISARM");
        DoReact("CAM",i,"REC_STOP");
        DoReact("CAM",i,"ARM");
        flag=flag+"N";
        if(i<num) {flag=flag+"|";}
    }
}
 
OnEvent("CAM",N,"MD_START")
{
    if(run)
    {
        nn=str((N*2)-1);
        flag=strleft(flag,str(nn-1))+"Y"+strright(flag,str(((num*2)-1)-nn));
    }
}
 
OnEvent("MACRO","2","RUN")
{
    run=0; fin=0;
    for(i=1;i<str(num+1);i=str(i+1))
    {
        tmp=extract_substr(flag,"|",str(i-1));
        if(strequal(tmp,"Y")) {fin=str(fin+1);}
        DoReact("CAM",i,"DISARM");
    }
    tmp="Всего:"+str(num)+" Сработало:"+str(fin);
    rez=MessageBox("",tmp,0);
}

 

Пример 10.

Осуществить патрулирование нескольких зон видимости с помощью пресетов поворотной камеры, с возможностью включения детектора движения на определенных областях этих зон.

Камера №1. 5 зон детектора, 5 предустановок (пресетов). Два этих параметра задаются переменной n. Макрокоманда №1 – старт алгоритма. Макрокоманда №2 – остановка алгоритма. Flag – внутренняя переменная.

При старте алгоритма камера становится в 1-й пресет и ставит на охрану 1-ю зону детектора. Между этими командами задержка 200 миллисекунд, чтобы камера успела встать в пресет. Далее через 5 секунд 1-я зона снимается с охраны и цикл начинается заново но уже с второй зоной и 2-м пресетом. И так далее пока не переберутся все n зон и пресетов. После  начинается заново с 1-го. Алгоритм останавливается, если переменная flag обнуляется (с помощью макрокоманды №2).

 

Реализация:

 

OnEvent("MACRO","1","RUN")
{
    flag=1;
    n=5;
    [
     for(i=1;flag;i=str(i+1))
     {
         DoReact("TELEMETRY","1.1","GO_PRESET","preset<"+i+">,tel_prior<3>");
         Sleep(200);
         DoReact("CAM_ZONE","1"+i,"ARM");
         Wait(5);
         DoReact("CAM_ZONE","1"+i,"DISARM");
         if(strequal(i,n)) {i=0;}
    }
    ]
}
 
OnEvent("MACRO","2","RUN")
{
    flag=0;
}

 

Пример 11.

Есть 2 экрана, первый отображает виртуальный монитор с камерами, второй отображает объект Карта с датчиками ОПС Болид. При сработке тревоги по камере – показывается Экран 1, при срабатывании тревоги от датчика – показывается Экран 2, но только на компьютере CLIENT.

 

Реализация:

 

OnEvent("CAM",N,"MD_START")
{
    DoReact("DISPLAY","2","DEACTIVATE","macro_slave_id<CLIENT>");
    DoReact("DISPLAY","1","ACTIVATE","macro_slave_id< CLIENT >");
}
 
OnEvent("BOLID_ZONE",M,"ALARM")
{
    DoReact("DISPLAY","1","DEACTIVATE","macro_slave_id< CLIENT >");
    DoReact("DISPLAY","2","ACTIVATE","macro_slave_id< CLIENT >");
}

 

Пример 12.

При возникновении тревоги по камере 1 накладывать титры на видеоизображение с данной камеры. При окончании тревоги накладывать титры об окончании тревоги.

 

Реализация:

 

OnEvent("CAM","1","MD_START")
{
    DoReact("CAM","1","CLEAR_SUBTITLES","title_id<1>"); //удалить все титры с видеоизображения
    DoReact("CAM","1","ADD_SUBTITLES","command<Камера 1 Тревога " + time + "\r>,page<BEGIN>,title_id<1>"); 
//параметр time позволяет включить в титры время регистрации события
}
 
OnEvent("CAM","1","MD_STOP")
{
    DoReact("CAM","1","ADD_SUBTITLES","command<Камера 1 Конец тревоги " + time + "\r>,page<END>,title_id<1>");
}

 

Примечание.

При использовании параметров page<BEGIN> и page<END> будут заполняться соответствующие поля в базе титров, что даст возможность производить поиск данных с помощью интерфейсного объекта Поиск по титрам.