OpenSCADA

Документация/API пользователя

This page is a translated version of the page Documents/User API and the translation is 86% complete.

English • ‎mRussian • ‎Українська

До начала программирования в OpenSCADA Вы должны изучить структуру объектов программы (Объектная модель) из руководства по программе OpenSCADA и на рисунке 1.

Рис. 1. Пользовательская объектная модель ядра OpenSCADA.

Из этого документа Вы увидите, что можете, как пользователь, программировать следующие части OpenSCADA:

API пользовательского программирования представляет собой дерево объектов OpenSCADA (Рис.1), каждый объект которого может представлять собственный перечень свойств и функций. Свойства и функции объектов могут использоваться пользователем в процедурах на языках пользовательского программирования OpenSCADA.

На данный момент OpenSCADA предоставляет только один язык текстового программирования — JavaLikeCalc, следовательно Вы также должны его изучить перед началом. Точкой входа для доступа к объектам OpenSCADA (Рис.1) из языка пользовательского программирования JavaLikeCalc является зарезервированное слово "SYS", корневого объекта OpenSCADA. Например, для доступа к функции исходящего транспорта нужно записать: SYS.Transport.Serial.out_ModBus.messIO(mess);.

API объектов, предоставляемых модулями, описывается в собственной документации модулей и тут предоставляются ссылки на неё.

Contents

1 Пользовательский язык программирования JavaLikeCalc

1.1 Элементы языка

Ключевые слова: if, else, while, for, in, break, continue, return, function, using.
Постоянные:

Типы переменных:

Встроенные константы: pi = 3.14159265..., e = 2.71828182..., EVAL_BOOL(2), EVAL_INT(-9223372036854775807), null,EVAL,EVAL_REAL(-1.79E308), EVAL_STR("<EVAL>")
Глобальные атрибуты параметров DAQ (начиная с подсистемы "DAQ" и в виде {Тип модуля DAQ}.{Объект контроллера}.{Параметр}.{Атрибут}).
Функции и параметры объектной модели OpenSCADA.

At.png The EVAL (Error VALue) variants and null are processed specially in conversion one to one depending on used the base type, that is you are free in use only null or EVAL for any cases.

1.2 Операции языка

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

СимволОписание
()Вызов функции.
{}Программные блоки.
++Инкремент (пост и пре).
--Декремент (пост и пре).
-Унарный минус.
!Логическое отрицание.
~Побитовое отрицание.
*Умножение.
/Деление.
%Остаток от целочисленного деления.
+Сложение
-Вычитание
<<Поразрядный сдвиг влево
>>Поразрядный сдвиг вправо
>Больше
>=Больше или равно
<Меньше
<=Меньше или равно
==Равно
!=Не равно
|Поразрядное "ИЛИ"
&Поразрядное "И"
^Поразрядное "Исключающее ИЛИ"
&&Логический "И"
||Логический "ИЛИ"
?:Условная операция "i=(i<0)?0:i;"
=Присваивание.
+=Присваивание со сложением.
-=Присваивание с вычитанием.
*=Присваивание с умножением.
/=Присваивание с делением.

1.3 Встроенные функции языка

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

Для обеспечения высокой скорости работы в математических вычислениях модуль предоставляет встроенные математические функции, которые вызываются на уровне команд виртуальной машины:

1.4 Операторы языка

Общий перечень операторов языка:

1.4.1 Условные операторы

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

Условие внутри выражения строится на операциях '?' и ':'. В качестве примера можно записать следующее практическое выражение:

st_open = (pos >= 100) ? true : false;

Что читается как — если переменная pos больше или равна 100, то переменной st_open присваивается значение true, иначе — false.

Глобальное условие строится на основе условных операторов "if" и "else". В качестве примера можно привести тоже выражение, но записанное другим способом:

if(pos > 100) st_open = true; else st_open = false;

1.4.2 Циклы

Поддерживаются три типа циклов: while, for и for-in. Синтаксис циклов соответствует языкам программирования: C++, Java и JavaScript.

Цикл while, в общем, записывается следующим образом: while({условие}) {тело цикла};
Цикл for записывается следующим образом: for({пре-инициализ};{условие};{пост-вычисление}) {тело цикла};
Цикл for-in записывается следующим образом: for({переменная} in {объект}) {тело цикла};
Где:

