Руководство по скриптам SAMUTAG
ST-подобные скрипты SAMUTAG: синтаксис, контексты выполнения, отладка и ограничения.
Период запуска задаёт частоту выполнения скрипта, предельное время исполнения — допустимую длительность одного запуска.
Серверный скрипт шаблона выполняется отдельно для каждого экземпляра этого шаблона. Унаследованный скрипт доступен потомку, а ближайший одноимённый скрипт его переопределяет.
Язык SAMUTAG поддерживает часть конструкций Structured Text стандарта IEC 61131-3. Перечень поддерживаемых конструкций приведён в разделе «Совместимость IEC ST и CODESYS».
Первый серверный скрипт
- В своём шаблоне создайте INT-тэг
CounterTagбез I/O. - Создайте скрипт с периодическим запуском 1000 мс и лимитом исполнения 100 мс.
- Введите код ниже, проверьте синтаксис и сохраните.
- В Runtime-проверке добавьте CounterTag в «Отладку значений» и нажмите «Пуск».
- Для автономной работы создайте экземпляр, назначьте модель 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.
| Тип | Примеры | Особенности |
|---|---|---|
BOOL | TRUE, FALSE | Начальное значение: FALSE |
BYTE, WORD, DWORD, LWORD | 2#1010, 8#17, 16#FF00 | Начальное значение: 0 |
INT | 0, -15, 120 | Начальное значение: 0 |
REAL | 0.0, -1.25 | Начальное значение: 0.0 |
STRING | 'text', "text" | Начальное значение: пустая строка |
TIME | T#500ms, T#1h30m | длительность, миллисекунды |
DATE, TOD, DT | DATE#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 / TP | IN: BOOL, PT: TIME | Q: BOOL, ET: TIME |
| R_TRIG / F_TRIG | CLK: BOOL | Q: BOOL |
| CTU | CU, R: BOOL; PV: INT | Q: BOOL, CV: INT |
| CTD | CD, LD: BOOL; PV: INT | Q: BOOL, CV: INT |
| CTUD | CU, CD, R, LD: BOOL; PV: INT | QU, 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, частичные изменения тегов и локальных переменных не публикуются; остальные скрипты продолжают работу. Превышение времени обнаруживается между операциями; точность остановки зависит от длительности текущей операции. Дополнительно ограничены число операций, размер строк и объём журнала пошагового выполнения.
Преобразования типов
Имя функции не зависит от регистра. Каждая функция принимает ровно один аргумент исходного типа.
| Исходный тип | Доступные функции |
|---|---|
BOOL | BOOL_TO_INT, BOOL_TO_REAL, BOOL_TO_STRING |
INT | INT_TO_BOOL, INT_TO_REAL, INT_TO_STRING |
REAL | REAL_TO_BOOL, REAL_TO_INT, REAL_TO_STRING |
STRING | STRING_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.TotalByteSent | INT | число байтов, отправленных после запуска текущего драйвера I/O |
Server.TotalByteResived | INT | число байтов, принятых после запуска текущего драйвера I/O |
Server.alarmConnection | BOOL | TRUE до первого успешного ответа и после ошибки соединения или протокола |
IF MainPlc.alarmConnection THEN
ConnectionErrors := ConnectionErrors + 1;
END_IF;
Traffic := MainPlc.TotalByteSent + MainPlc.TotalByteResived;
Счётчики и авария относятся к текущему процессу Runtime и сбрасываются при остановке и повторном запуске I/O-сервера.
Объекты скриптов
Каждый скрипт, включённый в итоговую конфигурацию объекта с учётом наследования, предоставляет свойства только для чтения:
| Свойство | Тип | Значение |
|---|---|---|
Script.status | STRING | waiting, running, error |
Script.LastRunTimestamp | STRING | время запуска ISO 8601 |
Script.LastRunTime | REAL | длительность, мс |
Скрипты символов и действий
У символа предусмотрены три сценария: при открытии, при закрытии и периодический.
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.InstanceName | STRING · чтение | Собственное имя экземпляра, например N1_1. |
this.AbsoluteName | STRING · чтение | Полный Runtime-путь с локальными именами композиции, например Station_1.N1. Это не путь цепочки наследования шаблонов. |
this.TemplateName | STRING · чтение | Имя непосредственного шаблона, из которого создан экземпляр; не имя базового предка всей цепочки. |
MyName / this.MyName | STRING · чтение | Полный Runtime-путь текущего экземпляра; для явного указания назначения используйте this.AbsoluteName. |
this.description | STRING · чтение | Описание текущего владельца, разрешённое для данного экземпляра при подготовке проекта к загрузке. Для дочернего объекта: this.Child.description. |
this.MyTags | Массив объектов · чтение | Собственные и унаследованные тэги текущего объекта, без тэгов дочерних объектов композиции. Индексы от 1; порядок по имени без учёта регистра. Элемент даёт доступ к существующему объекту тэга и его свойствам. |
MyModel / this.MyModel | Объект | Модель, которой назначена группа экземпляров. Это объект, а не строка. У дочернего экземпляра используется назначение корня группы. |
MyModel.name | STRING · чтение | Служебное имя назначенной модели. |
MyModel.description | STRING · чтение | Описание назначенной модели. |
MyModel.displayName | STRING · чтение | Отображаемое имя модели, заданное в её свойствах. |
MyModel.TagName / MyModel.TagName.value | Тип тэга | Значение собственного тэга модели. Запись допускается при наличии прав. При редактировании шаблона конкретная модель ещё неизвестна: полная проверка выполняется перед загрузкой проекта; в экземпляре доступны конкретные тэги. |
this.TagName.value | Тип тэга | Текущее значение тэга. Запись проходит действующие ограничения безопасности. |
this.TagName.alarm | BOOL · чтение | Признак активной аварии тэга. |
this.TagName.alarmStatus | STRING · чтение | Состояние аварии и её подтверждения: Normal, UnAckAlarm, AckAlarm, UnAckRtn или AckRtn. Подробности в разделе «Состояния аварий». |
this.TagName.IsIO | BOOL · чтение | Включён ли ввод-вывод для тэга. |
this.TagName.alarmIO | BOOL · чтение | Признак ошибки ввода-вывода тэга. |
this.TagName.ioLink | STRING · по настройкам | Общая ссылка ввода-вывода вида Server.Variable. Изменение допускается при открытом замке; при раздельных ссылках используйте ioReadLink и ioWriteLink. |
this.TagName.ioReadLink | STRING · по настройкам | Ссылка для чтения. Возможность изменения определяется замком ссылки. |
this.TagName.ioWriteLink | STRING · по настройкам | Ссылка для записи. Изменение ссылки не снимает запрет записи на I/O-сервере. |
this.Script.name / this.Symbol.name | STRING · чтение | Имя конкретного скрипта или графического символа. Script и Symbol замените на реальные имена. |
this.Script.description / this.Symbol.description | STRING · чтение | Описание скрипта или графического символа. |
this.Script.status | STRING · чтение | Состояние скрипта: waiting — ожидание, running — выполнение, error — ошибка. |
this.Script.LastRunTimestamp | STRING · чтение | Отметка последнего запуска скрипта в формате ISO 8601. |
this.Script.LastRunTime | REAL · чтение | Длительность последнего выполнения скрипта в миллисекундах. |
OnOpen / OnClose / OnCycle / Action1… | Объекты · символ | Сценарии открытия, закрытия, периодического выполнения и действий элемента. Свойства status, LastRunTimestamp и LastRunTime имеют тот же смысл, что у объекта скрипта. |
Params.Name | Тип параметра · символ | Локальный параметр графического символа в браузере. Не является серверным тэгом. |
Tags.Name | Тип тэга · символ | Тэг владельца графического символа; серверные права записи сохраняются. |
Instance.TagName | Тип тэга | Абсолютная ссылка на тэг другого экземпляра проекта. Для вложенного экземпляра используется полный путь композиции. |
System.Cpu.LoadPercent | REAL · чтение | Загрузка CPU сервера Runtime в процентах, не компьютера оператора. |
System.Memory.TotalBytes | LWORD · чтение | Общий объём оперативной памяти сервера Runtime в байтах. |
System.Memory.UsedBytes | LWORD · чтение | Используемая оперативная память сервера Runtime в байтах. |
System.Memory.FreeBytes | LWORD · чтение | Свободная оперативная память сервера Runtime в байтах. |
System.Disks.Alias.TotalBytes | LWORD · чтение | Объём диска в байтах. Alias — псевдоним диска из настроек узла. |
System.Disks.Alias.UsedBytes | LWORD · чтение | Занятое место на выбранном диске в байтах. |
System.Disks.Alias.FreeBytes | LWORD · чтение | Свободное место на выбранном диске в байтах. |
Server.TotalByteSent | INT · чтение | Количество отправленных байтов I/O-сервера Server. |
Server.TotalByteResived | INT · чтение | Количество принятых байтов I/O-сервера. Написание Resived сохранено для совместимости. |
Server.alarmConnection | BOOL · чтение | Признак ошибки связи I/O-сервера. |
MyModel.alarm | BOOL · чтение | Есть хотя бы один аварийный тег во вложенных экземплярах. |
MyModel.alarmCount | INT · чтение | Количество аварийных тегов во вложенных экземплярах. |
MyModel.UnAckCount | INT · чтение | Количество неподтверждённых активных и вернувшихся аварий. |
MyModel.AckCount | INT · чтение | Количество подтверждённых активных аварий. |
MyModel.instanceCount | INT · чтение | Количество экземпляров в текущей и дочерних моделях. |
Служебные слова языка
| Запись | Тип и доступ | Назначение |
|---|---|---|
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;
Математика, строки, время и качество
| Имя | Вызов | Результат / выходы | Описание |
|---|---|---|---|
ABS | ABS(NUM) | NUM | Модуль числа. |
CEIL | CEIL(NUM) | INT | Округление вверх до целого: 2.1 → 3, −2.1 → −2. |
DAY | DAY(DT) | INT | День месяца UTC (1..31). |
DAY_OF_WEEK | DAY_OF_WEEK(DT) | INT | День недели UTC: понедельник 1, воскресенье 7. |
FLOOR | FLOOR(NUM) | INT | Округление вниз до целого: 2.7 → 2, −2.7 → −3. |
FORMAT_DATETIME | FORMAT_DATETIME(DT, STRING) | STRING | FORMAT_DATETIME(дата_DT, шаблон). Дата и время выводятся в UTC. В шаблоне YYYY означает год, MM — месяц, DD — день, hh — час, mm — минуту, ss — секунду, SSS — миллисекунды. Остальные символы сохраняются. |
FORMAT_NUMBER | FORMAT_NUMBER(NUM, INT, STRING) | STRING | FORMAT_NUMBER(число, знаки, разделитель). Количество знаков после разделителя — от 0 до 12; разделитель — "." или ",". Число должно быть больше −10¹⁵ и меньше 10¹⁵. При округлении 2.5 до целого получается 3, а −2.5 — −3. |
HOUR | HOUR(DT) | INT | Час UTC (0..23). |
IS_BAD | IS_BAD(TAG) | BOOL | IS_BAD(this.Tag): любое качество кроме достоверного good, включая uncertain, отсутствие данных и устаревание. |
IS_GOOD | IS_GOOD(TAG) | BOOL | IS_GOOD(this.Tag): качество good и данные не устарели. Проверяет состояние тэга на момент вызова скрипта, не выполняя дополнительный сетевой запрос. |
LIMIT | LIMIT(NUM, NUM, NUM) | NUM | LIMIT(минимум, значение, максимум). Ограничивает значение диапазоном; минимум не больше максимума. |
LOWER | LOWER(STRING) | STRING | Преобразует буквы строки в строчные, включая русские буквы. |
MAX | MAX(NUM, NUM) | NUM | Большее из двух чисел. |
MILLISECOND | MILLISECOND(DT) | INT | Миллисекунда (0..999). |
MIN | MIN(NUM, NUM) | NUM | Меньшее из двух чисел. |
MINUTE | MINUTE(DT) | INT | Минута UTC (0..59). |
MONTH | MONTH(DT) | INT | Месяц UTC (1..12). |
MUX | MUX(INT, T, T...) | T | MUX(индекс, значение0, значение1, ...). Индекс с 0; значения одного типа. Все аргументы вычисляются. |
NOW | NOW() | DT | Текущее календарное время UTC; одно значение на вызов скрипта. Для интервалов используйте таймеры. |
POW | POW(NUM, NUM) | REAL | Возведение числа в степень: POW(2, 3) = 8. Если результат нельзя представить действительным числом или он слишком велик, возникает ошибка. |
REPLACE | REPLACE(STRING, STRING, STRING) | STRING | REPLACE(строка, найти, заменить). Заменяет все найденные фрагменты строки. Прописные и строчные буквы различаются. Искомый фрагмент не должен быть пустым. |
ROUND | ROUND(NUM) | INT | Округление до ближайшего целого. При дробной части 0.5: 2.5 → 3, −2.5 → −3. |
SECOND | SECOND(DT) | INT | Секунда UTC (0..59). |
SEL | SEL(BOOL, T, T) | T | SEL(условие, значение_FALSE, значение_TRUE). Значения одного типа. |
SQRT | SQRT(NUM) | REAL | Квадратный корень неотрицательного числа. |
TAG_AGE | TAG_AGE(TAG) | TIME | TAG_AGE(this.Tag): время, прошедшее с последнего принятого измерения, в формате TIME; -1 мс, если время неизвестно. Ссылка на тэг, не строковое имя. |
TRIM | TRIM(STRING) | STRING | Удаляет пробелы, табуляцию и переносы строк в начале и конце строки, включая неразрывные пробелы и служебный символ BOM. |
TRUNC | TRUNC(NUM) | INT | Удаление дробной части без округления: 2.9 → 2, −2.9 → −2. |
UPPER | UPPER(STRING) | STRING | Преобразует буквы строки в прописные, включая русские буквы. |
YEAR | YEAR(DT) | INT | Год UTC (1..9999). |
Строки и массив тэгов
| Имя | Вызов | Результат / выходы | Описание |
|---|---|---|---|
CONCAT | CONCAT(STRING, STRING) | STRING | CONCAT(строка1, строка2) — объединение строк |
FIND | FIND(STRING, STRING) | INT | FIND(строка, искомое) — позиция первого вхождения, начиная с 1; 0, если подстрока не найдена |
INDEXOF | INDEXOF(STRING, STRING) | INT | INDEXOF(строка, искомое) — индекс первого вхождения, начиная с 0; -1, если подстрока не найдена. Учитывается регистр. |
LEFT | LEFT(STRING, INT) | STRING | LEFT(строка, длина) — первые символы строки в указанном количестве |
LEN | LEN(STRING) | INT | LEN(строка) — количество символов; LEN(this.MyTags) — количество тэгов |
MID | MID(STRING, INT, INT) | STRING | MID(строка, длина, позиция) — подстрока указанной длины, начиная с заданной позиции; первая позиция — 1 |
RIGHT | RIGHT(STRING, INT) | STRING | RIGHT(строка, длина) — последние символы строки в указанном количестве |
Битовые функции
| Имя | Вызов | Результат / выходы | Описание |
|---|---|---|---|
ROL | ROL(значение: T, сдвиг: INT) | T | Циклический сдвиг влево. T — BYTE, WORD, DWORD или LWORD; число позиций неотрицательное. |
ROR | ROR(значение: T, сдвиг: INT) | T | Циклический сдвиг вправо. T — BYTE, WORD, DWORD или LWORD; число позиций неотрицательное. |
SHL | SHL(значение: T, сдвиг: INT) | T | Сдвиг влево с заполнением нулями. T — BYTE, WORD, DWORD или LWORD; число позиций неотрицательное. |
SHR | SHR(значение: T, сдвиг: INT) | T | Сдвиг вправо с заполнением нулями. T — BYTE, WORD, DWORD или LWORD; число позиций неотрицательное. |
Проверка тэгов и журнал
| Имя | Вызов | Результат / выходы | Описание |
|---|---|---|---|
isTagExists | isTagExists(путь: STRING) | BOOL | Возвращает TRUE, если по указанному пути существует тэг экземпляра или переменная I/O-сервера в конфигурации проекта; иначе FALSE. Не проверяет связь, качество данных или права доступа. |
Log | Log(значение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_BYTE | BOOL_TO_BYTE(значение: BOOL) | BYTE | Преобразует BOOL в BYTE. Правила и ошибки — в разделе «Преобразования типов». |
BOOL_TO_DATE | BOOL_TO_DATE(значение: BOOL) | DATE | Преобразует BOOL в DATE. Правила и ошибки — в разделе «Преобразования типов». |
BOOL_TO_DT | BOOL_TO_DT(значение: BOOL) | DT | Преобразует BOOL в DT. Правила и ошибки — в разделе «Преобразования типов». |
BOOL_TO_DWORD | BOOL_TO_DWORD(значение: BOOL) | DWORD | Преобразует BOOL в DWORD. Правила и ошибки — в разделе «Преобразования типов». |
BOOL_TO_INT | BOOL_TO_INT(значение: BOOL) | INT | Преобразует BOOL в INT. Правила и ошибки — в разделе «Преобразования типов». |
BOOL_TO_LWORD | BOOL_TO_LWORD(значение: BOOL) | LWORD | Преобразует BOOL в LWORD. Правила и ошибки — в разделе «Преобразования типов». |
BOOL_TO_REAL | BOOL_TO_REAL(значение: BOOL) | REAL | Преобразует BOOL в REAL. Правила и ошибки — в разделе «Преобразования типов». |
BOOL_TO_STRING | BOOL_TO_STRING(значение: BOOL) | STRING | Преобразует BOOL в STRING. Правила и ошибки — в разделе «Преобразования типов». |
BOOL_TO_TIME | BOOL_TO_TIME(значение: BOOL) | TIME | Преобразует BOOL в TIME. Правила и ошибки — в разделе «Преобразования типов». |
BOOL_TO_TOD | BOOL_TO_TOD(значение: BOOL) | TOD | Преобразует BOOL в TOD. Правила и ошибки — в разделе «Преобразования типов». |
BOOL_TO_WORD | BOOL_TO_WORD(значение: BOOL) | WORD | Преобразует BOOL в WORD. Правила и ошибки — в разделе «Преобразования типов». |
BYTE_TO_BOOL | BYTE_TO_BOOL(значение: BYTE) | BOOL | Преобразует BYTE в BOOL. Правила и ошибки — в разделе «Преобразования типов». |
BYTE_TO_DATE | BYTE_TO_DATE(значение: BYTE) | DATE | Преобразует BYTE в DATE. Правила и ошибки — в разделе «Преобразования типов». |
BYTE_TO_DT | BYTE_TO_DT(значение: BYTE) | DT | Преобразует BYTE в DT. Правила и ошибки — в разделе «Преобразования типов». |
BYTE_TO_DWORD | BYTE_TO_DWORD(значение: BYTE) | DWORD | Преобразует BYTE в DWORD. Правила и ошибки — в разделе «Преобразования типов». |
BYTE_TO_INT | BYTE_TO_INT(значение: BYTE) | INT | Преобразует BYTE в INT. Правила и ошибки — в разделе «Преобразования типов». |
BYTE_TO_LWORD | BYTE_TO_LWORD(значение: BYTE) | LWORD | Преобразует BYTE в LWORD. Правила и ошибки — в разделе «Преобразования типов». |
BYTE_TO_REAL | BYTE_TO_REAL(значение: BYTE) | REAL | Преобразует BYTE в REAL. Правила и ошибки — в разделе «Преобразования типов». |
BYTE_TO_STRING | BYTE_TO_STRING(значение: BYTE) | STRING | Преобразует BYTE в STRING. Правила и ошибки — в разделе «Преобразования типов». |
BYTE_TO_TIME | BYTE_TO_TIME(значение: BYTE) | TIME | Преобразует BYTE в TIME. Правила и ошибки — в разделе «Преобразования типов». |
BYTE_TO_TOD | BYTE_TO_TOD(значение: BYTE) | TOD | Преобразует BYTE в TOD. Правила и ошибки — в разделе «Преобразования типов». |
BYTE_TO_WORD | BYTE_TO_WORD(значение: BYTE) | WORD | Преобразует BYTE в WORD. Правила и ошибки — в разделе «Преобразования типов». |
DATE_TO_BOOL | DATE_TO_BOOL(значение: DATE) | BOOL | Преобразует DATE в BOOL. Правила и ошибки — в разделе «Преобразования типов». |
DATE_TO_BYTE | DATE_TO_BYTE(значение: DATE) | BYTE | Преобразует DATE в BYTE. Правила и ошибки — в разделе «Преобразования типов». |
DATE_TO_DT | DATE_TO_DT(значение: DATE) | DT | Преобразует DATE в DT. Правила и ошибки — в разделе «Преобразования типов». |
DATE_TO_DWORD | DATE_TO_DWORD(значение: DATE) | DWORD | Преобразует DATE в DWORD. Правила и ошибки — в разделе «Преобразования типов». |
DATE_TO_INT | DATE_TO_INT(значение: DATE) | INT | Преобразует DATE в INT. Правила и ошибки — в разделе «Преобразования типов». |
DATE_TO_LWORD | DATE_TO_LWORD(значение: DATE) | LWORD | Преобразует DATE в LWORD. Правила и ошибки — в разделе «Преобразования типов». |
DATE_TO_REAL | DATE_TO_REAL(значение: DATE) | REAL | Преобразует DATE в REAL. Правила и ошибки — в разделе «Преобразования типов». |
DATE_TO_STRING | DATE_TO_STRING(значение: DATE) | STRING | Преобразует DATE в STRING. Правила и ошибки — в разделе «Преобразования типов». |
DATE_TO_TIME | DATE_TO_TIME(значение: DATE) | TIME | Преобразует DATE в TIME. Правила и ошибки — в разделе «Преобразования типов». |
DATE_TO_TOD | DATE_TO_TOD(значение: DATE) | TOD | Преобразует DATE в TOD. Правила и ошибки — в разделе «Преобразования типов». |
DATE_TO_WORD | DATE_TO_WORD(значение: DATE) | WORD | Преобразует DATE в WORD. Правила и ошибки — в разделе «Преобразования типов». |
DT_TO_BOOL | DT_TO_BOOL(значение: DT) | BOOL | Преобразует DT в BOOL. Правила и ошибки — в разделе «Преобразования типов». |
DT_TO_BYTE | DT_TO_BYTE(значение: DT) | BYTE | Преобразует DT в BYTE. Правила и ошибки — в разделе «Преобразования типов». |
DT_TO_DATE | DT_TO_DATE(значение: DT) | DATE | Преобразует DT в DATE. Правила и ошибки — в разделе «Преобразования типов». |
DT_TO_DWORD | DT_TO_DWORD(значение: DT) | DWORD | Преобразует DT в DWORD. Правила и ошибки — в разделе «Преобразования типов». |
DT_TO_INT | DT_TO_INT(значение: DT) | INT | Преобразует DT в INT. Правила и ошибки — в разделе «Преобразования типов». |
DT_TO_LWORD | DT_TO_LWORD(значение: DT) | LWORD | Преобразует DT в LWORD. Правила и ошибки — в разделе «Преобразования типов». |
DT_TO_REAL | DT_TO_REAL(значение: DT) | REAL | Преобразует DT в REAL. Правила и ошибки — в разделе «Преобразования типов». |
DT_TO_STRING | DT_TO_STRING(значение: DT) | STRING | Преобразует DT в STRING. Правила и ошибки — в разделе «Преобразования типов». |
DT_TO_TIME | DT_TO_TIME(значение: DT) | TIME | Преобразует DT в TIME. Правила и ошибки — в разделе «Преобразования типов». |
DT_TO_TOD | DT_TO_TOD(значение: DT) | TOD | Преобразует DT в TOD. Правила и ошибки — в разделе «Преобразования типов». |
DT_TO_WORD | DT_TO_WORD(значение: DT) | WORD | Преобразует DT в WORD. Правила и ошибки — в разделе «Преобразования типов». |
DWORD_TO_BOOL | DWORD_TO_BOOL(значение: DWORD) | BOOL | Преобразует DWORD в BOOL. Правила и ошибки — в разделе «Преобразования типов». |
DWORD_TO_BYTE | DWORD_TO_BYTE(значение: DWORD) | BYTE | Преобразует DWORD в BYTE. Правила и ошибки — в разделе «Преобразования типов». |
DWORD_TO_DATE | DWORD_TO_DATE(значение: DWORD) | DATE | Преобразует DWORD в DATE. Правила и ошибки — в разделе «Преобразования типов». |
DWORD_TO_DT | DWORD_TO_DT(значение: DWORD) | DT | Преобразует DWORD в DT. Правила и ошибки — в разделе «Преобразования типов». |
DWORD_TO_INT | DWORD_TO_INT(значение: DWORD) | INT | Преобразует DWORD в INT. Правила и ошибки — в разделе «Преобразования типов». |
DWORD_TO_LWORD | DWORD_TO_LWORD(значение: DWORD) | LWORD | Преобразует DWORD в LWORD. Правила и ошибки — в разделе «Преобразования типов». |
DWORD_TO_REAL | DWORD_TO_REAL(значение: DWORD) | REAL | Преобразует DWORD в REAL. Правила и ошибки — в разделе «Преобразования типов». |
DWORD_TO_STRING | DWORD_TO_STRING(значение: DWORD) | STRING | Преобразует DWORD в STRING. Правила и ошибки — в разделе «Преобразования типов». |
DWORD_TO_TIME | DWORD_TO_TIME(значение: DWORD) | TIME | Преобразует DWORD в TIME. Правила и ошибки — в разделе «Преобразования типов». |
DWORD_TO_TOD | DWORD_TO_TOD(значение: DWORD) | TOD | Преобразует DWORD в TOD. Правила и ошибки — в разделе «Преобразования типов». |
DWORD_TO_WORD | DWORD_TO_WORD(значение: DWORD) | WORD | Преобразует DWORD в WORD. Правила и ошибки — в разделе «Преобразования типов». |
INT_TO_BOOL | INT_TO_BOOL(значение: INT) | BOOL | Преобразует INT в BOOL. Правила и ошибки — в разделе «Преобразования типов». |
INT_TO_BYTE | INT_TO_BYTE(значение: INT) | BYTE | Преобразует INT в BYTE. Правила и ошибки — в разделе «Преобразования типов». |
INT_TO_DATE | INT_TO_DATE(значение: INT) | DATE | Преобразует INT в DATE. Правила и ошибки — в разделе «Преобразования типов». |
INT_TO_DT | INT_TO_DT(значение: INT) | DT | Преобразует INT в DT. Правила и ошибки — в разделе «Преобразования типов». |
INT_TO_DWORD | INT_TO_DWORD(значение: INT) | DWORD | Преобразует INT в DWORD. Правила и ошибки — в разделе «Преобразования типов». |
INT_TO_LWORD | INT_TO_LWORD(значение: INT) | LWORD | Преобразует INT в LWORD. Правила и ошибки — в разделе «Преобразования типов». |
INT_TO_REAL | INT_TO_REAL(значение: INT) | REAL | Преобразует INT в REAL. Правила и ошибки — в разделе «Преобразования типов». |
INT_TO_STRING | INT_TO_STRING(значение: INT) | STRING | Преобразует INT в STRING. Правила и ошибки — в разделе «Преобразования типов». |
INT_TO_TIME | INT_TO_TIME(значение: INT) | TIME | Преобразует INT в TIME. Правила и ошибки — в разделе «Преобразования типов». |
INT_TO_TOD | INT_TO_TOD(значение: INT) | TOD | Преобразует INT в TOD. Правила и ошибки — в разделе «Преобразования типов». |
INT_TO_WORD | INT_TO_WORD(значение: INT) | WORD | Преобразует INT в WORD. Правила и ошибки — в разделе «Преобразования типов». |
LWORD_TO_BOOL | LWORD_TO_BOOL(значение: LWORD) | BOOL | Преобразует LWORD в BOOL. Правила и ошибки — в разделе «Преобразования типов». |
LWORD_TO_BYTE | LWORD_TO_BYTE(значение: LWORD) | BYTE | Преобразует LWORD в BYTE. Правила и ошибки — в разделе «Преобразования типов». |
LWORD_TO_DATE | LWORD_TO_DATE(значение: LWORD) | DATE | Преобразует LWORD в DATE. Правила и ошибки — в разделе «Преобразования типов». |
LWORD_TO_DT | LWORD_TO_DT(значение: LWORD) | DT | Преобразует LWORD в DT. Правила и ошибки — в разделе «Преобразования типов». |
LWORD_TO_DWORD | LWORD_TO_DWORD(значение: LWORD) | DWORD | Преобразует LWORD в DWORD. Правила и ошибки — в разделе «Преобразования типов». |
LWORD_TO_INT | LWORD_TO_INT(значение: LWORD) | INT | Преобразует LWORD в INT. Правила и ошибки — в разделе «Преобразования типов». |
LWORD_TO_REAL | LWORD_TO_REAL(значение: LWORD) | REAL | Преобразует LWORD в REAL. Правила и ошибки — в разделе «Преобразования типов». |
LWORD_TO_STRING | LWORD_TO_STRING(значение: LWORD) | STRING | Преобразует LWORD в STRING. Правила и ошибки — в разделе «Преобразования типов». |
LWORD_TO_TIME | LWORD_TO_TIME(значение: LWORD) | TIME | Преобразует LWORD в TIME. Правила и ошибки — в разделе «Преобразования типов». |
LWORD_TO_TOD | LWORD_TO_TOD(значение: LWORD) | TOD | Преобразует LWORD в TOD. Правила и ошибки — в разделе «Преобразования типов». |
LWORD_TO_WORD | LWORD_TO_WORD(значение: LWORD) | WORD | Преобразует LWORD в WORD. Правила и ошибки — в разделе «Преобразования типов». |
REAL_TO_BOOL | REAL_TO_BOOL(значение: REAL) | BOOL | Преобразует REAL в BOOL. Правила и ошибки — в разделе «Преобразования типов». |
REAL_TO_BYTE | REAL_TO_BYTE(значение: REAL) | BYTE | Преобразует REAL в BYTE. Правила и ошибки — в разделе «Преобразования типов». |
REAL_TO_DATE | REAL_TO_DATE(значение: REAL) | DATE | Преобразует REAL в DATE. Правила и ошибки — в разделе «Преобразования типов». |
REAL_TO_DT | REAL_TO_DT(значение: REAL) | DT | Преобразует REAL в DT. Правила и ошибки — в разделе «Преобразования типов». |
REAL_TO_DWORD | REAL_TO_DWORD(значение: REAL) | DWORD | Преобразует REAL в DWORD. Правила и ошибки — в разделе «Преобразования типов». |
REAL_TO_INT | REAL_TO_INT(значение: REAL) | INT | Преобразует REAL в INT. Правила и ошибки — в разделе «Преобразования типов». |
REAL_TO_LWORD | REAL_TO_LWORD(значение: REAL) | LWORD | Преобразует REAL в LWORD. Правила и ошибки — в разделе «Преобразования типов». |
REAL_TO_STRING | REAL_TO_STRING(значение: REAL) | STRING | Преобразует REAL в STRING. Правила и ошибки — в разделе «Преобразования типов». |
REAL_TO_TIME | REAL_TO_TIME(значение: REAL) | TIME | Преобразует REAL в TIME. Правила и ошибки — в разделе «Преобразования типов». |
REAL_TO_TOD | REAL_TO_TOD(значение: REAL) | TOD | Преобразует REAL в TOD. Правила и ошибки — в разделе «Преобразования типов». |
REAL_TO_WORD | REAL_TO_WORD(значение: REAL) | WORD | Преобразует REAL в WORD. Правила и ошибки — в разделе «Преобразования типов». |
STRING_TO_BOOL | STRING_TO_BOOL(значение: STRING) | BOOL | Преобразует STRING в BOOL. Правила и ошибки — в разделе «Преобразования типов». |
STRING_TO_BYTE | STRING_TO_BYTE(значение: STRING) | BYTE | Преобразует STRING в BYTE. Правила и ошибки — в разделе «Преобразования типов». |
STRING_TO_DATE | STRING_TO_DATE(значение: STRING) | DATE | Преобразует STRING в DATE. Правила и ошибки — в разделе «Преобразования типов». |
STRING_TO_DT | STRING_TO_DT(значение: STRING) | DT | Преобразует STRING в DT. Правила и ошибки — в разделе «Преобразования типов». |
STRING_TO_DWORD | STRING_TO_DWORD(значение: STRING) | DWORD | Преобразует STRING в DWORD. Правила и ошибки — в разделе «Преобразования типов». |
STRING_TO_INT | STRING_TO_INT(значение: STRING) | INT | Преобразует STRING в INT. Правила и ошибки — в разделе «Преобразования типов». |
STRING_TO_LWORD | STRING_TO_LWORD(значение: STRING) | LWORD | Преобразует STRING в LWORD. Правила и ошибки — в разделе «Преобразования типов». |
STRING_TO_REAL | STRING_TO_REAL(значение: STRING) | REAL | Преобразует STRING в REAL. Правила и ошибки — в разделе «Преобразования типов». |
STRING_TO_TIME | STRING_TO_TIME(значение: STRING) | TIME | Преобразует STRING в TIME. Правила и ошибки — в разделе «Преобразования типов». |
STRING_TO_TOD | STRING_TO_TOD(значение: STRING) | TOD | Преобразует STRING в TOD. Правила и ошибки — в разделе «Преобразования типов». |
STRING_TO_WORD | STRING_TO_WORD(значение: STRING) | WORD | Преобразует STRING в WORD. Правила и ошибки — в разделе «Преобразования типов». |
TIME_TO_BOOL | TIME_TO_BOOL(значение: TIME) | BOOL | Преобразует TIME в BOOL. Правила и ошибки — в разделе «Преобразования типов». |
TIME_TO_BYTE | TIME_TO_BYTE(значение: TIME) | BYTE | Преобразует TIME в BYTE. Правила и ошибки — в разделе «Преобразования типов». |
TIME_TO_DATE | TIME_TO_DATE(значение: TIME) | DATE | Преобразует TIME в DATE. Правила и ошибки — в разделе «Преобразования типов». |
TIME_TO_DT | TIME_TO_DT(значение: TIME) | DT | Преобразует TIME в DT. Правила и ошибки — в разделе «Преобразования типов». |
TIME_TO_DWORD | TIME_TO_DWORD(значение: TIME) | DWORD | Преобразует TIME в DWORD. Правила и ошибки — в разделе «Преобразования типов». |
TIME_TO_INT | TIME_TO_INT(значение: TIME) | INT | Преобразует TIME в INT. Правила и ошибки — в разделе «Преобразования типов». |
TIME_TO_LWORD | TIME_TO_LWORD(значение: TIME) | LWORD | Преобразует TIME в LWORD. Правила и ошибки — в разделе «Преобразования типов». |
TIME_TO_REAL | TIME_TO_REAL(значение: TIME) | REAL | Преобразует TIME в REAL. Правила и ошибки — в разделе «Преобразования типов». |
TIME_TO_STRING | TIME_TO_STRING(значение: TIME) | STRING | Преобразует TIME в STRING. Правила и ошибки — в разделе «Преобразования типов». |
TIME_TO_TOD | TIME_TO_TOD(значение: TIME) | TOD | Преобразует TIME в TOD. Правила и ошибки — в разделе «Преобразования типов». |
TIME_TO_WORD | TIME_TO_WORD(значение: TIME) | WORD | Преобразует TIME в WORD. Правила и ошибки — в разделе «Преобразования типов». |
TOD_TO_BOOL | TOD_TO_BOOL(значение: TOD) | BOOL | Преобразует TOD в BOOL. Правила и ошибки — в разделе «Преобразования типов». |
TOD_TO_BYTE | TOD_TO_BYTE(значение: TOD) | BYTE | Преобразует TOD в BYTE. Правила и ошибки — в разделе «Преобразования типов». |
TOD_TO_DATE | TOD_TO_DATE(значение: TOD) | DATE | Преобразует TOD в DATE. Правила и ошибки — в разделе «Преобразования типов». |
TOD_TO_DT | TOD_TO_DT(значение: TOD) | DT | Преобразует TOD в DT. Правила и ошибки — в разделе «Преобразования типов». |
TOD_TO_DWORD | TOD_TO_DWORD(значение: TOD) | DWORD | Преобразует TOD в DWORD. Правила и ошибки — в разделе «Преобразования типов». |
TOD_TO_INT | TOD_TO_INT(значение: TOD) | INT | Преобразует TOD в INT. Правила и ошибки — в разделе «Преобразования типов». |
TOD_TO_LWORD | TOD_TO_LWORD(значение: TOD) | LWORD | Преобразует TOD в LWORD. Правила и ошибки — в разделе «Преобразования типов». |
TOD_TO_REAL | TOD_TO_REAL(значение: TOD) | REAL | Преобразует TOD в REAL. Правила и ошибки — в разделе «Преобразования типов». |
TOD_TO_STRING | TOD_TO_STRING(значение: TOD) | STRING | Преобразует TOD в STRING. Правила и ошибки — в разделе «Преобразования типов». |
TOD_TO_TIME | TOD_TO_TIME(значение: TOD) | TIME | Преобразует TOD в TIME. Правила и ошибки — в разделе «Преобразования типов». |
TOD_TO_WORD | TOD_TO_WORD(значение: TOD) | WORD | Преобразует TOD в WORD. Правила и ошибки — в разделе «Преобразования типов». |
WORD_TO_BOOL | WORD_TO_BOOL(значение: WORD) | BOOL | Преобразует WORD в BOOL. Правила и ошибки — в разделе «Преобразования типов». |
WORD_TO_BYTE | WORD_TO_BYTE(значение: WORD) | BYTE | Преобразует WORD в BYTE. Правила и ошибки — в разделе «Преобразования типов». |
WORD_TO_DATE | WORD_TO_DATE(значение: WORD) | DATE | Преобразует WORD в DATE. Правила и ошибки — в разделе «Преобразования типов». |
WORD_TO_DT | WORD_TO_DT(значение: WORD) | DT | Преобразует WORD в DT. Правила и ошибки — в разделе «Преобразования типов». |
WORD_TO_DWORD | WORD_TO_DWORD(значение: WORD) | DWORD | Преобразует WORD в DWORD. Правила и ошибки — в разделе «Преобразования типов». |
WORD_TO_INT | WORD_TO_INT(значение: WORD) | INT | Преобразует WORD в INT. Правила и ошибки — в разделе «Преобразования типов». |
WORD_TO_LWORD | WORD_TO_LWORD(значение: WORD) | LWORD | Преобразует WORD в LWORD. Правила и ошибки — в разделе «Преобразования типов». |
WORD_TO_REAL | WORD_TO_REAL(значение: WORD) | REAL | Преобразует WORD в REAL. Правила и ошибки — в разделе «Преобразования типов». |
WORD_TO_STRING | WORD_TO_STRING(значение: WORD) | STRING | Преобразует WORD в STRING. Правила и ошибки — в разделе «Преобразования типов». |
WORD_TO_TIME | WORD_TO_TIME(значение: WORD) | TIME | Преобразует WORD в TIME. Правила и ошибки — в разделе «Преобразования типов». |
WORD_TO_TOD | WORD_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;