PDA

Просмотр полной версии : Как реализовать T-триггер в CoDeSys?



Литрович
03.03.2010, 10:25
задача такая: при нажатии на кнопку должно включаться устройство, при повторном нажатии должно отключаться. понимаю что наверное просто но додуматься не могу.

DARNER
03.03.2010, 10:39
яндекс рулит
http://images.yandex.ru/search?p=4&ed=1&text=t-%D1%82%D1%80%D0%B8%D0%B3%D0%B3%D0%B5%D1%80&spsite=works.tarefer.ru&img_url=www.webknow.ru%2Ftsifrovie%2F00017%2Ftext. files%2Fimage004.gif&rpt=simage

Литрович
03.03.2010, 10:52
это я знаю. я думал что как-то может быть проще, одним блоком или еще как?

lara197a
03.03.2010, 11:16
Вот на 2-х Функциональных блоках.
TRIG_Vk(CLK:= knopka, Q=> ); (выделяем фронт нажатия кнопки (ФБ R_TRIG))
SR_Vk(SET1:= TRIG_Vk.Q AND NOT SR_Vk.Q1 , RESET:=TRIG_Vk.Q AND SR_Vk.Q1, Q1=> ); (ФБ SR или RS)

Литрович
03.03.2010, 11:35
спасибо, получилось. правда это тоже 4 блока, но меньше видно нельзя. я проектирую в Fbd:)

DARNER
03.03.2010, 12:54
спасибо, получилось. правда это тоже 4 блока, но меньше видно нельзя. я проектирую в Fbd:)

выделите в отдельный функциональный блок

DiMKiN
30.03.2010, 11:49
можно потробнее? желательно на St...
с кодом для фун. блоков и программы...

rovki
30.03.2010, 13:35
вопрос новичка в кодесис ,а что в кодесис нет готовых библиотек фб (счетчики ,регистры сдвига,дешифраторы,и.т.д?)

Николаев Андрей
30.03.2010, 14:33
Ну вот, rovki - прям расстроили ;).
Надо подключить библиотеки Util.lib и Standart.lib - там все есть

rovki
30.03.2010, 16:53
стыдно,но все это ,в свое время реализовывал на жесткой логике,потом на однокристалках,(локальные сети,бортовые микро эвм,системы диагностики,испытательные стенды,итд,итп) потом на плк без кодесис технологические линии.сейчас другие задачи и участие в форуме -отдушина(ностальгия) по тем временам.и данный вопрос из разряда "для общего развития".:) .будет необходимость-будет и решение.
меня как раз и интересует почему люди имея такую мощь (кодесис) спрашивают как реализовать тот или иной функциональный блок,и существует ли конвертация проектов из одного языка в другой средствами кодесис, внутри кодесис.а на счет фбд -посмотрел -слабовато,ожидал большего, для электронщика ловить нечего,делай все на элементах малой степени интеграции.

DiMKiN
30.03.2010, 21:52
усё разобрался сам:) спсб всем...

magirus
31.03.2010, 12:59
почему люди имея такую мощь (кодесис) спрашивают как реализовать тот или иной функциональный блок
потому что не желают читать документацию. и справку по программе.

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

rovki
31.03.2010, 14:04
потому что не желают читать документацию. и справку по программе.
делайте свои функциональные блоки нужной степени интеграции,
сохраняйте их (хоть как фб хоть как библиотеку) и в любой момент их можно использовать в любом проекте.

1.НЕ все люди хотят перед тем как сьесть ложку супа читать на нее инструкцию на ста листах,особенно если это дегустация .А вот если ты хочешь стать поваром- тогда читай,другого выбора нет.
2.Раньше это делали за нас разработчики эл.компонентов(в случае аппаратной реализации).А теперь разрабтчики ПО мне говорят -снова иди в первый класс,
делай N разрядный реверсивный регистр сдвига на логических элементах "и","не", или так и быть можешь таймер или счетчик еще использовать на пару с генератором.И это мощь?Не оставили людям выбора.Нужно реализовать простенький алгоритм на ПЛК ,а потом всю оставшуюся жизнь эксплуатировать его(оборудование).Так вот ты с начало кодесис изучи а потом.... или оставь все как есть на реле.Это я не про себя.

Pointer
31.03.2010, 14:42
а может, просто создать копию документов в On-line версии...и направлять новичков по конкретному адресу...а то ссылка на документ в 500 и более страниц, выглядит как посылание по самому распространённому адресу :-)

DiMKiN
31.03.2010, 15:51
хорошь уже...
тему можно закрыть!

zelenenkiy
22.08.2013, 17:45
Снова поднимаю тему.
Есть ли библиотека с Т триггерами?
Только начал разбираться с КОДЕСИСом в графическом режиме.
Отсутствие Т триггера удивило.
На RS и SR триггере построить не удалось.

Объем знаний у меня размере курса "микрконтроллеры и микропроцессоры". Достаточно давно. Т.е."имею представление"

