SCADA SAMUTAGSCADA SAMUTAGРуководство пользователя Открыть Studio
РуководствоЯзык и редакторы скриптов

Язык и редакторы скриптов

Полное руководство по языку, функциям и контекстам выполнения.

Руководство по скриптам SAMUTAG

ST-подобные скрипты SAMUTAG: синтаксис, контексты выполнения, отладка и ограничения.

Период запуска задаёт частоту выполнения скрипта, предельное время исполнения — допустимую длительность одного запуска.

Серверный скрипт шаблона выполняется отдельно для каждого экземпляра этого шаблона. Унаследованный скрипт доступен потомку, а ближайший одноимённый скрипт его переопределяет.

Язык SAMUTAG поддерживает часть конструкций Structured Text стандарта IEC 61131-3. Перечень поддерживаемых конструкций приведён в разделе «Совместимость IEC ST и CODESYS».

Редактор скрипта PressureControl с подсветкой синтаксиса и настройками запуска
Пример периодического скрипта контроля давления. Код расположен слева, режим запуска, период и предельное время исполнения — справа. Под кодом отображается результат проверки синтаксиса. Нажмите на изображение, чтобы открыть его в полном размере.

Первый серверный скрипт

  1. В своём шаблоне создайте INT-тэг CounterTag без I/O.
  2. Создайте скрипт с периодическим запуском 1000 мс и лимитом исполнения 100 мс.
  3. Введите код ниже, проверьте синтаксис и сохраните.
  4. В Runtime-проверке добавьте CounterTag в «Отладку значений» и нажмите «Пуск».
  5. Для автономной работы создайте экземпляр, назначьте модель Runtime-узлу и загрузите проект на узел. Сохранение скрипта в Studio не обновляет работающий узел.
this.CounterTag := this.CounterTag + 1;
IF this.CounterTag > 50 THEN
    this.CounterTag := 0;
END_IF;
Log('Объект ', this.MyName, ': ', this.CounterTag);

Место выполнения и сохранение состояния

Скрипты шаблонов и символов поддерживают одинаковые строковые и битовые функции, преобразования типов, массивы, циклы и функциональные блоки. Локальные переменные сохраняются между вызовами одного сценария. У разных сценариев независимые состояния.

Скрипт шаблона выполняется на Runtime независимо от открытых видеокадров.

Скрипт символа выполняется в браузере, пока открыт содержащий его видеокадр или всплывающее окно. Params. и события мыши относятся только к символу.

System. читает ресурсы сервера Runtime, а не компьютера оператора. При обращении к серверным тэгам, включая запись через MyTags[i], проверяются права доступа и замки настроек. MyModel требует назначенной модели экземпляра.

СценарийИсполнительВремя жизни
Скрипт шаблона/экземпляраРабочий процесс RuntimeПока запущен развёрнутый Runtime; не зависит от открытого АРМ.
Скрипт символаБраузерОтдельное состояние для каждого размещения на открытом АРМ.
Action Script элементаБраузерКлик или удержание кнопки мыши; задаётся у элемента, не у всего символа.
Локальная Runtime-проверка StudioИзолированная тестовая сессияНе меняет сохранённые определения проекта; включённые внешние I/O-записи требуют осторожности.

Скрипты экземпляров не запускаются повторно при каждом открытии кадра. На каждом АРМ клиентские скрипты выполняются независимо.

Типы и литералы

В таблице приведены типы переменных ST. Тип UDINT доступен в карте Modbus; для локального целого значения в скрипте используйте INT.

ТипПримерыОсобенности
BOOLTRUE, FALSEНачальное значение: FALSE
BYTE, WORD, DWORD, LWORD2#1010, 8#17, 16#FF00Начальное значение: 0
INT0, -15, 120Начальное значение: 0
REAL0.0, -1.25Начальное значение: 0.0
STRING'text', "text"Начальное значение: пустая строка
TIMET#500ms, T#1h30mдлительность, миллисекунды
DATE, TOD, DTDATE#2026-09-15, TOD#12:30:00, DT#2026-09-15-12:30:00календарное время UTC

Локальные переменные и теги

VAR
  Counter: INT := 0;
  Enabled: BOOL := TRUE;
  Ratio: REAL;
END_VAR

Локальные переменные сохраняются отдельно для каждой пары «скрипт–экземпляр».

Тег является объектом: обращение Pressure эквивалентно Pressure.value, свойство только для чтения Pressure.alarm сообщает, активно ли аварийное условие, а Pressure.alarmStatus содержит состояние аварии и её подтверждения.

Pressure.IsIO показывает, включён ли обмен, а Pressure.alarmIO — произошла ли ошибка чтения или записи.

При общей I/O-ссылке используется Pressure.ioLink; в раздельном режиме доступны Pressure.ioReadLink и Pressure.ioWriteLink. Каждая отображаемая ссылка изменяется из скрипта только при открытом собственном замке. Запись в значение тега разрешена только для READ_WRITE.

Counter := Counter + 1;
PumpOutput.value := Counter;
IF Pressure.alarm THEN PumpOutput := 0; END_IF;
Pressure.ioReadLink := "Pump_2.RawPressure";
Pressure.ioWriteLink := "ModbusServer.PressureOut";

Замените имена в примерах именами объектов своего проекта. Historian не является I/O-ссылкой: запись истории включается отдельной конфигурацией тэга.

В начале цикла Runtime получает значения включённых I/O-входов из данных драйверов, затем выполняет скрипты и передаёт изменённые выходные значения на запись. Сетевой опрос драйверов выполняется со своим периодом. При отключённом I/O обмен по ссылке не выполняется.

Теги любого экземпляра проекта доступны через его имя. Например, Pump_2.Speed, Pump_2.Speed.value, Pump_2.Speed.alarm, Pump_2.Speed.alarmStatus, Pump_2.Speed.ioReadLink и Pump_2.Speed.ioWriteLink. Имена экземпляров в загружаемом проекте должны быть уникальны без учёта регистра, иначе ссылка была бы неоднозначной.

Фиксированные массивы

Поддерживаются одно- и многомерные локальные массивы с произвольной целочисленной нижней границей. Индексы проверяются при анализе и во время выполнения.

VAR
  Samples: ARRAY[0..3] OF INT := [10, 20, 30, 40];
  Matrix: ARRAY[1..2, -1..1] OF REAL;
END_VAR

Samples[1] := Samples[0] + 5;
Matrix[2, 0] := INT_TO_REAL(Samples[1]);

Если значений в инициализаторе меньше размера массива, остальные элементы получают начальное значение базового типа. Выход за границы завершает текущий цикл диагностикой. Один локальный массив может содержать не более 8 измерений и 10 000 элементов.

Операторы и выражения

Поддерживаются скобки, унарные NOT, +, -, арифметика * / MOD + -, сравнения = <> < <= > >= и AND XOR OR. Для двух значений STRING оператор + объединяет строки.

Для BOOL операции NOT/AND/OR/XOR логические. Для BYTE/WORD/DWORD/LWORD они выполняются побитово; результат получает ширину более широкого операнда.

VAR
  InputMask: WORD := 16#00F3;
  OutputMask: WORD;
END_VAR

