Форматы и функции

Формат процедуры событий для Устройства видеоввода:

OnEvent("GRABBER","_id_","_событие_")

Формат оператора для описания действий с Устройством видеоввода:

DoReact("GRABBER","_id_","_команда_" [,"_параметры_"]);

Формат процедуры событий для объекта Камера:

OnEvent("CAM","_id_","_событие_")

Формат оператора для описания действий с Камерой:

DoReact("CAM","_id_","_команда_" [,"_параметры_"]);

Функция проверки состояния объекта Камера:

CheckState("CAM","номер","состояние")

Формат процедуры событий для объекта Монитор:

OnEvent("MONITOR","_id_","_событие_")

Формат оператора для действий с Монитором:

DoReact("MONITOR","_id_","_команда_"[,"_параметры_"]);

Примеры

Примеры использования событий и реакций объекта Устройство видеоввода:

  1. Необходимо установить для первого устройства видеоввода первый канал, максимальную скорость оцифровки, разрешение полукадр и формат PAL при запуске первой макрокоманды.

    OnEvent("MACRO","1","RUN") //запуск макрокоманды 1
    {
    	DoReact("GRABBER","1", "SETUP", "chan<1>,mode<0>,resolution<1>,format<PAL>"); 
    	//установка для первой платы видеоввода канал - 1, скорость оцифровки - максимальная, разрешение - полукадр, формат - PAL
    }
  2. Необходимо при запуске третьей макрокоманды установить диски D:\ и F:\ для записи видеоархива.

    OnEvent("MACRO","3","RUN") //запуск макрокоманды 3
    {
    	DoReact("GRABBER","1","SET_DRIVES","drives<D:\,F:\>"); //запись видеоархива на диски D:\ и F:\
    }
  3. Необходимо вывести первую видеокамеру на первый аналоговый выход платы и отключить первые аналоговые выходы первой и второй плат при ошибке подключения ко второй плате видеоввода.

    OnEvent("GRABBER","2"," UPS_FATAL_ERROR") //ошибка подключения к плате видеоввода 2
    {
    	DoReact("CAM","1","MUX1"); //вывод видеокамеры 1 на 1-ый аналоговый вывод платы
    	Wait(5);
    	DoReact("GRABBER","1","MUX1_OFF"); //отключение 1-го аналогового выхода первой платы
    	DoReact("GRABBER","2","MUX1_OFF"); //отключение 1-го аналогового выхода второй платы
    }

    Примечание.

    Если аналоговые выходы двух и более плат соединяются параллельно, и видеокамера 1, например, принадлежит первому грабберу, а видеокамера 2 − второму, то при вызове команды «DoReact("CAM","1","MUX1");»  необходимо сначала вызвать команду «DoReact("GRABBER","2","MUX1_OFF");» и, соответственно, при вызове команды «DoReact("CAM","2","MUX1");» необходимо сначала вызвать команду «DoReact("GRABBER","1","MUX1_OFF");». Иначе произойдет наслоение сигналов.
  4. Необходимо отключить второй аналоговый выход платы видеоввода при восстановлении питания от сети.

    OnEvent("GRABBER","1","UPS_ONLINE") //восстановление питания от сети
    {
    	DoReact("GRABBER","1","MUX2_OFF"); //отключение аналогового выхода 2
    }

Примеры использования событий и реакций объекта Камера:

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

    OnEvent("CAM","1","ARM") //первая видеокамера поставлена на охрану
    {
    	DoReact("CAM","1","SETUP","color<1>"); //установка цветного режима видеокамеры
    	DoReact("CAM","1","REC"); //запись с первой видеокамеры
    }
  2. Необходимо поставить на охрану первую видеокамеру при отключении пятой видеокамеры.

    OnEvent("CAM","5","DETACH") //пятая видеокамера отключена 
    {
    	DoReact("CAM","1","ARM"); //первая видеокамера поставлена на охрану
    }
  3. Необходимо использовать половину ресурсов при записи у первой видеокамеры (то есть, если в системе через первую плату видеоввода подключено 4 видеокамеры, то первая будет записывать со скоростью 6 кадров/сек, а остальные три – по 2-2,5 кадра/сек.), если она находится в тревожном состоянии.

    OnEvent("CAM","1","MD_START") //первая видеокамера находится в тревожном состоянии
    {
    	DoReact("CAM","1","SETUP","rec_priority<2>"); //использование половины ресурсов при записи
    }
  4. Необходимо установить максимальную компрессию синхронно с четвертым микрофоном звуковой платы на первой видеокамере при записи на диск видео с первой видеокамеры.

    OnEvent("CAM","1","REC") //первая видеокамера ведет запись на диск
    {
    	DoReact("CAM", "1", "SETUP", "compression<5>, audio_type<OLXA_LINE>, audio_id<4>"); //первая видеокамера, максимальная компрессия, 
    синхронно с четвертым микрофоном звуковой платы
    }
  5. Необходимо начать запись с первой видеокамеры с минимальным качеством в черно-белом режиме, когда она выйдет из состояния тревоги.

    OnEvent("CAM","1","MD_STOP") //первая видеокамера перестала находиться в тревожном состоянии
    {
    	value = 5;
    	DoReact("CAM", "1", "SETUP", "compression<" + value + ">,сolor<0>"); 
    	//начать запись первой видеокамеры с минимальным качеством в ч/б режиме
    }
  6. Необходимо начать запись с первой видеокамеры в режиме «откат», когда она снята с охраны.

    OnEvent("CAM","1","DISARM")  //первая видеокамера снята с охраны
    {
    	DoReact("CAM","1","REC","rollback<1>");  //начать запись с первой видеокамеры в режиме «откат»
    }
  7. Установить новые параметры видеоканала при подключении первой видеокамеры.

    OnEvent("CAM","1","ATTACH") //подключена первая видеокамера
    {
    	VIDEO_CANAL_ID = GETOBJECTPARAM("CAM","1","PARENT_ID"); //определяем идентификатор видеоканала, которому принадлежит первая видеокамера
    	DoReact("GRABBER",VIDEO_CANAL_ID,"SETUP","chan<0>,mode<0>,resolution<1>,format<pal>"); //устанавливаем новые параметры видеоканала
    }
  8. По макрокоманде 2 запустить автопанорамирование на камере 1.

    OnEvent ("MACRO","2","RUN")
    {
        DoReact("CAM","1","CRUISE_START","cruise_id<1>,action<CRUISE_START>,cam_id<1>");
    }
  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 накладывать титры на видеоизображение с данной камеры. При окончании тревоги накладывать титры об окончании тревоги.

    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> будут заполняться соответствующие поля в базе титров, что даст возможность производить поиск данных с помощью интерфейсного объекта Поиск по титрам.

