Форум » » Конгресс-система Bosch DCN » Ответить

Конгресс-система Bosch DCN

mexin: Кто-нибудь встречал модуль или протокол управления?

Ответов - 111, стр: 1 2 3 4 5 6 All

ph1l74: BOSCH DCN CCU2 Команда включения микрофона председателя под номером 513: \x03\x22\x00\x43\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x01\x02\x01 К сожалению, иного пути, кроме как подключиться напрямую к CCU2 по Ethernet, отправить через CCU_DDTK команду включения и выключения председательского пульта и просмотреть через Wireshark десяток посылок, -- не нашлось.

ph1l74: Появился еще вопрос: совместим ли модуль управления, представленный на сайте applicationmarket.crestron.com с контроллерами третьей серии?

Igor: ph1l74, вполне сносно работало с CP3. Ничто не мешает открыть модуль и перекомпилировать его.


ph1l74: Igor Игорь спасибо, небольшие трудности возникли. Уже все в порядке.

Вячеслав: Подскажите, какова ситуация с пультами переводчиков в ccu2? Протокол обмена у них аналогичен пультам делегатов или опять специфичный как у пультов председателя? (нужно будет лишь статус активен или не активен)

Игорь K.: Вячеслав, зачем вам управление пультами переводчиков?

Вячеслав: Мне нужен пока только статус активен или нет.

ph1l74: Добрый день, Появился интересный вопрос: а как считать статус того, что микрофон заменен (режим Override)? В протоколе есть команда MM_C_SPK_REPLACE_ON_PC, но что-то она не ловится. Пакет получился следующим для второго микрофона (ID 512): \x05,\x11,\x00,\x43,\x14,\x00,\x00,\x00,\x00,\x00,\x00,\x00,\x00,\x00,\x00,\x00,\x11,\x00,\x02,\x00 Дело в том, что статус микрофона при его замещении не меняется, то есть он отображается включенным даже если был замещен.

woody_mc: Неужели так и не победили управление председателем (председателями - их может быть в CCU2 больше чем один)?

ph1l74: woody_mc пишет: Неужели так и не победили управление председателем (председателями - их может быть в CCU2 больше чем один)? Победили, решение просто тут не опубликовали. Может, позже расскажу.

