PDA

Просмотр полной версии : Помогите понять суть программирования ПЛК



pyonth
01.01.2014, 13:58
Доброго времени суток!

Начну с того, что я знаю. Цикл ПЛК заключается в том, чтобы считать входы --> выполнить программу --> записать выходы. Скажите, каким образом можно подсчитать количество оборотов с учетом того, что это ПЛК и как это будет выглядеть на ST? Т.е. на вход приходит сигнал с датчика и нужно отследить количество оборотов в минуту. Нужно отследить время с начала программы до прихода импульса и подсчитать это время таймером. Потом посчитать по формуле f=1/T, насколько я понимаю.

Ryzhij
01.01.2014, 14:15
Начнём с того, что для импульсов разной частотой применяют разные способы измерения.
Для редких импульсов применяют описанный Вами способ - считают число меток времени за период измеряемого сигнала.
Для частых, напротив, подсчитывают входные импульсы за калиброванный период времени.

Кроме того, никто не использует время цикла ПЛК для временных измерений. Функциональный блок таймера в ПЛК работает по прерываниям от внутренних "часов".

В некоторых моделях ПЛК используются функциональные блоки "быстрых счётчиков", которые работают по прерываниям от некоторых "быстрых" входов, а не по сканированию как с остальными входами.

pyonth
01.01.2014, 15:05
Возможно, я неправильно выразился, я лишь имел ввиду, что именно так выглядит цикл ПЛК
Цикл ПЛК заключается в том, чтобы считать входы --> выполнить программу --> записать выходы.. Но в то же время я не могу понять, как отследить срабатывание датчика. Например, может прийти несколько сигналов от датчика в то время, когда происходит цикл ПЛК. Будет ли работать такой код, например?

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);

ASo
01.01.2014, 15:19
Существуют 2 варианта:
1. Самый распространенный. Цикл ПЛК много короче, чем период срабатывания датчика. Тогда различные триггера вам в помощь.
2. Цикл ПЛК много длинее часты срабатывания датчика. Тогда быстрые входы со счетчиками и анализируйте число срабытаваний в каждом цикле.

pyonth
01.01.2014, 15:23
Спасибо за ответ, а скажите, код выше будет работать? Или не будет работать и почему?

ASo
01.01.2014, 15:32
Нет, потому что надо считать интервал между фронтами импульсов.

pyonth
01.01.2014, 17:49
Нет, потому что надо считать интервал между фронтами импульсов.

Т.е. использовать 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);

Если неправильно, то подскажите как сделать, или может подскажете что почитать по этой теме?

ASo
01.01.2014, 19:12
Нет. Вы теряете один цикл на сброс таймера. Надо работать напрямую с системным временем.
А вообще - все давно придумано. http://www.oscat.de/ блок M_TX

pyonth
01.01.2014, 21:49
А можете подсказать, каким образом можно попрактиковаться? Где можно взять какие-нибудь задания, чтобы вникнуть в специфику ПЛК?

ASo
02.01.2014, 12:39
У ПЛК нет специфики перед обычным программированием, кроме цикличности его работы.

capzap
02.01.2014, 13:20
А можете подсказать, каким образом можно попрактиковаться? Где можно взять какие-нибудь задания, чтобы вникнуть в специфику ПЛК?

http://iq.karelia.ru становитесь лидером и будете разбираться :)