OutputMask := (InputMask AND 16#00FF) XOR 16#0003;

Функции SHL, SHR, ROL, ROR принимают битовую строку и число позиций типа INT.

Операции выполняются в порядке: унарные → умножение/деление → сложение/вычитание → сравнения → AND → XOR → OR. Скобки изменяют порядок.

Ветвление

IF Pressure >= 5.0 AND Enabled THEN
  State := 'high';
ELSIF Pressure > 0.0 THEN
  State := 'normal';
ELSE
  State := 'stopped';
END_IF;

Комментарии: (* многострочный комментарий *) и // до конца строки.

Циклы, выбор и функциональные блоки

VAR i: INT; delay: TON; pulses: CTU; edge: R_TRIG; END_VAR
FOR i := 1 TO 10 BY 1 DO Counter := Counter + 1; END_FOR;
WHILE Counter < 20 DO Counter := Counter + 1; END_WHILE;
CASE Counter OF
  0, 1: Log('Начало: ', Counter);
  2..20: Log('Значение: ', Counter);
ELSE Log('Вне диапазона');
END_CASE;
delay(IN := Counter > 5, PT := T#2s);
edge(CLK := delay.Q);
pulses(CU := edge.Q, R := FALSE, PV := 10);

FOR использует локальный счётчик типа INT. Начальное и конечное значения входят в диапазон цикла. Шаг BY может быть отрицательным, но не может равняться нулю.

CASE выбирает ветвь по целочисленному значению. Ветви задаются отдельными значениями или непересекающимися диапазонами.

Функциональный блок объявляется в VAR как локальная переменная. Он сохраняет своё состояние между вызовами отдельно для каждого скрипта и экземпляра.

БлокВходыВыходы
TON / TOF / TPIN: BOOL, PT: TIMEQ: BOOL, ET: TIME
R_TRIG / F_TRIGCLK: BOOLQ: BOOL
CTUCU, R: BOOL; PV: INTQ: BOOL, CV: INT
CTDCD, LD: BOOL; PV: INTQ: BOOL, CV: INT
CTUDCU, CD, R, LD: BOOL; PV: INTQU, QD: BOOL; CV: INT

TON задаёт задержку включения, TOF — задержку выключения, TP — импульс заданной длительности.

R_TRIG обнаруживает переход FALSE→TRUE, а F_TRIG — переход TRUE→FALSE. Счётчики изменяют значение при переходе их счётного входа из FALSE в TRUE. Вход R сбрасывает счётчик, а LD загружает начальное значение PV.

Выходы блока читаются через точку, например delay.Q. Прямое присваивание полям блока запрещено. Вызывайте блок при каждом выполнении скрипта: без вызова его выходы не обновляются.

Время и преобразования

TIME — длительность в миллисекундах: T#1h30m, T#500ms.

DATE — дата (DATE#2026-09-09), TOD/TIME_OF_DAY — время суток (TOD#12:30:00.123), DT/DATE_AND_TIME — дата и время (DT#2026-09-09-12:30:00). Календарные значения используют UTC — всемирное координированное время.

Доступны преобразования по схеме ИСХОДНЫЙ_ТИП_TO_ЦЕЛЕВОЙ_ТИП с краткими именами TIME, DATE, TOD, DT: INT_TO_TIME(500), TIME_TO_INT(T#1s), STRING_TO_TIME('T#2s'), DT_TO_DATE, DT_TO_TOD, TIME_TO_STRING. Числовые значения времени измеряются в миллисекундах, не секундах.

Состояние таймеров переносится вместе с локальными переменными; для резервной пары требуется синхронизация часов UTC. После простоя следующий вызов учитывает прошедшее время.

Log и ограничение исполнения

Log('Значение Counter: ', Counter); объединяет параметры без дополнительного разделителя и пишет сообщение уровня INFO. На один запуск сохраняются до 100 сообщений по 4096 символов; фильтр уровня журнала может скрывать INFO.

Поле «Максимальное время исполнения» задаёт предельное время выполнения скрипта в миллисекундах: по умолчанию 100, диапазон 1–60000.

Интерпретатор проверяет время на операциях и итерациях, включая пустые циклы. При превышении скрипт получает status=error, частичные изменения тегов и локальных переменных не публикуются; остальные скрипты продолжают работу. Превышение времени обнаруживается между операциями; точность остановки зависит от длительности текущей операции. Дополнительно ограничены число операций, размер строк и объём журнала пошагового выполнения.

Преобразования типов

Имя функции не зависит от регистра. Каждая функция принимает ровно один аргумент исходного типа.

Исходный типДоступные функции
BOOLBOOL_TO_INT, BOOL_TO_REAL, BOOL_TO_STRING
INTINT_TO_BOOL, INT_TO_REAL, INT_TO_STRING
REALREAL_TO_BOOL, REAL_TO_INT, REAL_TO_STRING
STRINGSTRING_TO_BOOL, STRING_TO_INT, STRING_TO_REAL
BYTE/WORD/DWORD/LWORDФункции <SOURCE>_TO_<TARGET> между всеми поддержанными скалярными типами; при сужении проверяется диапазон
Temperature := INT_TO_REAL(RawTemperature);
Rounded := REAL_TO_INT(Value);
Active := STRING_TO_BOOL('TRUE');
Caption := BOOL_TO_STRING(Active);

REAL_TO_INT удаляет дробную часть без округления: 2.9 → 2, −2.9 → −2. Число преобразуется в BOOL по правилу «ноль — FALSE, ненулевое — TRUE». Для STRING → BOOL допустимы TRUE/FALSE и 1/0. Ошибка разбора строки завершает текущий цикл с ошибкой.

Расчёты, качество и фильтры

Обозначение NUM в справочнике означает числовой тип INT или REAL. Обозначение T у функций выбора означает, что выбираемые значения должны иметь одинаковый тип.

ROUND округляет до ближайшего целого: 2.5 → 3, −2.5 → −3.

FORMAT_NUMBER принимает число, количество дробных знаков от 0 до 12 и разделитель «.» либо «,».

Функции выбора вычисляют все переданные аргументы, включая значения, которые не будут возвращены.

this.Output := LIMIT(0.0, this.Input, 100.0);
Params.Caption := FORMAT_NUMBER(this.Input, 2, ',');
IF IS_GOOD(this.Input) AND TAG_AGE(this.Input) >= T#0ms
   AND TAG_AGE(this.Input) < T#5s THEN
    Log('Достоверное измерение');
END_IF;

IS_GOOD, IS_BAD и TAG_AGE принимают ссылку на тэг. Неизвестное или неопределённое качество считается недостоверным. Если время последнего измерения неизвестно, TAG_AGE возвращает −1 мс. При проверке актуальности измерения добавьте условие TAG_AGE ≥ T#0ms. Отсутствие времени у локального значения не означает отказ связи.

NOW и календарные функции используют UTC. FORMAT_DATETIME поддерживает YYYY, MM, DD, hh, mm, ss, SSS. Таймеры и фильтры измеряют интервалы по монотонным часам, которые не зависят от перевода системного времени; состояние хранится отдельно для каждого скрипта и экземпляра.

VAR filter: LOWPASS; END_VAR
filter(IN := this.Input, TAU := T#2s, RESET := FALSE);
this.Output := filter.OUT;

HYSTERESIS и DEBOUNCE сохраняют состояние выхода Q между вызовами.

LOWPASS и RATE_LIMIT при первом вызове и при RESET присваивают выходу текущее входное значение IN.

MOVING_AVERAGE рассчитывает среднее по последним N отсчётам, где N — от 1 до 10000. Число отсчётов определяется количеством вызовов, а не временем. В скрипте символа новые отсчёты обрабатываются только пока символ открыт.

Режимы запуска

Доступны запуск при старте и остановке Runtime, периодический режим, выполнение пока выражение TRUE/FALSE и запуск по фронтам FALSE→TRUE/TRUE→FALSE.

Условие запуска является полноценным BOOL-выражением: Pressure >= 5, Ready AND Enabled, Control.status = 'error'.

Контекст текущего экземпляра

MyName — системная переменная STRING только для чтения. В Runtime она содержит полный путь текущего экземпляра с учётом композиции. Это позволяет формировать ссылки без явно заданного в коде имени экземпляра:

Pressure.ioLink := MyName + ".tagname";

Каждый экземпляр одного шаблона получает собственное значение MyName. В обычной проверке шаблона без выбранного экземпляра значение пустое; в проверке конкретного экземпляра используется его имя.

Теги вложенных шаблонов доступны относительно текущей группы по имени компонента. Например, this.Drive.Speed.value обращается к тегу Speed вложенного компонента Drive. Для нескольких уровней сегменты продолжаются слева направо: this.Line.Drive.Speed.value.

this.Speed и Speed обращаются к значению одного тэга текущего объекта.

this.InstanceName содержит собственное имя экземпляра. this.AbsoluteName и this.MyName содержат его полный путь в композиции. this.TemplateName возвращает имя непосредственного шаблона, из которого создан экземпляр.

this.description возвращает описание текущего владельца, определённое для экземпляра при подготовке проекта. Это свойство доступно только для чтения.

У скриптов доступны this.Control.status, this.Control.LastRunTimestamp и this.Control.LastRunTime. Для скрипта дочернего объекта используется полный относительный путь, например this.Drive.Control.status. Скрипты и графические символы также предоставляют свойства .name и .description. Эти свойства нельзя изменять присваиванием.

MyModel — объект модели, которой назначена группа экземпляров. Запись this.MyModel равнозначна. У дочернего экземпляра используется назначение корневого экземпляра его группы.

Свойства MyModel.name, MyModel.description и MyModel.displayName возвращают имя, описание и отображаемое имя модели. Системные свойства alarm, alarmCount, UnAckCount, AckCount и instanceCount доступны только для чтения.

К собственным тэгам модели обращаются через MyModel.TagName. Запись разрешается с учётом прав и настроек тэга. При редактировании шаблона конкретная модель ещё не определена, поэтому такие ссылки полностью проверяются перед загрузкой проекта на Runtime.

Без назначенной модели её строковые системные свойства пусты, числовые равны нулю, а alarm равен FALSE. В Runtime счётчики относятся к ветви модели, доступной рабочему процессу. В изолированной проверке шаблона без модели они равны нулю. Скрипты символов получают свойства модели от Runtime через HMI.

MyTags и проверка существования тэга

this.MyTags — собственные и унаследованные тэги текущего объекта, без тэгов вложенной композиции. Порядок — по имени без учёта регистра, индексы начинаются с 1. LEN(this.MyTags) возвращает количество. Доступ к существующим свойствам сохраняет их типы, права и замки.

VAR i: INT; END_VAR
FOR i := 1 TO LEN(this.MyTags) DO
  Log(this.MyTags[i].name);
END_FOR;

IF isTagExists('Pump1.Pressure') THEN
  Log('Тэг экземпляра существует');
END_IF;
IF isTagExists('SHUN_OT.Sensor') THEN
  Log('Переменная I/O-сервера существует');
END_IF;

isTagExists(tagname: STRING): BOOL проверяет строковый путь по снимку конфигурации проекта. Поддерживаются абсолютные пути вложенных экземпляров и уникальные имена экземпляров, переменные Modbus и OPC UA. Регистр не имеет значения.

Отсутствующий путь возвращает FALSE; качество и доступность устройства не проверяются. Поиск охватывает конфигурацию проекта, а не только тэги текущего рабочего процесса или назначенные ему I/O-серверы. Изменения имён и карт становятся видны после новой загрузки конфигурации. Проверка существования не предоставляет права чтения или записи.

Состояния аварий

Tag.alarmStatus — строковое свойство только для чтения. Его можно сравнивать со следующими значениями:

СостояниеЗначение
Normalавария ещё не возникала
UnAckAlarmавария активна и ещё не подтверждена
AckAlarmактивная авария подтверждена
UnAckRtnаварийное условие прекратилось, подтверждение ещё не выполнено
AckRtnаварийное условие прекратилось и авария подтверждена
IF Pressure.alarmStatus = 'UnAckAlarm' THEN
  Horn := TRUE;
END_IF;

Логическое Tag.alarm остаётся TRUE только пока аварийное условие физически активно. Подтверждение не сбрасывает это свойство.

Объекты I/O-серверов

Каждый настроенный I/O-сервер проекта предоставляет диагностические свойства только для чтения:

СвойствоТипЗначение
Server.TotalByteSentINTчисло байтов, отправленных после запуска текущего драйвера I/O
Server.TotalByteResivedINTчисло байтов, принятых после запуска текущего драйвера I/O
Server.alarmConnectionBOOLTRUE до первого успешного ответа и после ошибки соединения или протокола
IF MainPlc.alarmConnection THEN
  ConnectionErrors := ConnectionErrors + 1;
END_IF;
Traffic := MainPlc.TotalByteSent + MainPlc.TotalByteResived;

Счётчики и авария относятся к текущему процессу Runtime и сбрасываются при остановке и повторном запуске I/O-сервера.

Объекты скриптов

Каждый скрипт, включённый в итоговую конфигурацию объекта с учётом наследования, предоставляет свойства только для чтения:

СвойствоТипЗначение
Script.statusSTRINGwaiting, running, error
Script.LastRunTimestampSTRINGвремя запуска ISO 8601
Script.LastRunTimeREALдлительность, мс

Скрипты символов и действий

У символа предусмотрены три сценария: при открытии, при закрытии и периодический.

Action Script назначается отдельному элементу. В его настройках выбираются левая или правая кнопка мыши и действие: нажатие либо удержание.

Для периодических действий задаётся интервал от 10 до 86400000 мс. Предельное время одного выполнения — от 1 до 1000 мс. Сценарии одного размещённого символа не выполняются одновременно.

Params.Name — локальный параметр; Tags.Name — тэг владельца. Доступны this.Name, this.Child.Name, this.MyName, this.description, MyModel и свойства объектов текущего контекста. Выберите существующий тэг с помощью автодополнения.

Параметр без привязки к серверному тэгу изменяется только в браузере. Запись в серверный тэг передаётся через HMI с проверкой прав. При обязательном повторном пароле запрашивается подтверждение. Проверьте выполнение команды по сигналу обратной связи от оборудования.

При навигации отменяются периодические действия и удержания, запускается только сценарий закрытия. Ожидание ограничено четырьмя секундами; запрещённые/недоступные записи и записи с повторным паролем пропускаются. Принудительное закрытие браузера не гарантирует выполнение OnClose. Не используйте OnClose для защитного останова оборудования.

При скрытой вкладке циклы приостанавливаются. После превышения предельного времени выполнения сценарий останавливается с ошибкой до следующего открытия символа. После изменения символа загрузите обновлённый проект на HMI; обновление кода исполнителя требует обновления службы.

Проверка Runtime

Кнопка «Выполнить один цикл» создаёт одну возможность запуска только для открытого скрипта. «Пуск» запускает общую сессию всех эффективных скриптов шаблона, «Стоп» прекращает её и выполняет скрипты режима «При остановке Runtime».

В локальной проверке Studio основной цикл Runtime выполняется с периодом 100 мс. Условия режимов «пока» и переходы FALSE→TRUE/TRUE→FALSE проверяются в каждом цикле. Период скрипта дополнительно ограничивает частоту выполнения его команд. Скрипты используют общие тестовые теги, но отдельные локальные переменные. Теги и локальные значения любого скрипта можно менять прямо во время работы — следующий цикл получает новые значения.

Сначала вычисляется условие запуска. Если оно не выполнено, тело скрипта не запускается, локальные переменные не изменяются, а LastRunTimestamp и LastRunTime сохраняют прежние значения. Эти свойства обновляются только при фактическом запуске тела, даже если само тело затем завершилось ошибкой.

В окне проверки задайте тестовые значения и просмотрите последовательность присваиваний. Локальные переменные сохраняются между тестовыми циклами; значения экземпляров проекта не изменяются.

Диагностика

СимптомЧто проверить
Не запускаетсяРежим, BOOL-условие, активную или резервную роль узла (active/standby), состояние Runtime и версию загруженного проекта.
Редко меняется значениеДлительность цикла Runtime и число выполняемых скриптов. Условие проверяется в каждом цикле, а запуск скрипта дополнительно ограничен его периодом.
LastRunTime/LastRunTimestamp не меняютсяТело не запускалось: одна проверка ложного условия не считается выполнением.
Нет LogВыберите журнал Runtime или HMI, где выполняется скрипт, его источник и уровень INFO. Настройка фильтра журнала не меняет способ вызова Log.
Запись отклоненаТип, права, повторный пароль, режим I/O, замки ссылок, выбранный сервер и качество связи.
Значение перезаписываетсяВходной I/O, другой скрипт/АРМ, два активных Runtime, повторная команда.
Timeout/errorСтрока диагностики, условие выхода цикла, объём вычислений. Перед повышением лимита оцените влияние на длительность полного цикла Runtime.

Для обращения в поддержку сохраните исходный текст скрипта, режим запуска, период, лимит выполнения, имя объекта и время ошибки в UTC. Не передавайте токены и пароли.

Служебные слова, объекты и свойства

Справочник общий для скриптов шаблонов и символов. Имена TagName, Child, Script, Symbol, Instance, Server и Alias в примерах нужно заменить на имена объектов проекта. Регистр идентификаторов не влияет на поиск. Не добавляйте свойства, которых нет в справочнике или автодополнении: например, this.TagName.name не является поддерживаемым свойством тэга.

Объекты и свойства

ЗаписьТип и доступНазначение
thisОбъектТекущий экземпляр или владелец скрипта. Через точку доступны его тэги, скрипты, символы и дочерние вхождения композиции.
this.TagNameТип тэгаTagName — пример имени созданного тэга, а не служебное поле. Читает или изменяет его значение; эквивалент this.TagName.value. Запись ограничивается правами и настройками тэга.
this.Child.TagNameТип тэгаТэг дочернего вхождения композиции Child; допускается несколько уровней вложения. Child — локальное имя в композиции, не имя определения шаблона.
this.InstanceNameSTRING · чтениеСобственное имя экземпляра, например N1_1.
this.AbsoluteNameSTRING · чтениеПолный Runtime-путь с локальными именами композиции, например Station_1.N1. Это не путь цепочки наследования шаблонов.
this.TemplateNameSTRING · чтениеИмя непосредственного шаблона, из которого создан экземпляр; не имя базового предка всей цепочки.
MyName / this.MyNameSTRING · чтениеПолный Runtime-путь текущего экземпляра; для явного указания назначения используйте this.AbsoluteName.
this.descriptionSTRING · чтениеОписание текущего владельца, разрешённое для данного экземпляра при подготовке проекта к загрузке. Для дочернего объекта: this.Child.description.
this.MyTagsМассив объектов · чтениеСобственные и унаследованные тэги текущего объекта, без тэгов дочерних объектов композиции. Индексы от 1; порядок по имени без учёта регистра. Элемент даёт доступ к существующему объекту тэга и его свойствам.
MyModel / this.MyModelОбъектМодель, которой назначена группа экземпляров. Это объект, а не строка. У дочернего экземпляра используется назначение корня группы.
MyModel.nameSTRING · чтениеСлужебное имя назначенной модели.
MyModel.descriptionSTRING · чтениеОписание назначенной модели.
MyModel.displayNameSTRING · чтениеОтображаемое имя модели, заданное в её свойствах.
MyModel.TagName / MyModel.TagName.valueТип тэгаЗначение собственного тэга модели. Запись допускается при наличии прав. При редактировании шаблона конкретная модель ещё неизвестна: полная проверка выполняется перед загрузкой проекта; в экземпляре доступны конкретные тэги.
this.TagName.valueТип тэгаТекущее значение тэга. Запись проходит действующие ограничения безопасности.
this.TagName.alarmBOOL · чтениеПризнак активной аварии тэга.
this.TagName.alarmStatusSTRING · чтениеСостояние аварии и её подтверждения: Normal, UnAckAlarm, AckAlarm, UnAckRtn или AckRtn. Подробности в разделе «Состояния аварий».
this.TagName.IsIOBOOL · чтениеВключён ли ввод-вывод для тэга.
this.TagName.alarmIOBOOL · чтениеПризнак ошибки ввода-вывода тэга.
this.TagName.ioLinkSTRING · по настройкамОбщая ссылка ввода-вывода вида Server.Variable. Изменение допускается при открытом замке; при раздельных ссылках используйте ioReadLink и ioWriteLink.
this.TagName.ioReadLinkSTRING · по настройкамСсылка для чтения. Возможность изменения определяется замком ссылки.
this.TagName.ioWriteLinkSTRING · по настройкамСсылка для записи. Изменение ссылки не снимает запрет записи на I/O-сервере.
this.Script.name / this.Symbol.nameSTRING · чтениеИмя конкретного скрипта или графического символа. Script и Symbol замените на реальные имена.
this.Script.description / this.Symbol.descriptionSTRING · чтениеОписание скрипта или графического символа.
this.Script.statusSTRING · чтениеСостояние скрипта: waiting — ожидание, running — выполнение, error — ошибка.
this.Script.LastRunTimestampSTRING · чтениеОтметка последнего запуска скрипта в формате ISO 8601.
this.Script.LastRunTimeREAL · чтениеДлительность последнего выполнения скрипта в миллисекундах.
OnOpen / OnClose / OnCycle / Action1…Объекты · символСценарии открытия, закрытия, периодического выполнения и действий элемента. Свойства status, LastRunTimestamp и LastRunTime имеют тот же смысл, что у объекта скрипта.
Params.NameТип параметра · символЛокальный параметр графического символа в браузере. Не является серверным тэгом.
Tags.NameТип тэга · символТэг владельца графического символа; серверные права записи сохраняются.
Instance.TagNameТип тэгаАбсолютная ссылка на тэг другого экземпляра проекта. Для вложенного экземпляра используется полный путь композиции.
System.Cpu.LoadPercentREAL · чтениеЗагрузка CPU сервера Runtime в процентах, не компьютера оператора.
System.Memory.TotalBytesLWORD · чтениеОбщий объём оперативной памяти сервера Runtime в байтах.
System.Memory.UsedBytesLWORD · чтениеИспользуемая оперативная память сервера Runtime в байтах.
System.Memory.FreeBytesLWORD · чтениеСвободная оперативная память сервера Runtime в байтах.
System.Disks.Alias.TotalBytesLWORD · чтениеОбъём диска в байтах. Alias — псевдоним диска из настроек узла.
System.Disks.Alias.UsedBytesLWORD · чтениеЗанятое место на выбранном диске в байтах.
System.Disks.Alias.FreeBytesLWORD · чтениеСвободное место на выбранном диске в байтах.
Server.TotalByteSentINT · чтениеКоличество отправленных байтов I/O-сервера Server.
Server.TotalByteResivedINT · чтениеКоличество принятых байтов I/O-сервера. Написание Resived сохранено для совместимости.
Server.alarmConnectionBOOL · чтениеПризнак ошибки связи I/O-сервера.
MyModel.alarmBOOL · чтениеЕсть хотя бы один аварийный тег во вложенных экземплярах.
MyModel.alarmCountINT · чтениеКоличество аварийных тегов во вложенных экземплярах.
MyModel.UnAckCountINT · чтениеКоличество неподтверждённых активных и вернувшихся аварий.
MyModel.AckCountINT · чтениеКоличество подтверждённых активных аварий.
MyModel.instanceCountINT · чтениеКоличество экземпляров в текущей и дочерних моделях.

Служебные слова языка

ЗаписьТип и доступНазначение
ANDКлючевое словоЛогическое И; для битовых строк — побитовое И.
ARRAYКлючевое словоМассив с заданными границами индексов: ARRAY[1..5] OF REAL.
BOOLКлючевое словоБулев тип: TRUE или FALSE.
BYКлючевое словоШаг счётчика FOR; по умолчанию 1.
BYTEКлючевое словоБитовая строка из 8 бит.
CASEКлючевое словоВыбор действий по значению выражения.
CTDКлючевое словоблок(CD := BOOL, LD := BOOL, PV := INT) → Q: BOOL, CV: INT Уменьшает счётчик CV при переходе CD из FALSE в TRUE. Вход LD присваивает счётчику значение PV. Выход Q равен TRUE, когда CV ≤ 0.
CTUКлючевое словоблок(CU := BOOL, R := BOOL, PV := INT) → Q: BOOL, CV: INT Увеличивает счётчик CV при переходе CU из FALSE в TRUE. Вход R сбрасывает CV в 0. Выход Q равен TRUE, когда CV ≥ PV.
CTUDКлючевое словоблок(CU := BOOL, CD := BOOL, R := BOOL, LD := BOOL, PV := INT) → QU: BOOL, QD: BOOL, CV: INT Переход CU из FALSE в TRUE увеличивает CV, такой же переход CD уменьшает CV. Вход R сбрасывает CV, LD загружает PV. Выход QU равен TRUE при CV ≥ PV, QD — при CV ≤ 0.
DATEКлючевое словоКалендарная дата, например DATE#2026-10-29.
DATE_AND_TIMEКлючевое словоПолная запись типа DT.
DEBOUNCEКлючевое словоблок(IN := BOOL, PT := TIME) → Q: BOOL, ET: TIME Подавление дребезга: Q принимает значение IN, только если оно не менялось в течение PT. Действует при включении и выключении. ET — время с последнего изменения входа.
DOКлючевое словоНачало тела цикла.
DTКлючевое словоДата и время в UTC, например DT#2026-10-29-12:30:00.
DWORDКлючевое словоБитовая строка из 32 бит.
ELSEКлючевое словоДействия, если ни одно условие не выполнено и ни один вариант не соответствует значению.
ELSIFКлючевое словоСледующее условие, если предыдущие не выполнены.
END_CASEКлючевое словоКонец CASE.
END_FORКлючевое словоКонец цикла FOR.
END_IFКлючевое словоКонец условного оператора IF.
END_VARКлючевое словоКонец объявления переменных.
END_WHILEКлючевое словоКонец цикла WHILE.
FALSEКлючевое словоБулево значение «ложь».
FORКлючевое словоЦикл со счётчиком.
F_TRIGКлючевое словоблок(CLK := BOOL) → Q: BOOL Выход Q принимает TRUE на один вызов блока при переходе CLK из TRUE в FALSE.
HYSTERESISКлючевое словоблок(IN := REAL, LOW := REAL, HIGH := REAL) → Q: BOOL При IN ≥ HIGH выход Q принимает TRUE, при IN ≤ LOW — FALSE. Между границами сохраняется предыдущее состояние Q. LOW не должен превышать HIGH.
IFКлючевое словоПроверка булевого условия.
INTКлючевое словоЦелое число со знаком.
LOWPASSКлючевое словоблок(IN := REAL, TAU := TIME, RESET := BOOL) → OUT: REAL Плавное изменение выходного значения OUT вслед за входом IN. TAU задаёт время сглаживания: чем оно больше, тем медленнее меняется выход. При TAU = 0 сглаживания нет. При первом вызове или RESET выход равен входу.
LWORDКлючевое словоБитовая строка из 64 бит.
MODКлючевое словоОстаток от деления целых чисел.
MOVING_AVERAGEКлючевое словоблок(IN := REAL, N := INT, RESET := BOOL) → OUT: REAL Среднее значение последних N отсчётов, где N — от 1 до 10000. При RESET предыдущие отсчёты удаляются, расчёт начинается с текущего IN.
NOTКлючевое словоЛогическое отрицание или инверсия битов.
OFКлючевое словоТип элементов массива или начало вариантов CASE.
ORКлючевое словоЛогическое ИЛИ; для битовых строк — побитовое ИЛИ.
RATE_LIMITКлючевое словоблок(IN := REAL, RISE := REAL, FALL := REAL, RESET := BOOL) → OUT: REAL Ограничение скорости изменения OUT: RISE задаёт скорость роста, FALL — снижения, в единицах за секунду. Обе скорости должны быть неотрицательными. При первом вызове или RESET выход равен входу.
REALКлючевое словоВещественное число, например 12.5.
R_TRIGКлючевое словоблок(CLK := BOOL) → Q: BOOL Выход Q принимает TRUE на один вызов блока при переходе CLK из FALSE в TRUE.
STRINGКлючевое словоСтрока текста.
THENКлючевое словоНачало действий при выполнении условия.
TIMEКлючевое словоДлительность с точностью до миллисекунд, например T#2s.
TIME_OF_DAYКлючевое словоПолная запись типа TOD.
TOКлючевое словоКонечное значение счётчика, включительно.
TODКлючевое словоВремя суток, например TOD#12:30:00.
TOFКлючевое словоблок(IN := BOOL, PT := TIME) → Q: BOOL, ET: TIME Задержка выключения: после перехода IN из TRUE в FALSE выход Q сохраняет TRUE в течение времени PT.
TONКлючевое словоблок(IN := BOOL, PT := TIME) → Q: BOOL, ET: TIME Задержка включения: Q принимает TRUE, если IN непрерывно равен TRUE в течение времени PT. ET показывает прошедшее время.
TPКлючевое словоблок(IN := BOOL, PT := TIME) → Q: BOOL, ET: TIME Выход Q принимает TRUE на время PT при переходе IN из FALSE в TRUE.
TRUEКлючевое словоБулево значение «истина».
VARКлючевое словоНачало объявления локальных переменных скрипта.
WHILEКлючевое словоПовторение, пока условие TRUE.
WORDКлючевое словоБитовая строка из 16 бит.
XORКлючевое словоИсключающее ИЛИ: истина при разных операндах; также работает побитово.

Глоссарий всех функций

Имена функций нечувствительны к регистру. В таблицах указаны типы аргументов и результата. Функциональные блоки сначала объявляются в VAR (например, timer: TON;), затем вызываются по имени переменной.

INDEXOF('Клапан', 'пан') возвращает 3, INDEXOF('abc', 'x') — -1. Поиск чувствителен к регистру, возвращает первое вхождение; пустая подстрока имеет индекс 0. Индекс считается по символам Unicode, не по байтам. FIND сохранён для совместимости: позиция с 1, отсутствие — 0.

VAR position: INT; END_VAR
position := INDEXOF('SHUN_OT.Pressure', '.');
IF position >= 0 THEN
  Log('Точка найдена, индекс: ', position);
END_IF;
Математика, строки, время и качество
ИмяВызовРезультат / выходыОписание
ABSABS(NUM)NUMМодуль числа.
CEILCEIL(NUM)INTОкругление вверх до целого: 2.1 → 3, −2.1 → −2.
DAYDAY(DT)INTДень месяца UTC (1..31).
DAY_OF_WEEKDAY_OF_WEEK(DT)INTДень недели UTC: понедельник 1, воскресенье 7.
FLOORFLOOR(NUM)INTОкругление вниз до целого: 2.7 → 2, −2.7 → −3.
FORMAT_DATETIMEFORMAT_DATETIME(DT, STRING)STRINGFORMAT_DATETIME(дата_DT, шаблон). Дата и время выводятся в UTC. В шаблоне YYYY означает год, MM — месяц, DD — день, hh — час, mm — минуту, ss — секунду, SSS — миллисекунды. Остальные символы сохраняются.
FORMAT_NUMBERFORMAT_NUMBER(NUM, INT, STRING)STRINGFORMAT_NUMBER(число, знаки, разделитель). Количество знаков после разделителя — от 0 до 12; разделитель — "." или ",". Число должно быть больше −10¹⁵ и меньше 10¹⁵. При округлении 2.5 до целого получается 3, а −2.5 — −3.
HOURHOUR(DT)INTЧас UTC (0..23).
IS_BADIS_BAD(TAG)BOOLIS_BAD(this.Tag): любое качество кроме достоверного good, включая uncertain, отсутствие данных и устаревание.
IS_GOODIS_GOOD(TAG)BOOLIS_GOOD(this.Tag): качество good и данные не устарели. Проверяет состояние тэга на момент вызова скрипта, не выполняя дополнительный сетевой запрос.
LIMITLIMIT(NUM, NUM, NUM)NUMLIMIT(минимум, значение, максимум). Ограничивает значение диапазоном; минимум не больше максимума.
LOWERLOWER(STRING)STRINGПреобразует буквы строки в строчные, включая русские буквы.
MAXMAX(NUM, NUM)NUMБольшее из двух чисел.
MILLISECONDMILLISECOND(DT)INTМиллисекунда (0..999).
MINMIN(NUM, NUM)NUMМеньшее из двух чисел.
MINUTEMINUTE(DT)INTМинута UTC (0..59).
MONTHMONTH(DT)INTМесяц UTC (1..12).
MUXMUX(INT, T, T...)TMUX(индекс, значение0, значение1, ...). Индекс с 0; значения одного типа. Все аргументы вычисляются.
NOWNOW()DTТекущее календарное время UTC; одно значение на вызов скрипта. Для интервалов используйте таймеры.
POWPOW(NUM, NUM)REALВозведение числа в степень: POW(2, 3) = 8. Если результат нельзя представить действительным числом или он слишком велик, возникает ошибка.
REPLACEREPLACE(STRING, STRING, STRING)STRINGREPLACE(строка, найти, заменить). Заменяет все найденные фрагменты строки. Прописные и строчные буквы различаются. Искомый фрагмент не должен быть пустым.
ROUNDROUND(NUM)INTОкругление до ближайшего целого. При дробной части 0.5: 2.5 → 3, −2.5 → −3.
SECONDSECOND(DT)INTСекунда UTC (0..59).
SELSEL(BOOL, T, T)TSEL(условие, значение_FALSE, значение_TRUE). Значения одного типа.
SQRTSQRT(NUM)REALКвадратный корень неотрицательного числа.
TAG_AGETAG_AGE(TAG)TIMETAG_AGE(this.Tag): время, прошедшее с последнего принятого измерения, в формате TIME; -1 мс, если время неизвестно. Ссылка на тэг, не строковое имя.
TRIMTRIM(STRING)STRINGУдаляет пробелы, табуляцию и переносы строк в начале и конце строки, включая неразрывные пробелы и служебный символ BOM.
TRUNCTRUNC(NUM)INTУдаление дробной части без округления: 2.9 → 2, −2.9 → −2.
UPPERUPPER(STRING)STRINGПреобразует буквы строки в прописные, включая русские буквы.
YEARYEAR(DT)INTГод UTC (1..9999).
Строки и массив тэгов
ИмяВызовРезультат / выходыОписание
CONCATCONCAT(STRING, STRING)STRINGCONCAT(строка1, строка2) — объединение строк
FINDFIND(STRING, STRING)INTFIND(строка, искомое) — позиция первого вхождения, начиная с 1; 0, если подстрока не найдена
INDEXOFINDEXOF(STRING, STRING)INTINDEXOF(строка, искомое) — индекс первого вхождения, начиная с 0; -1, если подстрока не найдена. Учитывается регистр.
LEFTLEFT(STRING, INT)STRINGLEFT(строка, длина) — первые символы строки в указанном количестве
LENLEN(STRING)INTLEN(строка) — количество символов; LEN(this.MyTags) — количество тэгов
MIDMID(STRING, INT, INT)STRINGMID(строка, длина, позиция) — подстрока указанной длины, начиная с заданной позиции; первая позиция — 1
RIGHTRIGHT(STRING, INT)STRINGRIGHT(строка, длина) — последние символы строки в указанном количестве
Битовые функции
ИмяВызовРезультат / выходыОписание
ROLROL(значение: T, сдвиг: INT)TЦиклический сдвиг влево. T — BYTE, WORD, DWORD или LWORD; число позиций неотрицательное.
RORROR(значение: T, сдвиг: INT)TЦиклический сдвиг вправо. T — BYTE, WORD, DWORD или LWORD; число позиций неотрицательное.
SHLSHL(значение: T, сдвиг: INT)TСдвиг влево с заполнением нулями. T — BYTE, WORD, DWORD или LWORD; число позиций неотрицательное.
SHRSHR(значение: T, сдвиг: INT)TСдвиг вправо с заполнением нулями. T — BYTE, WORD, DWORD или LWORD; число позиций неотрицательное.
Проверка тэгов и журнал
ИмяВызовРезультат / выходыОписание
isTagExistsisTagExists(путь: STRING)BOOLВозвращает TRUE, если по указанному пути существует тэг экземпляра или переменная I/O-сервера в конфигурации проекта; иначе FALSE. Не проверяет связь, качество данных или права доступа.
LogLog(значение1, значение2, ...);Нет (оператор)Записывает значения в журнал исполнения скрипта. Не используется как выражение.
Функциональные блоки
ИмяВызовРезультат / выходыОписание
CTDблок(CD := BOOL, LD := BOOL, PV := INT)Q: BOOL, CV: INTУменьшает счётчик CV при переходе CD из FALSE в TRUE. Вход LD присваивает счётчику значение PV. Выход Q равен TRUE, когда CV ≤ 0.
CTUблок(CU := BOOL, R := BOOL, PV := INT)Q: BOOL, CV: INTУвеличивает счётчик CV при переходе CU из FALSE в TRUE. Вход R сбрасывает CV в 0. Выход Q равен TRUE, когда CV ≥ PV.
CTUDблок(CU := BOOL, CD := BOOL, R := BOOL, LD := BOOL, PV := INT)QU: BOOL, QD: BOOL, CV: INTПереход CU из FALSE в TRUE увеличивает CV, такой же переход CD уменьшает CV. Вход R сбрасывает CV, LD загружает PV. Выход QU равен TRUE при CV ≥ PV, QD — при CV ≤ 0.
DEBOUNCEблок(IN := BOOL, PT := TIME)Q: BOOL, ET: TIMEПодавление дребезга: Q принимает значение IN, только если оно не менялось в течение PT. Действует при включении и выключении. ET — время с последнего изменения входа.
F_TRIGблок(CLK := BOOL)Q: BOOLВыход Q принимает TRUE на один вызов блока при переходе CLK из TRUE в FALSE.
HYSTERESISблок(IN := REAL, LOW := REAL, HIGH := REAL)Q: BOOLПри IN ≥ HIGH выход Q принимает TRUE, при IN ≤ LOW — FALSE. Между границами сохраняется предыдущее состояние Q. LOW не должен превышать HIGH.
LOWPASSблок(IN := REAL, TAU := TIME, RESET := BOOL)OUT: REALПлавное изменение выходного значения OUT вслед за входом IN. TAU задаёт время сглаживания: чем оно больше, тем медленнее меняется выход. При TAU = 0 сглаживания нет. При первом вызове или RESET выход равен входу.
MOVING_AVERAGEблок(IN := REAL, N := INT, RESET := BOOL)OUT: REALСреднее значение последних N отсчётов, где N — от 1 до 10000. При RESET предыдущие отсчёты удаляются, расчёт начинается с текущего IN.
RATE_LIMITблок(IN := REAL, RISE := REAL, FALL := REAL, RESET := BOOL)OUT: REALОграничение скорости изменения OUT: RISE задаёт скорость роста, FALL — снижения, в единицах за секунду. Обе скорости должны быть неотрицательными. При первом вызове или RESET выход равен входу.
R_TRIGблок(CLK := BOOL)Q: BOOLВыход Q принимает TRUE на один вызов блока при переходе CLK из FALSE в TRUE.
TOFблок(IN := BOOL, PT := TIME)Q: BOOL, ET: TIMEЗадержка выключения: после перехода IN из TRUE в FALSE выход Q сохраняет TRUE в течение времени PT.
TONблок(IN := BOOL, PT := TIME)Q: BOOL, ET: TIMEЗадержка включения: Q принимает TRUE, если IN непрерывно равен TRUE в течение времени PT. ET показывает прошедшее время.
TPблок(IN := BOOL, PT := TIME)Q: BOOL, ET: TIMEВыход Q принимает TRUE на время PT при переходе IN из FALSE в TRUE.
Преобразования типов — все доступные имена
ИмяВызовРезультат / выходыОписание
BOOL_TO_BYTEBOOL_TO_BYTE(значение: BOOL)BYTEПреобразует BOOL в BYTE. Правила и ошибки — в разделе «Преобразования типов».
BOOL_TO_DATEBOOL_TO_DATE(значение: BOOL)DATEПреобразует BOOL в DATE. Правила и ошибки — в разделе «Преобразования типов».
BOOL_TO_DTBOOL_TO_DT(значение: BOOL)DTПреобразует BOOL в DT. Правила и ошибки — в разделе «Преобразования типов».
BOOL_TO_DWORDBOOL_TO_DWORD(значение: BOOL)DWORDПреобразует BOOL в DWORD. Правила и ошибки — в разделе «Преобразования типов».
BOOL_TO_INTBOOL_TO_INT(значение: BOOL)INTПреобразует BOOL в INT. Правила и ошибки — в разделе «Преобразования типов».
BOOL_TO_LWORDBOOL_TO_LWORD(значение: BOOL)LWORDПреобразует BOOL в LWORD. Правила и ошибки — в разделе «Преобразования типов».
BOOL_TO_REALBOOL_TO_REAL(значение: BOOL)REALПреобразует BOOL в REAL. Правила и ошибки — в разделе «Преобразования типов».
BOOL_TO_STRINGBOOL_TO_STRING(значение: BOOL)STRINGПреобразует BOOL в STRING. Правила и ошибки — в разделе «Преобразования типов».
BOOL_TO_TIMEBOOL_TO_TIME(значение: BOOL)TIMEПреобразует BOOL в TIME. Правила и ошибки — в разделе «Преобразования типов».
BOOL_TO_TODBOOL_TO_TOD(значение: BOOL)TODПреобразует BOOL в TOD. Правила и ошибки — в разделе «Преобразования типов».
BOOL_TO_WORDBOOL_TO_WORD(значение: BOOL)WORDПреобразует BOOL в WORD. Правила и ошибки — в разделе «Преобразования типов».
BYTE_TO_BOOLBYTE_TO_BOOL(значение: BYTE)BOOLПреобразует BYTE в BOOL. Правила и ошибки — в разделе «Преобразования типов».
BYTE_TO_DATEBYTE_TO_DATE(значение: BYTE)DATEПреобразует BYTE в DATE. Правила и ошибки — в разделе «Преобразования типов».
BYTE_TO_DTBYTE_TO_DT(значение: BYTE)DTПреобразует BYTE в DT. Правила и ошибки — в разделе «Преобразования типов».
BYTE_TO_DWORDBYTE_TO_DWORD(значение: BYTE)DWORDПреобразует BYTE в DWORD. Правила и ошибки — в разделе «Преобразования типов».
BYTE_TO_INTBYTE_TO_INT(значение: BYTE)INTПреобразует BYTE в INT. Правила и ошибки — в разделе «Преобразования типов».
BYTE_TO_LWORDBYTE_TO_LWORD(значение: BYTE)LWORDПреобразует BYTE в LWORD. Правила и ошибки — в разделе «Преобразования типов».
BYTE_TO_REALBYTE_TO_REAL(значение: BYTE)REALПреобразует BYTE в REAL. Правила и ошибки — в разделе «Преобразования типов».
BYTE_TO_STRINGBYTE_TO_STRING(значение: BYTE)STRINGПреобразует BYTE в STRING. Правила и ошибки — в разделе «Преобразования типов».
BYTE_TO_TIMEBYTE_TO_TIME(значение: BYTE)TIMEПреобразует BYTE в TIME. Правила и ошибки — в разделе «Преобразования типов».
BYTE_TO_TODBYTE_TO_TOD(значение: BYTE)TODПреобразует BYTE в TOD. Правила и ошибки — в разделе «Преобразования типов».
BYTE_TO_WORDBYTE_TO_WORD(значение: BYTE)WORDПреобразует BYTE в WORD. Правила и ошибки — в разделе «Преобразования типов».
DATE_TO_BOOLDATE_TO_BOOL(значение: DATE)BOOLПреобразует DATE в BOOL. Правила и ошибки — в разделе «Преобразования типов».
DATE_TO_BYTEDATE_TO_BYTE(значение: DATE)BYTEПреобразует DATE в BYTE. Правила и ошибки — в разделе «Преобразования типов».
DATE_TO_DTDATE_TO_DT(значение: DATE)DTПреобразует DATE в DT. Правила и ошибки — в разделе «Преобразования типов».
DATE_TO_DWORDDATE_TO_DWORD(значение: DATE)DWORDПреобразует DATE в DWORD. Правила и ошибки — в разделе «Преобразования типов».
DATE_TO_INTDATE_TO_INT(значение: DATE)INTПреобразует DATE в INT. Правила и ошибки — в разделе «Преобразования типов».
DATE_TO_LWORDDATE_TO_LWORD(значение: DATE)LWORDПреобразует DATE в LWORD. Правила и ошибки — в разделе «Преобразования типов».
DATE_TO_REALDATE_TO_REAL(значение: DATE)REALПреобразует DATE в REAL. Правила и ошибки — в разделе «Преобразования типов».
DATE_TO_STRINGDATE_TO_STRING(значение: DATE)STRINGПреобразует DATE в STRING. Правила и ошибки — в разделе «Преобразования типов».
DATE_TO_TIMEDATE_TO_TIME(значение: DATE)TIMEПреобразует DATE в TIME. Правила и ошибки — в разделе «Преобразования типов».
DATE_TO_TODDATE_TO_TOD(значение: DATE)TODПреобразует DATE в TOD. Правила и ошибки — в разделе «Преобразования типов».
DATE_TO_WORDDATE_TO_WORD(значение: DATE)WORDПреобразует DATE в WORD. Правила и ошибки — в разделе «Преобразования типов».
DT_TO_BOOLDT_TO_BOOL(значение: DT)BOOLПреобразует DT в BOOL. Правила и ошибки — в разделе «Преобразования типов».
DT_TO_BYTEDT_TO_BYTE(значение: DT)BYTEПреобразует DT в BYTE. Правила и ошибки — в разделе «Преобразования типов».
DT_TO_DATEDT_TO_DATE(значение: DT)DATEПреобразует DT в DATE. Правила и ошибки — в разделе «Преобразования типов».
DT_TO_DWORDDT_TO_DWORD(значение: DT)DWORDПреобразует DT в DWORD. Правила и ошибки — в разделе «Преобразования типов».
DT_TO_INTDT_TO_INT(значение: DT)INTПреобразует DT в INT. Правила и ошибки — в разделе «Преобразования типов».
DT_TO_LWORDDT_TO_LWORD(значение: DT)LWORDПреобразует DT в LWORD. Правила и ошибки — в разделе «Преобразования типов».
DT_TO_REALDT_TO_REAL(значение: DT)REALПреобразует DT в REAL. Правила и ошибки — в разделе «Преобразования типов».
DT_TO_STRINGDT_TO_STRING(значение: DT)STRINGПреобразует DT в STRING. Правила и ошибки — в разделе «Преобразования типов».
DT_TO_TIMEDT_TO_TIME(значение: DT)TIMEПреобразует DT в TIME. Правила и ошибки — в разделе «Преобразования типов».
DT_TO_TODDT_TO_TOD(значение: DT)TODПреобразует DT в TOD. Правила и ошибки — в разделе «Преобразования типов».
DT_TO_WORDDT_TO_WORD(значение: DT)WORDПреобразует DT в WORD. Правила и ошибки — в разделе «Преобразования типов».
DWORD_TO_BOOLDWORD_TO_BOOL(значение: DWORD)BOOLПреобразует DWORD в BOOL. Правила и ошибки — в разделе «Преобразования типов».
DWORD_TO_BYTEDWORD_TO_BYTE(значение: DWORD)BYTEПреобразует DWORD в BYTE. Правила и ошибки — в разделе «Преобразования типов».
DWORD_TO_DATEDWORD_TO_DATE(значение: DWORD)DATEПреобразует DWORD в DATE. Правила и ошибки — в разделе «Преобразования типов».
DWORD_TO_DTDWORD_TO_DT(значение: DWORD)DTПреобразует DWORD в DT. Правила и ошибки — в разделе «Преобразования типов».
DWORD_TO_INTDWORD_TO_INT(значение: DWORD)INTПреобразует DWORD в INT. Правила и ошибки — в разделе «Преобразования типов».
DWORD_TO_LWORDDWORD_TO_LWORD(значение: DWORD)LWORDПреобразует DWORD в LWORD. Правила и ошибки — в разделе «Преобразования типов».
DWORD_TO_REALDWORD_TO_REAL(значение: DWORD)REALПреобразует DWORD в REAL. Правила и ошибки — в разделе «Преобразования типов».
DWORD_TO_STRINGDWORD_TO_STRING(значение: DWORD)STRINGПреобразует DWORD в STRING. Правила и ошибки — в разделе «Преобразования типов».
DWORD_TO_TIMEDWORD_TO_TIME(значение: DWORD)TIMEПреобразует DWORD в TIME. Правила и ошибки — в разделе «Преобразования типов».
DWORD_TO_TODDWORD_TO_TOD(значение: DWORD)TODПреобразует DWORD в TOD. Правила и ошибки — в разделе «Преобразования типов».
DWORD_TO_WORDDWORD_TO_WORD(значение: DWORD)WORDПреобразует DWORD в WORD. Правила и ошибки — в разделе «Преобразования типов».
INT_TO_BOOLINT_TO_BOOL(значение: INT)BOOLПреобразует INT в BOOL. Правила и ошибки — в разделе «Преобразования типов».
INT_TO_BYTEINT_TO_BYTE(значение: INT)BYTEПреобразует INT в BYTE. Правила и ошибки — в разделе «Преобразования типов».
INT_TO_DATEINT_TO_DATE(значение: INT)DATEПреобразует INT в DATE. Правила и ошибки — в разделе «Преобразования типов».
INT_TO_DTINT_TO_DT(значение: INT)DTПреобразует INT в DT. Правила и ошибки — в разделе «Преобразования типов».
INT_TO_DWORDINT_TO_DWORD(значение: INT)DWORDПреобразует INT в DWORD. Правила и ошибки — в разделе «Преобразования типов».
INT_TO_LWORDINT_TO_LWORD(значение: INT)LWORDПреобразует INT в LWORD. Правила и ошибки — в разделе «Преобразования типов».
INT_TO_REALINT_TO_REAL(значение: INT)REALПреобразует INT в REAL. Правила и ошибки — в разделе «Преобразования типов».
INT_TO_STRINGINT_TO_STRING(значение: INT)STRINGПреобразует INT в STRING. Правила и ошибки — в разделе «Преобразования типов».
INT_TO_TIMEINT_TO_TIME(значение: INT)TIMEПреобразует INT в TIME. Правила и ошибки — в разделе «Преобразования типов».
INT_TO_TODINT_TO_TOD(значение: INT)TODПреобразует INT в TOD. Правила и ошибки — в разделе «Преобразования типов».
INT_TO_WORDINT_TO_WORD(значение: INT)WORDПреобразует INT в WORD. Правила и ошибки — в разделе «Преобразования типов».
LWORD_TO_BOOLLWORD_TO_BOOL(значение: LWORD)BOOLПреобразует LWORD в BOOL. Правила и ошибки — в разделе «Преобразования типов».
LWORD_TO_BYTELWORD_TO_BYTE(значение: LWORD)BYTEПреобразует LWORD в BYTE. Правила и ошибки — в разделе «Преобразования типов».
LWORD_TO_DATELWORD_TO_DATE(значение: LWORD)DATEПреобразует LWORD в DATE. Правила и ошибки — в разделе «Преобразования типов».
LWORD_TO_DTLWORD_TO_DT(значение: LWORD)DTПреобразует LWORD в DT. Правила и ошибки — в разделе «Преобразования типов».
LWORD_TO_DWORDLWORD_TO_DWORD(значение: LWORD)DWORDПреобразует LWORD в DWORD. Правила и ошибки — в разделе «Преобразования типов».
LWORD_TO_INTLWORD_TO_INT(значение: LWORD)INTПреобразует LWORD в INT. Правила и ошибки — в разделе «Преобразования типов».
LWORD_TO_REALLWORD_TO_REAL(значение: LWORD)REALПреобразует LWORD в REAL. Правила и ошибки — в разделе «Преобразования типов».
LWORD_TO_STRINGLWORD_TO_STRING(значение: LWORD)STRINGПреобразует LWORD в STRING. Правила и ошибки — в разделе «Преобразования типов».
LWORD_TO_TIMELWORD_TO_TIME(значение: LWORD)TIMEПреобразует LWORD в TIME. Правила и ошибки — в разделе «Преобразования типов».
LWORD_TO_TODLWORD_TO_TOD(значение: LWORD)TODПреобразует LWORD в TOD. Правила и ошибки — в разделе «Преобразования типов».
LWORD_TO_WORDLWORD_TO_WORD(значение: LWORD)WORDПреобразует LWORD в WORD. Правила и ошибки — в разделе «Преобразования типов».
REAL_TO_BOOLREAL_TO_BOOL(значение: REAL)BOOLПреобразует REAL в BOOL. Правила и ошибки — в разделе «Преобразования типов».
REAL_TO_BYTEREAL_TO_BYTE(значение: REAL)BYTEПреобразует REAL в BYTE. Правила и ошибки — в разделе «Преобразования типов».
REAL_TO_DATEREAL_TO_DATE(значение: REAL)DATEПреобразует REAL в DATE. Правила и ошибки — в разделе «Преобразования типов».
REAL_TO_DTREAL_TO_DT(значение: REAL)DTПреобразует REAL в DT. Правила и ошибки — в разделе «Преобразования типов».
REAL_TO_DWORDREAL_TO_DWORD(значение: REAL)DWORDПреобразует REAL в DWORD. Правила и ошибки — в разделе «Преобразования типов».
REAL_TO_INTREAL_TO_INT(значение: REAL)INTПреобразует REAL в INT. Правила и ошибки — в разделе «Преобразования типов».
REAL_TO_LWORDREAL_TO_LWORD(значение: REAL)LWORDПреобразует REAL в LWORD. Правила и ошибки — в разделе «Преобразования типов».
REAL_TO_STRINGREAL_TO_STRING(значение: REAL)STRINGПреобразует REAL в STRING. Правила и ошибки — в разделе «Преобразования типов».
REAL_TO_TIMEREAL_TO_TIME(значение: REAL)TIMEПреобразует REAL в TIME. Правила и ошибки — в разделе «Преобразования типов».
REAL_TO_TODREAL_TO_TOD(значение: REAL)TODПреобразует REAL в TOD. Правила и ошибки — в разделе «Преобразования типов».
REAL_TO_WORDREAL_TO_WORD(значение: REAL)WORDПреобразует REAL в WORD. Правила и ошибки — в разделе «Преобразования типов».
STRING_TO_BOOLSTRING_TO_BOOL(значение: STRING)BOOLПреобразует STRING в BOOL. Правила и ошибки — в разделе «Преобразования типов».
STRING_TO_BYTESTRING_TO_BYTE(значение: STRING)BYTEПреобразует STRING в BYTE. Правила и ошибки — в разделе «Преобразования типов».
STRING_TO_DATESTRING_TO_DATE(значение: STRING)DATEПреобразует STRING в DATE. Правила и ошибки — в разделе «Преобразования типов».
STRING_TO_DTSTRING_TO_DT(значение: STRING)DTПреобразует STRING в DT. Правила и ошибки — в разделе «Преобразования типов».
STRING_TO_DWORDSTRING_TO_DWORD(значение: STRING)DWORDПреобразует STRING в DWORD. Правила и ошибки — в разделе «Преобразования типов».
STRING_TO_INTSTRING_TO_INT(значение: STRING)INTПреобразует STRING в INT. Правила и ошибки — в разделе «Преобразования типов».
STRING_TO_LWORDSTRING_TO_LWORD(значение: STRING)LWORDПреобразует STRING в LWORD. Правила и ошибки — в разделе «Преобразования типов».
STRING_TO_REALSTRING_TO_REAL(значение: STRING)REALПреобразует STRING в REAL. Правила и ошибки — в разделе «Преобразования типов».
STRING_TO_TIMESTRING_TO_TIME(значение: STRING)TIMEПреобразует STRING в TIME. Правила и ошибки — в разделе «Преобразования типов».
STRING_TO_TODSTRING_TO_TOD(значение: STRING)TODПреобразует STRING в TOD. Правила и ошибки — в разделе «Преобразования типов».
STRING_TO_WORDSTRING_TO_WORD(значение: STRING)WORDПреобразует STRING в WORD. Правила и ошибки — в разделе «Преобразования типов».
TIME_TO_BOOLTIME_TO_BOOL(значение: TIME)BOOLПреобразует TIME в BOOL. Правила и ошибки — в разделе «Преобразования типов».
TIME_TO_BYTETIME_TO_BYTE(значение: TIME)BYTEПреобразует TIME в BYTE. Правила и ошибки — в разделе «Преобразования типов».
TIME_TO_DATETIME_TO_DATE(значение: TIME)DATEПреобразует TIME в DATE. Правила и ошибки — в разделе «Преобразования типов».
TIME_TO_DTTIME_TO_DT(значение: TIME)DTПреобразует TIME в DT. Правила и ошибки — в разделе «Преобразования типов».
TIME_TO_DWORDTIME_TO_DWORD(значение: TIME)DWORDПреобразует TIME в DWORD. Правила и ошибки — в разделе «Преобразования типов».
TIME_TO_INTTIME_TO_INT(значение: TIME)INTПреобразует TIME в INT. Правила и ошибки — в разделе «Преобразования типов».
TIME_TO_LWORDTIME_TO_LWORD(значение: TIME)LWORDПреобразует TIME в LWORD. Правила и ошибки — в разделе «Преобразования типов».
TIME_TO_REALTIME_TO_REAL(значение: TIME)REALПреобразует TIME в REAL. Правила и ошибки — в разделе «Преобразования типов».
TIME_TO_STRINGTIME_TO_STRING(значение: TIME)STRINGПреобразует TIME в STRING. Правила и ошибки — в разделе «Преобразования типов».
TIME_TO_TODTIME_TO_TOD(значение: TIME)TODПреобразует TIME в TOD. Правила и ошибки — в разделе «Преобразования типов».
TIME_TO_WORDTIME_TO_WORD(значение: TIME)WORDПреобразует TIME в WORD. Правила и ошибки — в разделе «Преобразования типов».
TOD_TO_BOOLTOD_TO_BOOL(значение: TOD)BOOLПреобразует TOD в BOOL. Правила и ошибки — в разделе «Преобразования типов».
TOD_TO_BYTETOD_TO_BYTE(значение: TOD)BYTEПреобразует TOD в BYTE. Правила и ошибки — в разделе «Преобразования типов».
TOD_TO_DATETOD_TO_DATE(значение: TOD)DATEПреобразует TOD в DATE. Правила и ошибки — в разделе «Преобразования типов».
TOD_TO_DTTOD_TO_DT(значение: TOD)DTПреобразует TOD в DT. Правила и ошибки — в разделе «Преобразования типов».
TOD_TO_DWORDTOD_TO_DWORD(значение: TOD)DWORDПреобразует TOD в DWORD. Правила и ошибки — в разделе «Преобразования типов».
TOD_TO_INTTOD_TO_INT(значение: TOD)INTПреобразует TOD в INT. Правила и ошибки — в разделе «Преобразования типов».
TOD_TO_LWORDTOD_TO_LWORD(значение: TOD)LWORDПреобразует TOD в LWORD. Правила и ошибки — в разделе «Преобразования типов».
TOD_TO_REALTOD_TO_REAL(значение: TOD)REALПреобразует TOD в REAL. Правила и ошибки — в разделе «Преобразования типов».
TOD_TO_STRINGTOD_TO_STRING(значение: TOD)STRINGПреобразует TOD в STRING. Правила и ошибки — в разделе «Преобразования типов».
TOD_TO_TIMETOD_TO_TIME(значение: TOD)TIMEПреобразует TOD в TIME. Правила и ошибки — в разделе «Преобразования типов».
TOD_TO_WORDTOD_TO_WORD(значение: TOD)WORDПреобразует TOD в WORD. Правила и ошибки — в разделе «Преобразования типов».
WORD_TO_BOOLWORD_TO_BOOL(значение: WORD)BOOLПреобразует WORD в BOOL. Правила и ошибки — в разделе «Преобразования типов».
WORD_TO_BYTEWORD_TO_BYTE(значение: WORD)BYTEПреобразует WORD в BYTE. Правила и ошибки — в разделе «Преобразования типов».
WORD_TO_DATEWORD_TO_DATE(значение: WORD)DATEПреобразует WORD в DATE. Правила и ошибки — в разделе «Преобразования типов».
WORD_TO_DTWORD_TO_DT(значение: WORD)DTПреобразует WORD в DT. Правила и ошибки — в разделе «Преобразования типов».
WORD_TO_DWORDWORD_TO_DWORD(значение: WORD)DWORDПреобразует WORD в DWORD. Правила и ошибки — в разделе «Преобразования типов».
WORD_TO_INTWORD_TO_INT(значение: WORD)INTПреобразует WORD в INT. Правила и ошибки — в разделе «Преобразования типов».
WORD_TO_LWORDWORD_TO_LWORD(значение: WORD)LWORDПреобразует WORD в LWORD. Правила и ошибки — в разделе «Преобразования типов».
WORD_TO_REALWORD_TO_REAL(значение: WORD)REALПреобразует WORD в REAL. Правила и ошибки — в разделе «Преобразования типов».
WORD_TO_STRINGWORD_TO_STRING(значение: WORD)STRINGПреобразует WORD в STRING. Правила и ошибки — в разделе «Преобразования типов».
WORD_TO_TIMEWORD_TO_TIME(значение: WORD)TIMEПреобразует WORD в TIME. Правила и ошибки — в разделе «Преобразования типов».
WORD_TO_TODWORD_TO_TOD(значение: WORD)TODПреобразует WORD в TOD. Правила и ошибки — в разделе «Преобразования типов».

Совместимость IEC ST и CODESYS

SAMUTAG выполняет скрипты собственным интерпретатором и не запускает скомпилированные приложения CODESYS. Поддерживаемые конструкции перечислены ниже. Версии языка в Studio и установленном Runtime должны быть совместимы для проверки и выполнения загружаемого проекта.

ГруппаСостояние
Объявления, присваивания, IF/ELSIF/ELSEПоддерживается
BOOL/INT/REAL/STRING, битовые строки, фиксированные массивыПоддерживается
Объекты тегов value/alarm и межэкземплярные путиПоддерживается в samutag-st 5
Изменяемая ссылка ioLink с блокировкой записиПоддерживается в samutag-st 6
Раздельные ссылки ioReadLink/ioWriteLink и независимые замкиПоддерживается в samutag-st 7
MyName и конкатенация строк оператором +Поддерживается в samutag-st 8
IsIO/alarmIO и фазовый обмен I/OПоддерживается в samutag-st 9
Системные свойства I/O-сервера и статистика соединенияПоддерживается в samutag-st 10
Жизненный цикл аварии в Tag.alarmStatusПоддерживается в samutag-st 11
FOR, WHILE, CASE; стандартные таймеры, счётчики, фронты; время/дата; LogПоддерживается в samutag-st 12
REPEAT, остальные целые, структуры, перечисления, пользовательские функции и блокиНе реализовано
Указатели, ссылки, адреса, директивы компилятора и специальные расширения CODESYSНе поддерживаются текущим интерпретатором

Глоссарий служебных и зарезервированных слов

Поддерживаемые служебные слова

ANDARRAYBOOLBYBYTECASECTDCTUCTUDDATEDATE_AND_TIMEDEBOUNCEDODTDWORDELSEELSIFEND_CASEEND_FOREND_IFEND_VAREND_WHILEFALSEFORF_TRIGHYSTERESISIFINTLOWPASSLWORDMODMOVING_AVERAGENOTOFORRATE_LIMITREALR_TRIGSTRINGTHENTIMETIME_OF_DAYTOTODTOFTONTPTRUEVARWHILEWORDXOR

Встроенные функции

ROLRORSHLSHR BOOL_TO_BYTEBOOL_TO_DATEBOOL_TO_DTBOOL_TO_DWORDBOOL_TO_INTBOOL_TO_LWORDBOOL_TO_REALBOOL_TO_STRINGBOOL_TO_TIMEBOOL_TO_TODBOOL_TO_WORDBYTE_TO_BOOLBYTE_TO_DATEBYTE_TO_DTBYTE_TO_DWORDBYTE_TO_INTBYTE_TO_LWORDBYTE_TO_REALBYTE_TO_STRINGBYTE_TO_TIMEBYTE_TO_TODBYTE_TO_WORDDATE_TO_BOOLDATE_TO_BYTEDATE_TO_DTDATE_TO_DWORDDATE_TO_INTDATE_TO_LWORDDATE_TO_REALDATE_TO_STRINGDATE_TO_TIMEDATE_TO_TODDATE_TO_WORDDT_TO_BOOLDT_TO_BYTEDT_TO_DATEDT_TO_DWORDDT_TO_INTDT_TO_LWORDDT_TO_REALDT_TO_STRINGDT_TO_TIMEDT_TO_TODDT_TO_WORDDWORD_TO_BOOLDWORD_TO_BYTEDWORD_TO_DATEDWORD_TO_DTDWORD_TO_INTDWORD_TO_LWORDDWORD_TO_REALDWORD_TO_STRINGDWORD_TO_TIMEDWORD_TO_TODDWORD_TO_WORDINT_TO_BOOLINT_TO_BYTEINT_TO_DATEINT_TO_DTINT_TO_DWORDINT_TO_LWORDINT_TO_REALINT_TO_STRINGINT_TO_TIMEINT_TO_TODINT_TO_WORDLWORD_TO_BOOLLWORD_TO_BYTELWORD_TO_DATELWORD_TO_DTLWORD_TO_DWORDLWORD_TO_INTLWORD_TO_REALLWORD_TO_STRINGLWORD_TO_TIMELWORD_TO_TODLWORD_TO_WORDREAL_TO_BOOLREAL_TO_BYTEREAL_TO_DATEREAL_TO_DTREAL_TO_DWORDREAL_TO_INTREAL_TO_LWORDREAL_TO_STRINGREAL_TO_TIMEREAL_TO_TODREAL_TO_WORDSTRING_TO_BOOLSTRING_TO_BYTESTRING_TO_DATESTRING_TO_DTSTRING_TO_DWORDSTRING_TO_INTSTRING_TO_LWORDSTRING_TO_REALSTRING_TO_TIMESTRING_TO_TODSTRING_TO_WORDTIME_TO_BOOLTIME_TO_BYTETIME_TO_DATETIME_TO_DTTIME_TO_DWORDTIME_TO_INTTIME_TO_LWORDTIME_TO_REALTIME_TO_STRINGTIME_TO_TODTIME_TO_WORDTOD_TO_BOOLTOD_TO_BYTETOD_TO_DATETOD_TO_DTTOD_TO_DWORDTOD_TO_INTTOD_TO_LWORDTOD_TO_REALTOD_TO_STRINGTOD_TO_TIMETOD_TO_WORDWORD_TO_BOOLWORD_TO_BYTEWORD_TO_DATEWORD_TO_DTWORD_TO_DWORDWORD_TO_INTWORD_TO_LWORDWORD_TO_REALWORD_TO_STRINGWORD_TO_TIMEWORD_TO_TOD

Зарезервированы для совместимости имён

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

ABSOLUTEACTIONASASMASSERTASYNCATAWAITBEGINBREAKCATCHCLASSCONFIGURATIONCONSTCONSTANTCONSTRUCTORCONTINUEDEBUGGERDEFDEFAULTDELDELETEDESTRUCTORDINTDIVDOWNTOELIFENDEND_ACTIONEND_CONFIGURATIONEND_FUNCTIONEND_FUNCTION_BLOCKEND_PROGRAMEND_REPEATEND_RESOURCEEND_STEPEND_STRUCTEND_TRANSITIONEND_TYPEENUMEXCEPTEXITEXPORTEXTENDSF_EDGEFILEFINALLYFROMFUNCTIONFUNCTION_BLOCKGLOBALGOTOIMPLEMENTATIONIMPLEMENTSIMPORTININHERITEDINLINEINSTANCEOFINTERFACEISLABELLAMBDALETLINTLREALMATCHMYNAMENEWNILNONENONLOCALNULLOBJECTOPERATORPACKAGEPACKEDPASSPRIVATEPROCEDUREPROGRAMPROTECTEDPUBLICR_EDGERAISEREAD_ONLYREAD_WRITERECORDREINTRODUCEREPEATRESOURCERETAINRETURNSELFSETSHLSHRSINTSTATICSTEPSTRUCTSUPERSWITCHSYSTEMTASKTHISTHROWTRANSITIONTRYTYPETYPEOFUDINTUINTULINTUNITUNTILUSESUSINTVAR_ACCESSVAR_CONFIGVAR_EXTERNALVAR_GLOBALVAR_IN_OUTVAR_INPUTVAR_OUTPUTVAR_TEMPVOIDWITHYIELD

Полный пример

VAR
  Starts: INT := 0;
  EngineeringValue: REAL;
END_VAR

EngineeringValue := INT_TO_REAL(RawValue) / 10.0;
IF StartCommand AND Control.status <> 'error' THEN
  Starts := Starts + 1;
  Output := TRUE;
ELSE
  Output := FALSE;
END_IF;

Руководство SCADA системы SAMUTAG. © Самунов А.С. (2026)