...
Необходимо установить для первого устройства видеоввода первый канал, максимальную скорость оцифровки, разрешение полукадр и формат PAL при запуске первой макрокоманды.
| Code Block |
|---|
|
OnEvent("MACRO","1","RUN") //запуск макрокоманды 1
{
DoReact("GRABBER","1", "SETUP", "chan<1>,mode<0>,resolution<1>,format<PAL>");
//установка для первой платы видеоввода канал - 1, скорость оцифровки - максимальная, разрешение - полукадр, формат - PAL
} |
Необходимо при запуске третьей макрокоманды установить диски D:\ и F:\ для записи видеоархива.
| Code Block |
|---|
|
OnEvent("MACRO","3","RUN") //запуск макрокоманды 3
{
DoReact("GRABBER","1","SET_DRIVES","drives<D:\,F:\>"); //запись видеоархива на диски D:\ и F:\
} |
Необходимо вывести первую видеокамеру на первый аналоговый выход платы и отключить первые аналоговые выходы первой и второй плат при ошибке подключения ко второй плате видеоввода.
| Code Block |
|---|
|
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-го аналогового выхода второй платы
} |
| Info |
|---|
|
| Если аналоговые выходы двух и более плат соединяются параллельно, и видеокамера 1, например, принадлежит первому грабберу, а видеокамера 2 − второму, то при вызове команды «DoReact("CAM","1","MUX1");» необходимо сначала вызвать команду «DoReact("GRABBER","2","MUX1_OFF");» и, соответственно, при вызове команды «DoReact("CAM","2","MUX1");» необходимо сначала вызвать команду «DoReact("GRABBER","1","MUX1_OFF");». Иначе произойдет наслоение сигналов. |
Необходимо отключить второй аналоговый выход платы видеоввода при восстановлении питания от сети.
| Code Block |
|---|
|
OnEvent("GRABBER","1","UPS_ONLINE") //восстановление питания от сети
{
DoReact("GRABBER","1","MUX2_OFF"); //отключение аналогового выхода 2
} |
...
При постановке первой камеры на охрану выполнить перевод камеры в цветной режим и начать запись с нее.
| Code Block |
|---|
|
OnEvent("CAM","1","ARM") //первая видеокамера поставлена на охрану
{
DoReact("CAM","1","SETUP","color<1>"); //установка цветного режима видеокамеры
DoReact("CAM","1","REC"); //запись с первой видеокамеры
} |
Необходимо поставить на охрану первую видеокамеру при отключении пятой видеокамеры.
| Code Block |
|---|
|
OnEvent("CAM","5","DETACH") //пятая видеокамера отключена
{
DoReact("CAM","1","ARM"); //первая видеокамера поставлена на охрану
} |
Необходимо использовать половину ресурсов при записи у первой видеокамеры (то есть, если в системе через первую плату видеоввода подключено 4 видеокамеры, то первая будет записывать со скоростью 6 кадров/сек, а остальные три – по 2-2,5 кадра/сек.), если она находится в тревожном состоянии.
| Code Block |
|---|
|
OnEvent("CAM","1","MD_START") //первая видеокамера находится в тревожном состоянии
{
DoReact("CAM","1","SETUP","rec_priority<2>"); //использование половины ресурсов при записи
} |
Необходимо установить максимальную компрессию синхронно с четвертым микрофоном звуковой платы на первой видеокамере при записи на диск видео с первой видеокамеры.
| Code Block |
|---|
|
OnEvent("CAM","1","REC") //первая видеокамера ведет запись на диск
{
DoReact("CAM", "1", "SETUP", "compression<5>, audio_type<OLXA_LINE>, audio_id<4>"); //первая видеокамера, максимальная компрессия,
синхронно с четвертым микрофоном звуковой платы
} |
Необходимо начать запись с первой видеокамеры с минимальным качеством в черно-белом режиме, когда она выйдет из состояния тревоги.
| Code Block |
|---|
|
OnEvent("CAM","1","MD_STOP") //первая видеокамера перестала находиться в тревожном состоянии
{
value = 5;
DoReact("CAM", "1", "SETUP", "compression<" + value + ">,сolor<0>");
//начать запись первой видеокамеры с минимальным качеством в ч/б режиме
} |
Необходимо начать запись с первой видеокамеры в режиме «откат», когда она снята с охраны.
| Code Block |
|---|
|
OnEvent("CAM","1","DISARM") //первая видеокамера снята с охраны
{
DoReact("CAM","1","REC","rollback<1>"); //начать запись с первой видеокамеры в режиме «откат»
} |
Установить новые параметры видеоканала при подключении первой видеокамеры.
| Code Block |
|---|
|
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>"); //устанавливаем новые параметры видеоканала
} |
По макрокоманде 2 запустить автопанорамирование на камере 1.
| Code Block |
|---|
|
OnEvent ("MACRO","2","RUN")
{
DoReact("CAM","1","CRUISE_START","cruise_id<1>,action<CRUISE_START>,cam_id<1>");
} |
Примеры использования событий и реакций объекта Монитор:
Есть определенное количество камер (num). Необходимо проверить работу детектора движения по всем камерам (можно использовать для проверки работоспособности датчиков охраны).
Для решения задачи используется эмуляция линейного символьного массива (строка), т.е. заполняется массив символов (в примере это символ «N»). Далее при сработке детектора движения по камере меняется соответствующий (идентификатору камеры) элемент массива (меняется на "Y"). Таким образом, на выходе образуется символьный массив из «N» (камера не сработала) и «Y» (камера сработала). Подсчитывается количество сработок и выдается сообщение об общем количестве камер и количество камер, у которых сработал детектор. Старт проверки по Макрокоманде 1. Остановка по Макрокоманде 2.
| Code Block |
|---|
|
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);
} |
При возникновении тревоги по камере 1 накладывать титры на видеоизображение с данной камеры. При окончании тревоги накладывать титры об окончании тревоги.
| Code Block |
|---|
|
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>");
} |
| Info |
|---|
|
При использовании параметров page<BEGIN> и page<END> будут заполняться соответствующие поля в базе титров, что даст возможность производить поиск данных с помощью интерфейсного объекта Поиск по титрам. |
Примеры использования событий и реакций объекта Монитор:
При запуске первой макрокоманды проиграть запись с видеокамеры 1 на мониторе 4 с указанными датой и временем.
| Code Block |
|---|
|
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>");
} |
При печати кадра с первой видеокамеры перейти в режим просмотра видеоархива на первой видеокамере монитора 4, и перейти на 10 кадров далее, начиная с фрагмента указанной даты и времени.
| Code Block |
|---|
|
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>");
}
} |
Приблизить видеоизображение на экране монитора, если видеокамера находится в состоянии тревоги, и вернуть в исходное состояние при ее окончании.
| Code Block |
|---|
|
OnEvent("CAM","1","MD_START")
{
DoReact("MONITOR","1","KEY_PRESSED","key<ZOOM_IN>");
}
OnEvent("CAM", "1", "MD_STOP");
{ |
Необходимо при запуске первой макрокоманды проиграть запись с видеокамеры 1 на мониторе 4 с указанными датой и временем.
| Code Block |
|---|
|
OnEvent("MACRO","1","RUN")
{
DoReact("MONITOR","4","ARCH_FRAME_TIME","cam<1>,date<"+date+">,time<11:00:00>");
DoReact("MONITOR","41","KEY_PRESSED","key<PLAY>key<ZOOM_OUT>");
} |
Вывести на экран монитора раскладку под номером 1 при срабатывании макрокоманды.
Необходимо при печати кадра с первой видеокамеры перейти в режим просмотра видеоархива на первой видеокамере монитора 4, и перейти на 10 кадров далее, начиная с фрагмента указанной даты и времени.
| Code Block |
|---|
language | cpp |
|---|
OnEvent("CAMMACRO", "1", "PRINTRUN")
{
DoReact("MONITOR","41","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>");
}
} |
Необходимо приблизить видеоизображение на экране монитора, если видеокамера находится в состоянии тревоги, и вернуть в исходное состояние при ее окончании.
| Code Block |
|---|
|
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>");
} |
KEY_PRESSED","key<SELECT_LAYOUT>,number<1>");
} |
- Команда запуска экспорта видео с Камеры 1 в Мониторе 1, начиная с момента времени 24-10-14 17:10:38 и заканчивая 24-10-14 17:10:50, в файл c:\aaa.avi.
Примеры запуска экспорта тремя способами: через IIDK (порт 900 и порт 1030) и через скрипт.Необходимо вывести на экран монитора раскладку под номером 1 при срабатывании макрокоманды.
| Code Block |
|---|
- 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> - 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> Скрипт (запуск по Макрокоманде 1)
OnEvent("MACRO","1","RUN")
{
DoReact("CORE" |
MONITOR
1
KEY_PRESSED","key<SELECT_LAYOUT>,number<1>");
}Команда запуска экспорта видео с Камеры 1 в Мониторе 1, начиная с момента времени 24-10-14 17:10:38 и заканчивая 24-10-14 17:10:50, в файл c:\aaa.avi.
Примеры запуска экспорта тремя способами: через IIDK (порт 900 и порт 1030) и через скрипт. - 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> - 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> 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");
} |
По макрокоманде 1 включать управление телеметрией при помощи мыши на камере 4, выведенной на монитор 10, по макрокоманде 2 отключать.
| Code Block |
|---|
|
OnEvent("MACRO","1","RUN")
{
DoReact("MONITOR","10","CONTROL_TELEMETRY","cam<4>,on<1>");
}
|
Скрипт (запуск по Макрокоманде 1)
| Code Block |
|---|
|
1
DoReact("
DoReact("MONITOR","10","CONTROL_TELEMETRY","cam<4>,on<0>");
} |
Выводить активную камеру на аналоговый монитор.
| Code Block |
|---|
|
OnEvent ("MONITOR |
COREDOREACT","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:38DoReact ("CAM",cam,"MUX1");
} |
- По макрокоманде 1 включать управление телеметрией при помощи мыши на камере 4, выведенной на монитор 10, по макрокоманде 2 отключать
Выводить тревожную камеру в режим однократера.
| Code Block |
|---|
|
OnEvent ("MACROCAM","1"N,"RUNMD_START")
{
DoReact ("MONITOR","101","CONTROLACTIVATE_TELEMETRYCAM","cam<4>,on<1>");
}
OnEvent("MACRO","2","RUN")
{
cam<"+N+">");
DoReact ("MONITOR","101","CONTROLKEY_TELEMETRYPRESSED","cam<4>,on<0>key<SCREEN.1>");
} |
Выводить активную камеру на аналоговый мониторТревожный монитор, на котором всегда остается видео от последней тревожной камеры.
| Code Block |
|---|
|
OnEvent ("MONITOR","1","ACTIVATE_CAM")
OnInit()
{
DoReact ("CAM",cam,"MUX1");
} |
Выводить тревожную камеру в режим однократера.
| Code Block |
|---|
|
OnEvent counter=0;
}
OnEvent("CAM",NT,"MD_START")
{
if(strequal(counter,"0"))
{
DoReact ("MONITOR","12","ACTIVATE_CAM","cam<"+N+">REMOVE_ALL");
DoReact ("MONITOR","12","KEYADD_PRESSEDSHOW","key<SCREEN.1>"cam<"+T+">");
} |
Тревожный монитор, на котором всегда остается видео от последней тревожной камеры.
| Code Block |
|---|
|
OnInit()
{ }
counter=0str(counter+1);
}
OnEvent("CAM",TM,"MD_STARTSTOP")
{
counter=str(counter-1);
if(strequal(counter,"0"))
{
DoReact("MONITOR","2","ADD_SHOW","cam<"+M+">");
{
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+">");
}
}}
} |
- По макрокоманде 1 включить проигрывание по раскладкам на всех серверах в окне Монитора видеонаблюдения (Монитор 1), по макрокоманде 2 отключить проигрывание по раскладкам на всех серверах.
| Code Block |
|---|
|
if(Event.SourceType == "MACRO" && Event.SourceId=="1" && Event.Action=="RUN")
{
DoReactStr("MONITOR", "1","START_PAGING_LAYOUTS","");
}
if (Event.SourceType == "MACRO" && Event.SourceId == "2" && Event.Action == "RUN")
{
DoReactStr("MONITOR", "1", "STOP_PAGING_LAYOUTS","");
} |