Вот пример подписки на контрол с ограничением вводимого значения в интерфейсе
return defineRule(RuleName + "_" + this.NameVD, { // Функция подписки на изменение значения топика "/Out_SetFlow", физическое значение уставки расхода в WEB UI
whenChanged: self.NameVD + self.nSetOutFlow, // "/Out_SetFlow"
then: function (newValue, devName, cellName) {
// Проверка введенного кода и его ограничение до расчета (иначе незатухающие изменения - "качели")
newValue = newValue * self.outRatioGFC; // приводим расход к мл/мин (справка 0,01В = 1 мл/мин) с учетом коэффициента
if (newValue > self.LimitOutMAX * self.outRatioGFC) { // Проверяем выход за пределы и если больше то ограничиваем ввод
newValue = self.LimitOutMAX;
dev[devName + "/" + cellName] = newValue; // Верхним значением лимита
} else if (newValue < 0) { // Если значение меньше 0 то ограничиваем
newValue = 0;
dev[devName + "/" + cellName] = newValue; // Нижним значением лимита или 0
};
},
});
Что позволяет не дать пользователю ввести не правильное значение в поле в WEB
ну и округление также только через переменные
вначале скрипта указываем необходимую точность
Precision : 3, // Значение до какого знака округлять рассчитанный по таблице калибровки выходной сигнал канала.
this.Precision = Math.pow (10,DeviceParam.Precision); // Требуемая точность отображения (знак после запятой) в виджете WEB UI
далее в коде
return Math.round(GetValue * this.Precision) / this.Precision; // Быстрое преобразование в число c округлением до заданной точности