Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
R-триггер, который в CodeSys- не совсем триггер- правильней его стоило бы называть детектором фронта, а роль "ячейки памяти" в нем выполняет локальная переменная. Ну а если внимательно прочитать встроенную в CodeSys справку -
то называть этот ФБ "элементом с памятью" будет неправильно. Собственно, "таймер" ТР, который использовал я, правильней было бы назвать "одновибратор". В целом схемы с R-триггером и таймером ТР работают похоже, за одним исключением- схема с таймером не реагирует на входящие импульсы в течении времени отсчета таймера,- другими словами "антидребезг" по умолчанию ; R-триггер же обработает каждый входящий импульс.Функциональный блок R_TRIG генерирует импульс по переднему фронту входного сигнала.
Выход Q равен FALSE до тех пор, пока вход CLK равен FALSE. Как только CLK получает значение TRUE, Q устанавливается в TRUE. При следующем вызове функционального блока выход сбрасыва-ется в FALSE. Таким образом, блок выдает единичный импульс при каждом переходе CLK из FALSE в TRUE.
Что нельзя запрограммировать- приходиться паять.
Таким образом R-триггер тоже одновибратор, но с длительностью импульса в один цикл.
С R-триггером схема работает правильно при любой длительности цикла ПЛК.
А вот с ТР таймером, если длительность цикла ПЛК меньше чем заданная величина на входе РТ, то будет дребезг выходной переменной "out".
при РТ=5 мс антидребезг ни какой, а если сделать больше, то есть вероятность получить дребезг выходной переменной "out"другими словами "антидребезг" по умолчанию
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
в 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.
Для Т-триггера такая обратная связь не нужна.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
petera выше rovki написал как из D тригера делается Т тригер. и оно РАБОТАЕТ именно так, как указано. Выход Q через инверсию на D вход. Импульс подавать на CLK вход (поправил ошибку)
Кстати не все можно реализовать из схем на CFC или ST не важно. Потому что тут все происходит последовательно, а в реальной схеме одновременно.
Последний раз редактировалось melky; 01.11.2013 в 14:20.