Программируемый компонент в ZETVIEW

Программируемый компонент в ZETVIEW, примеры применения компонента для упрощения сложных SCADA-проектов в SCADA системе ZETVIEW

При создании SCADA-проектов в программе ZETVIEW пользователь часто сталкивается с задачами, которые реализовать с помощью функциональной блок-схемы достаточно тяжело (Рисунок 1). Для упрощения решения этих задач, можно воспользоваться компонентом «Программируемый компонент» (Рисунок 2).

Рисунок 1. Приблизительный вид сложного SCADA-проекта

Рисунок 2. Вид сложного SCADA- проекта с использованием программируемого компонента

Рассмотрим достаточно распространенную задачу в области автоматизированного тестирования готового продукта. Например, нам необходимо определить максимальное усилие, которое можно приложить к резинотехническому изделию, при котором оно сохранит свою дальнейшую работоспособность. Для этого, нам необходимо параллельно контролировать давление в прикладывающем к резинотехническому изделию цилиндре и состояние удлинения резинотехнического изделия.

Момент разрыва резинотехнического изделия легко определить по показаниям удлинения. После разрыва, длина резко увеличится. Определив момент разрыва, нам необходимо определить соответствующее усилие, приложенное к резинотехническому изделию, это и есть максимально допустимое усилие. Для реализации описанных выше действий воспользуемся «Программируемым компонентом» . При создании компонента «Программируемый компонент» он инициализируется скриптом по умолчанию:

Рисунок 3. Текст скрипта по умолчанию

Скрипт должен иметь 4 основных метода:

- Initialization(param) – данный метод выполняется при запуске проекта. Его можно использовать для инициализации переменных, чтения конфигурационных файлов и т.д.
- NeighborCall(pType, helpString, param) – данный метод выполняется при подаче значения на вход программируемого компонента. Метод получает следующие аргументы: pType – тип входного параметра, helpString – описатель компонента-источника параметра и param – само значения входного параметра.
- NeighborCallArr(arrSize, helpString, ByRef arrVector) – данный метод вызывается при подаче массива на вход программируемого компонента. Метод получает следующие аргументы: arrSize – размер входного массива, helpString – описатель компонента-источника массива и arrVector – указатель на сам массив значений.
- OnClose(param) – данный метод вызывается в конце использования программируемого компонента, её можно использовать для сохранения конфигурационного файла.

Для хранения истории показаний выделим два глобальных массива exertionArray (массив усилий) и elongationArray (массив удлинений), размерности MAX_ARRAY_SIZE = 500. Дополнительно выделим две переменные, хранящие адрес, куда записывать данные в текущий момент времени: exertionPosWrite (позиция записи усилий) и elongationPosWrite (позиция записи удлинений). При старте SCADA-проекта проинициализируем эти массивы и позиции записи 0.

Рисунок 4. Текст объявления глобальных переменных и их инициализации при старте

Далее добавим в функции NeighborCall обработку входных значений. Для того чтобы отличать от какого компонента пришло значение, добавим проверку helpString. Если пришло значение от компонента «Вольтметр постоянного тока» , измеряющего показания усилия, в helpString будет записано: «Вольтметр усилия». Если от вольтметра, измеряющего показания удлинения, в helpString будет записано: «Вольтметр удлинения». Таким образом, зная от кого приходят данные, добавляем их в соответствующие массивы. Далее определяем максимум изменения удлинения и соответствующее ему значение усилия. Данные значения записываем в соответствующие индикаторы.

Рисунок 5. Текст функции NeighborCall программируемого компонента

Второй способ выдать значения из программируемого компонента является передача данных через выходную ножку программируемого компонента. Для этого необходимо вызвать следующие функции:

- для одиночного значения This.Send(helpString, param, paramType), helpString – текстовый описатель выдаваемого значения, param – значение, paramType – тип значения (1 – float, 14 – double, 4 — строка):

Пример: This.Send(«Максимальное усилие», maxExertion, 1);

- для массива значений необходимо использовать несколько функций и существует ограничение на максимальное количество отсчетов в массиве (500000). Так, необходимо первоначально заполнить внутренний массив программируемого компонента с помощью функции This.PutValueToArray(value, index), где value – значение, index – индекс. Далее, отправить заполненный массив с помощью This.SendArray(helpString, size), где helpString – текстовый описатель выдаваемого массива, size – размер массива:

Пример: For I = 0 To 499 This.PutValueToArray(exertionArray(i),i) Next This.SendArray(«Массив усилий», 500).

Таким образом, используя программируемый компонент можно сильно упростить функциональную блок-схему проекта и реализовать более сложные алгоритмы обработки данных.

Файлы, доступные для скачивания

Пример применения компонента

Связанные материалы