{условие} — выражение, определяющее условие;
{тело цикла} — тело цикла множественного исполнения;
{пре-инициализ} — выражение предварительной инициализации переменных цикла;
{пост-вычисление} — выражение модификации параметров цикла после очередной итерации;
{переменная} — переменная, которая будет содержать имя свойства объекта при переборе;
{объект} — объект для которого осуществляется перебор свойств.

1.4.3 Внутренние функции

Язык поддерживает определение и вызов внутренних функций. Для определения внутренней функции используется ключевое слово "function" и в целом определение имеет синтаксис: function {имяФ} ({пер1}, {пер2}, ... {перN}) { {тело функции} }. Определение внутренней функции внутри другой недопустимо однако допустим вызов ранее определённой.

Вызов внутренней функции осуществляется в типовой способ, как процедура {имяФ}({var1}, {var2}, ... {varN}); или как функция {перРез} = {имяФ}({пер1}, {пер2}, ... {перN});. Вызов внутренних функций допустим только после их декларации выше!

Все переменные, определённые в основном теле, недоступны в середине внутренних функций и могут быть переданы через двухсторонние аргументы вызываемой внутренней функции или через аргументы основной функции. Все переменные, определённые в середине внутренней функции, имеют собственную область имён и недоступны из основного тела, или любой другой внутренней функции, и могут быть переданы в основное тело через двухсторонние аргументы, результат вызываемой внутренней функции или через аргументы основной функции. Переменные внутренней функции регистрируются для сохранения/восстановления их контекста после второго и более входа в функцию, т.е. они целиком поддерживают рекурсивные вызовы!

Оператор "return", в середине внутренней функции, осуществляет контролируемое её завершение и помещение указанной переменной, или результата выражения, как результат вызываемой внутренней функции.

Пример типового определения и использования внутренней функции представлен далее:

function sum(a, b, c, d) { return a + ((b==null)?0:b) + ((c==null)?0:c) + ((d==null)?0:d); }
rez = sum(1, 2);

1.4.4 Специальные символы строковых переменных

Языком предусмотрена поддержка следующих специальных символов строковых переменных:

"\n" — перевод строки;
"\t" — символ табуляции;
"\b" — забой;
"\f" — перевод страницы;
"\r" — возврат каретки;
"\\" — сам символ '\';
"\041" — символ '!', записанный восьмеричным числом;
"\x21" — символ '!', записанный шестнадцатеричным числом.


2 Общесистемные пользовательские объекты

JavaLikeCalc предоставляет поддержку типа данных объект "Object". Объект представляет собой ассоциативный контейнер свойств и функций. Свойства могут содержать как данные четырёх базовых типов, так и другие объекты. Доступ к свойствам объекта может осуществляться посредством записи имён свойств к объекту obj.prop, через точку, а также посредством заключения имени свойства в квадратные скобки obj["prop"]. Очевидно, что первый механизм статичен, а второй позволяет указывать имя свойства через переменную. Удалить свойство объекта можно директивой "delete". Имя свойства через точку не должно начинаться с цифры и содержать символы операций, иначе, для первой цифры, должен использоваться префикс объектаSYS.BD.SQLite.db_1s, или осуществляться запись в квадратных скобках — SYS.BD.SQLite["1+s"], для символов операций в названии. Чтение неопределённого свойства вернёт null-EVAL. Создание объекта осуществляется посредством ключевого слова new: varO = new Object(). Базовое определение объекта не содержит функций. Операции копирования объекта, на самом деле, делают ссылку на исходный объект. При удалении объекта осуществляется уменьшение счётчика ссылок, а при достижении счётчика нуля, объект удаляется физически.

Разные компоненты OpenSCADA могут доопределять базовый объект особыми свойствами и функциями. Стандартным расширением объекта является массив "Array", который создаётся командой varO = new Array(prm1,prm2,prm3,...,prmN). Перечисленные через запятую параметры помещаются в массив в исходном порядке. Если параметр только один то массив инициируется указанным количеством пустых элементов. Особенностью массива является то, что он работает со свойствами, как с индексами и основным механизмом обращения является заключение индекса в квадратные скобки arr[1]. Массив хранит свойства в собственном контейнере одномерного массива. Цифровые свойства массива используются для доступа непосредственно к массиву, а символьные работают как свойства объекта. Детальнее про свойства и функции массива можно прочитать по ссылке.

Объект регулярного выражения "RegExp" создаётся командой varO = new RegExp(pat, flg), где pat — шаблон регулярного выражения, а flg — флаги поиска. Объект работы с регулярными выражениями основан на библиотеке "PCRE". При глобальном поиске устанавливается атрибут объекта "lastIndex", что позволяет продолжить поиск при следующем вызове функции. В случае неудачного поиска атрибут "lastIndex" сбрасывается в ноль. Детальнее про свойства и функции объекта регулярного выражения можно прочитать по ссылке.

Для произвольного доступа к аргументам функции предусмотрен объект аргументов, обратиться к которому можно посредством символа "arguments". Этот объект содержит свойство "length" с количеством аргументов у функции и позволяет обратиться к значению аргумента посредством его номера или идентификатора. Рассмотрим перебор аргументов по циклу:

args = new Array();
for(var i = 0; i < arguments.length; i++)
  args[i] = arguments[i];

Частичными свойствами объекта обладают и базовые типы. Свойства и функции базовых типов приведены ниже:

  • real toReal(); — читает логическое значение как вещественное число.
  • int toInt(); — читает логическое значение как целое число.
Свойства:
  • MAX_VALUE — максимальное значение;
  • MIN_VALUE — минимальное значение;
  • NaN — недостоверное значение.
Функции:
  • bool isEVal(); bool isNaN( ); — проверяет значение на null-EVAL, и не число для Вещественного.
  • string toExponential( int numbs = -1 ); — возвращает строку отформатированного числа, в экспоненциальной нотации и количеством значащих цифр numbs. Если numbs отсутствует то цифр будет столько сколько необходимо.
  • string toFixed( int numbs = 0, int len = 0, bool sign = false ); — возвращает строку отформатированного числа в нотации с фиксированной точкой и количеством цифр после десятичной точки numbs, с минимальной длиной len и обязательным знаком sign. Если numbs отсутствует то количество цифр после десятичной точки равно нулю.
  • string toPrecision( int prec = -1 ); — возвращает строку отформатированного числа с количеством значащих цифр prec.
  • string toString( int base = 10, int len = -1, bool sign = false ); — возвращает строку отформатированного числа целого типа с базой представления base (2-36), с минимальной длиной len и обязательным знаком sign.
  • real toReal(); — читает целое-вещественное значение как вещественное число.
  • int toInt(); — читает целое-вещественное значение как целое число.
Свойства:
  • int length — длина строки.
Функции:
  • bool isEVal(); — проверяет значение на null-EVAL.
  • bool isNaN( bool whole = true ); — проверяет строку на не число, и в целом whole.
  • string charAt( int symb, string type = "" ); — достаёт из строки символ под номером symb типа type. Следующие типы символа поддерживаются: ""-ASCII и простой один байт, UTF-8, UTF-16, UTF-32. В случае с UTF-8, позиция символа symb меняется в позицию следующего символа поскольку длина символов этого типа переменная.
  • int charCodeAt( int symb, string type = "" ); — достаёт из строки код символа symb типа type. Следующие типы символа поддерживаются: ""-ASCII и простой один байт, UTF-8, UTF-16, UTF-16LE, UTF-16BE, UTF-32, UTF-32LE, UTF-32BE. В случае с UTF-8, позиция символа symb меняется в позицию следующего символа поскольку длина символов этого типа переменная.
  • string concat( string val1, string val2, ... ); — возвращает новую строку, сформированную путём присоединения значений val1 и т.д. к исходной.
  • int indexOf( string substr, int start = 0 ); — возвращает позицию искомой строки substr в исходной строке, начиная с позиции start. Если исходная позиция не указана то поиск начинается с начала. Если искомой строки не найдено то возвращается "-1".
  • int lastIndexOf( string substr, int start = {end} ); — возвращает позицию искомой строки substr в исходной строке, начиная с позиции start, при поиске с конца. Если исходная позиция не указана то поиск начинается с конца. Если искомой строки не найдено то возвращается "-1".
  • int search( string pat, string flg = "" ); — ищет в строке по шаблону pat и флагами шаблона flg. Возвращает положение найденной подстроки иначе "-1".
var rez = "Java123Script".search("script","i");  // rez = 7
  • int search( RegExp pat ); — ищет в строке по шаблону "RegExp" pat. Возвращает положение найденной подстроки иначе "-1".
var rez = "Java123Script".search(new RegExp("script","i"));  // rez = 7
  • Array match( string pat, string flg = "" ); — ищет в строке по шаблону pat и флагами шаблона flg. Возвращает массив с найденной подстрокой (0) и подвыражениями (>1). Атрибут "index" массива устанавливается в позицию найденной подстроки. Атрибут "input" устанавливается в исходную строку. Атрибут "err" устанавливается в код ошибки операции.
var rez = "1 плюс 2 плюс 3".match("\\d+","g");  // rez = [1], [2], [3]
  • Array match( TRegExp pat ); — ищет в строке по шаблону "RegExp" pat. Возвращает массив с найденной подстрокой (0) и подвыражениями (>1). Атрибут "index" массива устанавливается в позицию найденной подстроки. Атрибут "input" устанавливается в исходную строку. Атрибут "err" устанавливается в код ошибки операции.
var rez = "1 плюс 2 плюс 3".match(new RegExp("\\d+","g"));  // rez = [1], [2], [3]
  • string slice( int beg, int end ); string substring( int beg, int end ); — возвращает подстроку извлечённую из исходной, начиная с позиции beg и по end (не включая), нумерация с нуля. Если значение начала или конца отрицательно, то отсчёт ведётся с конца строки. Если конец не указан, то концом является конец строки. Например, конструкция substring(-2) вернет последние два символа строки.
  • Array split( string sep, int limit ); — возвращает массив элементов строки, разделённых sep и с ограничением количества элементов limit.
  • Array split( RegExp pat, int limit ); — возвращает массив элементов строки, разделённых шаблоном "RegExp" pat и с ограничением количества элементов limit.
rez = "1,2, 3 , 4 ,5".split(new RegExp("\\s*,\\s*"));  // rez = [1], [2], [3], [4], [5]
  • string insert( int pos, string substr ); — вставляет подстроку substr в позицию pos текущей строки.
  • string replace( int pos, int n, string str ); — заменяет подстроки с позиции pos и длиной n в текущей строке, на строку str.
rez = "Javascript".replace(4,3,"67");  // rez = "Java67ipt"
  • string replace( string substr, string str ); — заменяет все подстроки substr на строку str.
rez = "123 321".replace("3","55");  // rez = "1255 5521"
  • string replace( RegExp pat, string str ); — заменяет подстроки по шаблону pat на строку str.
rez = "value = \"123\"".replace(new RegExp("\"([^\"]*)\"","g"),"``$1''"));  // rez = "value = ``123''"
  • real toReal(); — преобразует текущую строку в вещественное число.
  • int toInt( int base = 10 ); — преобразует текущую строку в целое число, в соответствии с основанием base (от 2 до 36). Если основание равно 0 то будет учитываться префиксная запись для определения основания (123-десятичное; 0123-восьмеричное; 0x123-шестнадцатеричное).
  • string {parse,parseEnd}( int pos, string sep = ".", int off = {0,{length}}, bool mergeSepSymb = false ); — выделяет из исходной строки элемент pos, для разделителя элементов sep и от смещения off (останов на начале следующего токена, или конца для parseEnd). mergeSepSymb определяет разрешение объединения группы одинаковых символов в один разделитель. Результирующее смещение помещается назад в off. parseEnd() делает тоже самое, но с конца.
  • string parseLine( int pos, int off = 0 ); — выделяет строку с номером pos и от смещения off (останов на начале следующего токена). Результирующее смещение помещается назад в off.
  • string parsePath( int pos, int offCmptbl = 0, int off = 0 ); — выделяет из исходного пути элемент pos и от смещения off (останов на начале следующего токена) или offCmtbl (останов на следующем символе конца текущего токена — для совместимости). Результирующее смещение помещается назад в off или offCmtbl.
  • string parsePathEnd( int pos, int off = {length} ); — выделяет из конца строки исходного пути элемент pos и от смещения off (останов на конце следующего токена). Результирующее смещение помещается назад в off.
  • string path2sep( string sep = "." ); — преобразует путь в текущей строке в строку с разделителем sep.
  • string trim( string cfg = " \n\t\r" ); — обрезает строку с начала и конца, для символов cfg.


2.1 Объект массива (Array)

Особенностью массива является то, что он работает со свойствами, как с индексами, и полное их именование бессмысленно, а значит доступен только механизм обращения заключением индекса в квадратные скобки "arr[1]". Массив хранит свойства в собственном контейнере одномерного массива. Цифровые свойства массива используются для доступа непосредственно к массиву, а символьные работают как свойства объекта.

Массив предоставляет специальное свойство "length", для получения размера массива "var = arr.length;". Также массив предоставляет следующие функции:

2.2 Объект регулярного выражения (RegExp)

