Работа со скриптами (Script) в IntegraXor |
|
SCADA система IntegraXor поддерживает написание скриптов на JavaScript. Также, к стандартному набору, в системе добавлены дополнительные функции, обеспечивающие большую гибкость при реализации поставленных задач.
Использование скриптов дает неограниченные возможности для разработчика в процессе реализации задач по автоматизации технологических процессов.
Большинство скриптов (сценариев) могут быть размещены и выполняться в браузере или на стороне клиента. Однако, существуют моменты, когда некоторые алгоритмы не должны взаимодействовать с пользователем через веб-страницу. Или, некоторые критические алгоритмы должны выполняться постоянно, не зависимо от того, какую страницу в данный момент просматривает пользователь, или даже, если браузер на стороне пользователя вообще закрыт. Такие скрипты могут выполняться на стороне сервера, тем более, если в них используются данные из тегов.
Для определения скриптов, необходимо выбрать пункт "Script" на панели навигатора IntegraXor Editor. В появившемся окне отображается таблица скриптов, определенных в проекте.
Для каждого скрипта задается ряд стандартных свойств:
- Enable/Disable (флажок слева от имени скрипта) - показывает, будет ли система выполнять данный скрипт в процессе работы. Удобно использовать в процессе разработки проекта, когда нет возможности подключения к ПЛК, например.
- Name - название скрипта (латинские символы без пробелов).
- Description - описание скрипта. Справочная информация для разработчика проекта.
- File Name - имя файла, в котором будет храниться текст скрипта. Все файлы скриптов по умолчанию помещаются во вложенную в корневую папку проекта подпапку "Scripts". Все файлв с текстом скриптов имеют стандартное расширение *.js.
- Trigged By - тип события, запускающего выполнение скрипта. Может быть двух видов - Timer (запуск при срабатывании таймера) и Tag (запуск при изменении тега).
- Trigger - имя переключателя. В зависимости от типа переключающего события устанавливается имя таймера или имя тега.
Дополнительные функции
IntegraXor поставляется с несколькими дополнительными функциями (методами), облегчающими процесс программирования. Данные функции, в основном, используются для выполнения на стороне сервера.
- setTag("TagName", Data) используется для записи определенного значения в тег. TagName - строка, содержащая имя тега, в который будет производиться запись. Data - константа, переменная или выражение, результат (значение) которых будет записано в тег.
- getTag("TagName") используется для получения текущего значения тега. TagName - строка, содержащая имя тега, значение из которого требуется прочитать. Возвращает значение тега, тип которого соответствует типу тега, использованного в качестве параметра.
- sleep(DELAY) используется для задержки выполнения тела скрипта на время, заданное параметром DELAY. Время задержки указывается в миллисекундах. Обратите внимание, что функции setTimeout() и setInterval() в большинстве случаев могут не работать на стороне сервера.
- print("url", DELAY [,PRINTER]) эта функция позволяет выводить на печать страницу (url) без предварительного вызова стандартного диалогового окна "Печать", что дает разработчику возможность использовать автоматический вывод данных на печать. В некоторых алгоритмах могут возникнуть ситуации, когда данные для печати требуется получать от оборудования, что в свою очередь, может вызвать временные задержки при подготовке страницы к выводу на печать. Для организации таких задержек на время получения печатаемой страницей данных, используется второй параметр DELAY. Время задержки указывается в миллисекундах. Необязательный третий параметр PRINTER идентифицирует печатающее устройство, на которое необходимо вывести данные. Если этот параметр отсутствует или указанное устройство не найдено, то будет использоваться системный принтер по умолчанию. Эта функция необходима для периодической печати, например для получения ежедневного или почасового отчета.
Замечание. Выполнения скрипта на стороне сервера может быть инициировано с помощью скрипта на стороне клиента. Для этого в скрипте на стороне клиента необходимо использовать следующий запрос:
POST /run?script=script_name;param1=value1;param2=value2
Другим простым вариантом вызова скрипта на сервере со стороны клиента является следующая последовательность действий:
- на стороне сервера создается скрипт, выполняемый при изменении определенного тега;
- со стороны клиента производится изменение данного тега, что инициирует выполнение привязанного к данному тегу скрипта на сервере.
Функции для работы с базами данных
- getSql() - обеспечиват удобный способ выполнения транзакций SQL-запросов, возвращая результат в виде строки (String).
getSql([string] sql, [object] option)
[object] option format:
{
dbgroup: 'xx', // [string] database name created in database table, default to all database if not supplied.
offset: 0, // [integer] skip the first stated number of result, default to no offset.
limit: -1, // [integer] limit to return stated number of result, default to no limit.
skip: 0, // [integer] skip certain number of rows between results, default to no skip.
outfmt: 'xx' // [string] output format, valid values are csv/csvh/json/xml, default to CSV.
}
Пример использования:
var result = getSql( "select * from log",
{dbgroup:"dblog",offset:2,limit:3,skip:2,outfmt:"json"});
Табличное представление примера использования параметров. Обратите внимание, что возвращаются только записи 2, 5 и 8, остальные игнорируются.
Запись Параметр
0 Offset 1
1 Offset 2
2 Result 1
3 Skip 1
4 Skip 2
5 Result 2
6 Skip 1
7 Skip 2
8 Result 3
9 Skip 1
10 Skip 2
11 Result 4
12 ...
... ...
- setSql() - обеспечивает удобный способ выполнения транзакций SQL-запросов без возвращения какого-либо значения. Далее приведены параметры функции и пример ее использования.
setSql([string] sql, [object] option)[object] option format:
{
dbgroup: 'xx' // [string] database name created in database table, default to all database if not supplied.
}
Пример использования:
setSql( "insert into alarm values (cell1, cell2...)", {dbgroup:"mdb"});
Функции для отладки
Данный вид функций доступен только для исполнения на стороне сервера и используются в режиме отладки проекта. Для выполнения этих функций необходимо включить режим "Отладка" ("Debug Mode"). Для вулючения этого режима, необходимо выбрать пункт "Debug Mode" из меню "Tools", или нажать кнопку "F9":
Для просмотра сообщений отладочных функций необходио выбрать раздел "Script" в навигаторе "Task Window" IntegraXor Server. Все сообщения будут отображаться в окне состояния "Status Window":
- debugString(String) использеутся для вывода текстовой информации (строки "String") в окно состояния.
- debugTag(TagName) используется для вывода в окно состояния имени и значения тега, указанного в качестве параметра "TagName".
Приведенный далее пример иллюстрирует возможность использования Отладочных функций для поиска ошибок в проекте. Данный пример можно скопировать и использовать в собственном проекте.
var a = getTag( "tagA") || 1; // значение по умолчанию = 1
var b = getTag( "tagB") || 2; //значение по умолчанию = 2
var c = getTag( "tagC"); // нет значения по умолчанию
if (c > 1000) {
a = 1;
b = 2;
}
a = a + 1;
setTag( "tagA", a);
b = b + 2;
setTag( "tagB", b);
c = a + b;
setTag( "tagC", c);
debugTag( "tagC"); //это пример использования функции debugTag().
//отладочная функция будет выполняться только в "Отладочном режиме"
debugString( "Скрипт был успешно выполнен."); // эта строка должна быть последней в скрипте
Дополнительные возможности
Фоновые скрипты базируются на технологии Microsoft Windows Script Technologies и обладают всеми возможностями JScript и VBScript. Следует отметить, что это касается только фоновых или серверных скриптов и не все функции или методы могут быть доступны для скриптов на клиентской стороне. Например, обработка объектов файловой системы доступна только в серверных скриптах.
Довольно часто требутся выполнение внешней программы из серверного скрипта. Далее приводится пример, взятый с веб-сайта MSDN для вызова системного калькулятора. Скопируйте этот пример в серверный скрипт, установите событие для выполнения данного скрипта по изменению определенного тега. Программа Калькулятор будет вызываться, когда произойдет изменение значения данного тега. Однако, данная программа может быть запущена только на сервере и не будет выполняться на клиентской станции.
var WshShell = new ActiveXObject("WScript.Shell");
var oExec = WshShell.Exec("calc");
while (oExec.Status == 0)
{
WScript.Sleep(100);
}
|