Перейти к содержанию

Навигация

Wb-rules: update script compatibility: различия между версиями

(Новая страница: «=== Обновление до версии 2.2 === С версии 2.2 стали более строго проверяться типы устанавлива…»)
 
(→‎Обновление до версии 2.2: Переписал абзац)
Строка 2: Строка 2:


С версии 2.2 стали более строго проверяться типы устанавливаемых значений для контролов:
С версии 2.2 стали более строго проверяться типы устанавливаемых значений для контролов:
* Раньше для установки признака включено/выключено для '''switch''' и состояний '''pushbutton''' можно было присваивать значение 1 или 0 — теперь только '''true/false'''.
* Раньше контролу типа '''text''' можно было присвоить число и оно автоматически конвертировалось текст — теперь только текст. Если нужно записать число, то используйте <code>(val).toString()</code> для конвертации.
* Раньше для передачи в контролы типа '''value''' и его подтипов (Temperature, Power, Voltage и прочие) значений допускалось указывать значения в кавычках — теперь нужно указывать только число.


если для установления признака включено/выключено для контролов типа switch, клики по pushbutton или присваивание значений контролам с типом text применялась недокументировання возможность
Если в коде есть ошибка, то выполнение скрипта останавливается и в логи добавляются записи вида:
использования для этой цели числовые значения (1, 0 и т.д.) в версии движка 2.2 операция присваивания не выполнится и завершится с ошибкой.
Корректный способ — устанавливать булевы значений (true/false) для switch/pushbutton и строковые значения для типа text
 
При возникновении подобной проблемы в логах можно видеть подобные записи:
<pre>
<pre>
ERROR: control wb-mr3_30/K1 SetValue() error: can't convert control value '1' (type float64) to datatype 'switch'
ERROR: control wb-mr3_30/K1 SetValue() error: can't convert control value '1' (type float64) to datatype 'switch'
Строка 14: Строка 13:
</pre>
</pre>


Вместо:
Раньше писали так:
<syntaxhighlight lang="ecmascript">
<syntaxhighlight lang="ecmascript">
dev["wb-mr3_30"]["K1"] = 1 // включение
dev["wb-mr3_30"]["K1"] = 1 // включение
dev["status"]["someStatus"] = -1.47 // float
dev["status"]["someStatus"] = -1.47 // float
dev["temperature"]["value"] = "36.6" // text
</syntaxhighlight>
</syntaxhighlight>


Нужно:
Теперь только так:
<syntaxhighlight lang="ecmascript">
<syntaxhighlight lang="ecmascript">
dev["wb-mr3_30"]["K1"] = true // включение
dev["wb-mr3_30"]["K1"] = true // включение
dev["status"]["someStatus"] = (-1.47).toString() // text
dev["status"]["someStatus"] = (-1.47).toString() // text
dev["temperature"]["value"] = 36.6 // float
</syntaxhighlight>
</syntaxhighlight>