Главная страница
Навигация по странице:

  • Функции (В квадратных скобках указано количество исполняемых параметров) Общее описание, пример использования

  • Пример 1 Задача

  • Пример 3 Задача

  • Реализация: OnEvent("MACRO","1","RUN"){DoReact("ARCH","2","START","datetime_from ,cam ,datetime_to ");}Пример 6

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

  • Пример 8 Задача

  • Пример 9 Есть 2 экрана, первый отображает виртуальный монитор с камерами,второй отображает объект «Карта» с датчиками ОПС «Болид»Задача

  • Пример 10 Задача

  • Пример 11 Микрофон (OLXA_LINE) пишется не синхронно с камерой. По умолчанию микрофон не стоит на охране.Задача

  • Пример 12 Есть определенное количество камер (num).Задача

  • 3.7 Описание реакций объектов системы

  • 3.7.1 GRABBER Формат: DoReact("GRABBER","_id_","_команда_" [,"_параметры_"]);Команда - описание команды Параметры Описание параметров

  • интелект прграмирование 476. Руководство по программированию Версия 5 Москва 2008 2 Содержание 1 Введение 3 2


    Скачать 421.07 Kb.
    НазваниеРуководство по программированию Версия 5 Москва 2008 2 Содержание 1 Введение 3 2
    Анкоринтелект прграмирование 476
    Дата19.06.2022
    Размер421.07 Kb.
    Формат файлаpdf
    Имя файлаPG4.pdf
    ТипРуководство
    #603670
    страница3 из 4
    1   2   3   4
    srtnright[2]
    Взять без правой части строки.
    Формат: y=strnright(s,w); где: y- строковое значение, s-строка, w- длина правой части которая будет отсечена.
    Пример:
    w=(6);//длина s=("взять без правой части строки");//строка y=strnright(s,w);
    Полученное событие:
    Event : CORE VAR_CHANGED
    int_obj_id<1>,value<6>,name,time<15:44:31>,date<24-09-04>
    Event : CORE VAR_CHANGED int_obj_id<1>,value<взять без правой части строки>,name,time<15:44:31>,date<24-09-04>
    Event : CORE VAR_CHANGED int_obj_id<1>,value<взять без правой части
    >,name,time<15:44:31>,date<24-09-04>
    get_substr[3]
    Взять подстроку (1 - строка, 2 - подстрока с которой начать, 3 – подстрока

    34
    Функции
    (В квадратных
    скобках указано
    количество
    исполняемых
    параметров)
    Общее описание, пример использования
    которой завершить, "\r" - конец строки)
    Формат: y=get_substr(s,w,x); где: y- значение(подстрока), s-строка, w- подстрока с которой начать, x- подстрока которой завершить("\r" - конец строки)
    Формат записи:
    Пример:
    s=("взять подстроку 1234567890");//строка w=("по");//подстрока с которой начать x=("\r");//подстрока которой завершить, "\r" - конец строки y=get_substr(s,w,x);
    Полученное событие:
    Event : CORE VAR_CHANGED int_obj_id<1>,value<взять подстроку
    1234567890>,name,time<16:34:13>,date<24-09-04>
    Event : CORE VAR_CHANGED
    int_obj_id<1>,value<по>,name,time<16:34:13>,date<24-09-04>
    Event : CORE VAR_CHANGED
    int_obj_id<1>,value<\r>,name,time<16:34:13>,date<24-09-04>
    Event : CORE VAR_CHANGED int_obj_id<1>,value<подстроку
    1234567890>,name,time<16:34:13>,date<24-09-04>
    Пример:
    s=("взять подстроку 1234567890");//строка w=("по");//подстрока с которой начать x=(1);//подстрока которой завершить, "\r" - конец строки y=get_substr(s,w,x);
    Полученное событие:
    Event : CORE VAR_CHANGED int_obj_id<1>,value<взять подстроку
    1234567890>,name,time<16:36:26>,date<24-09-04>
    Event : CORE VAR_CHANGED
    int_obj_id<1>,value<по>,name,time<16:36:26>,date<24-09-04>
    Event : CORE VAR_CHANGED
    int_obj_id<1>,value<1>,name,time<16:36:26>,date<24-09-04>

    35
    Функции
    (В квадратных
    скобках указано
    количество
    исполняемых
    параметров)
    Общее описание, пример использования
    Event : CORE VAR_CHANGED int_obj_id<1>,value<подстроку
    >,name,time<16:36:26>,date<24-09-04>
    strltrim[1]
    Убрать пробелы слева
    Формат: y=strltrim(w); где: y- полученное строковое значение, w- строка.
    Пример:
    w=(" убрать пробелы слева");//строка y=strltrim(w);
    Полученное событие:
    Event : CORE VAR_CHANGED int_obj_id<1>,value< убрать пробелы слева>,name,time<17:07:49>,date<24-09-04>
    Event : CORE VAR_CHANGED int_obj_id<1>,value<убрать пробелы слева>,name,time<17:07:49>,date<24-09-04>
    strrtrim[1]
    Убрать пробелы справа
    Формат: y=strrtrim(w); где: y- полученное строковое значение, w- строка.
    Пример:
    w=("Убрать пробелы справа ");//строка y=strrtrim(w);
    Полученное событие:
    Event : CORE VAR_CHANGED int_obj_id<1>,value<Убрать пробелы справа >,name,time<17:18:35>,date<24-09-04>
    Event : CORE VAR_CHANGED int_obj_id<1>,value<Убрать пробелы справа>,name,time<17:18:35>,date<24-09-04>
    stratrim[1]
    Убрать пробелы с обеих сторон
    Формат: y=stratrim(w); где: y- полученное строковое значение, w-строка.
    Пример:
    w=(" убрать пробелы с обеих сторон ");//строка y=stratrim(w);
    Полученное событие:

    36
    Функции
    (В квадратных
    скобках указано
    количество
    исполняемых
    параметров)
    Общее описание, пример использования
    Event : CORE VAR_CHANGED int_obj_id<1>,value< убрать пробелы с обеих сторон >,name,time<17:27:44>,date<24-09-04>
    Event : CORE VAR_CHANGED int_obj_id<1>,value<убрать пробелы с обеих сторон>,name,time<17:27:44>,date<24-09-04>
    3.6 Примеры скриптов
    Для наглядности и непосредственного закрепления написания скриптов ниже приведены примеры, которые помогут лучше разобраться в способах создания скриптов в системе.
    Пример 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")
    {

    37
    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");
    }
    Пример 4
    Пример вечного цикла и выхода из него (переменная run – условие выхода из цикла). Старт цикла по макрокоманде1, остановка по макрокоманде 2. Пока цикл работает, переменная i меняет значение от 1 до
    10.
    Реализация:
    OnEvent("MACRO","1","RUN")
    {
    run=1;
    for(i=1;run;i=str(i+1))
    {
    if (strequal(i,"10")) {i =0;}
    }
    }
    OnEvent("MACRO","2","RUN")
    {
    run=0;
    }

    38
    Пример 5
    По макросу 1 оперативный архив заберет архив по камере 1 за
    26.02.06. Если камер больше - добавляются соответсвующие строчки
    Реализация:
    OnEvent("MACRO","1","RUN")
    {
    DoReact("ARCH","2","START","datetime_from<26-02-06 00:00:00>,cam<1>,datetime_to<26-02-06 23:59:59>");
    }
    Пример 6
    Тревожный монитор, на котором всегда остается видео от последней тревожной камеры.
    Реализация:
    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);
    }

    39
    OnEvent("CAM",M,"MD_STOP")
    {
    counter=str(counter-1);
    if(strequal(counter,"0"))
    {
    DoReact("MONITOR","2","ADD_SHOW","cam<"+M+">");
    }
    }
    Пример 7
    Проигрывание звукового файла от прихода одного события, до прихода другого события. (В данном случае это запуск макрокоманд).
    Внимание!!! Звуковой файл должен длиться не больше
    количества секунд, которое указано в операторе Wait.
    Реализация:
    OnEvent("MACRO","1","RUN")
    {
    flag=1;
    [for(i=1;flag;i=1)
    {
    DoReact("PLAYER","1","PLAY_WAV","fileIntellect\Wav\cam_alarm_1.wav>");
    Wait(3);
    }]
    }
    OnEvent("MACRO","8","RUN")
    {
    flag=0;
    }

    40
    Пример 8
    Задача. Есть 2 камеры с поворотными устройствами. Каждые 15
    минут нужно повернуть камеры в пресет 1 (предустановка 1) и сделать скриншот. Имя файла – текущее время.
    Реализация:
    OnTime(W,D,X,Y,H,M,S)
    {
    if(strequal(M,"0"))
    {
    name=H+"_"+M+"_"+S+".jpg";
    //Камера 1 Поворотник 1.1
    name="Камера1 "+name;
    DoReact("TELEMETRY","1.1","GO_PRESET","preset<1>,tel_prior<1>");
    DoReact("MONITOR","1","EXPORT_FRAME","cam<1>,file//Камера 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}
    if(strequal(M,"15"))
    {
    name=H+"_"+M+"_"+S+".jpg";
    //Камера 1 Поворотник 1.1
    name="Камера1 "+name;
    DoReact("TELEMETRY","1.1","GO_PRESET","preset<1>,tel_prior<1>");
    DoReact("MONITOR","1","EXPORT_FRAME","cam<1>,file//Камера 2 Поворотник 1.2
    name="Камера2 "+name;
    DoReact("TELEMETRY","1.2","GO_PRESET","preset<1>,tel_prior<1>");

    41
    DoReact("MONITOR","1","EXPORT_FRAME","cam<2>,file}
    if(strequal(M,"30"))
    {
    name=H+"_"+M+"_"+S+".jpg";
    //Камера 1 Поворотник 1.1
    name="Камера1 "+name;
    DoReact("TELEMETRY","1.1","GO_PRESET","preset<1>,tel_prior<1>");
    DoReact("MONITOR","1","EXPORT_FRAME","cam<1>,file//Камера 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}
    if(strequal(M,"45"))
    {
    name=H+"_"+M+"_"+S+".jpg";
    //Камера 1 Поворотник 1.1
    name="Камера1 "+name;
    DoReact("TELEMETRY","1.1","GO_PRESET","preset<1>,tel_prior<1>");
    DoReact("MONITOR","1","EXPORT_FRAME","cam<1>,file//Камера 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}
    }

    42
    Пример 9
    Есть 2 экрана, первый отображает виртуальный монитор с камерами,
    второй отображает объект «Карта» с датчиками ОПС «Болид»
    Задача. При сработке тревоги по камере – показывается Экран 1,
    при сработке тревоги от датчика – показывается Экран 2, но только на компьютере CLIENT.
    Реализация:
    OnEvent("CAM",N,"MD_START")
    {
    DoReact("DISPLAY","2","DEACTIVATE","macro_slave_id");
    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 >");
    }
    Пример 10
    Задача. При осуществлении прохода через считыватель СКД
    «Аполло», показывать в течение 10 секунд диалоговое окно оператора
    (visitor.dlg) с отображением информации из базы данных: Идентификатор пользователя, ФИО, Год и место рождения, Сведения о документе,
    Сведения о прописке, К какому сотруднику пришел, Уровень допуска и Срок действия карточки.

    43
    Примечание: Идентификатор пользователя известен при
    получении события (param1), ФИО берется из базы с помощью функции
    GetObjectName, к какому сотруднику пришел, Уровень допуска и Срок
    действия карточки берутся из соответствующих полей в базе (person,
    level_id, expired) с помощью функции GetObjectParam. Далее, в
    зависимости от значения Уровеня допуска берется либо его имя либо
    присваивается одно из стандартных значений (Полный, Запрещен).
    Параметры Год и место рождения, Сведения о документе, Сведения о
    прописке берутся из одного поля comment (идут через разделитель "|"), и
    разделяются далее с помощью функции extract_substr. Переменная flag
    служит для того чтобы закрытие диалогового окна происходило только
    через 10 секунд после последней сработки считывателя , т.к. окно
    автоматически зарывается если поступает новое событие до
    истечения 10 секунд.
    OnEvent("AAM_READER",N,"ACCESS_IN")
    {[
    flag=param1;
    idn=param1;
    fio=GetObjectName("PERSON",idn);
    gmr=extract_substr(GetObjectParam("PERSON",idn,"comment"),"|",0);
    doc=extract_substr(GetObjectParam("PERSON",idn,"comment"),"|",1);
    prp=extract_substr(GetObjectParam("PERSON",idn,"comment"),"|",2);
    sot=GetObjectParam("PERSON",idn,"person");
    dat=GetObjectParam("PERSON",idn,"expired");
    lev=GetObjectParam("PERSON",idn,"level_id");
    DoReact("DIALOG","visitor","CLOSE_ALL");
    if(strequal(lev,""))
    {lev=GetObjectParam("DEPARTMENT",GetObjectParam("PERSON",idn,"parent
    _id"),"level_id");}
    if(strequal(lev,"-")) {lev="Доступ запрещен";}
    else
    {if(strequal(lev,"*")) {lev="Полный доступ";}
    else
    {if(strequal(lev,"")) {lev="Доступ запрещен";}

    44
    else
    {lev=GetObjectName("LEVEL",lev);}}}
    DoReact("DIALOG","visitor","RUN","idn<"+idn+">,fio<"+fio+">,gmr<"+gmr
    +">,doc<"+doc+">,prp<"+prp+">,sot<"+sot+">,dat<"+dat+">,lev<"+lev+">");
    Wait (10);
    if(strequal(flag,param1)) {DoReact("DIALOG","visitor","CLOSE_ALL");}
    ]}
    Пример 11
    Микрофон (OLXA_LINE) пишется не синхронно с камерой. По умолчанию микрофон не стоит на охране.
    Задача. Писать звук как по аккустопуску, так и по детекции от камеры.
    Примечание: Команды RECORD_START, RECORD_STOP для
    микрофона добавлены с версии 4.7.0
    На сработку аккустопуска (ACCU_START) и детектора движения
    (MD_START) включается принудительная запись звука и увеличивается на единицу переменная flag. При окончании аккустопуска и детекции движения переменная flag уменьшается на единицу и запись звука останавливается только если она равна нулю, т.е. нет ни аккустопуска, ни движения.
    Реализация:
    OnInit()
    {
    flag=0;
    }
    OnEvent("MACRO","1","RUN")
    {
    DoReact("PERSON","214","SETUP","facility_code<111>");
    }
    OnEvent("CAM","3","MD_START")

    45
    {
    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");}
    }
    Пример 12
    Есть определенное количество камер (num).
    Задача. Проверить работу детектора движения по всем камерам
    (можно использовать для проверки работоспособности датчиков охраны).

    46
    Для решения задачи используется эмуляция линейного символьного массива (строка). Т.е. заполняется массив символов (у нас это символ «N»).
    Далее при сработке детектора движения по камере – меняется соответствующий (идентификатору камеры) элемент массива (меняется на "Y"). Таким образом на выходе у нас символьный массив из «N» (камера не сработала) и «Y» (камера сработала). Подсчитывается количество сработок и выдается сообщение об общем количестве камер и количество камер у которых сработал детектор. Старт проверки по Макрокоманде 1. Остановка по макрокоманде 2.
    Реализация:
    OnInit()
    {
    run=0;
    }
    OnEvent("MACRO","1","RUN")
    {
    run=1; flag=""; num=8;
    for(i=1;i{
    DoReact("CAM",i,"DISARM");
    DoReact("CAM",i,"REC_STOP");
    DoReact("CAM",i,"ARM");
    flag=flag+"N";
    if(i}
    }
    OnEvent("CAM",N,"MD_START")
    {
    if(run)
    {
    nn=str((N*2)-1);

    47
    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{
    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);
    }
    Пример 13
    Осуществить патрулирование нескольких зон видимости с помощью пресетов поворотной камеры, с возможностью включения детектора движения на определенных областях этих зон.
    Камера 1. 5 зон детектора, 5 предустановок (пресетов).
    Два этих параметра задаются переменной n.
    Макрокоманда 1 - старт алгоритма.
    Макрокоманда 2 - остановка алгоритма.
    flag-внутренняя переменная.

    48
    При старте алгоритма камера становится в 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;
    }

    49
    3.7 Описание реакций объектов
    системы
    В данной главе указаны все реакции для основных объектов системы.
    Примечание. События для объектов системы можно просмотреть
    одним из следующих способов:
    1. Просмотр содержимого файла intellect.ddi посредством утилиты
    «ddi.exe» (см. документ «Программный комплекс «Интеллект»
    видеонаблюдение и аудиоконтроль. Руководство
    Администратора»).
    2. Просмотр событий для выбранного объекта системы
    посредством панели настроек системного объекта
    «Макрокоманда» (см. документ «Программный комплекс
    «Интеллект» видеонаблюдение и аудиоконтроль. Руководство
    Администратора»).
    3.7.1 GRABBER
    Формат: DoReact("GRABBER","_id_","_команда_" [,"_параметры_"]);
    Команда - описание команды
    Параметры
    Описание параметров
    chan<>
    номер канала (0,1,2,…)
    mode<>
    скорость оцифровки (0 –
    максимальная, 1 – средняя, 2 –
    минимальная)
    resolution<>
    разрешение (0– четверть кадра
    (384x288), 1 – полукадр
    (768х288), 2 – кадр (768х576))
    format<>
    формат сигнала (PAL, NTSC)
    drives<>
    диски для записи видеоархива
    (DRIVE1:\, DRIVE2:\, …
    DRIVEN:\)
    "SETUP" - устанавливает параметры платы видеоввода cams<>
    количество подключенных камер "SET_DRIVES" - устанавливает диски для записи видеоархива drives<>
    диски для записи видеоархива "MUX1_OFF" - отключить аналоговый выход 3
    -
    -
    "MUX2_OFF" - отключить аналоговый выход 2
    -
    -

    50
    "MUX3_OFF" - отключить аналоговый выход 3
    -
    -
    Пример:
    DoReact("GRABBER", "1", "SETUP",
    "chan<1>,mode<0>,resolution<1>,format
    ");
    «1-я плата видеоввода, канал – 1, скорость оцифровки –
    максимальная, разрешение – полукадр, формат – PAL»
    Пример:
    DoReact("GRABBER", "1", "SET_DRIVES", "drives");
    «Записывать видеоархив на диски D:\ и F:\»
    Команды "MUX1_OFF"
    "MUX2_OFF"
    "MUX3_OFF" отключают вывод видео через соответственно 1, 2, 3
    аналоговые выходы граббера.
    1   2   3   4


    написать администратору сайта