Форум » » Cинхронизация входа\выхода для advanced slider. » Ответить

Cинхронизация входа\выхода для advanced slider.

ps: День добрый, столкнулся с неприятной «фичей» при использования advansed slider (smart graphics) - он не синхронизирует внутри себя входной и выходной аналоговый сигналы. Как пример, рассмотрим задачу, состоящую в управлении одним димером с двух разных панелей. Нюанс состоит в том, что клиент хочет управлять светом передвигая пальцем ползунок слайдера. Предполагаемое решение - на каждой панели есть advanced slider vertical, который в симпле подключается через механизм control crosspoint routing к единому модулю управления димером. Соединяем - аналоговый выход каждого слайдера – на вход модуля управления димером, аналоговый выход модуля управления димером ( feedback или реальное значение на димере) - на аналоговый вход каждого слайдера. Начальное состояние обоих слайеров - 0 на входе и выходе. Предположим на панели1 ( П1) двигая ползунок слайдера выставили уровень 50%, димер отработал, обратка с него попадает на панель П2 , ползунок слайдера на которой подымается также до 50%. Пока вроде все нормально, димер отработал, оба слайдера показывают одинаковую актуальную информацию. Смотрим в отладчике - значения входных сигналов слайдеров для обеих панелей одинаковое – 50% (обратка с димера), выходной сигнал слайдера П1 тоже 50% (выставлен пальцем), а вот выходной сигнал слайдера на П2 так и остается в 0 – ведь ползунок этого слайдера никто не трогал!!! Чем это чревато – когда на П2 слайдер отключится от димера через control crosspoint routing, а потом подключиться вновь, то в момент подключения димер получит выходное значение этого слайдера – 0 и выставит уровень в 0. Что конечно же правильно покажет слайдер на П1, но на своем выходе все равно сохранит выставленное перед этим значение 50%.... … как говорил известный персонаж – ничего не сделал, только вошел… Получается, что на аналоговом выходе слайдера - всегда последнее выставленное ползунком значение, хотя сам ползунок показывает то, что приходит на его аналоговый вход …. В настройках слайдера на эту тему нашел только опцию touch settable, но она ни на что не влияет… Классическое решение управлять не ползунком а кнопками +\- понятно, но интересует именно ползунок. Сейчас пытаюсь нарисовать «драйвер» слайдера, который бы анализировал сигналы на его входе-выходе и имитировал для внешнего мира их «одинаковость» Может быть кто-то уже сталкивался с такой ситуацией и знает более элегантное решение ?

Ответов - 9

Igor: И зачем в данной ситуации control crosspoint? Что мешает тупо запараллелить slider`ы на всех панелях?

ps: Igor пишет: И зачем в данной ситуации control crosspoint? Что мешает тупо запараллелить slider`ы на всех панелях? Написанное выше было приведено в качестве упрощающего примера, реальная задача несколько масштабнее. Речь идет о достаточно большом объекте (дом 4 этажа), на котором, в том числе, должно быть реализовано управление освещением. Программировать поддержку отдельного слайдера каждой группы света для 70 комнат и 20 панелей - очень депрессивное занятие, поэтому здесь реализуется механизм, позволяющий через control crosspoint подключать один и тот же слайдер к разным, в разные моменты времени, димерам. В результате этого удалось уменьшить количество слайдеров, необходимых для комфортного управления освещением всего дома до 10 (на каждой панели). Ну и , вишенка на торт - опорная сеть управления освещением на объекте реализована на HDL, поэтому к каждому из его сегментов (всего 8 - по 2 сегмента на этаж) подключен отдельный процессор Crestron в качестве шлюза этого сегмента. В итоге реальная цепочка прохождения сигнала от слайдера к димеру и обратно выглядит примерно так: Слайдер панели N <-> процессор crestron 1 : интерфейс панели N <-> control crosspoint <-> room interface module <-> ethernet inersystem communication <-> процессор crestronХ <-> модуль управления димером <-> шина HDL <-> димер...

Igor: Креативно.


Игорь K.: Это получается, у вас слайдеры разбросаны по панелям и можно управлять яркостью с одной панели любыми группами освещения? Вы реализовали принцип "Отовсюду рулить всем"?

eoulianov: ps. добрый день! Путь сигналов для вашей задачи верный. Поведение апдейта аналоговых сигналов при подключении панели к контроллеру, при включении соединения через CrossPoint, при соединении разных Intersystem между контроллерами почему-то зависит от серии контроллера.. Поэтому просто посмотрите что происходит в отладчике когда выбирается эта конмата на ещё одной панели, а так же - что происходит на контроллере Х когда перезагружется контроллер 1, а так же что случается с диммерами когда перезагружается контроллер X - выясните когда появляются нежелательные обнуления в set. Самый железобетонный вариант устранения неприятностей такого рода - это добаление Serial Buffer и Analog Buffer на пути этих аналоговых сигналов (они разные - Serial не трогает выходы при появлении 1 на enable), но там бывает нужно поизощряться чтобы понять куда воткнуть их и как запилить их enable. Есть некоторый цимес в замене Ethernet InterSystem Communications на TCP/IP клиент+сервер и пару просто InterSystem Communications - там можно явно выбрать поведение модуля при старте и при большом количестве передаваемых изменений.

