Я не волшебник, а тока учусь!! Делаю программку имитацию светофора!!! Когда загораются цвета сделал через TON,а вот как сделать мигание(зеленый цвет) не получается!!! Проблема,в том что плохо знаю инструкции! Но,кажется,что можно сделать через секвенсер...
Да не мучайтесь так... пульсы проще сделать также через таймеры... только использовать функции OTL и OTU.
Общий вид примерно след. - условие в виде нормально закрытого контакта XIO(назовем его VAR_Puls50ms), + TON "Puls_50{0}"(с нужным интервалом в данном случае 50 мс) + нормальнооткрытый контакт XIC "Puls_50{0}.DN" = VAR_Puls50ms(OTL)
след строчка
VAR_Puls50ms(XIC) + TON Puls_50{1}+ XIO Puls_50{1}.DN =VAR_Puls50ms(OTU)
Работают строчки только в паре естественно. Время ставьте какое нужно, а остальную логику уж сами допишите. Извиняюсь за орфографию, но как понимаете - набросал на скорую руку
Конечно, можно забить сенквесеры на Timer.ACC, маскировать несколько младших битов (для компенсации нестабильности время вызова и выполнения задачи относительно системного времени) и таким образом управлять 3 битами. Но не только у Вас наблюдается стремление сделать простейшие операции какими-то мощными инструкциями, особенно с труднопроизносимыми названиями. Сам себя иногда ловил на этом.
Светофор можно сделать и непосредственно обращаясь к тегам системного времени в 64-битном варианте, и непосредственно управляя временем вызова задачи, счетчиками и анализом времени выполнения и вызова задачи. Можно придумать также задачу по событию и еще 100 методов решения.
Но чтобы не использовать кучу тегов, достаточно циклический таймер и инструкциями сравнения Timer.ACC с какими-то значениями включать и выключать биты.
Можно непосредственно анализировать определенные биты в Timer.ACC и на основе простого анализа использовать это вместо инструкций сравнения, но тогда придется по клаве стучать подольше, а ведь клава-то не железная, да и руки не казенные...
Когда мне надо было тупо щелкать затвором в определенное время, но с настройкой временных диаппазонов, я использовал в LD такой вид:
CMP((Timer.ACC)MOD((Ustavki[30]+1)) <= Ustavki[30]*Ustavki[31]) OTE(Output.Data.9);
где:
Timer - таймер
Ustavki[30] - время цикла, мс
Ustavki[31] - коэффициент времени открытого состояния
Конечно, время выполнения этой конструкции на несколько мксек больше стандартного подхода, но зато все умещается в одной цепочке и удобнее читать код проги.
Мнение и подход уважаемого DIMIOKSа заслуживает коленопреклонения Сам бы до такого не додумался... Только вот одна деталь ушла от его внимания Вопрос то задавал новичек, как я понял А предложеный код на новичка помоему не тянет, скорее на высший пилотаж...
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
Smart Solutions VDT GmbH | Friedrich-List-Allee 38, D-41844 Wegberg-Wildenrath, Germany Tel.: +49 2432 933 57 83 | e-Mail: office@vdt-solutions.de Все товарные знаки и торговые марки являются собственностью их владельцев.
При использовании материалов сайта ссылка на данный сайт обязательна. Открытие страницы: 0.124 секунды