capzap
22.08.2013, 17:51
Снова поднимаю тему.
Есть ли библиотека с Т триггерами?
Только начал разбираться с КОДЕСИСом в графическом режиме.
Отсутствие Т триггера удивило.
На RS и SR триггере построить не удалось.

Объем знаний у меня размере курса "микрконтроллеры и микропроцессоры". Достаточно давно. Т.е."имею представление"
берете гугл в помощь, ищите нужный триггер на логических элементах, разглядываете картинки и находите как примерно он будет выглядеть, например (http://works.tarefer.ru/96/100017/pics/image004.gif), потом всё это переносите на холст CFC

rovki
22.08.2013, 18:45
Снова поднимаю тему.
Есть ли библиотека с Т триггерами?
Только начал разбираться с КОДЕСИСом в графическом режиме.
Отсутствие Т триггера удивило.
На RS и SR триггере построить не удалось.

Объем знаний у меня размере курса "микрконтроллеры и микропроцессоры". Достаточно давно. Т.е."имею представление"
Сделайте из D триггера - соедините инверсный выход со входом "D" и получите счетный триггер(динамический) без гугла ;) и логических элементов .Импульсы подавайте на вход "С"

Lam-Ka
22.08.2013, 19:11
Сделайте из D триггера - соедините инверсный выход со входом "D" и получите счетный триггер(динамический) без гугла ;) и логических элементов .Импульсы подавайте на вход "С"

так D-триггера в CodeSys тоже нет... (или я плохо искал?:confused: )

smk1635
22.08.2013, 19:34
Пользуйтесь.

Amko
22.08.2013, 19:35
Вам чуть выше привели рисунок, как сделать Т-триггер из элементов CFC. Соорудите свой личный Т-триггер, с дамами и так далее.

Lam-Ka
22.08.2013, 20:22
Пользуйтесь.
Троллинг здесь не к месту.

smk1635
22.08.2013, 20:27
Троллинг здесь не к месту.

И в чем троллинг ?

Lam-Ka
22.08.2013, 20:28
Вам чуть выше привели рисунок, как сделать Т-триггер из элементов CFC. Соорудите свой личный Т-триггер, с дамами и так далее. Моя дама и дешифратор из двоично-десятичного в семиразрядный на 2И-НЕ нарисовать сумеет, но не всем же так повезло.:rolleyes:

А к создателям ФБ и библиотек просьба будет- не ленитесь писать комментарии.

Lam-Ka
22.08.2013, 20:38
И в чем троллинг ?
прошу прощения, все нормально работает, ошибка была моей.

smk1635
22.08.2013, 22:18
прошу прощения, все нормально работает, ошибка была моей.

Бывает. Вы на каком языке пишете?

petera
23.08.2013, 02:51
Если под Т-триггером понимать импульсное реле, то
Решение на ST и FBD
9683 9684

Lam-Ka
23.08.2013, 04:24
Бывает. Вы на каком языке пишете?
CFC в основном, и чуть-чуть ST. Я только осваиваю CodeSys, потому ляпов много бывает. А с Вашим примером у меня просто глупо получилось- блок добалил в POU "test" (специально для проверки идей использую, чтобы основную программу особо не замусоривать) , вход/выход нарисовал, а в главную программу POU "test" не включил, вот он и не работал.

Lam-Ka
23.08.2013, 04:29
Если под Т-триггером понимать импульсное реле, то
Решение на ST и FBD
9683 9684
Ага, я примерно так и делал для входов выбора режима. Только вместо R_trig использовал таймер TP с длиной импульса 5 ms. А вот теперь сомнения взяли- может мой вариант неправильный? :confused:
9685

smk1635
23.08.2013, 09:34
Да триггер решается на простых логических элементах. Мне привычней и удобней писать на FDB.

А раз Вам удобней работать на СFC и Вы читаете логические схемы, то написать нужный блок будет легко.
Сравните схему Т-триггера и его реализацию на CFC. Фактически просто перечертить схему в CDS в виде функционального блока и сохранить
как внутреннюю библиотеку. И у Вас есть нужный FB.

petera
24.08.2013, 11:18
Ага, я примерно так и делал для входов выбора режима. Только вместо R_trig использовал таймер TP с длиной импульса 5 ms. А вот теперь сомнения взяли- может мой вариант неправильный? :confused:
9685
Нет таймер не годится, нужен R-триггер, т.е. элемент с памятью.

Lam-Ka
24.08.2013, 11:58
Нет таймер не годится, нужен R-триггер, т.е. элемент с памятью.
R-триггер, который в CodeSys- не совсем триггер- правильней его стоило бы называть детектором фронта, а роль "ячейки памяти" в нем выполняет локальная переменная. Ну а если внимательно прочитать встроенную в CodeSys справку -


Функциональный блок R_TRIG генерирует импульс по переднему фронту входного сигнала.

Выход Q равен FALSE до тех пор, пока вход CLK равен FALSE. Как только CLK получает значение TRUE, Q устанавливается в TRUE. При следующем вызове функционального блока выход сбрасыва-ется в FALSE. Таким образом, блок выдает единичный импульс при каждом переходе CLK из FALSE в TRUE.