Примеры использования событий и реакций объекта Монитор:

  1. Необходимо при запуске первой макрокоманды проиграть запись с видеокамеры 1 на мониторе 4 с указанными датой и временем.

    OnEvent("MACRO","1","RUN")
    {
    	DoReact("MONITOR","4","ARCH_FRAME_TIME","cam<1>,date<"+date+">,time<11:00:00>");
    	DoReact("MONITOR","4","KEY_PRESSED","key<PLAY>");
    }
  2. Необходимо при печати кадра с первой видеокамеры перейти в режим просмотра видеоархива на первой видеокамере монитора 4, и перейти на 10 кадров далее, начиная с фрагмента указанной даты и времени.

    OnEvent("CAM", "1", "PRINT")
    {
    	DoReact("MONITOR","4","ARCH_FRAME_TIME","cam<1>,date<"+date+">,time <11:00:00>"); 
     	for(i=0;i<10;i=i+1) 
     	{ 
     		DoReact ("MONITOR","4","KEY_PRESSED","key<FF>"); 
     	}
    }
  3. Необходимо приблизить видеоизображение на экране монитора, если видеокамера находится в состоянии тревоги, и вернуть в исходное состояние при ее окончании.

    OnEvent("CAM","1","MD_START")
    {
    	DoReact("MONITOR","1","KEY_PRESSED","key<ZOOM_IN>");
    }
    
    OnEvent("CAM", "1", "MD_STOP");
    {
    	DoReact("MONITOR","1","KEY_PRESSED","key<ZOOM_OUT>");
    }
  4. Необходимо вывести на экран монитора раскладку под номером 1 при срабатывании макрокоманды.

    OnEvent("MACRO","1","RUN")
    {
    	DoReact("MONITOR","1","KEY_PRESSED","key<SELECT_LAYOUT>,number<1>");
    }
  5. Команда запуска экспорта видео с Камеры 1 в Мониторе 1, начиная с момента времени 24-10-14 17:10:38 и заканчивая 24-10-14 17:10:50, в файл c:\aaa.avi.
    Примеры запуска экспорта тремя способами: через IIDK (порт 900 и порт 1030) и через скрипт.
    1. IIDK (порт 900)
      MONITOR|1|START_AVI_EXPORT|start<24-10-14 17:10:38>,finish<24-10-14 17:10:50>,avi_path<c:\aaa.avi>,cam<1>
    2. IIDK (порт 1030)
      CORE||DO_REACT|source_type<MONITOR>,source_id<1>,action<START_AVI_EXPORT>,params<4>,param0_name<avi_path>,
      param0_val<c:\aaa.avi>,param1_name<cam>,param1_val<1>,param2_name<finish>,param2_val<24-10-14 17:10:50>,
      param3_name<start>,param3_val<24-10-14 17:10:38>
    3. Скрипт (запуск по Макрокоманде 1)

      OnEvent("MACRO","1","RUN")
      {
      	DoReact("CORE","","DO_REACT","source_type<MONITOR>,source_id<1>,action<START_AVI_EXPORT>,params<4>,
          param0_name<avi_path>,param0_val<c:\aaa.avi>,param1_name<cam>,param1_val<1>,param2_name<finish>,
           param2_val<24-10-14 17:10:50>,param3_name<start>,param3_val<24-10-14 17:10:38");
      }
  6. По макрокоманде 1 включать управление телеметрией при помощи мыши на камере 4, выведенной на монитор 10, по макрокоманде 2 отключать.

    OnEvent("MACRO","1","RUN")
    {
        DoReact("MONITOR","10","CONTROL_TELEMETRY","cam<4>,on<1>");
    }
    
    OnEvent("MACRO","2","RUN")
    {
        DoReact("MONITOR","10","CONTROL_TELEMETRY","cam<4>,on<0>");
    }
  7. Выводить активную камеру на аналоговый монитор.

    OnEvent ("MONITOR","1","ACTIVATE_CAM")
    {
        DoReact ("CAM",cam,"MUX1");
    }
  8. Выводить тревожную камеру в режим однократера.

    OnEvent ("CAM",N,"MD_START")
    {
        DoReact ("MONITOR","1","ACTIVATE_CAM","cam<"+N+">");
        DoReact ("MONITOR","1","KEY_PRESSED","key<SCREEN.1>");
    }
  9. Тревожный монитор, на котором всегда остается видео от последней тревожной камеры.

    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+">");
        }
    }
  • No labels