Сообщение от
shamilnizaev@mail.ru
Подскажите как возможно реализовать детектор Импульсов (дискретного сигнала)
Задача:
3 входных сигнала (импульсных) - необходимо определить кто из них сработал первый.
Я предполагаю сделать следующим образом.
Генератор импульса (генерируемый импульс = одному такту работы ПЛК)
Если сигнал пришел в течении данного такта (к примеру одного) то фиксируем значение тригером, как только на тригере появляется 1 останавливаем генератор импульса.
Подскажите вообще имеется ли встроенный детектор например в библиотеке OSCAT или как возможно это реализовать ?
Добрый день.
Если я правильно Вас понял, то в библиотеке Standard.lib есть детекторы импульсов (триггеры) R_TRIG - детектор переднего фронта импульса и F_TRIG - детектор заднего фронта импульса.
В Вашем случае может сработать за один цикл контроллера больше одного дискретного входа?
Если нет, то код проверки будет выглядеть примерно так:
1. Объявление переменных
Код:
var_input
xIsFirstInputLocked : BOOL; // Признак того, что первый вход сработал
xIsSecondInputLocked : BOOL; // Признак того, что второй вход сработал
xIsThirdInputLocked : BOOL; // Признак того, что третий вход сработал
end_var
var_output
m_uiFirstWorkedInput : UINT; // Номер выхода, который замкнулся первым
end_var
var
m_fb_FirstInputDetector : R_TRIG; // Детектор переднего фронта 1-го входа
m_fb_SecondInputDetector : R_TRIG; // Детектор переднего фронта 2-го входа
m_fb_ThirdInputDetector : R_TRIG; // Детектор переднего фронта 3-го входа
end_var
2. ФБ по определению первого сработанного входа (к примеру ФБ - DiscretInputsDetector);
Код:
m_fb_FirstInputDetector (IN := xIsFirstInputLocked);
m_fb_SecondInputDetector (IN := xIsSecondInputLocked);
m_fb_ThirdInputDetector (IN := xIsThirdInputLocked);
if m_fb_FirstInputDetector.Q then
m_uiFirstWorkedInput := 1;
elsif m_fb_SecondInputDetector.Q then
m_uiFirstWorkedInput := 2;
elsif m_fb_SecondInputDetector.Q then
m_uiFirstWorkedInput := 3;
else
m_uiFirstWorkedInput := 0;
end_if
Но такой подход сработает только если у Вас одновременно не могут замкнуться два входа.
Т.к. при замыкании входа с более низким порядковым номером, входы с более высоким номером уже будут игнорироваться.