Объект работы с регулярными выражениями, основан на библиотеке PCRE. При глобальном поиске устанавливается атрибут объекта "lastIndex", что позволяет продолжить поиск при следующем вызове функции. В случае неудачного поиска атрибут "lastIndex" сбрасывается в ноль.

В качестве аргументов создания объекта передаётся строка с текстом регулярного выражения и флаги в виде строки символов:

Свойства объекта:

Функции объекта:

2.3 Объект узла-тега XML (XMLNodeObj)

Функции:

0x01 — полная загрузка, с блоками текста и комментариями в специальных узлах;
0x02 — не удалять пробелы в начале и конце текста тега.
0x01 — прерывать строку перед открывающим тегом;
0x02 — прерывать строку после открывающего тега;
0x04 — прерывать строку после закрывающего тега;
0x08 — прерывать строку после текста;
0x10 — прерывать строку после инструкции;
0x1E — прерывать строку после всех;
0x20 — вставлять стандартный XML-заголовок;
0x40 — вставлять стандартный XHTML-заголовок;
0x80 — очищать сервисные теги: <??>, <!-- -->;
0x100 — не кодировать наименований тегов;
0x200 — не кодировать наименований атрибутов;
0x400 — защита бинарных символов [\x0-\x8\xB-\xC\x0E-\x1F] и ошибочных UTF-8.

3 Program-system (SYS)

Object functions:

4 Any object (TCntrNode) of OpenSCADA objects tree (SYS.*)

Object functions:

5 Подсистема "Безопасность" (SYS.Security)

Функции объекта подсистемы (SYS.Security):

user — пользователь проверки доступа;
mode — режим доступа (4-R, 2-W, 1-X);
owner — владелец ресурса;
group — группа ресурса;
access — режим доступа к ресурсу (RWXRWXRWX — 0777).

Функции объекта "Пользователь" (SYS.Security["usr_{User}"]):

Функции объекта "Группа пользователей" (SYS.Security["grp_{Group}"]):

6 Подсистема "БД" (SYS.BD)

Функции объекта "БД" (SYS.BD["TypeDB"]["DB"]):

Функции объекта "Таблица" (SYS.BD["TypeDB"]["DB"]["Table"]):

7 Подсистема "Сбор данных" (SYS.DAQ)

Функции объекта подсистемы (SYS.DAQ):

Функции объекта контроллера (SYS.DAQ["Modul"]["Controller"]):

Функции объекта параметра контроллера (SYS.DAQ["Modul"]["Controller"]["Parameter"]):

Функции объекта атрибута параметра контроллера (SYS.DAQ["Modul"]["Controller"]["Parameter"]["Attribute"]):

Функции объекта библиотеки шаблона (SYS.DAQ[tmplb_Lib"]) и шаблона (SYS.DAQ[tmplb_Lib"]["Tmpl"]) параметра контроллера:

7.1 Модуль DAQ.JavaLikeCalc

Объектная модель пользователя модуля JavaLikeCalc.

Объект "Библиотека функций" (SYS.DAQ.JavaLikeCalc["lib_Lfunc"])

Объект "Пользовательская функция" (SYS.DAQ.JavaLikeCalc["lib_Lfunc"]["func"])

7.2 Модуль DAQ.LogicLev

Объект "Параметр" [this]

7.3 Модуль DAQ.BlockCalc

Объектная модель пользователя модуля BlockCalc.

Объект "Блок" (SYS.DAQ.BlockCalc["cntr"]["blk_block"])

7.4 Модуль DAQ.ModBus

Объектная модель пользователя модуля ModBus.

Объект "Контроллер" [this.cntr()]

Объект "Параметр" [this]

7.5 Модуль DAQ.Siemens

Объект "Параметр" [this]

7.6 Модуль DAQ.OPC_UA

Объект "Параметр" [this]


8 Подсистема "Архивы-История" (SYS.Archive)

Функции объекта подсистемы:

Функции объекта архиватора сообщений (SYS.Archive["mod_Modul"]["mess_Archivator"]):

Функции объекта архиватора значений (SYS.Archive["val_Modul"]["val_Archivator"]):

Функции объекта архива (SYS.Archive["va_Archive"]):

9 Subsystem "Transports" (SYS.Transport)

Functions of the subsystem object:

"{TrModule}.[out_]{TrID}[:{TrAddr}]" — typical output with automatic creation TrID at it missing and allowing TrAddr;
"{TrModule}.in_{TrID}:{RemConId}" — initiative input with the connection identifier in RemConId.
  • TrModule — transport module, as is Sockets, SSL, Serial;
  • TrID — transport identifier;
  • TrAddr — transport specific address;
  • RemConId — remote initiative connection ID.