ph1l74: Если разобрать *.usp-файл модуля управления Bosh, то можно заметить, как формируется посылка: String_Function DCN_Send(string Send_Cmd, string Send_HiByte, string Send_Parms) { string s_field[255]; integer s_chk, s_idx, s_len; s_len = len(Send_Parms) + 18; s_field = csMDSC_REMOTEPROCEDURE_REQ + Send_Cmd + Send_HiByte + "\x43" + chr(low(s_len)) + chr(high(s_len)) + "\x00\x00" + csRESERVED1 + csRESERVED2 + Send_Cmd + Send_HiByte; s_field = s_field + Send_Parms; return(s_field); } Нас интересует в частности вот эта сумма: s_field = csMDSC_REMOTEPROCEDURE_REQ + Send_Cmd + Send_HiByte + "\x43" + chr(low(s_len)) + chr(high(s_len)) + "\x00\x00" + csRESERVED1 + csRESERVED2 + Send_Cmd + Send_HiByte; А все переменные указаны в заголовке файла: #SYMBOL_NAME "Bosch DCN IP Microphone Management v1.0" // #HINT "" #DEFINE_CONSTANT csRESERVED1 "\x00\x00\x00\x00" #DEFINE_CONSTANT csRESERVED2 "\x00\x00\x00\x00" #DEFINE_CONSTANT csEND "\x0D\x0A\x0A" #DEFINE_CONSTANT csMDSC_REMOTEPROCEDURE_REQ "\x03" #DEFINE_CONSTANT csMDSC_REMOTEPROCEDURE_RSP "\x04" #DEFINE_CONSTANT csMDSC_NOTIFY "\x05" //Application Headers #DEFINE_CONSTANT csDCNC_APP_AT "\x09" #DEFINE_CONSTANT csDCNC_APP_SI "\x11" #DEFINE_CONSTANT csDCNC_APP_SC "\x10" #DEFINE_CONSTANT csDCNC_APP_MM "\x00" //Microphone Management Application Commands #DEFINE_CONSTANT csMM_C_START_MM "\x1E" #DEFINE_CONSTANT csMM_C_STOP_MM "\x1F" #DEFINE_CONSTANT csMM_C_GET_SETTINGS "\x20" #DEFINE_CONSTANT csMM_C_SET_SETTINGS "\x21" #DEFINE_CONSTANT csMM_C_SET_MIC_OPER_MODE "\x34" #DEFINE_CONSTANT csMM_C_SET_ACTIVE_MICS "\x35" //Speaker List Function Commands #DEFINE_CONSTANT csMM_C_SET_MICRO_ON_OFF "\x22" #DEFINE_CONSTANT csMM_C_SPK_APPEND "\x30" #DEFINE_CONSTANT csMM_C_SPK_REMOVE "\x31" #DEFINE_CONSTANT csMM_C_SPK_CLEAR "\x2F" #DEFINE_CONSTANT csMM_C_SPK_GET "\x2E" //Request to Speak List Function Commands #DEFINE_CONSTANT csMM_C_SHIFT "\x23" #DEFINE_CONSTANT csMM_C_RTS_APPEND "\x3E" #DEFINE_CONSTANT csMM_C_RTS_REMOVE "\x27" #DEFINE_CONSTANT csMM_C_RTS_CLEAR "\x26" #DEFINE_CONSTANT csMM_C_RTS_GET "\x25" //Operation Modes #DEFINE_CONSTANT csMM_C_OPERATOR_WITH_REQ_LIST "\x00\x00" #DEFINE_CONSTANT csMM_C_DELEGATE_WITH_REQ_LIST "\x01\x00" #DEFINE_CONSTANT csMM_C_DELEGATE_WITH_OVERRIDE "\x02\x00" #DEFINE_CONSTANT csMM_C_DELEGATE_WITH_VOICE "\x03\x00" #DEFINE_CONSTANT csMM_C_OPERATOR_WITH_COMMENT_LIST "\x04\x00" //Notify Events #DEFINE_CONSTANT csMM_C_SET_MIC_OPER_MODE_ON_PC "\x12" #DEFINE_CONSTANT csMM_C_SET_ACTIVE_MICS_ON_PC "\x13" #DEFINE_CONSTANT csMM_C_SET_SETTINGS_ON_PC "\x15" #DEFINE_CONSTANT csMM_C_MICRO_ON_OFF "\x01" #DEFINE_CONSTANT csMM_C_SPK_SET_ON_PC "\x0C" #DEFINE_CONSTANT csMM_C_SPK_CLEAR_ON_PC "\x0D" #DEFINE_CONSTANT csMM_C_SPK_APPEND_ON_PC "\x0E" #DEFINE_CONSTANT csMM_C_SPK_REMOVE_ON_PC "\x0F" #DEFINE_CONSTANT csMM_C_SPK_INSERT_ON_PC "\x10" #DEFINE_CONSTANT csMM_C_SPK_REPLACE_ON_PC "\x11" #DEFINE_CONSTANT csMM_C_RTS_SET_ON_PC "\x04" #DEFINE_CONSTANT csMM_C_RTS_CLEAR_ON_PC "\x05" #DEFINE_CONSTANT csMM_C_RTS_REMOVE_ON_PC "\x06" #DEFINE_CONSTANT csMM_C_RTS_FIRST_ON_PC "\x14" #DEFINE_CONSTANT csMM_C_RTS_INSERT_ON_PC "\x07" #DEFINE_CONSTANT csMM_C_RTS_REPLACE_ON_PC "\x08" //Other constants #DEFINE_CONSTANT ciNUMSTATIONS 200 #DEFINE_CONSTANT ciSPEAKERSIZE 4 #DEFINE_CONSTANT ciREQUESTSIZE 10 #DEFINE_CONSTANT ciDELEGATE 2 #DEFINE_CONSTANT ciMUTE 2 #DEFINE_CONSTANT ciUNIT 1 Команда включения микрофона председателя: \x03\x22\x00\x43\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x01\x02\x01 Команда выключения микрофона председателя: \x03\x22\x00\x43\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x01\x02\x00 Статус включения микрофона председателя: \x05\x01\x00\x43\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x02\x01\x00\x03\x00 Статус выключения микрофона председателя: \x05\x01\x00\x43\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x02\x02\x00\x03\x00 Понятное дело, что готовыми командами удобно пользоваться, но лучше в свободное время почитать и разобраться, как же все это работает. К сожалению, это самое свободное время у меня появилось только после выполнения проекта.

Вячеслав: Подскажите, кто разобрался. Есть ли единый список пультов председателей и делегатов или косвенный инструмент его получения в порядке активации пультов? Уж очень хотелось допилить еще наведение камер малой кровью не заморачиваясь созданием объединенного собственного списка.

ph1l74: Вячеслав , А какой алгоритм автонаведения Вы хотите реализовать? Я понимаю, что речь идет о камерах. Но есть разные принципы работы. По поводу списка. vtsay выше пишет, что вроде как разобрался с получением SPK-List'a. У меня была подобная проблема на AMX'е, но там список микрофонов я составлял сам. В зависимости от полученного пакета, понимал, какой микрофон включен. Дальше в стэк записывался номер микрофона, вызывался нужный пресет на камере. Когда же микрофон выключался, просто исключал его номер из стэка. И вызывал пресет пресет, который шел раньше. На SIMPL+ не писал.

Вячеслав: Алгоритм такой: Если активирован микрофон N: 1.Выбрать камеру (аналоговый выход) номер которой сохранен для данного микрофона N 2.Загрузить preset N (в режиме Npreset=Nmic) или пресет сохраненный для данного микрофона (в режиме manualPreset). Второй вариант удобен при использовании встроенных пресетов камер, так как они как правило ограничены малым числом (аналоговый выход). Если микрофон N выключен: 1.Проверяем был ли он включен последним. Если да то выбираем камеру и пресет для предпоследнего все еще активного микрофона. Либо просто удаляем микрофон из очереди активных микрофонов с корректировкой последовательности включения у оставшихся. 2.Если активных микрофонов не осталось, выбираем камеру общего плана зала и пресет общего плана (оба значения использую как параметры модуля) Дополнительно в режиме OPEN при достижении максимально количества одновременно активных микрофонов и присутствии микрофонов находящихся в очереди ожидания, при выключении одного из активных. Чтоб камеру не крутить зря (на предпоследний активный) перед включением нового после выключения старого проверяем это условие. И наводим сразу на вновь включенный (самый старый "мигающий" из списка очереди RST) //поправил Модуль S+ совмещенный с управлением наведением на указанной логике я уже написал. Очередь микрофонов делегатов и председателей в этот раз не стал делать, придумал более простое решение с параметром очередности.

Вячеслав: Сегодня, надеюсь закончил программировать модуль для CCU2. На все про все ушло дней 16 точно. Ничего не занимало еще так много времени. Кому надо, обращайтесь (не за дорого ;) Ссылку не выкладываю, дабы устава не нарушать. Демо версия имеет ограничение по количеству команд и до 6 микрофонов. Но будет хорошим подспорьем для самостоятельного программирования в качестве примера исполнения да и команды подсмотреть можно. Есть весь "обвес" с интерфейсом для управления и сохранением пресетов. Возможности: 1.Синхронизацию при подключении к CCU2 2.Режим override полноценной с индикацией как на ССU2 3.Режим OPEN (request) полноценной с индикацией как на ССU2 4.Режим PTT полноценной с индикацией как на ССU2 5.Режим VOICE без управления и индикации (т.к. нет fb CCU2) 6.Поддержку пультов председателей в любом количестве и в любой позиции инициализации (+поддержка нажатия кнопки приоритета) 7.Файл справки вызываемый по F1 ....и последнее, но не в последнюю очередь: 8.Автоматическое определение номеров подключенных микрофонов 9.Встроенный алгоритм управления наведением камер P.S. Обладателю радио микрофонных пультов по результатам теста скидка 100%. Принимаются предложения по усовершенствованию, пока ещё я могу читать эту hex "матрицу".

