Программируемый компонент в 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).
Таким образом, используя программируемый компонент можно сильно упростить функциональную блок-схему проекта и реализовать более сложные алгоритмы обработки данных.
Файлы, доступные для скачивания
Скачать
Пример применения компонента