Разработка SCL программ
S7-SCL V5.1 для S7-300/S7-400
A5E00059543-01
2-23
Раздел операторов
Этот раздел состоит из следующих логических блоков:
BEGIN
(***********************************************************
Часть 1 : Получение измеренных величин. Если переменная
"newval" изменена, вводится измеренная величина. Операция MOD
используется для реализации кольцевого буфера измеренных
величин.
**********************************************)
IF newval <> oldval THEN
pointer := pointer MOD QUANTITY;
measvals[pointer] := measval_in;
pointer := pointer + 1;
END_IF;
oldval := newval;
(************************************************************
Часть 2 : Начало сортировки и вычислений
Если изменена переменная "resort", начинается сортировка
кольцевого буфера и выполнение вычислений с результатами
измерений. Результаты хранятся в новом массиве "calcbuffer".
************************************************************)
IF resort <> oldsort THEN
pointer := 0; //Сброс указателя кольцевого буфера
eval_instance(sortbuffer := measvals); //Вызов EVALUATE
END_IF;
oldsort := resort;
resultbuffer := eval_instance.calcbuffer;//Квадрат и
//квадратный корень
(************************************************************
Часть 3 : Анализ кодов и подготовка вывода: Если переменная
"newsel" изменилась, код для адресации элемента массива для
вывода переопределяется: Соответствующие биты переменной
"selection" выделяются маской и преобразуются в целое. Выход
выбирается в зависимости от установки ключей "funct_sel" и
"squareroot"/"square".
************************************************************)
IF newsel <> oldsel THEN
address := WORD_TO_INT(SHR(IN := selection, N := 12) AND 16#0007);
END_IF;
oldsel := newsel;
IF funct_sel THEN
result_out := resultbuffer[address].square;
ELSE
result_out := resultbuffer[address].squareroot;
END_IF;
measval_out := measvals[address];//Вывод измеренной величины
END_FUNCTION_BLOCK