KelorVs: Добрый всем день! Помогите пожалуйста: Не могу понять из этой строки s_field = csMDSC_REMOTEPROCEDURE_REQ + Send_Cmd + Send_HiByte + "\x43" + chr(low(s_len)) + chr(high(s_len)) + "\x00\x00" + csRESERVED1 + csRESERVED2 + Send_Cmd + Send_HiByte; Следующее: Send_Cmd + Send_HiByte + chr(low(s_len)) + chr(high(s_len)). Подскажите как они формируются. И еще не понятно следующее из примера. \x03\x22\x00\x43\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x01\x02\x01 - последние три значения. x01\x02\x01. Я понял что это Send_Parms; А вот как он формируется не понял.

Вячеслав: А когда то я как в матрице читал такие строки налету )) Когда модуль писал Теперь уже вспоминать надо, но насколько я помню \x01\x02\x01 это похоже на включение микрофона (\x01\x02\x01) с номером \x02\x01 (\x01\x02\x01) В нумерации микрофона младший байт следует первым. т.е. \x01\x02 это на самом деле \x02\x01 (он же первый проводной микрофон в системе с десятичным номером 513) У меня для команды включения микрофона формируется так: sParam = chr(low(tmp_num_mic)) + chr(high(tmp_num_mic))+"\x01"; to_bosch = DCN_Send(csMM_C_SET_MICRO_ON_OFF, csDCNC_APP_MM, sParam); описание функции отправки любой команды: String_Function DCN_Send(string Send_Cmd, string Send_HiByte, string Send_Parms) { string s_field1[255],s_field2[255]; integer s_len; s_field1 = csMDSC_REMOTEPROCEDURE_REQ+Send_Cmd+Send_HiByte+"\x43";//csMDSC_REMOTEPROCEDURE_REQ="\x03" s_field2 ="\x00\x00"+reserv+reserv+ Send_Cmd + Send_HiByte+ Send_Parms; //reserv="\x00\x00" s_len = len(s_field1)+len(s_field2)+ 2; s_field1 = s_field1 +chr(low(s_len)) + chr(high(s_len))+ s_field2; return(s_field1); }

KelorVs: Вячеслав Спасибо большое.. попробую собраться с мыслями. И понять что написано. Везет Вам, Вы их хоть читали.

KelorVs: Вячеслав а эта строка chr(low(s_len)) + chr(high(s_len)) что данном случае значит. Исходя из вышеприведенного примера. \x03\x22\x00\x43\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x01\x02\x01 csMDSC_REMOTEPROCEDURE_REQ=\x03 + Send_Cmd = (csMM_C_SET_MICRO_ON_OFF) \x22 + Send_HiByte = ? + "\x43" - с этим понятно + chr(low(s_len)) = ? + chr(high(s_len)) = ? + "\x00\x00" - с этим понятно + csRESERVED1 = \x00\x00\x00\x00 + csRESERVED2 = \x00\x00\x00\x00 + Send_Cmd = (csMM_C_SET_MICRO_ON_OFF) \x22 + Send_HiByte = ? ; s_field - это то что выше. + Send_Parms = \x01\x02\x01 (где \x01\x02 это номер пульта) а \x01 - это включить или \x00 ; - выключить. Вот это я понял вроде. А вот то, что отметил вопросами не могу понять а делать нужно. Хотя бы. чтобы включить выключить и получить состояние пульта. Ведь через Serial I/O я смогу это сделать ?

Игорь K.: KelorVs, что у вас не получается? Опишите пожалуйста попроще, пришлю свой модуль.



полная версия страницы