Среда разработки Unimod PRO 2 (версия 2.3.40)
 Руководство по программированию
×

Витки


Витки используются для присвоения состояния входного дискретного сигнала булевской переменной. В языке LD используются шесть видов витков: прямой, инвертированный, SET-виток, RESET-виток, а также витки по переднему и заднему фронту.
Прямой виток.
Прямой виток записывает поступающее с линии логическое состояние в выходную или внутреннюю булевскую переменную и пропускает поступившее значение на выход. Для входной переменной присваивание не поддерживается.
Синтаксис на языке ST:
out1 := in1;
out2 := in2;
Инвертированный виток.
Инвертированный виток записывает инвертированное логическое состояние, поступающее с линии, в выходную или внутреннюю булевскую переменную. При этом на выход пропускается поступившее значение, без изменения. Для входной переменной присвоение не поддерживается.
Синтаксис на языке ST:
out_1 := NOT (in1);
out_2 := NOT(in2);
 
SET-виток.
Если на вход SET-витка поступает логический сигнал TRUE, он записывается в выходную или внутреннюю булевскую переменную, которая сохраняет полученное значение, пока не будет инвертирована витком RESET. При этом входной логический сигнал передается на выход без изменения.
Синтаксис на языке ST:
//использование SET-витка
IF (in1) THEN
out := true;
END_IF;
//использование RESET-витка
IF (in2) THEN
out := false;
END_IF;
 
RESET-виток.
Если на вход RESET-витка поступает логический сигнал TRUE, в выходную или внутреннюю булевскую переменную записывается значение FALSE, которое сохраняется, пока переменная не будет инвертирована витком SET. При этом входной логический сигнал передается на выход без изменения.
Синтаксис на языке ST:
//использование RESET-витка
IF (in1) THEN
       out := false;
END_IF;
//использование SET-витка
IF (in2) THEN
out := true;
END_IF;
 
Виток по переднему фронту.
Если сигнал на входе витка изменяется с логического нуля на логическую единицу (FALSE → TRUE), в выходную или внутреннюю булевскую переменную до конца текущего цикла контроллера записывается значение TRUE. Во всех остальных случаях переменная принимает значение FALSE. При этом входной логический сигнал передается на выход без изменения.
Синтаксис на языке ST:
//in1_prev - значение переменной in1 в предыдущем цикле
IF (in1 AND NOT(in1_prev)) THEN
out := true;
ELSE
out := false;
END_IF;
 
input1prev := input1;
 
Виток по заднему фронту.
Если сигнал на входе витка изменяется с логической единицы на логический ноль (TRUE → FALSE), в выходную или внутреннюю булевскую переменную до конца текущего цикла контроллера записывается значение TRUE. Во всех остальных случаях переменная принимает значение FALSE. При этом входной логический сигнал передается на выход без изменения.
Синтаксис на языке ST:
//in1_prev - значение переменной in1 в предыдущем цикле
IF (NOT(in1) AND in1_prev) THEN
out := true;
ELSE
out := false;
END_IF;
 
input1prev := input1;