Реализованный в библиотеке функционал в настоящее время позволяет:
- Получать информацию о событиях приборов;
- По запросу получать общее или расширенное состояние шлейфов, выходов и приборов;
- Управлять взятием и снятием шлейфов с охраны;
- Включать или отключать шлейфы;
- Управлять клапанами СДУ и ПДВ через С2000-СП4;
- Управлять включением и выключением реле;
- Переводить извещатели в режим пожарного тестирования;
- Получать данные счетчиков;
- Получать данные о температуре, влажности и т.д.;
- Получать коды проксимити-карт при событиях СКУД;
- Управлять замками СКУД;
- Перезапускать приборы;
- Получать информацию о типах и версиях приборов.
Обмен данными с приборами компании Болид производится по "зашифрованному" протоколу "Орион".
Библиотека написана на C++
Для связи:
https://t.me/Alex_Yuschenko
mailto:a.s.yuschenko@gmail.com
Light версия библиотеки.
Эта версия имеет ограниченный функционал. Функции, недоступные в light версии помечены тэгом [FULL]
Связанные видео:
Управление С2000-М с помощью одноплатника без дополнительных устройств, лог событий.
Управление Орион Про с помощью одноплатника без дополнительных устройств, лог событий.
MAN
Для работы библиотеки требуется буфер обмена, который вы можете создать любым, удобным вам способом. Рекомендуемый размер буфера — 256 байт.
Ниже приведено описание функций и констант библиотеки.
Типы событий.
CERES_ET_NO_EVENT нет событий
CERES_ET_COMMON общее событие
CERES_ET_ALARM событие тревога
CERES_ET_ARM событие взятие / снятие
CERES_ET_TROUBLE событие неисправность
CERES_ET_RECOVERY событие восстановление
CERES_ET_RELAY событие реле (выхода)
CERES_ET_ACCESS событие СКУД
CERES_ET_TECH событие техлоногическое
Структуры.
Для получения информации о событиях приборов, состояний шлейфов, выходов и самих приборах реализованы две структуры.
Структура ceres_st_states сохраняет в себе состояния шлейфа, выхода или прибора, после выполнения запроса состояния.
struct ceres_st_states { unsigned char addr; // адрес прибора unsigned char num; // номер шлейфа или выхода (реле) unsigned char obtained; // число полученных состояний unsigned char values[CERES_SIZE_STATES_ARR]; // коды полученных состояний (CERES_SIZE_STATES_ARR = 5) };
Структура ceres_st_event сохраняет в себе данные о событии прибора.
struct ceres_st_event { unsigned char code; // код события unsigned char zone; // номер зоны (0 - прибор) unsigned char addr; // адрес прибора unsigned char part_mb; // номер раздела, старший байт unsigned char part_lb; // номер раздела, младший байт unsigned char relay; // номер реле unsigned char prog; // программа управления реле unsigned char reader; // номер считывателя unsigned char user; // номер пользователя unsigned char card_code[CERES_SIZE_CARD_CODE]; // Код проксимити карты (CERES_SIZE_CARD_CODE = 8) char dt_str[27];// Время наступления события, если оно считано из буфера, в формате нуль-терминированной строки. ceres_st_buffer_datetime dt; // Вспомогательная структура для хранения времени при обработке запроса. };
Структуры ceres_st_states и ceres_st_event инициализированы в переменных ceres_states и ceres_event соответственно.
После выполнения запросов на чтение события или состояния, для получения данных, необходимо обращаться к этим переменным.
Инициализация библиотеки.
/** Инициализация библиотеки. * @param unsigned char* buffer - указатель на буфер обмена. * @param int* len - указатель на переменную для получения количества принятых байт или сохранения количества байт подготовленных для передачи. * @return void */ void ceres_init (unsigned char* buffer, int* len);
Высвобождение памяти.
/** Высвобождение памяти. * @return void */ void ceres_free ();
Ключи приборов.
Ключи приборов генерируются автоматически при инициализации библиотеки. Если Вам нужно назначить прибору определенный ключ, можно воспользоваться следующей функцией.
/** Назначение ключа прибору. * @param unsigned char addr - адрес прибора. * @param unsigned char key - ключ прибора. * @return void */ void ceres_set_dev_key(unsigned char addr, unsigned char key);
Общее для всех функций.
Функции, начинающиеся с "ceres_q_…", формируют последовательность байт запроса и помещают его в буфер обмена [buffer], при этом в переменную [len] сохраняется количество байт, подготовленных к передаче.
Функции, начинающиеся с "ceres_r_…", проверяют достоверность полученных данных и сохраняют запрошенные данные в переменные ceres_states и ceres_event или иные, передаваемые через указатели.
Внимание! Во всех функциях unsigned char addr — адрес прибора, которому посылается запрос.
Функции для работы с приборами.
Получения типа и версии устройства.
/** Запрос для получения информации о устройстве. * @return void */ ceres_q_dev_info(unsigned char addr); /** Обработка ответа. * @param unsigned char* type_dest - указатель на переменную для сохранения типа устройства. * @param unsigned char* ver_dest - указатель на переменную для сохранения версии устройства. * @return * 0 - успешно. * -1 - ошибка принятых данных. */ char ceres_r_dev_info(unsigned char addr, unsigned char* type_dest, unsigned char* ver_dest);
Переход на зашифрованный протокол обмена "Орион".
/** Запрос на переход на зашифрованный протокол обмена. * @return void */ void ceres_q_sec_begin(unsigned char addr); /** Обработка ответа. * @return * 0 - успешно. * -1 - ошибка принятых данных. */ char ceres_r_sec_begin(unsigned char addr);
Установка даты и времени прибора. [FULL]
/** Запрос на установку даты и времени прибора. * @param unsigned char _hour - часы. * @param unsigned char _min - минуты. * @param unsigned char _sec - секунды. * @param unsigned char _day - число. * @param unsigned char _mon - месяц. * @param unsigned char _year - последние 2 цифры года. * * @return void */ void ceres_q_set_date_time(unsigned char addr, unsigned char _hour, unsigned char _min, unsigned char _sec, unsigned char _day, unsigned char _mon, unsigned char _year); /** Обработка ответа. * @return * 0 - успешно. * -1 - ошибка принятых данных. */ int ceres_r_set_date_time(unsigned char addr);
Перезапуск прибора. [FULL]
/** Запрос на перезапуск прибора. * * @return void */ void ceres_q_dev_reboot(unsigned char addr); /** Обработка ответа. * @return * 0 - успешно. * -1 - ошибка принятых данных. */ int ceres_r_dev_reboot(unsigned char addr);
Общее состояние шлейфа, выхода или прибора.
Внимание! Состояния сохраняются в ceres_states. Описание приведено выше. Перед сохранением ceres_states заполняется нулями.
Для получения состояния прибора передать zone равным нулю.
/** Запрос на получение общего состояния шлейфа, выхода или прибора. * @param unsigned char zone - номер шлейфа или выхода. * @return void */ void ceres_q_state_simp(unsigned char addr, unsigned char zone); /** Обработка ответа. * @param unsigned char zone - номер шлейфа или выхода. * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_state_simp(unsigned char addr, unsigned char zone);
Расширенное состояние шлейфа, выхода или прибора. [FULL]
Внимание! Состояния сохраняются в ceres_states. Описание приведено выше. Перед сохранением ceres_states обнуляется.
Для получения состояния прибора передать zone равным нулю.
/** Запрос на получение расширенного состояния шлейфа, выхода или прибора. * @param unsigned char zone - номер шлейфа или выхода. * @return void */ void ceres_q_state_ext(unsigned char addr, unsigned char zone); /** Обработка ответа. * @param unsigned char zone - номер шлейфа или выхода. * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_state_ext(unsigned char addr, unsigned char zone);
Текущая программа управления реле (выхода). [FULL]
Внимание! Программа управления сохраняется в ceres_states. Описание приведено выше. Перед сохранением ceres_states заполняется нулями.
/** Запрос на получение текущей программы управления реле (выхода). * @param unsigned char relay - номер реле (выхода). * @return void */ void ceres_q_state_relay(unsigned char addr, unsigned char relay); /** Обработка ответа. * @param unsigned char relay - номер реле (выхода). * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_state_relay(unsigned char addr, unsigned char relay);
Получение события прибора.
Алгоритм чтения событий:
-
Сформировать запрос на чтение события с помощью функции ceres_q_read_event(…) и отправить его прибору;
-
Обработать ответ с помощью функции ceres_xxx_event(…), где ххх — тип прибора, при этом получаем тип события, определяемый константами CERES_ET_…, если событие есть — информация о событии сохраняется в переменную ceres_event;
-
3.1. В случае если событие есть — сформировать запрос на загрузку следующего события с помощью функции ceres_q_load_event(…) и отправить его прибору. Внимание! Ответа от прибора не будет. Если ведется опрос одного прибора рекомендуется небольшой тайм-аут.
-
3.2. Если события нет, переходим к пункту 1.
Чтение события прибора.
/** Запрос на чтение события прибора. * @return void */ void ceres_q_read_event(unsigned char addr);
Загрузка следующего события прибора.
/** Запрос на загрузку следующего события прибора. * @return void */ void ceres_q_load_event(unsigned char addr);
Обработка событий для С2000-КДЛ:
/** Обработка ответа. * @return * CERES_ET_xxx, где xxx - тип события * -1 - ошибка принятых данных. */ int ceres_09_event(unsigned char addr);
Обработка событий для С2000-2: В процессе разработки.
/** Обработка ответа. * @return * CERES_ET_xxx, где xxx - тип события * -1 - ошибка принятых данных. */ int ceres_10_event(unsigned char addr);
Сброс тревог. [FULL]
/** Запрос сброса тревоги. * @return void */ void ceres_q_drop_alarm(unsigned char addr); /** Обработка ответа. * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_drop_alarm(unsigned char addr);
Управление шлейфами.
Взятие шлейфа на охрану.
/** Запрос на взятие шлейфа под охрану. * @param unsigned char zone - номер шлейфа. * @return void */ void ceres_q_zone_arm(unsigned char addr, unsigned char zone); /** Обработка ответа. * @param unsigned char zone - номер шлейфа или выхода. * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_zone_arm(unsigned char addr, unsigned char zone);
Снятие шлейфа с охраны.
/** Запрос на снятие шлейфа с охраны. * @param unsigned char zone - номер шлейфа. * @return void */ void ceres_q_zone_disarm(unsigned char addr, unsigned char zone); /** Обработка ответа. * @param unsigned char zone - номер шлейфа. * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_zone_disarm(unsigned char addr, unsigned char zone);
Перевод пожарного шлейфа в режим тестирования. [FULL]
/** Запрос на перевод пожарного шлейфа в режим тестирования. * @param unsigned char zone - номер шлейфа. * @param unsigned short test_time - время тестировния в секундах. * @return void */ void ceres_q_zone_firetest(unsigned char addr, unsigned char zone, unsigned short test_time); /** Обработка ответа. * @param unsigned char zone - номер шлейфа. * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_zone_firetest(unsigned char addr, unsigned char zone);
Отключение контроля шлейфа (для пожарных шлейфов без права снятия). [FULL]
/** Запрос на отключение контроля шлейфа. * @param unsigned char zone - номер шлейфа. * @return void */ void ceres_q_zone_disable(unsigned char addr, unsigned char zone); /** Обработка ответа. * @param unsigned char zone - номер шлейфа. * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_zone_disable(unsigned char addr, unsigned char zone);
Включение контроля шлейфа (для пожарных шлейфов без права снятия). [FULL]
/** Запрос на включение контроля шлейфа. * @param unsigned char zone - номер шлейфа. * @return void */ void ceres_q_zone_enable(unsigned char addr, unsigned char zone); /** Обработка ответа. * @param unsigned char zone - номер шлейфа. * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_zone_enable(unsigned char addr, unsigned char zone);
Управление реле (выходами).
/** Запрос на включение реле. * @param unsigned char relay - номер реле (выхода). * @return void */ void ceres_q_relay_on(unsigned char addr, unsigned char relay); /** Обработка ответа. * @param unsigned char relay- номер реле (выхода). * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_relay_on(unsigned char addr, unsigned char relay); /** Запрос на выключение реле. * @param unsigned char relay - номер реле (выхода). * @return void */ void ceres_q_relay_off(unsigned char addr, unsigned char relay); /** Обработка ответа. * @param unsigned char relay - номер реле (выхода). * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_relay_off(unsigned char addr, unsigned char relay);
Управление клапанами С2000-СП4.
Данные команды применяются для управления клапанами СДУ и ПДВ.
Перевод клапана в рабочее состояние [FULL]
/** Запрос на перевод клапана в рабочее состояние. * @param unsigned char valve - адрес клапана на шине КДЛ (1й из 5ти). * @return void */ void ceres_q_valve_mode_work(unsigned char addr, unsigned char valve); /** Обработка ответа. * @param unsigned char valve - адрес клапана на шине КДЛ (1й из 5ти). * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ int ceres_r_valve_mode_work(unsigned char addr, unsigned char valve);
Перевод клапана в исходное состояние [FULL]
/** Запрос на перевод клапана в исходное состояние. * @param unsigned char valve - адрес клапана на шине КДЛ (1й из 5ти). * @return void */ void ceres_q_valve_mode_ready(unsigned char addr, unsigned char valve); /** Обработка ответа. * @param unsigned char valve - адрес клапана на шине КДЛ (1й из 5ти). * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ int ceres_r_valve_mode_ready(unsigned char addr, unsigned char valve);
Управление доступом.
Данные запросы применяются для контроллера доступа С2000-2 и позволяют:
-
Разблокировать дверь (замок будет открыт до восстановления штатного доступа или блокировки двери, вне зависимости от предъявляемого идентификатора);
-
Заблокировать дверь (замок будет закрыт до восстановления штатного доступа или разблокировки двери, вне зависимости от предъявляемого идентификатора);
-
Восстановить штатный режим доступа (замок будет закрыт и открываться или не открываться, в зависимости от предъявляемого идентификатора).
-
Предоставить доступ пользователю, предъявившему идентификатор, номера которого нет в контроллере.
-
Запретить доступ пользователю, предъявившему идентификатор, номера которого нет в контроллере.
-
Предоставить доступ однократно (открыть дверь).
1. Разблокировать дверь. [FULL]
/** Запрос на разблокировку двери. * @param unsigned char reader_num - номер считывателя (реле). * @return void */ void ceres_q_access_unblock(unsigned char addr, unsigned char reader_num); /** Обработка ответа. * @param unsigned char reader_num - номер считывателя (реле). * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_access_unblock(unsigned char addr, unsigned char reader_num);
2. Заблокировать дверь. [FULL]
/** Запрос на блокировку двери. * @param unsigned char reader_num - номер считывателя (реле). * @return void */ void ceres_q_access_block(unsigned char addr, unsigned char reader_num); /** Обработка ответа. * @param unsigned char reader_num - номер считывателя (реле). * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_access_block(unsigned char addr, unsigned char reader_num);
3. Восстановить штатный режим доступа. [FULL]
/** Запрос восстановления доступа. * @param unsigned char reader_num - номер считывателя (реле). * @return void */ void ceres_q_access_reset(unsigned char addr, unsigned char reader_num); /** Обработка ответа. * @param unsigned char reader_num - номер считывателя (реле). * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_access_reset(unsigned char addr, unsigned char reader_num);
4. Предоставить доступ пользователю по предъявленному идентификатору. [FULL]
/** Запрос для предоставления доступа пользователю по предъявленному идентификатору * @param unsigned char reader_num - номер считывателя (реле). * @return void */ void ceres_q_access_grant_card(unsigned char addr, unsigned char reader_num); /** Обработка ответа. * @param unsigned char reader_num - номер считывателя (реле). * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_access_grant_card(unsigned char addr, unsigned char reader_num);
5. Запретить доступ пользователю по предъявленному идентификатору. [FULL]
/** Запрос для запрета доступа пользователю по предъявленному идентификатору * @param unsigned char reader_num - номер считывателя (реле). * @return void */ void ceres_q_access_deny(unsigned char addr, unsigned char reader_num); /** Обработка ответа. * @param unsigned char reader_num - номер считывателя (реле). * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_access_deny(unsigned char addr);
6. Предоставить доступ однократно (открыть дверь). [FULL]
/** Запрос для предоставления однократного доступа * @param unsigned char reader_num - номер считывателя (реле). * @return void */ void ceres_q_access_grant_noname(unsigned char addr, unsigned char reader_num); /** Обработка ответа. * @param unsigned char reader_num - номер считывателя (реле). * @return * 0 - успешно. * 1 - ошибка команды. * -1 - ошибка принятых данных. */ char ceres_r_access_grant_noname(unsigned char addr, unsigned char reader_num);
Запрос информации о шлейфе в Unicode строку. [FULL]
Данные запросы применяется для получения информации:
- о температуре и влажности получаемых от С2000-ВТ,
- о напряжении, токе и т.д. от РИП12-RS,
- и т.д.
/*Версия 1*/ /** Запрос информации о шлейфе в Unicode строку. * @param unsigned char zone - номер шлейфа. * @return void */ void ceres_q_adc_v1(unsigned char addr, unsigned char zone); /** Обработка ответа. * @return * Указатель на нуль-терминированную строку данных, в случае успеха. * null - ошибка принятых данных. */ unsigned char* ceres_r_adc_v1(unsigned char addr); /*Версия 2*/ /** Запрос информации о шлейфе в Unicode строку. * @param unsigned char zone - номер шлейфа. * @return void */ void ceres_q_adc_v2(unsigned char addr, unsigned char zone); /** Обработка ответа. * @return * Указатель на нуль-терминированную строку данных, в случае успеха. * null - ошибка принятых данных. */ unsigned char* ceres_r_adc_v2(unsigned char addr);
Для удобства реализованы 2 функции для извлечения значений типа long int и double из полученной Unicode строки. [FULL]
/** Извлекает знаковое значение типа long int из Unicode строки. * @param unsigned char* frame - Нуль-терминированная С-строка, после обработки ответа функциями ceres_r_adc_v1(_v2). * @param long int* dest - указатель на переменную для сохранения значения. * @return void */ void ceres_extract_adc(unsigned char* frame, long int* dest); /** Извлекает значение типа double из Unicode строки. * @param unsigned char* frame - Нуль-терминированная С-строка, после обработки ответа функциями ceres_r_adc_v1(_v2). * @param double* dest - указатель на переменную для сохранения значения. * @return void */ void ceres_extract_adc(unsigned char* frame, double* dest);
Запрос данных счетчика. [FULL]
/** Запрос данных счетчика. * @param unsigned char zone - адрес счетчика (номер зоны). * @return void */ void ceres_q_counter(unsigned char addr, unsigned char zone); /** Обработка ответа. * @param unsigned char zone - адрес счетчика (номер зоны). * @param long long unsigned int* - указатель на переменную для сохранения значения счетчика. * @return * 0 - успешно. * -1 - ошибка принятых данных. */ char ceres_r_counter(unsigned char addr, unsigned char zone, long long unsigned int* counter_dest);
Текстовые значения.
/** Получение строки с названием прибора. Кириллица. * @param unsigned char event - тип прибора. * @return * Указатель на строку данных. */ const char* ceres_name_dev(unsigned char type); /** Получение строки с именем события. Кириллица. * @param unsigned char event - код события. * @return * Указатель на строку данных. */ const char* ceres_name_event(unsigned char event); /** Получение строки с именем события. Латиница. Транслит. * @param unsigned char event - код события. * @return * Указатель на строку данных. */ const char* ceres_name_event_trnslt(unsigned char event);
Приоритет события.
/** Получение приоритета события. * @param unsigned char event - код события. * @return * Числовое значение приоритета события. */ unsigned char ceres_event_priority(unsigned char event);