Просмотр полной версии : Помогите понять суть программирования ПЛК
Доброго времени суток!
Начну с того, что я знаю. Цикл ПЛК заключается в том, чтобы считать входы --> выполнить программу --> записать выходы. Скажите, каким образом можно подсчитать количество оборотов с учетом того, что это ПЛК и как это будет выглядеть на ST? Т.е. на вход приходит сигнал с датчика и нужно отследить количество оборотов в минуту. Нужно отследить время с начала программы до прихода импульса и подсчитать это время таймером. Потом посчитать по формуле f=1/T, насколько я понимаю.
Начнём с того, что для импульсов разной частотой применяют разные способы измерения.
Для редких импульсов применяют описанный Вами способ - считают число меток времени за период измеряемого сигнала.
Для частых, напротив, подсчитывают входные импульсы за калиброванный период времени.
Кроме того, никто не использует время цикла ПЛК для временных измерений. Функциональный блок таймера в ПЛК работает по прерываниям от внутренних "часов".
В некоторых моделях ПЛК используются функциональные блоки "быстрых счётчиков", которые работают по прерываниям от некоторых "быстрых" входов, а не по сканированию как с остальными входами.
Возможно, я неправильно выразился, я лишь имел ввиду, что именно так выглядит цикл ПЛК
Цикл ПЛК заключается в том, чтобы считать входы --> выполнить программу --> записать выходы.. Но в то же время я не могу понять, как отследить срабатывание датчика. Например, может прийти несколько сигналов от датчика в то время, когда происходит цикл ПЛК. Будет ли работать такой код, например?
FUNCTION_BLOCK RTRIG_O
VAR_INPUT
xVar: BOOL;
END_VAR
VAR_OUTPUT
END_VAR
VAR
timer: TON;
time_end: TIME;
spped_rotate: REAL;
END_VAR
IF xVar THEN
time_end:=timer.ET;
spped_rotate:=60/TIME_TO_REAL(time_end);
END_IF
timer(IN:=NOT xVar, PT:=T#60s);
Существуют 2 варианта:
1. Самый распространенный. Цикл ПЛК много короче, чем период срабатывания датчика. Тогда различные триггера вам в помощь.
2. Цикл ПЛК много длинее часты срабатывания датчика. Тогда быстрые входы со счетчиками и анализируйте число срабытаваний в каждом цикле.
Спасибо за ответ, а скажите, код выше будет работать? Или не будет работать и почему?
Нет, потому что надо считать интервал между фронтами импульсов.
Нет, потому что надо считать интервал между фронтами импульсов.
Т.е. использовать R_TRIG?
RTR : R_TRIG;
RTR(CLK:=xVar);
IF RTR.Q THEN
time_end:=timer.ET;
spped_rotate:=60/TIME_TO_REAL(time_end);
END_IF
timer(IN:=NOT RTR.Q, PT:=T#60s);
Если неправильно, то подскажите как сделать, или может подскажете что почитать по этой теме?
Нет. Вы теряете один цикл на сброс таймера. Надо работать напрямую с системным временем.
А вообще - все давно придумано. http://www.oscat.de/ блок M_TX
А можете подсказать, каким образом можно попрактиковаться? Где можно взять какие-нибудь задания, чтобы вникнуть в специфику ПЛК?
У ПЛК нет специфики перед обычным программированием, кроме цикличности его работы.
А можете подсказать, каким образом можно попрактиковаться? Где можно взять какие-нибудь задания, чтобы вникнуть в специфику ПЛК?
http://iq.karelia.ru становитесь лидером и будете разбираться :)
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot