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

Материал из TekonWiki
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
(не показаны 44 промежуточные версии этого же участника)
Строка 1: Строка 1:
[[Category:ДокументацияСКАДА]]
 
Text-функции позволяют выполнить простое преобразование в программе SCADA путем сопоставления:
 
 
 
== Введение ==
<pre>Обновление:
04-04-2025 2.7.18
* дополнительная расшифровка ошибок в текстовом поле
* исправлена ошибка в работе функций в 2.7.17
04-12-2024 2.7.17
* возможность размещать функции в подкаталогах
15-09-2023 2.7.14
* конкретизация значения else
* добавлены дополнительные логи
* поддержка сигнала КУН-2Д.1-УПСЛ-System-ChannelID
* функции pos, postext
24-08-2021 2.7.3
* функция time - отображение текущего времени
01-12-2020 2.6.4
* возможность выполнить числовое преобразование входного значения
</pre>
 
Text-функция&nbsp;''- ''это обычный текстовый файл (.txt), название которого является названием самой функции.
 
Функции находятся в папке Tekon \ ASUD Scada \ Scada \ scripts \ text
 
Text-функции позволяют выполнить в программе SCADA&nbsp; математическое преобразование&nbsp;входного значения:
<pre>Результат = F (Число)</pre>
 
&nbsp;или преобразование путем сопоставления:
 
  Число = значение
  Число = значение
, где:
, где:
* число - это значение Item-a ОРС-сервера, или параметра из БД.
* значение - некоторая строка.


Подобный функционал в частности реализуют [[Скрипты|Lua-cкрипты]] (и для более сложных задач следует использовать именно их), однако написание Text-функций гораздо проще и работают они несколько быстрее.
*число - это значение Item-a ОРС-сервера, или параметра из БД.
*значение - некоторая строка.&nbsp;


Поддержка Text-функций на данный момент реализована в:
В случае выполнения математического преобразования значение Item может быть целым или десятичной дробью. В случае, если функция выполняет сопоставление, значением Item должно быть целое число.
* примитиве [[Дополнительные примитивы|Прибор учета]]
* примитиве [[Дополнительные примитивы|Изображение]]
* примитиве Текстовое поле
* примитиве Лифтовая станция


Функции находятся в папке Tekon \ ASUD Scada \ Scada \ scripts \ text
Подобный функционал в частности реализуют [[Скрипты|Lua-cкрипты]] (и для более сложных задач, выходящих за возможности Text-функций,&nbsp;следует использовать именно их), однако написание Text-функций гораздо проще, они не требуют перезапуска&nbsp;SCADA в случае изменения&nbsp; и работают они несколько быстрее.


Функция - это обычный текстовый файл, название которого является названием самой функции.
Пример: функции func1 - файл func1.txt
<pre>0=Останов
1=Работа
2=Авария ДТ
</pre>


Пример функции func1 - файл func1.txt
Если значение Item&nbsp; = 1, то функция вернет значение "Работа"&nbsp; и т.д.
<nowiki>
0=Останов
1=Работа
3=Авария ДТ
</nowiki>


Пример функции func2 - файл func2.txt
Пример функции func2 - файл func2.txt
<nowiki>
<pre>0=Зима
0=Зима
1=Лето </pre>
1=Лето
 
</nowiki>
Если по каким-то причинам значение Item, например:&nbsp;4, не описано в Text-фунции, то функция вернет ошибку. Поэтому, начиная с версии 2.6.4 доступен оператор "else"&nbsp;
 
Пример функции func3&nbsp;- файл func3.txt
<pre>0=Зима
1=Лето
else=Не знаю</pre>
 
Если входное значение функции не [0, 1], то результат будет - "Не знаю"
 
В версии 2.7.14 добавлена возможность, указать для варианта else значение Item
<pre>0=Зима  
1=Лето  
else=#var</pre>
 
В этом случае, если входное значение функции не [0, 1], то результат функции будет, например: при значении Item = 5&nbsp;
 
