Управление PTZ камерой

Описание протокола Pelco D

Попала ненадолго в руки PTZ (управляема) камера CNB-M1360PL. Данный тип камер управляется по Rs-485 интерфейсу обычно используя протокол Pelco-D. Из возможностей управления протокол поддерживает: поворот по горизонтали, наклон по вертикале, управление зумом, фокусом, диафрагмой, OSD (экранным меню), различные настройки и различные другие возможности. Но не всегда все выше перечисленное может присутствовать на выбранной камере, у камеры попавшей в руки из доступных: зум, фокус и вкл/выкл.

Подключенная видеокамера
Подключенная видеокамера

В статье поделюсь опытом общения с данной камерой, описанием протокола Pelco D, программой для проверки подобных видеокамер и примером реализации кода управления камерами по Rs-485 используя протокол Pelco D.

Вид камеры покрупнее.

Камера видео наблюдения CNB-M1360PL
Камера видео наблюдения CNB-M1360PL

Данная, можно сказать модульная, без корпусная видеокамера она из самых дешевых и доступных, средняя цена в районе 6000р (на момент написании статьи 04.11.2017). Правда она без поворотной платформы в комплекте, что немного печально для первого знакомства с подобными камерами. Камера оснащена 12 кратным оптическим зумом и до 120 цифровым, автоматической фокусировкой, переключением режима день/ночь и остальными стандартными для настраиваемых видеокамер функционалом. Из управления на данной камере доступен: зум, фокус и вкл/выкл.

Может комплектоваться платой управления OSD меню камеры, на которой так же расположены BNC разъём видео выхода, разъёмы подключения питания и линии Rs-485, преобразователь интерфейса UART-Rs485. При этом на камеру идёт только линия Tx с логическим уровнем 5В.

Плата подключения и управления через экранное меню (OSD)
Плата подключения и управления через экранное меню (OSD)

Плата с обратной стороны
Плата с обратной стороны

Схема разъёма для подключения шлейфа камеры
Схема разъёма для подключения шлейфа камеры

На фотографии платы управления, вид сверху, на разъёме подписан 1 вывод.

Управление экранным меню производится 5 кнопками по интерфейсу ad-key, который ранее уже рассматривал на примере простой модульной видеокамеры — интерфейс AD key или чем конфигурировать видеокамеру. Схема подключения кнопок немного отличная, от нарисованной ранее, но смысл тот же.

Схема клавиатуры ad-key для OSD меню
Схема клавиатуры ad-key для OSD меню

Кнопки в данной камере отвечаю не только за навигацию по экранному меню, но и за управление зумом и фокусом.


напряжение
кнопка
положение
название
4.10V кнопки не нажаты
0.08V S1 UP TELE
2.02V S3 OK
0.54V S2 DOWN WIDE
1.52V S4 RIGHT NEAR
1.00V S5 LIFT FAR

В экранном меню по мимо настроек изображения можно выбрать один из двух протоколов управления Pelco D или DXP и задать номер камеры, для её адресации на линии Rs-485. На одну линию можно посадить несколько камер с одинаковыми номерами, что бы управлять ими одновременно или с разными номерами для раздельного управления. Настройки интерфейса: скорость 2400 и стандартные 8N1. У других камер скорость может отличаться, но они находятся в стандартном диапазоне от 2400 до 115200.

Pelco D

Краткое описание протокола Pelco D.
На камеры с пульта отправляются посылки по 7 байт:


байт 1
байт 2
байт 3
байт 4
байт 5
байт 6
байт 7
синхронизация 0xFF адрес команда 1 команда 2 данные 1 данные 2 контрольная сумма

Контрольная сумма — 1 байт равна сумме 5 байт: со 2 по 6.

Протокол Pelco D может отправлять для управления камерами 15 стандартных команд, с помощью него можно производить удалённую настройку камер (но не все камеры это поддерживают или их производители используют нестандартные/свои команды и тщательно их скрывают) и управлять экранным OSD меню (тоже не все камеры поддерживают). Т.к. экземпляр на руках поддерживает только ограниченный набор из стандартных команд, то дополнительные возможности удалённой настройки камер рассматривать не буду.

Стандартные команды:


бит 7
бит 6
бит 5
бит 4
бит 3
бит 2
бит 1
бит 0
Команда 1 Sense eserved Reserved Auto/Manual Scan Camera on/off Iris Close Iris Open Focus Near
Команда 2 Focus Far Zoom Wide Zoom Tele Tilt Down Tilt Up Pan Left Pan Right Всегда 0

Бит Sense используется совместно с битами Auto/Manual Scan и Camera on/off.


Sense=0
Sense=1
Auto/Manual Scan
Manual Scan Auto Scan
Camera on/off
Camera off Camera on

