UniSet 2.44.3
(JScript) Поддержка скриптов на JS

Архитектура JScript

JScript предоставляет полноценную среду выполнения JavaScript с интеграцией в систему uniset.

Базовые возможности

  • Загрузка и выполнение JS-скриптов
  • Интеграция с uniset
  • Поддержка модульной системы с поиском по указанным путям
  • готовые модули для типовых задач

Работа с датчиками uniset

JScript автоматически создает глобальные переменные для работы с датчиками:

// Конфигурация в JS:
uniset_inputs = [
{ name: "Sensor1", sensor: "real_sensor_name" },
{ name: "Sensor2" }
];
uniset_outputs = [
{ name: "Output1" },
{ name: "Output2" }
];
// Использование в коде:
function uniset_on_step() {
// Чтение входных датчиков (автоматически создаются как глобальные переменные)
let value = in_Sensor1;
// Запись выходных датчиков
out_Output1 = value + 10;
}

Если хочется чтобы переменная в коде отличалась от реального названия датчика, то можно вписать реальное название датчика (в конфиге) при помощи поля sensor: "real_sensor_name", тогда name будет использован в коде, а привязка будет осуществлена по названию указаному в sensor.

А так же создаются переменные с именем датчика, содержащие ID датчика

console.log("Sensor1 id=", Sensor1)

Система событий

JScript предоставляет набор callback-функций для реакции на системные события:

// Вызывается при старте системы
function uniset_on_start() {
mylog.info("System started");
// Инициализация таймеров и ресурсов
}
// Вызывается при остановке системы
function uniset_on_stop() {
mylog.info("System stopped");
// Очистка ресурсов, остановка таймеров
}
// Вызывается на каждом шаге выполнения
function uniset_on_step() {
// Основная логика управления
out_Output1 = in_Sensor1 * 2;
}
// Вызывается при изменении значения датчика
function uniset_on_sensor(id, value, name) {
mylog.info("Sensor " + id + " changed to " + value);
// Реакция на изменение конкретного датчика
if( id == Sensor1 )
{
...
}
}

Система таймеров

Модуль uniset2-timers.js предоставляет расширенные возможности работы с таймерами:

function uniset_on_start() {
// Одноразовый таймер
askTimer("single", 5000, 1, function(id, count) {
mylog.info("Single timer executed");
});
// Периодический таймер (3 раза)
askTimer("repeat", 1000, 3, function(id, count) {
mylog.info("Repeating timer: " + count);
});
// Бесконечный таймер
askTimer("infinite", 2000, -1, function(id, count) {
mylog.info("Heartbeat: " + count);
});
}
function uniset_on_stop() {
// Очистка всех таймеров
clearAllTimers();
}

Система логирования

Модуль uniset2-log.js предоставляет логирование в стиле uniset

// Создание логгера
mylog = uniset_log_create("MyModule", true, true, true, true);
// Настройка уровней логирования
mylog.level("info", "warn", "crit", "level5");
// Использование
mylog.info("Information message");
mylog.warn("Warning message");
mylog.crit("Critical message");
mylog.log5("Debug message level 5");

Глобальный объект ui

JScript предоставляет глобальный объект ui для прямого взаимодействия с системой uniset:

// Функции объекта ui:
ui.askSensor(sensor, command) - Подписка/отписка на получение значений датчика
ui.getValue(sensor) - Чтение текущего значения датчика
ui.setValue(sensor, value) - Запись значения в датчик
Заметки
Причём в качестве sensor можно использовать идентификатор или имя датчика

Доступные константы для команды подписки:

  • UIONotify - получать все значения
  • UIODontNotify - не получать значения (отписка)
  • UIONotifyChange - получать значения только при изменении
  • UIONotifyFirstNotNull - получать только первое ненулевое значение

Пример использования

function uniset_on_step() {
// Чтение значения датчика по его ID
let currentValue = ui.getValue(Sensor1);
// Использование прочитанного значения
if (currentValue > 100) {
out_Output1 = 1;
}
// Чтение значения по заранее известному ID
let temp = ui.getValue(12345);
mylog.info("Temperature: " + temp);
}

Расширенные возможности

Модульная система

Поддерживается загрузка модулей через функцию load() с поиском по указанным путям:

// Загрузка модулей из различных путей
load("uniset2-timers.js");
load("uniset2-log.js");
load("my_custom_module.js");
load("utils/helpers.js");

Доступные uniset-модули

Базовый шаблон для написания свой программы main.js

Конфигурация

XML-конфигурация

<JSProxy name="JSProxy1">
<modules>
<module path="/usr/share/uniset2/js"/>
<module path="/custom/js/modules"/>
</modules>
</JSProxy>

Параметры командной строки

  • --js-name <name> - имя объекта в конфигурации
  • --js-logfile <file> - файл для сохранения логов
  • --js-sleep-msec <msec> - пауза между вызовами uniset_on_step (по умолчанию 150 msec)