[[File:Textfunc textfield err5.PNG|center|upright|Textfunc textfield err5.PNG]]
 
Начиная с версии 2.7.18 использование&nbsp;else=#var - не обязательно.
 
Вы можете использовать коментрий в начале функции, для этого укажите в начале строки знак&nbsp;?, например:
<pre>? Это комментарий
0=Зима
1=Лето
else=Не знаю</pre>
 
'''Замечания:'''
 
*Имя Text-функции в настройках примитивов указывается без ''.txt'', т.е. func1, а не func1.txt
*Имя функции не чувствительно в регистру, т.е. Func1 = func1 = FUNC1
 
Text-функции используются, например в примитивах:
 
*[[Tekon_Scada|Текстовое поле]]
*[[Tekon_Scada|Лифтовая станция]]
*[[Дополнительные_примитивы|Набор изображений]]
*и т.п.
 
&nbsp;
 
== Настройка ==
 
Для работы с&nbsp;Text-функциями, в общем случае,&nbsp;'''не следует напрямую''' редактировать файлы в папке Tekon \ ASUD Scada \ Scada \ scripts \ text
 
Вы можете добавлять / редактировать Text-функции непосредственно в SCADA (при этом для вступления изменений в силу '''не требуется перезапуск SCADA'''), открыв меню ''Дополнительно \ Text-функции'' в режиме Настройки.
 
[[File:Text func1.JPG|center|upright|Text func1.JPG]]
 
В открывшемся окне вы можете:
 
*добавить новую функцию
*изменить существующую функцию
*посмотреть помощь по работе с функциями
 
При добавлении новой функции следует указать ее имя, например:
 
*func1 - функция будет сохранена в файле func1.txt
*test\func1 - функция будет сохранена в подкаталоге test в файле func1.txt&nbsp;
 
После изменения функции следует нажать ''Сохранить''.
 
'''Внимание!&nbsp;'''Внесенные изменения вступают в силу (отображаются на карте) после закрытия окна редактирования.
 
Пустая Text-функция (функция с пустым "телом")&nbsp; сохранена не будет. И пропадет после переоткрытия окна.
 
В случае если в теле&nbsp;функции есть ошибки, программа сообщит об этом. При этом, можно вернуться к предыдущей версии, нажав ''Вернуть''.
 
Причины ошибок:
 
*Повтор идентификаторов в нескольких строчках
*Лишние пробелы: например, 0 = Останов (правильно: 0=Останов)
*Лишние пустые строки
*Ошибка в выражении (подробнее см. далее)
 
&nbsp;
 
== Привязка к примитиву ==
 
Далее вы указаваете имя Text-функции в настройках примитива, например Текстовое поле.
 
[[File:Textfunc textfield.PNG|center|upright|Text func1.JPG]]В некоторых случаях, вы можете увидеть ошибку в Текстовом поле после привязки Text-функции
 
[[File:Textfunc textfield err.PNG|center|upright|Text func1.JPG]]
 
Причиной ошибки могут быть:
 
*Отстуствие функции с таким именем (проверьте указанное имя функции)
*Примитив не привязан к тегу
*Ошибка в теле функции (подробнее см. выше)
*Переданное в функцию значение не описано в функции (используйте else в коце функции)
 
 
== Дополнительно ==
 
В Text-функции добавлена поддержка [[Выражения|выражений]].
 
В случае необходимости вы можете добавить предварительную обработку входного значения Item-a ОРС-сервера.
 
Выражение задается в первой строке Text-функции начиная с символа '''#'''
 
&nbsp;
 
=== Выполнить числовое преобразование значения ===
 
Например, вам нужно выполнить математическое преобразование: Результат = Значение + 10
 
Создаем новую функцию с названием, например Plus10, следующего содержания
<pre># X + 10</pre>
 
, где X - это условное обозначение значения Item-а.
 
Если входное значение равно 10, то результат функции будет 20.
 
&nbsp;
 
=== Выполнить преобразование состояния АКБ КИР-16 ===
 