Байты данных используются для задания скорости передвижения камеры по горизонтали (байт данных 1) и по вертикали (байт данных 2).

Примеры команд для камеры с адресом 1:


Камера вкл FF 01 88 00 00 89
Камера выкл FF 01 08 00 00 09
Стоп FF 01 00 00 00 01
Зум приближение FF 01 00 20 00 21
Зум отдаление FF 01 00 40 00 41
Фокус дальше FF 01 00 80 00 81
Фокус ближе FF 01 01 00 00 02

Отмечу, что после включения команд на движения по осям или фокуса и зума, камера будет двигаться до достижения крайнего положения. Остановить движение можно командой «стоп».

В интернете можно найти подробное описание протокола Pelco-D на английском.

При работе с камерой, её подключал к компьютеру через 2-х долларовый преобразователь USB-Rs485 (на первом фото в правом нижнем углу), построенному на основе преобразователя интерфейса USB-UART ch340 и преобразователя UART-Rs485 MAX485. У данного, самого дешевого преобразователя, нет гальванической развязки и всего 2 выхода Rs485 A+ и A-, общего провода нет! При подключении оборудования по 485 линии желательно использовать гальваническую развязку и так же соединять преобразователи общим проводом, т.к. если цепи питания устройств будут им не объединены на больших расстояниях устройства могут работать некорректно, со сбоями или сгореть. Что у меня и произошло, но при длине провода ~60см. Преобразователь был включен в компьютер, а камера питалась от лабораторного блока питания, но у блока питания отсутствовал земляной провод (забыл, что именно у используемого БП заземления на сетевой вилке нет, у всего остального лабораторного оборудования и компьютера на рабочем месте есть), что при его включении и выключении привело к тому, что в китайском преобразователе сгорела микросхема MAX485. Будьте внимательнее и, лучше, не экономьте на преобразователях и проводах.

Утилита для тестирования камер с протоколом Pelco-D

Для работы с камерой, точнее проверки её функционала, написал простую утилиту.

Программа для проверки камер с протоколом Pelco D
Программа для проверки камер с протоколом Pelco D

При подключении преобразователя интерфейса к компьютеру в компьютере, появляется новый виртуальный порт (в зависимости от преобразователя). К нему в программе можно подключится, предварительно установив скорость порта необходимую для используемых камер. Программа предоставляет возможность управления камерой через командные биты, прописывать посылку вручную и минимальный стандартный функционал для поворота камеры, управлением её зумом, фокусом и диафрагмой.

Программа использует стандартные настройки COM порта 8N1 (8 бит, нет контроля чётности, 1 стоп бит). Утилита не производит контроль линий управления COM порта (RTS и DTR).

Пример кода

Пример реализации кода для управления PTZ камерой по протоколу Pelco D будет выглядеть следующим образом:

unsigned char ptz_camera_adress;	//	адрес камеры

//	отправка данных по линии Rs-485
//	input: *data - указатель на массив отправляемых данных
void ptz_camera_send_data(char *data)
{
	rs485_mode_send_data();
	while (*data) 
	{
		send_uart(*data);
		++data;
	}
	rs485_mode_received_data();
}

//	отправка посылки PTZ камерам
//	input: adress - адрес камеры, cmd1 и cmd2 - каманда 1 и 2, data1 и data2 - данные 1 и 2
void ptz_camera_data_send(unsigned char adress,unsigned char cmd1,unsigned char cmd2,unsigned char data1,unsigned char data2)
{
	char ptz_camera_txBuff[7];
	ptz_camera_txBuff[0]=0xFF;
	ptz_camera_txBuff[1]=ptz_camera_adress;
	ptz_camera_txBuff[2]=cmd1;
	ptz_camera_txBuff[3]=cmd2;
	ptz_camera_txBuff[4]=data1;
	ptz_camera_txBuff[5]=data2;
	ptz_camera_txBuff[6]=ptz_camera_adress+cmd1+cmd2+data1+data2;
	ptz_camera_send_data(ptz_camera_txBuff);
}

//	камера вкл
void ptz_camera_on(void)
{
	ptz_camera_data_send(ptz_camera_adress,0x88,0x00,0x00,0x00);
}

//	камера выкл
void ptz_camera_off(void)
{
	ptz_camera_data_send(ptz_camera_adress,0x08,0x00,0x00,0x00);
}

rs485_mode_send_data() — переключение модуля Rs-485 на передачу данных
send_uart(char data) — функция отправки данных по UART
rs485_mode_received_data() — переключение модуля Rs-485 на приём данных

Скачать программу PTZ camera test

Скачать пример кода для управления камерой с микроконтролера

Комментарии RSS

Оставьте отзыв