Форум » » Тонкости кросспоинтов » Ответить

Тонкости кросспоинтов

Crestroner: Столкнулся с проблемой при использовании кросс-поинтов... может у кого есть решение? В VT проекте используется RGB selector, который выдает 3 аналоговых джоина - R_contr1, G_contr2, B_contr3. Также на вход принимает R_contr1_fb, G_contr1_fb и B_contr1_fb. Управление возможно с нескольких панелей, поэтому ‘1’, ...) Используется это для управления разными RGB модулями. Для управления каждым из этих модулей используется символ, который принимает аналоговые сигналы R_eq1, G_eq1, B_eq1, и выдает, соответственно, R_eq1_fb, G_eq1_fb, B_eq1_fb (соответственно, RGB модулей несколько, от 1 до N). Используются кросспоинты для переключения управления между RGB модулями. Equipment Crosspoint выглядит для RGB модуля выглядит так: R_eq1_fb R_eq1 G_eq1_fb G_eq1 B_eq1_fb B_eq1 Control Crosspoint, соответственно, для панели управления 1: R_contr1 R_contr1_fb G_contr1 G_contr1_fb B_contr1 B_contr1_fb Коннектим панель 1 к RGB модулю 1, все соединяется, все отлично. Допустим, выставляем на панели R_contr1=100, G_contr1=75, B_contr1=50. Все это благополучно передается на RGB модуль 1, сигналы R_eq1, G_eq1, B_eq1, соответственно. Модуль делает то, что должен сделать и в конечном счете выдает фидбэк R_eq1_fb, G_eq1_fb, B_eq1_fb. Этот фидбэк благополучно передается на панель, сигналы R_contr1_fb, G_contr1_fb, B_contr1, _fb. Теперь - внимание! - дисконнектим Control Crosspoint 1 от RGB модуля 1 и коннектим к модулю 2. Хотелось бы, чтобы на R_contr1_fb отразилось R_eq2_fb, и т.д. Но значение на R_contr1 по-прежнему 100, на G_contr1 - 75, а на B_contr1 - 50. И при подключении панели к RGB модулю 2, эти значения, естественно, передаются модулю 2, и он, естественно, отрабатывает эти установки на модуле 2, в итоге передавая этот фидбэк на панель. То есть при переключении панели на другой модуль, модуль выставляет те же значения, что были на предыдущем. Что совсем не то, чего хотелось. Есть какие-то элегантные решения? Например, меня бы устроило, если бы при коннекте, происходило следующее: R_eq2_fb -> R_contr1 R_contr1 -> R_eq2 то есть значение с модуля сначала бы присваивалось входному сигналу панели, и лишь потом входной сигнал поступал на вход модуля ( в RGB модуле есть контроль на изменение входного сигнала на то же значение, так что зацикливания не будет). Есть ли какие-то правила, обусловливающие последовательность выполнения действий при коннектах/дисконнектах? Если я сделаю Eq Connect вот так: R_eq2_fb // R_eq2_fb // А Contr Connect вот так: // R_contr1 // R_contr1_fb Обеспечит ли это нужную последовательность присваиваний?

Ответов - 9

DmitriiP: скачайте эту демку http://applicationmarket.crestron.com/smart-graphics-for-homes/ посмотриете как там реализовано для регулятора громкости (через crossoint) коментарий у ISCOMM говорит сам за себя :)

Вячеслав: Была такая же история с управлением яркостью на нескольких экранах. При переключении на новый экран применялась яркость с предыдущего. Для себя решил так (хоть и выглядит несколько путано, особенно свой же комментарий ))"почему то изменения fb аналогово входа xpnel не приводят к изменениям выхода с xpanel"). Но все теперь работает нормально. Суть в начале переключения (см. степпер) отправить (установить) на вход устройства не действительное значение 777 (в модуле оборудования оно игнорируется) заменив выходное значение XPANEL этим недействительным значением. Затем выполнить переключения кроспоинта и с небольшой задержкой (55мс в примере) продублировать полученное с устройства (модуля) значение FB на его вход (как бы шунтируя вход и выход XPANEL), так как сама XPANEL этого не делает. В модуле refresh_BRI_dir..... содержание такое: Function FuncDelay() { wait(55) { out=in_fb; } } PUSH cross_starting { out=777;//not valid value CancelAllWait(); FuncDelay(); } Может есть и другие решения, но это работает на все 100%

Crestroner: Как-то много шаманства во 2м предложенном решении.. Да и значение ‘неиспользуемое’ надо резервировать. Демку из первого совета пока не скачал, но, кажется, идею пончл (из наводящих комментариев автора). Можно аналоговые сигналы пропустить через ISC, закодировав их в serial. ISC будет пропускать значения только при изменении. Так что при переключении оборудования старое значение с управления не будет инициализировать новое оборудование. Думаю, достаточно просто осуществимо. Спасибо большое за подсказки!!!


Alexandr: дя этого проще аналоговые сигналы через serial buffer пропустить, он так же работает.

Igor: Легкие пути не нужны :)

Alexandr: а случаем никто не знает простого способа раскидать кросспоинты по разным контроллерам? удобно было бы для больших проектов, если есть рабочее решение.

