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

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


Назначение.
Функциональный блок PSET применяется для формирования выходного аналогового сигнала (тока, напряжения и т.п.) в виде кусочно-ступенчатой функции по заранее заданной программе.
 
Входные параметры:
Название
Тип данных
Описание
RUN
BOOLEAN
  • RUN=TRUE - запуск блока на выполнение;
  • RUN=FALSE - остановить выполнение, в выходных параметрах сохраняются последние выведенные значения.
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
  • COMPLETE=TRUE - блок завершил выполнение всех циклов;
  • COMPLETE=FALSE - блок в процессе выполнения.
FAULT
INTEGER
Код ошибки:
  • 1 - вход NODE_CNT <=0 или вход LOOP_CNT<=0. 
  • 2 - заданное на входе NODE_CNT число превышает количество элементов в массиве NODE_VECTOR;
  • 3 - неверный формат массива на входе NODE_VECTOR.
 
Описание алгоритма.
  • Задайте входные параметры. Программа изменения выходного сигнала 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;