PSET - программный задатчик

Назначение.
Функциональный блок PSET применяется для формирования выходного аналогового сигнала (тока, напряжения и т.п.) в виде кусочно-ступенчатой функции по заранее заданной программе.
Входные параметры:
|
Название
|
Тип данных
|
Описание
|
|
RUN
|
BOOLEAN
|
|
|
NODE_VECTOR
|
Ссылка
|
Ссылка на двумерный массив вещественных чисел [n, 2], в котором элементы [n, 0] - отдельные значения сигнала Y, а элементы [n, 1] - период времени в миллисекундах, в течение которого значение сигнала Yn будет сохраняться на выходе блока.
|
|
NODE_CNT
|
INTEGER
|
Количество значений сигнала Y из массива NODE_VECTOR, которые будут использованы в процессе работы блока. Если NODE_CNT меньше количества элементов массива, то выходной сигнал формируется только по заданной части значений от Y0 до YNODE_CNT-1, остальные значения не используются.
|
|
LOOP_CNT
|
INTEGER
|
Количество циклов выполнения блока.
|
Выходные параметры:
|
Название
|
Тип данных
|
Описание
|
|
Y
|
FLOAT
|
Выходной сигнал, значения и длительность которого задаются в массиве NODE_VECTOR.
|
|
NODE_CURR
|
INTEGER
|
Номер текущего сигнала из массива NODE_VECTOR, отсчитывается с нуля.
|
|
NODE_ETIME
|
INTEGER
|
Время в миллисекундах, отсчитываемое с начала вывода сигнала Yi.
|
|
NODE_RTIME
|
INTEGER
|
Время в миллисекундах, оставшееся до окончания вывода сигнала Yi и перехода к следующему значению.
|
|
LOOP_CURR
|
INTEGER
|
Номер текущего цикла, отсчитывается с нуля. Работа блока останавливается, если LOOP_CURR=LOOP_CNT.
|
|
COMPLETE
|
BOOLEAN
|
|
|
FAULT
|
INTEGER
|
Код ошибки:
|
Описание алгоритма.
-
Задайте входные параметры. Программа изменения выходного сигнала Y задается в двумерном массиве с указанием отдельных значений сигнала и их продолжительности. Ссылка на массив передается на вход NODE_VECTOR.
-
После запуска блока (RUN=TRUE), на выход Y будет передано первое значение сигнала Y0=NODE_VECTOR[0, 0], которое будет сохраняться в течение времени T0=NODE_VECTOR[0, 1]. При этом номер текущего сигнала NODE_CURR=0 (так как отсчитывается с нуля) и номер текущего цикла LOOP_CURR=0 (тоже отсчитывается с нуля).
-
Затем, на выход Y будет передаваться значение Y1=NODE_VECTOR[1, 0] в течение времени T1=NODE_VECTOR[1, 1]. При этом выходы NODE_CURR=1 (второе значение) и LOOP_CURR=0 (все еще первый цикл).
-
...
-
После завершения вывода последнего значения Yn, блок переходит к следующему циклу и начинает повторно выполнять вывод всех значений из массива NODE_VECTOR. При этом выход LOOP_CURR увеличивается на единицу.
-
После завершения всех циклов (LOOP_CURR=LOOP_CNT) выход COPMLETE=TRUE.
Пример работы блока.
В словаре создается массив NODE_VECTOR[4, 2], где 4 - количество значений сигнала Y (может быть задано любое количество), а 2 - фиксированная размерность (всегда равна двум, иначе блок выведет ошибку). На следующем изображении приведен пример заполнения элементов массива.

Рассмотрим работу блока в редакторе FBD/LD. Добавьте в редактор блок массива NODE_VECTOR и функциональный блок PSET, соедините выход массива с соответствующим входом на блоке PSET. Укажите количество используемых значений из массива и количество циклов, затем запустите блок.

Процесс изменения выходного сигнала Y представлен в виде графика на следующем изображении.

Пример синтаксиса на языке ST.
//вызов функционального блока
Block.PSET(RUN, NODE_VECTOR, 4, 1);
//чтение выходных параметров
Y := Block.Y;
NODE_CURR := Block.NODE_CURR;
NODE_ETIME := Block.NODE_ETIME;
NODE_RTIME := Block.NODE_RTIME;
LOOP_CURR := Block.LOOP_CURR;
COMPLETE := Block.COMPLETE;
FAULT := Block.FAULT;
|
