Форум » » [РЕШЕНО] Ролл-ставни и шторы? Позиционирование полотна с DIN-2MC2. » Ответить

[РЕШЕНО] Ролл-ставни и шторы? Позиционирование полотна с DIN-2MC2.

alejandro: Друзья, Имеется два DIN-2MC2 (под управлением MC3, если что). Подскажите, как логически реализовывается схема управления роль-ставнями и шторами. С крайними положениями штор/ставней вопросов, естественно, не возникает. А вот как отправлять их в нужное промежуточное состояние? При этом два окна могут быть раскрыты по-разному, а необходимо привести их в определенное предустановленное состояние, т.е. одно должно, например, открыться до определенного положения, а другое - закрыться. И что это за сигналы такие Open1_Jog и Close1_Jog? Спасибо всем за любую подсказку. :-) UPD. Решение (максимально возможное) найдено. См. комментарии. Благодарность eoulianov

Ответов - 8

Igor: alejandro, над подобным вопросом задумывался неоднократно, но не было предпосылок к его детальной проработке. Думаю, есть смысл построить решение на сопоставлении значений двух аналоговых переменных, одна из которых отражает реальное положение полотна, другая - желаемое. Например, полностью открытая штора - 0%, полностью закрытая - 100%, закрытая на 1/3 - 33%. Бинарные сигналы, непосредственно управляющие каналами реле, также управляют, например, символом Analog Ramp, изменяющим, в свою очередь, значение аналоговой переменной №1. Пока А1>A2 выполняется действие "Открыть/Поднять", пока A1<A2 - действие "Закрыть/Опустить". Как только А1=А2 - остановить двигатель. Разумеется, это открывает возможность заносить в память контроллера и вызывать из нее предустановленные положения полотна (Presets) силами пользователя. В процессе разработки подобных решений необходимо осознавать, что время работы двигателя на подъем (в случае, разумеется, шторы подъемного типа или автоматизированного экрана) может быть больше времени его работы на опускание (тянуть отвес полотна вверх труднее чем опускать его вниз ), а при перегреве двигателя (открыли/закрыли 15 раз подряд - тестируем, знаете ли) роторы некоторых двигателей вращаются медленее, чем обычно. alejandro пишет: И что это за сигналы такие Open1_Jog и Close1_Jog? <Open1_Jog> Causes the corresponding motor to travel in the Open direction for "jog time" seconds (as defined on the Override Controls and Motor Settings slot) or until a stop command is sent, on the rising edge of the input.<Close1_Jog> Causes the corresponding motor to travel in the Close direction for the specified jog time or until a stop command is sent, on the rising edge of the input. Сигнал <Open1_Jog> инициирует работу соответствующего двигателя в режиме "Открыть" в течение времени (в секундах), определенного значением параметра "jog time" в слоте Override Controls and Motor Settings, или до момента издания команды "Стоп". Действие инициируется нарастающим фронтом сигнала. Сигнал <Close1_Jog> инициирует работу соответствующего двигателя в режиме "Закрыть" в течение "jog time" или до момента издания команды "Стоп". Действие инициируется нарастающим фронтом сигнала. © SIMPL_Windows.chm.

beomaster: Вопрос. Вы пишете, что с крайними положениями вопроса не возникает. Почему?

alejandro: beomaster пишет: Вы пишете, что с крайними положениями вопроса не возникает. Почему?


alejandro: Спасибо, Igor, за помощь. Буду пробовать предложенный Вами способ. А я огород нагородил...

alejandro: Сделал вот так. Работает совсем нестабильно. Ставня приходит в положение пресета (любого из четырех) корректно, но не всегда фиксируется в нем (закономерности пока не уловил) - реле все время пытается отправить полотно в противоположные стороны. Ну, то есть, полотно неподвижно стоит в положении заданного пресета, а реле почему-то судорожно щелкает и старается вытолкнуть его из этого положения. По всей вероятности, Analog Comparison принимает положение полотна в установившемся пресете одновременно и >, и < CurrentPosition. Отсюда и попытки поочередно отработать и RollClose, и RollOpen. Понимаю, что неправильно, но понять, как сделать правильно, пока не могу. Подскажете?