eoulianov: Передачи Crosspoints через контроллеры или между программы в одном контроллере нет( Но есть пространство S# - там можно передавать данные без связей в SIMPL, и конечно можно связаться в S# с другой программой или с другим контроллером, и, например, запилить собственный вариант архитектуры CrossPoints..

ps: У меня была похожая ситуация, только с монохромными димерами. Путем серии экспериментов проблема была идентифицирована с "особенностями" работы слайдеров смартграфикс: 1 - в VTPro слайдер имеет только один аналоговый джоин для входа и выхода, а в Simple для любой панели - есть два аналоговых сигнала для этого джоина - вход и выход, которые в общем случае не обязаны быть одинаковыми. 2 - ползунок слайдера играет двоякую роль - при перемещении ползунка пальцем слайдер изменяет сигнал на выходе и запоминает последнее его значение, при отпускании ползунка последний работает как индикатор значения, поданного на вход обратки слайдера в симпл. 3 - в общем случае, (если сигналы входа-выхода слайдера в симпле разные) ползунок слайдера будет показывать значение не совпадающее с тем, что храниться в слайдере 4 - значение аналогового выхода слайдера в симпле может быть изменено только путем перемещения ползунка слайдера на панели (пальцем) но никак не изменением сигнала обратки в симпле. 5 - "внутри себя" ( в панели ?) слайдер всегда сохраняет последнее значение выставленное пальцем через его ползунок. Это значение никак не зависит от сигналов, подаваемых на вход обратки в симпл. 6 - "внутри" слайдера значение входа и выхода аналогового джоина - не синхронизируются Поэтому при подключении такого слайдера через кросс-поинт, модуль, к которому он подключается, принимает значение, сохраненное в слайдере, независимо от значения поданного на его "обратку". Очень похоже с описанием вашей ситуации. Исходя из сути проблемы пути ее решения лежат в создании некоего блока управления, который бы 1 - разрывал непосредственную связь выхода слайдера с кросс поинтом 2 - в момент подключения слайдера к модулю управления позволял бы "правильным" образом инициализировать его значение для кросс поинта 3 - после подключения и инициализации просто передавал бы реальные значения слайдера на вход кросс-поинта. Для себя решал эту проблему следующим образом: 1 создал "драйвер" слайдера ( постоянно включенный serial buffer, который ставится "в разрыв" аналогового сигнала - реального выхода слайдера) с двумя входами: - с реального выхода слайдера, и - обратки модуля димера, и одним "виртуальным " выходом - один и тот же аналоговый сигнал на обеих выходах, соответствующих указанным входам. Который используется в дальнейшем вместо реального выхода слайдера при подключении через кросс-поинты к модулям управления светом. 2 сделал, разнесенное во времени, двойное подключение этого "драйвера" к таким модулям. При подключении "драйвера" слайдера через кросс-поинт к модулю, сначала происходит подключение только к сигналу обратки модуля, который попадая на вход "драйвера" устанавливает это значения на его "виртуальном выходе", затем, через время, отключение от обратки, а после этого, уже полное подключение "драйвера" слайдера к кросс-поинту этого модуля. Поскольку значение "виртуального" выхода "драйвера" слайдера в момент полного подключения соответствует реальному значению обратки модуля, значения модуля не меняются. С другой стороны, обратка, поданная на реальный вход слайдера, устанавливает его ползунок в положение, соответствующее значению обратки. (Но при этом внутреннее значение слайдера, которое было установлено в последний раз пальцем, остается неизменными. А ползунок этого слайдера, в общем случае, и дальше будут показывать значение не соответствующее хранящемуся в слайдере до момента изменения такого значения пальцем !!!) Описанный механизм поможет решить проблему правильного отображения слайдеров при пере-подключении через кросс-поинты к разным модулям управления светом rgb. Правда, скорее всего, в такой реализации будет небольшой побочный эффект - например, если вы будете регулировать цвет через три независимых слайдера и выставите ползунками на первом rgb модуле, чистый красный цвет -(ra1=100/ga1=0/ba1=0) а потом отключитесь от него и подключитесь ко второму, на котором в этот момент установлен чистый зеленый (rf2=0/gf2=100/bf2=0), то, после переключения, ползунки слайдеров правильно покажут зеленый, но при попытке, например, изменить зеленый цвет на втором модуле (допустим сделать его менее зеленым g=50 путем сдвига вниз зеленого слайдера) изменения начнутся со значения, выставленного на этом слайдере пальцем в последний раз ( для данного случая - ga1=0). Вначале зеленый пропадет вообще, а потом примет значение вновь установленное слайдером. Если же rgb селектор будет оперировать тремя значениями цвета одновременно, то, после подключения ко второму rgb модулю, в самом начале изменения цвета может наблюдаться короткая вспышка соответствующая последним значениям селектора установленным пальцем для первого модуля - в данном случае красного цвета. Для нейтрализации такого эффекта можно играться с разрешающим входом serial bufferа "драйвера" слайдера в момент изменения реального выходного значения этого слайдера.

p.vladi: решение SOS - отправляем analog_value и digital_alalog_value_Changed с другой стороны ставим ABUF который открывает analog_value_from_crosspoint



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