Создаем новую функцию с названием, например кир_акб, следующего содержания
<pre>0=Норма
1=Отсутствует
3=Замкнут
4=Заряжается
7=Питание от АКБ
else=#var</pre>
 
=== Функция BIT ===
 
Проанализировать указанный бит значения связанного Item-a ОРС-сервера.
 
Тело функции:
<pre># BIT(X;1)
0=Норма
1=Авария
</pre>
 
, где X - это условное обозначение значения Item-а.
 
Нумерация бит 32, 31, ..., 1 (1 - младший).
 
Если значение Item = 2, то:
 
*BIT (X;1) = 0,
*BIT(X,2) = 1.
 
Допускается сокращенная запись BIT(1) == BIT(X;1)
 
=== Функция BITS ===
 
Проанализировать несколько бит, начиная с указанного.
 
Тело функции:
<pre># BITS(X;1;2)
0=Норма
1=Авария
2=Авария2
3=Авария3 </pre>
 
, где X - это условное обозначение Item-а.
 
При использовании данной функции будут браться 2-а бита, начиная с 1-го.
 
Если значение Item = 5, то BITS (X;2;1) = 1.
 
Допускается сокращенная запись BITS(2;1) == BIT(X;2;1)
 
=== Функция BITSTR ===
 
Собрать строку, проверив факт установки каждого бита значения Item-a.
 
Тело функции:
<pre># BITSTR()
0=Норма
1=Авария
2=Авария2
3=Авария3 </pre>
 
, где X - это условное обозначение Item-а.
 
Если значение Item = 5 (это в двоичной системе&nbsp; 0101&nbsp; - т.е. установлен 1 и 3 биты), то результатом BITSTR() будет строка:
<pre>Авария
Авария3 </pre>
 
В скобах может быть указан символ разделитель строк (по умолчанию: перевод строки), например: если значение Item = 5, то результатом BITSTR(, ) будет строка:
<pre>Авария, Авария3 </pre>
 
=== Функция TIME ===
 
Отобразить текущее время.
 
Тело функции:
<pre># TIME (dd.mm.yy hh:mm:ss) </pre>
 
Функцию имеет&nbsp; смысл использовать с примитивом Текстовое поле, связав его со служебной переменной "VAR.Timer1Sec".
 
Для реализации более сложного функционала обработки входного значения Item-а смотрит документацию на [[Переменные|Переменные]].
 
&nbsp;
 
=== Функция POS, POSTEXT,&nbsp;POSINV, POSTEXTINV ===
 
Доступна с версии 2.7.14
 
Найти подстроку в строке.
 
Функция имеет смысл в связке с Item типа:
 
*строка&nbsp;
*массив строк
 
Тело функции:
<pre># POS (значение)
0=не найдено
1=найдено
</pre>
 
Если значение Item = 'Какое то тествое значение', то результатом&nbsp; POS (значение) будет&nbsp;: 'найдено'.
 
Функция POSTEXT - аналогична POS, но не чувствительна к регистру.
 
Функции с окончанием на *INV работают инверсивно, т.е. если значение не найдено выдают 1, 0 - иначе.
<pre># POSINV (значение)
0=найдено
1=не найдено</pre>
 
Функции могут применяться, например с примитивом [[Дополнительные_примитивы|Набор изображений]].
 
&nbsp;
 
&nbsp;
 
=== Функция подставновки значения из файла FILE_P ===
 
Доступно с версии 2.3.7
 
Функция позволяет определить значение результат по исходному значению, при этом связь значений описана в файле подстановок.
 
Файл подстановок имеет следующий вид:&nbsp;
 
*входное значение = результат
 
Важно:
 
*данные должны расположены от большего входного значения к меньшему
*входное значение и результат - целые числа
 
Например: файл&nbsp;датчика температуры NTC10K&nbsp; (зависимость температуры от выходного сопротивления датчика)
<pre>66783=-50
33567=-40
17668=-30
9679=-20
5530=-10
3265=0
1990=10
1249=20
1000=25
806=30
532=40
360=50
249=60
175=70
126=80
92=90
68=100
51=110
39=120
30=130
23=140
18=150</pre>
 