Functions of the input transport object (SYS.Transport["Modul"]["in_Transp"]):

Functions of the output transport object (SYS.Transport["Modul"]["out_Transp"]):

10 Подсистема "Протоколы" (SYS.Protocols)

10.1 Модуль Protocol.HTTP

Входная часть объекта модуля (SYS.Protocol.HTTP.{In})


11 Subsystem "User interfaces" (SYS.UI)

Functions of the subsystem object:

11.1 Модуль QTStarter

Объект модуля (SYS.UI.QTStarter)

11.2 Модуль UI.VCAEngine

User object model of the module VCAEngine.

Object "Session" ( this.ownerSess() )

Object "Widget" (this)

//Adds the new widget, based at the text primitive
nw = this.wdgAdd("nw", "New widget", "/wlb_originals/wdg_Text");
nw.attrSet("geomX", 50).attrSet("geomY", 50);
//Sets the link to the parameter for the eight trend
this.linkSet("el8.name", "prm:/LogicLev/experiment/Pi", true);

Объект "Виджет", примитива "Документ" (this)


12 Подсистема "Специальные" (SYS.Special)

12.1 Модуль Библиотека системного API среды пользовательского программирования (Special.FLibSYS)

Объект "Библиотека функций" (SYS.Special.FLibSYS)

Объект "Пользовательская функция" (SYS.Special.FLibSYS["funcID"])

12.2 Модуль Библиотека стандартных математических функций (Special.FLibMath)

Объект "Библиотека функций" (SYS.Special.FLibMath)

Объект "Пользовательская функция" (SYS.Special.FLibMath["funcID"])

12.3 Модуль Библиотека функций совместимости со SCADA Complex1 фирмы ООО НИП "DIYA" (Special.FLibComplex1)

Объект "Библиотека функций" (SYS.Special.FLibComplex1)

Объект "Пользовательская функция" (SYS.Special.FLibComplex1["funcID"])


13 Библиотеки функций пользователя

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

Наименование Версия Лицензия Источник Языки
Библиотеки источников данных, служб и обработки
Основная библиотека 2.1 GPLv2 OscadaLibs.db (SQL, GZip) > DAQ.tmplb_base en, uk, ru
Библиотека промышленных устройств 3.0 GPLv2 OscadaLibs.db (SQL, GZip) > DAQ.tmplb_DevLib en, uk, ru
Библиотека низкоуровневых сенсоров и чипов 1.6 GPLv2 OscadaLibs.db (SQL, GZip) > DAQ.tmplb_LowDevLib en, uk, ru
Библиотека сервисных процедур 1.2 GPLv2 OscadaLibs.db (SQL, GZip) > DAQ.JavaLikeCalc.servProc en, uk, ru
Библиотека элементов регулирования 1.0 GPLv2 OscadaLibs.db (SQL, GZip) > DAQ.JavaLikeCalc.regEl en, uk, ru
Библиотека моделей аппаратов технологических процессов 2.0 GPLv2 OscadaLibs.db (SQL, GZip) > DAQ.JavaLikeCalc.techApp en, uk, ru
Библиотеки графических элементов OpenSCADA модуля UI.VCAEngine
Библиотека основных элементов интерфейса пользователя 2.1 GPLv2 vcaBase.db (SQL, GZip) > VCA.wlb_Main en, uk, ru
Библиотека элементов мнемосхем интерфейса пользователя 1.0 GPLv2 vcaBase.db (SQL, GZip) > VCA.wlb_mnEls en, uk, ru
Библиотека электрических элементов пользовательского интерфейса 2.0 GPLv2 vcaElectroEls.db (SQL, GZip) > VCA.wlb_ElectroEls en, uk, ru
Комбинированные библиотеки
Библиотека отчётов и документов 2.0, 2.1 GPLv2

OscadaLibs.db (SQL, GZip) > DAQ.JavaLikeCalc.doc
vcaBase.db (SQL, GZip) > VCA.wlb_doc

en, uk, ru
Рецепты 1.1, 1.1 GPLv2

OscadaLibs.db (SQL, GZip) > DAQ.tmplb_PrescrTempl
vcaBase.db (SQL, GZip) > VCA.wlb_prescr

en, uk, ru


14 Ссылки

Documents/User_API/ru - GFDLMarch 2024OpenSCADA 0.9.7