Форум » » Помогите новичку » Ответить

Помогите новичку

Grisha: Я не самый сильный в программировании, поэтому прошу помощи. У меня есть simple windows. Я неплохо справился с его логикой, но я не могу решить одну задачу(может уже просто настолько мозг забил, что очевидного не вижу). Задача: 12 сигналов, HIGH может быть только один из них. Задача в том что бы хранить не текущее значение, а предыдущее 2. появился 1 на первой ноге записали единицу, на второй ноге, записали "текущая" 2, "предыдущая" 1. Я не нашел переменных где можно хранить, а логикой у меня ни как схема не выходит. Смысл в чем: 12 микрофонов - я отслеживаю статусы, когда микрофон выключается у меня должен сработать пресет на камере в сторону предидущего включенного, при условии что он активен. Голова кипит уже, помогите мужики.

Ответов - 26, стр: 1 2 All

Вячеслав: А какая конгреска то? Может вам модуль на BOSCH недорого предложить? (есть на CCU2 и CCSD-CURD 1000D c указанной логикой) А так получается полумера, да еще проверять активен ли предыдущий все еще. А если и он выключится переход на пред-предыдущий уже не произойдет? :) Тем более пишите что активен только 1 из них. Описание алгоритма наведения: Если активирован микрофон N: 1.Выбрать камеру (аналоговый выход) номер которой сохранен для данного микрофона N 2.Загрузить preset N (в режиме Npreset=Nmic) или пресет сохраненный для данного микрофона (в режиме manualPreset). Второй вариант удобен при использовании встроенных пресетов камер, так как они как правило ограничены малым числом (аналоговый выход). Если микрофон N выключен: 1.Проверяем был ли он включен последним. Если да то выбираем камеру и пресет для предпоследнего все еще активного микрофона. Либо просто удаляем микрофон из очереди активных микрофонов с корректировкой последовательности включения у оставшихся. 2.Если активных микрофонов не осталось, выбираем камеру общего плана зала и пресет общего плана (оба значения использую как параметры модуля)

Igor: Grisha, давно столкнулся с такой задачей, соорудил модуль. Работает следующим образом: 1. активируется вход №1 (включился микрофон №1) - активируется выход №1. 2. активируется вход №2 - активируется выход №2. 3. активируется вход №3 - активируется выход №3. 4. отключается вход №2 - без изменений. 5. отключается вход№3 - активируется выход №1. Иными словами, модуль следит за очередью микрофонных станций и показывает последнюю в очереди с учетом возможности того, что ряд предыдущих станций могли выбыть из очереди. Если устроит такой вариант, могу выложить модуль.

Grisha: конгреска DIS cu6005 я с нее отлично получаю статусы, по статусам навожу пресет. Попробую объяснить на примере: уже реализовано: вкл мик1 - micstatus1(1)-пресет 1 вкл мик2 - micstatus2(1)-пресет изменился на 2 вкл мик3 - micstatus3(1)-пресет изменился на 3 хочу получить: далее отключаем мик3-пресет должен изменится на 2. или другой сценарий: все как описано выше, но отключаем мик2(пресет как и был на третьем он не меняется- реализовано), затем отключаем мик 3. система должна распознать что предыдущий был мик2 и он не активен, смотри далее пред идущий мик1(активен) на него пресет1


Grisha: есть ли переменные в которые я могу заносить данные? если бы была возможность по событию читать и писать в переменную я бы уже реализовал, но убей не могу их найти или сообразить как иначе поступить. могу с легкостью накидать такой текст в Си логику вижу, реализовать не могу.

Igor: Grisha, ок, если не сдохну сегодня на этом объекте, до конца суток выложу.

Grisha: Дайте пожалуйста модуль, он похож на решение моей задачи.

Игорь K.: Вячеслав, почем у вас модули для Bosch DCN? Когда-то давно, познакомившись с модулем для BOSCH DCN CCU2 я понял, что упускал из виду. Оказалось, что тут очень просто и прозрачно реализована функция отслеживания очереди выступающих для автонаведения камер с возвратом на предыдущего оратора, глубиной до 4 активных. Нет ничего плохого в использовании чужих программных решений при создании своих.

Вячеслав: К сожалению BOSCH не допилил идею до ума. С одной стороны да, есть очередь которая соответствует очередности включения. Но все идет прахом, когда узнаешь что этих очереди ДВЕ. Одна для делегатов, а другая до председателя(ей) и соответственно понять в какой момент вклинился в очередь выступающих председатель не возможно. Отметок времени нет. Общей очереди нет и для того чтобы собрать ее из 2-х других недостаточно информации. Поэтому, приходится создавать собственную очередь с нуля. P.S/ Стоимость лицензии (компиляция под ваш s/n контроллера crestron) рублевый эквивалент 30$. Каждая последующая лицензия -10% но не менее 15$. Обновления и устранение замечаний в пределах версии – бесплатно.

