Text-функция: различия между версиями

Материал из TekonWiki
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
Строка 1: Строка 1:


== Введение ==
== Введение ==
<pre>Обновление:
<pre>Обновление:
13-09-2023 2.7.14
* конкретизация значения else
* добавлены дополнительные логи
* поддержка сигнала КУН-2Д.1-УПСЛ-System-ChannelID
24-08-2021 2.7.3
24-08-2021 2.7.3
* функция time - отображение текущего времени
* функция time - отображение текущего времени
Строка 40: Строка 45:
1=Лето </pre>
1=Лето </pre>


Начиная с версии 2.6.4 доступен оператор "else"&nbsp;
Если по каким-то причинам значение Item, например:&nbsp;4, не описано в Text-фунции, то функция вернет ошибку. Поэтому, начиная с версии 2.6.4 доступен оператор "else"&nbsp;


Пример функции func3&nbsp;- файл func3.txt
Пример функции func3&nbsp;- файл func3.txt
Строка 48: Строка 53:


Если входное значение функции не [0, 1], то результат будет - "Не знаю"
Если входное значение функции не [0, 1], то результат будет - "Не знаю"
Это&nbsp;&nbsp;'''корректное&nbsp;описание функции&nbsp;'''в настоящее время.
В версии 2.7.14 добавлена возможность, указать для варианта else значение Item
<pre>0=Зима
1=Лето
else=#var</pre>
В этом случае, если входное значение функции не [0, 1], то результат функции будет, например: при значении Item = 5&nbsp;
[[File:Textfunc textfield err5.PNG|center|upright]]
Вы можете использовать коментрий в начале функции, для этого укажите в начале строки знак ?, например:
<pre>? Это комментарий
0=Зима
1=Лето
else=Не знаю</pre>


'''Замечания:'''
'''Замечания:'''
Строка 59: Строка 81:
*[[Tekon_Scada|Лифтовая станция]]  
*[[Tekon_Scada|Лифтовая станция]]  
*[[Дополнительные_примитивы|Набор изображений]]  
*[[Дополнительные_примитивы|Набор изображений]]  
 
*и т.п.


== Настройка ==
== Настройка ==

Версия от 14:00, 13 сентября 2023


Введение

Обновление:
13-09-2023 2.7.14
* конкретизация значения else
* добавлены дополнительные логи
* поддержка сигнала КУН-2Д.1-УПСЛ-System-ChannelID
24-08-2021 2.7.3
* функция time - отображение текущего времени
01-12-2020 2.6.4
* возможность выполнить числовое преобразование входного значения

Text-функция - это обычный текстовый файл (.txt), название которого является названием самой функции.

Функции находятся в папке Tekon \ ASUD Scada \ Scada \ scripts \ text

Text-функции позволяют выполнить в программе SCADA  математическое преобразование входного значения:

Результат = F (Число)

 или преобразование путем сопоставления:

Число = значение

, где:

  • число - это значение Item-a ОРС-сервера, или параметра из БД.
  • значение - некоторая строка. 

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

Подобный функционал в частности реализуют Lua-cкрипты (и для более сложных задач, выходящих за возможности Text-функций, следует использовать именно их), однако написание Text-функций гораздо проще, они не требуют перезапуска SCADA в случае изменения  и работают они несколько быстрее.

Пример: функции func1 - файл func1.txt

0=Останов
1=Работа
2=Авария ДТ

Если значение Item  = 1, то функция вернет значение "Работа"  и т.д.

Пример функции func2 - файл func2.txt

0=Зима 
1=Лето 

Если по каким-то причинам значение Item, например: 4, не описано в Text-фунции, то функция вернет ошибку. Поэтому, начиная с версии 2.6.4 доступен оператор "else" 

Пример функции func3 - файл func3.txt

0=Зима 
1=Лето 
else=Не знаю

Если входное значение функции не [0, 1], то результат будет - "Не знаю"

Это  корректное описание функции в настоящее время.

В версии 2.7.14 добавлена возможность, указать для варианта else значение Item

0=Зима 
1=Лето 
else=#var

В этом случае, если входное значение функции не [0, 1], то результат функции будет, например: при значении Item = 5 

Вы можете использовать коментрий в начале функции, для этого укажите в начале строки знак ?, например:

? Это комментарий 
0=Зима 
1=Лето 
else=Не знаю