то называть этот ФБ "элементом с памятью" будет неправильно. Собственно, "таймер" ТР, который использовал я, правильней было бы назвать "одновибратор". В целом схемы с R-триггером и таймером ТР работают похоже, за одним исключением- схема с таймером не реагирует на входящие импульсы в течении времени отсчета таймера,- другими словами "антидребезг" по умолчанию :); R-триггер же обработает каждый входящий импульс.

petera
24.08.2013, 15:44
R-триггер, который в CodeSys- не совсем триггер- правильней его стоило бы называть детектором фронта, а роль "ячейки памяти" в нем выполняет локальная переменная. Ну а если внимательно прочитать встроенную в CodeSys справку -

то называть этот ФБ "элементом с памятью" будет неправильно. Собственно, "таймер" ТР, который использовал я, правильней было бы назвать "одновибратор". В целом схемы с R-триггером и таймером ТР работают похоже, за одним исключением- схема с таймером не реагирует на входящие импульсы в течении времени отсчета таймера,- другими словами "антидребезг" по умолчанию :); R-триггер же обработает каждый входящий импульс.
Таким образом R-триггер тоже одновибратор, но с длительностью импульса в один цикл.
С R-триггером схема работает правильно при любой длительности цикла ПЛК.
А вот с ТР таймером, если длительность цикла ПЛК меньше чем заданная величина на входе РТ, то будет дребезг выходной переменной "out".

другими словами "антидребезг" по умолчанию при РТ=5 мс антидребезг ни какой, а если сделать больше, то есть вероятность получить дребезг выходной переменной "out"

Lam-Ka
24.08.2013, 16:23
Таким образом R-триггер тоже одновибратор, но с длительностью импульса в один цикл.
С R-триггером схема работает правильно при любой длительности цикла ПЛК.
А вот с ТР таймером, если длительность цикла ПЛК меньше чем заданная величина на входе РТ, то будет дребезг выходной переменной "out".
при РТ=5 мс антидребезг ни какой, а если сделать больше, то есть вероятность получить дребезг выходной переменной "out"

Спасибо, разобрался. В симуляции-то все работает как надо (тем более что время цикла ПЛК больше чем время ТР-таймера), а в живую- проверить не на чем, увы.

melky
01.11.2013, 13:19
в oscat библиотеки есть то, что нужно. называется FF_DRE Д тригер, на котором все реализуется.
Вот его текст на ST
FUNCTION_BLOCK FF_DRE
VAR_INPUT
SET : BOOL;
D : BOOL;
CLK : BOOL;
RST : BOOL;
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
VAR
edge : BOOL;
END_VAR

(*
version 1.2 30. oct. 2008
programmer hugo
tested by oscat

D-type flip flop with set, reset and rising clock trigger

*)

IF rst OR set THEN
Q := NOT rst;
ELSIF clk AND NOT edge THEN
Q := D;
END_IF;
edge := CLK;

(* revision history
hm 4. aug 2006 rev 1.0
original version

hm 27. dec 2007 rev 1.1
changed code for better performance

hm 30. oct. 2008 rev 1.2
optimized performance
*)

petera
01.11.2013, 13:33
в oscat библиотеки есть то, что нужно. называется FF_DRE Д тригер, на котором все реализуется.
Вот его текст на ST
FUNCTION_BLOCK FF_DRE
VAR_INPUT
SET : BOOL;
D : BOOL;
CLK : BOOL;
RST : BOOL;
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
VAR
edge : BOOL;
END_VAR

(*
version 1.2 30. oct. 2008
programmer hugo
tested by oscat

D-type flip flop with set, reset and rising clock trigger

*)

IF rst OR set THEN
Q := NOT rst;
ELSIF clk AND NOT edge THEN
Q := D;
END_IF;
edge := CLK;

(* revision history
hm 4. aug 2006 rev 1.0
original version

hm 27. dec 2007 rev 1.1
changed code for better performance

hm 30. oct. 2008 rev 1.2
optimized performance
*)
D-триггер не равнозначен T-триггеру. Это два разных триггера.
Т- триггер имеет счетный вход Т. При каждом изменении состояния входа Т из 0 в 1 выход Q триггера меняет свое состояние на противоположное.
D-триггер имеет вход данных D и тактовый вход С(CLK). По фронту импульса на тактовом входе на выходе Q триггера запоминается состояние входа D.
Таким образом, что бы из D-триггера получился Т-триггер нужна обратная связь с выхода Q на вход D.
Для Т-триггера такая обратная связь не нужна.

melky
01.11.2013, 14:10
petera выше rovki написал как из D тригера делается Т тригер. и оно РАБОТАЕТ именно так, как указано. Выход Q через инверсию на D вход. Импульс подавать на CLK вход (поправил ошибку)

Кстати не все можно реализовать из схем на CFC или ST не важно. Потому что тут все происходит последовательно, а в реальной схеме одновременно.