Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

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


  2. Необходимо поставить на охрану первую видеокамеру при отключении пятой видеокамеры.

    Code Block
    languagecpp
    OnEvent("CAM","5","DETACH") //пятая видеокамера отключена 
    {
    	DoReact("CAM","1","ARM"); //первая видеокамера поставлена на охрану
    }


  3. Необходимо использовать половину ресурсов при записи у первой видеокамеры (то есть, если в системе через первую плату видеоввода подключено 4 видеокамеры, то первая будет записывать со скоростью 6 кадров/сек, а остальные три – по 2-2,5 кадра/сек.), если она находится в тревожном состоянии.

    Code Block
    languagecpp
    OnEvent("CAM","1","MD_START") //первая видеокамера находится в тревожном состоянии
    {
    	DoReact("CAM","1","SETUP","rec_priority<2>"); //использование половины ресурсов при записи
    }


  4. Необходимо установить максимальную компрессию синхронно с четвертым микрофоном звуковой платы на первой видеокамере при записи на диск видео с первой видеокамеры.

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


  5. Необходимо начать запись с первой видеокамеры с минимальным качеством в черно-белом режиме, когда она выйдет из состояния тревоги.

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


  6. Необходимо начать запись с первой видеокамеры в режиме «откат», когда она снята с охраны.

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


  7. Установить новые параметры видеоканала при подключении первой видеокамеры.

    Code Block
    languagecpp
    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.

    Code Block
    languagecpp
    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.

    Code Block
    languagecpp
    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 накладывать титры на видеоизображение с данной камеры. При окончании тревоги накладывать титры об окончании тревоги.

    Code Block
    languagecpp
    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>");
    }


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

...