Файл подстановок должен быть сохранен в папку settings\ с именем table_N.txt,&nbsp; где&nbsp; N - число 1,2,3 и т.д.
 
Тело функции:
<pre># FILE_P(1;X) </pre>
 
, где 1 - это N в имени файла table_1.txt
 
== Известные проблемы ==
 
В версии 2.7.17 не работают простые Text-фунции вида
<pre>0=Норма
1=Авария</pre>
 
выполните обновление на 2.7.18


Замечания:
[[Category:SCADA]]
* Имя Text-функции указывается без ''.txt'', т.е. func1, а не func1.txt
: Имя функции не чувствительно в регистру, т.е.  Func1 = func1 = FUNC1

Текущая версия от 10:50, 29 сентября 2025

 


Введение

Обновление:
04-04-2025 2.7.18
* дополнительная расшифровка ошибок в текстовом поле
* исправлена ошибка в работе функций в 2.7.17
04-12-2024 2.7.17
* возможность размещать функции в подкаталогах
15-09-2023 2.7.14
* конкретизация значения else
* добавлены дополнительные логи
* поддержка сигнала КУН-2Д.1-УПСЛ-System-ChannelID
* функции pos, postext
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 

Textfunc textfield err5.PNG
Textfunc textfield err5.PNG

Начиная с версии 2.7.18 использование else=#var - не обязательно.

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

? Это комментарий 
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

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

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

При добавлении новой функции следует указать ее имя, например:

  • func1 - функция будет сохранена в файле func1.txt
  • test\func1 - функция будет сохранена в подкаталоге test в файле func1.txt 

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

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

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

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

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

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

 

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

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

Text func1.JPG
Text func1.JPG

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

Text func1.JPG
Text func1.JPG

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

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


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

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

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

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

 

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

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

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

# X + 10

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

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

 

Выполнить преобразование состояния АКБ КИР-16

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

0=Норма
1=Отсутствует
3=Замкнут
4=Заряжается
7=Питание от АКБ
else=#var

Функция 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)

Функция 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)

Функция BITSTR

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

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

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

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

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

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

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

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

Функция TIME

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

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

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

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

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

 

Функция POS, POSTEXT, POSINV, POSTEXTINV

Доступна с версии 2.7.14

Найти подстроку в строке.

Функция имеет смысл в связке с Item типа:

  • строка 
  • массив строк

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

# POS (значение)
0=не найдено
1=найдено 

Если значение Item = 'Какое то тествое значение', то результатом  POS (значение) будет : 'найдено'.

Функция POSTEXT - аналогична POS, но не чувствительна к регистру.

Функции с окончанием на *INV работают инверсивно, т.е. если значение не найдено выдают 1, 0 - иначе.

# POSINV (значение) 
0=найдено 
1=не найдено

Функции могут применяться, например с примитивом Набор изображений.

 

 

Функция подставновки значения из файла FILE_P

Доступно с версии 2.3.7

Функция позволяет определить значение результат по исходному значению, при этом связь значений описана в файле подстановок.

Файл подстановок имеет следующий вид: 

  • входное значение = результат

Важно:

  • данные должны расположены от большего входного значения к меньшему
  • входное значение и результат - целые числа

Например: файл датчика температуры NTC10K  (зависимость температуры от выходного сопротивления датчика)

66783=-50
33567=-40
17668=-30
9679=-20
5530=-10
3265=0
1990=10
1249=20
1000=25
806=30
532=40
360=50
249=60
175=70
126=80
92=90
68=100
51=110
39=120
30=130
23=140
18=150

Файл подстановок должен быть сохранен в папку settings\ с именем table_N.txt,  где  N - число 1,2,3 и т.д.

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

# FILE_P(1;X) 

, где 1 - это N в имени файла table_1.txt

Известные проблемы

В версии 2.7.17 не работают простые Text-фунции вида

0=Норма
1=Авария

выполните обновление на 2.7.18