Игорь K.: Ерунда, не нужно это никому. Выше я имел в виду использование кода модуля, прикручивание его для любой конгресс-системы. Для исключительно дотошных заказчиков этого вполне достаточно как базового функционала.

Вячеслав: Игорь K. пишет: Ерунда, не нужно это никому. Согласен, практика показывает, что подавляющее большинство использует систему с отключенной функцией автонаведения. Тупо общий план. Но есть и исключения, которым такой алгоритм нравится. Недавно проектировщик подкинул идею алгоритма: >2 активных = переключаем на общий план. Тоже есть здравый смысл, когда общение между участниками и состояние микрофона не изменяется. Но на общем плане разглядеть кто сейчас говорит сложновато, суммировать позиции пресетов тоже непонятно как, поэтому пока не воодушевился новым простым сценарием. Для маленьких переговорок, автонаведение по голосу (средствами EagleEye и SpeakerTrack) вообще рулит.

Игорь K.: Самолетный компьютер работает по менее сложным алгоритмам. Я бы не советовал уходить в усложнения там, где это не нужно. На мероприятиях, где возможно, может быть востребован описываемый функционал с возвратом камер, их коммутацией и т.д. приведет к хаосу, из которого сможет вывести только живой оператор, который видит все картинки от камер и переключает их (нежно и плавно).

Вячеслав: В том то и дело оператор там не вырулит, слишком напряжно за всеми уследить и скорость реакции оставляет желать лучшего. Наводить камеру нажимая кнопочки на сенсорном экране, тыкая в xpanel мышкой и даже используя джойстик не просто. Да и все картинки сделать это сколько камер надо. Т.е. видеть всех проблематично, на общем плане не разглядеть. Еще время подумать какую бы камеру на этого делегата лучше навести, выполнить наведение (пусть даже по пресету) и выполнить переключение на неё видео тоже занимает время. Недостатки этого подхода в случае ситуаций с перекрестной дискуссией при включенных микрофонах. Тога придется выключать автонаведение и наводить в ручную. +переход с пресета на пресет одной и той же камеры может быть виден (процесс поворота камеры). Но в Pansonic на этот случай замечательная фишка Freeze (на время поворота картинка замораживается). Либо количество камер удваивать и еще усложнять алгоритм.

DmitriiP: набросал по быстрому, вроде как просили (только история последовательности на все 12 входов): Interlock/"Toggle" + History отличие от родного Interlock/Toggle (управляется не пульсом) а только постоянными 1 или 0; пока на In[n] HIGH он считается активным для истории. при LOW он уберается из истории 1) последний In[n] HIGH -> активирует Out [n] -> записывается [n] в историю 2) если In[n] LOW -> деактивирует Out [n] (если он текущий) -> уберается из истории -> активирует Out ["послений" активный [n] из истории]

gosha: Если я правильно понял задачу, то человеку нужен банальный стек LIFO из аналоговых значений. Пишется за 10 минут на S+. И тип конгресс-системы тут совершенно ни при чем.

Igor: Именно

Игорь K.: Абсолютно правильная логика работы для автонаведения. DmitriiP предложил очень хорошее решение.

Вячеслав: gosha пишет: И тип конгресс-системы тут совершенно ни при чем. Причем... если алгоритм встроен в модуль :) Dimitr - зачет. Я бы за 10 мин такое не написал. Одно лишь примечание, переменную HistoryCount надо лучше бы инициализировать в Main. Не всегда она будет нулевой.

DmitriiP: Вячеслав пишет: Одно лишь примечание, переменную HistoryCount надо лучше бы инициализировать в Main. Не всегда она будет нулевой. согласен, просто время было позднее :) хотел ещё перенести туда внутренности Init() или закоментить WaitForInitializationComplete(); но похоже забыл :)

iBumzeR: DmitriiP пишет: набросал по быстрому, вроде как просили (только история последовательности на все 12 входов): Interlock/"Toggle" + History отличие от родного Interlock/Toggle (управляется не пульсом) а только постоянными 1 или 0; пока на In[n] HIGH он считается активным для истории. при LOW он уберается из истории 1) последний In[n] HIGH -> активирует Out [n] -> записывается [n] в историю 2) если In[n] LOW -> деактивирует Out [n] (если он текущий) -> уберается из истории -> активирует Out ["послений" активный [n] из истории] DmitriiP А Вы можете выложить еще раз ваше решение? Прохожу по ссылке, а там ошибка сети, задача один в один стоит, как описал автор темы.

mishabutuzov: DmitriiP, iBumzeR Присоединяюсь к вопросу. Было бы очень интересно изучить модуль, решаю такую же задачу.



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