alejandro: Интересное для меня явление. Символ Analog_Comparison в данной логической схеме дает такой результат: 1. Если PresetPosition = 0% или 100%, то символ нормально отрабатывает сравнения (пока PresetPosition<CurrentPosition, сигнал RollClose=1, пока PresetPosition>CurrentPosition, сигнал RollOpen=1, как только оба условия перестают выполняться, сигналы на выходе равняются 0). Собственно, что и требуется условием задачи. 2. Если PresetPosition принимает любое значение, отличное от крайних (1%<=PresetPosition<=99%), то при "достижении" CurrentPositioin величины, равной PresetPosition (допустим 25%), сигнал RollOpen или RollClose (в зависимости от того, какой привел полотно в текущее положение) превращается из 1 в 0, но тут же значение 1 принимает противоположный сигнал, и толкает полотно в противоположную сторону. Потом опять сигналы меняются значениями в цикле. Получается довольно быстрое мигание индикаторов, показывающих активный сигнал. Если же выходные сигналы подключить к устройству DIN-2MC2, то, соответственно, раздается щелкание реле (которое отчетливо слышно) и быстрое мигание индикаторов действия на самом устройстве. (здесь можно посмотреть ВИДЕО - а здесь еще одно - ВИДЕО . Для наглядности я добавил в него еще один промежуточный пресет (25%), цифровой индикатор, отражающий значение CurrentPosition, и индикатор положения STOP - "x") Что можно в этом случае предпринять?

eoulianov: Alejandro, Бывают приводы, которые действительно по аналоговому сигналу открывают на нужное положение, и если клиент этого хотел, и его хотение было осознанным, то следовало озаботиться и установить как раз такие приводы. Раз этого нет, нужно чтобы клиент осознал, что точность позционирования шторы в остальных случах - приблизительная, и реальное положение шторы тем дальше от желаемого, чем дольше привод не был в "репперной" точке (0% и 100%). В SIMPL нет сиволов с задержками переменной длины, поэтому вы уверенно попали на SIMPL+. Вариант с Analog Comparison (Full Set) и Analog Ramp не удастся допилить до точного совпадения цели и симулируемого фидбека в силу работы Analog Ramp: он менякт сигнал не на "1" много раз, а по нескольку значенией сразу - так часто, насколько позволяет загрузка контроллера, выдерживая скорость (100% за 22сек). Что делать? 1. Творите SIMPL+, записываете, компилите под нужный контроллер: #DEFAULT_VOLATILE #ENABLE_STACK_CHECKING analog_input _skip_, _skip_, target; digital_output open_momentary, close_momentary; analog_output position; change target { if( target=0 ) // full open pulse( 3000, open_momentary ); else if( target=65535 ) // full close pulse( 3000, close_momentary ); else if( target<position ) // partial open pulse( muldiv( position-target, 2300, 65535), open_momentary ); else if( target>position) // partial close pulse( muldiv( target-position, 2200, 65535), close_momentary ); } 2. Делайте обвязку по картинке: 3. Добаваляете кнопочное (не пресетное) управление мотором на тот же DIN-2MC2, если нужно

alejandro: eoulianov Во-первых, большущее спасибо за такой подробный ответ. Все работает корректно (немножко, правда, пришлось подправить модуль SIMPL+ :-)). #DEFAULT_VOLATILE #ENABLE_STACK_CHECKING analog_input _skip_, _skip_, target; digital_output open_momentary, close_momentary; analog_output position; change target { if( target=0 ) // run: full close pulse( 3000, close_momentary ); else if( target=65535 ) // run: full open pulse( 3000, open_momentary ); else if( target<position ) // partial open pulse( muldiv( position-target, 2090, 65535), close_momentary ); else if( target>position) // partial close pulse( muldiv( target-position, 2140, 65535), open_momentary ); "Попадать" в нужное значение действительно непросто, и, я решил этим не морочиться - имеющееся железо действительно не умеет этого. Подскажите пожалуйста (на будущее), какое железо (если возможно) правильнее было выбрать для этой задачи (или вопрос в конечном счете все равно сводится к выбору привода, а не управляющего им устройства)? Спасибо.



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