Замечания:

  • Имя Text-функции в настройках примитивов указывается без .txt, т.е. func1, а не func1.txt
  • Имя функции не чувствительно в регистру, т.е. Func1 = func1 = FUNC1

Text-функции используются, например в примитивах:

Настройка

Для работы с Text-функциями, в общем случае, не следует напрямую редактировать файлы в папке Tekon \ ASUD Scada \ Scada \ scripts \ text

Вы можете добавлять / редактировать Text-функции непосредственно в SCADA (при этом для вступления изменений в силу не требуется перезапуск SCADA), открыв меню Дополнительно \ Text-функции в режиме Настройки.

Text func1.JPG
Text func1.JPG

В открывшемся окне вы можете:

  • добавить новую функцию
  • изменить существующую функцию
  • посмотреть помощь по работе с функциями

После изменения функции следует нажать Сохранить.

Внимание! Внесенные изменения вступают в силу (отображаются на карте) после закрытия окна редактирования.

Пустая Text-функция (функция с пустым "телом")  сохранена не будет. И пропадет после переоткрытия окна.

В случае если в теле функции есть ошибки, программа сообщит об этом. При этом, можно вернуться к предыдущей версии, нажав Вернуть.

Причины ошибок:

  • Повтор идентификаторов в нескольких строчках
  • Лишние пробелы: например, 0 = Останов (правильно: 0=Останов)
  • Лишние пустые строки
  • Ошибка в выражении (подробнее см. далее)

Привязка к притиву

Далее вы указаваете имя Text-функции в настройках примитива, например Текстовое поле.

Text func1.JPG
Text func1.JPG

В некоторых случаях, вы можете увидеть ошибку в Текстовом поле после привязки Text-функции

Text func1.JPG
Text func1.JPG

Причиной ошибки могут быть:

  • Отстуствие функции с таким именем (проверьте указанное имя функции)
  • Ошибка в теле функции (подробнее см. выше)
  • Переданное в функцию значение не описано в функции (используйте else в коце функции)

Дополнительно

В Text-функции добавлена поддержка выражений.

В случае необходимости вы можете добавить предварительную обработку входного значения Item-a ОРС-сервера.

Выражение задается в первой строке Text-функции начиная с символа #

Пример 1. Выполнить числовое преобразование значения

Например, вам нужно выполнить математическое преобразование: Результат = Значение + 10

Создаем новую функцию с названием, например Plus10, следующего содержания

# X + 10

, где X - это условное обозначение значения Item-а.

Если входное значение равно 10, то результат функции будет 20.

Пример 2. Функция BIT

Проанализировать указанный бит значения связанного Item-a ОРС-сервера.

Тело функции:

# BIT(X;1) 
0=Норма 
1=Авария 

, где X - это условное обозначение значения Item-а.

Нумерация бит 32, 31, ..., 1 (1 - младший).

Если значение Item = 2, то:

  • BIT (X;1) = 0,
  • BIT(X,2) = 1.

Допускается сокращенная запись BIT(1) == BIT(X;1)

Пример 3. Функция BITS

Проанализировать несколько бит, начиная с указанного.

Тело функции:

# BITS(X;1;2) 
0=Норма 
1=Авария 
2=Авария2 
3=Авария3 

, где X - это условное обозначение Item-а.

При использовании данной функции будут браться 2-а бита, начиная с 1-го.

Если значение Item = 5, то BITS (X;2;1) = 1.

Допускается сокращенная запись BITS(2;1) == BIT(X;2;1)

Пример 4. Функция BITSTR

Собрать строку, проверив факт установки каждого бита значения Item-a.

Тело функции:

# BITSTR() 
0=Норма 
1=Авария 
2=Авария2 
3=Авария3 

, где X - это условное обозначение Item-а.

Если значение Item = 5 (это в двоичной системе  0101  - т.е. установлен 1 и 3 биты), то результатом BITSTR() будет строка:

Авария
Авария3 

В скобах может быть указан символ разделитель строк (по умолчанию: перевод строки), например: если значение Item = 5, то результатом BITSTR(, ) будет строка:

Авария, Авария3 

Пример 5. Функция TIME

Отобразить текущее время.

Тело функции:

# TIME (dd.mm.yy hh:mm:ss) 

Функцию имеет  смысл использовать с примитивом Текстовое поле, связав его со служебной переменной "VAR.Timer1Sec".

Для реализации более сложного функционала обработки входного значения Item-а смотрит документацию на Переменные.