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

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

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

Вид сложного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 будет записано: «Вольтметр удлинения». Таким образом, зная от кого приходят данные, добавляем их в соответствующие массивы. Далее определяем максимум изменения удлинения и соответствующее ему значение усилия. Данные значения записываем в соответствующие индикаторы.

Текст функции NeighborCall программируемого компонента
Рисунок 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).

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

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