ps: Игорь K. пишет: Это получается, у вас слайдеры разбросаны по панелям и можно управлять яркостью с одной панели любыми группами освещения? Вы реализовали принцип "Отовсюду рулить всем"? Да, совершенно верно, в общем случае, любая панель позволяет, независимо от других, управлять всеми системами во всем доме. Интерфейс любой панели способен предоставить возможность выбора любого помещения в доме и управления в этом помещении теми системами, которые там реально присутствуют. Если необходимо на конкретной панели реализовать управление ограниченным количеством помещений, то в интерфейсе этой панели исключается возможность выбора тех помещений, которые, в данном случае, не нужны. Управление светом в любом помещении происходит через единую страницу-шаблон с 10 слайдерами, 10 парами кнопок вкл\выкл (ну, и сценарными кнопками). При выборе на панели конкретного помещения эта страница автоматически конфигурируется в соответствии с реальным количеством групп освещения (и типом их управления), которое есть в помещении. Например, если в некой комнате есть только 3 группы света - одна димируемая и две вкл\выкл, то при выборе этой комнаты на странице управления светом будет отображен один слайдер и две пары кнопок вкл\выкл, которые через control crosspoint будут подключены к модулям димера и реле, отвечающих за группы света этой комнаты по описанной выше длинной цепочке. При выборе другой комнаты, отображаемое количество слайдеров и кнопок будет другим, в соответствии с реальным количеством и типом управления групп света именно в этой комнате, но физически это будет одна и той же страница-шаблон на панели...

ps: eoulianov добрый день, спасибо за подсказки Отладчик показал, что некорректное (и, самое печальное, "самопроизвольное" для пользователя ) передергивание димирумых групп света происходит в момент подключения слайдера к модулю димера через control crosspoint. Именно тогда значение с выхода слайдера подключаемой панели, всегда соответствующее последнему значению ползунка, выставленному пальцем, никоим образом не зависящее от значения на входе слайдера и, в общем случае, не соответствующее значению обратки подключаемого димера, попадает на вход димера, который честно его отрабатывает. В процессе дальнейшего анализа все больше прихожу к выводу о необходимости разделения проблемы на две части 1 собственно синхронизация выхода слайдера с его входом - и здесь, спасибо за подсказку, абсолютно с вами согласен, должен помочь serial buffer, для которого разрешающий вход всегда в 1, на ain1 подан вход слайдера (обратка димера), на ain2 - реальный выход слайдера, а оба выхода буфера aout1 и aout2 с одинаковым сигналом будет представлять собой некий "виртуальный выход" слайдера для дальнейшего использования. 2 инициализация "правильного" значения слайдера в момент подключения его к димеру через crosspoint routing. Поскольку в момент подключения слайдера к модулю димера, он, в любом случае должен принять и отработать значение "виртуального выхода слайдера", каким бы оно ни было, единственный способ избежать передергивания - когда значение на этом выходе в момент связывания будет равно обратке на димере. Поэтому в этой части задачи необходимо добиться того, чтобы обратка димера гарантированно попадала на вход слайдера первой, а связывание "виртуального выхода" слайдера со входом димера происходило только тогда, когда на этом выходе будет установлено полученное значение обратки. Добиться этого можно путем разделения связывания выхода слайдера со входом димера и выхода димера со входом слайдера по разным кросспоинтам и во времени. Сначала, через второй кросспоинт связывается обратка димера, а затем, через промежуток времени, достаточный для прохождения этой обратки через буфер на "виртуальный выход" слайдера, этот выход уже связывается со входом димера через первый кросспоинт. Конечно, называть такое решение элегантным можно с большой натяжкой..., но других вариантов похоже не просматривается вообще. Пока склоняюсь к мысли пробовать реализовать что-то подобное...

Вячеслав: Тоже были похожие трудности с кроспоинтом. К новому устройству ошибочно применялось текущее значение слайдера при переключении. Использую модуль (simpl+): Сначала (1шаг степпера кроспоинта) при начале переключения на другое устройство устанавливал НЕДЕЙСТВИТЕЛЬНОЕ значение выхода слайдера (например 777 допустимый диапазон был 0-255) Запускал таймер ожидания wait(55мс) После переключения кроспоинта Fb слайдера (вход) устанавливался на основании действующего значения от устройства (само собой). Значение выхода слайдера остается равным 777 являясь не действительным и при передаче через кроспоинт на вновь подключенное устройство никак не влияет Далее срабатывал таймер (после 55мс) и выход слайдера устанавливал равным его входу (т.е. такой же как его FB)

eoulianov: Использовать напрямую таймеры - не айс, потому что контроллер может оказаться занят и они успеют закончиться раньше чем хотелось бы. Есть олдскульные пути решения таких закавык, там всё вяжется на Logic Waves - они не рвутся: 1. На Equipment Crosspoint Routing (кототрый модуль комнаты) именуем Connections$, его тащим на Serial/Analog One Shoot длиной 1t, а его негативный выход Calm пускаем на Enable от Serial Buffer. Теперь Serial Buffer открыт всё время, кроме одного такта (1/100 секунды) через одну Logic Wave после коннектов или дисконнектов от Equipment CrossPoint. 2. Выход слайдера, который попал к нам на Equipment Crosspoint - SliderSetInRoom прогоняем через Serial Buffer два раза, и второй выход SliderSetToDriver используем по назначению. Дело в том, что первый переход успеет присвоиться пока буфер ещё не успел закрыться во время соединения, а второй уже не успеет - и его-то уже можно совать на вход драйвера. 3. По положительному выходу из One Shoot желательно присвоить какое-нибудь невероятное значение выходу слайдера из Equipment Crosspoint, чтобы в случае если на свежеподключенном слайдере неожиданно выберут то же самое значение, которое там уже было, то чтобы оно ИЗМЕНИЛО выход SliderSetInRoom на Equipment Crosspoint, иначе это совпадающее по значению нажатие на слайдер будет проигнорировано.



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