Специальные функции

ESR_COLLECT

Тип модуля: ФБ

Переменная

Тип

Описание

ВходыESR_0…ESR_7

ARRAY [0…3] OF ESR_DATA

Массив входных данных

rstBOOL

Сигнал удаления данных

Выходы

ESR_OUT

ARRAY [0…31] OF ESR_DATA

Массив выходных данных

Входы-выходы

pos

INT

Номер последнего записанного элемента выходного массива

Используемые модулиINC1
Внимание
В текущей версии библиотеки ФБ работает некорректно. Для корректной работы необходимо отредактировать код ФБ следующим образом:
IF rst OR cnt < 0 THEN pos := -1; cnt := 0; //bug-fix

Функциональный блок ESR_COLLECT используется для сбора данных других ESR-модулей и сохранения их в массив. Входы ESR_0...ESR_7 используются как значения для входов-выходов ESR_Out других ESR-модулей. При обновлении информации ESR-модулей, данные заносятся в массив ESR_COLLECT.ESR_OUT, при этом значение входа-выхода pos инкрементируется. Массив ESR_COLLECT.ESR_OUT может хранить до 32-х элементов типа ESR_DATA. При превышении этого количества начинается перезапись элементов (начиная с нулевого). По переднему фронту на входе rst происходит удаление всех данных модуля, после чего pos принимает значение -1.

ESR_MON_B8

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

s_0…s_7

BOOL

Сигналы для мониторинга

DT_in

DT

Текущие дата и время

Выходы

ESR_Flag

BOOL

Признак обновления данных

Входы-выходы

ESR_out

ARRAY [0…3] OF ESR_DATA

Информация мониторинга

Параметры

a0…a7

STRING(10)

Названия сигналов

Используемые модулиT_PLC_MS

Функциональный блок ESR_MON_B8 применяется для мониторинга от одной до восьми переменных типа BOOL (s0...s7). На вход DT_in подается значение системного времени в формате DT (считанного с помощью одной из доступных пользователю библиотек). При изменении значения переменных s0…s7 данные мониторинга сохраняются в массив ESR_Out, элементы которого являются экземплярами структуры типа ESR_DATA. Массив содержит 4 элемента и, соответственно, позволяет хранить данные мониторинга для четырех одновременно изменившихся переменных. Иными словами, при одновременном (произошедшем в одном цикле ПЛК) изменении всех восьми переменных будет сохранена информация только о четырех (приоритет отдается сигналам с меньшим номером). Для ведения архива мониторинга можно использовать ФБ ESR_COLLECT. Выход ESR_flag принимает значение TRUE на один цикл при обновлении данных мониторинга.

Структура ESR_DATA включает следующую информацию:

Переменная структуры

Тип

Описание

TYP

BYTE

Тип изменения переменной типа BOOL.

11 – с FALSE на TRUE, 10 – c TRUE на FALSE

Изменяется только на один цикл, после чего сбрасывается в 0

ADRESS

STRING(10)

Описание переменной (указывается в параметрах модуля)

DS

DT

Дата и время изменения

TS

TIME

Относительное время изменения (в мс после старта проекта)

DATA

ARRAY [0..7] OF BYTE

Не используется данным ФБ

ESR_MON_R4

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

R0…R3

BOOL

Сигналы для мониторинга

DT_in

DT

Текущие дата и время

Выходы

ESR_Flag

BOOL

Признак обновления данных

Входы-выходы

ESR_out

ARRAY [0…3] OF ESR_DATA

Информация мониторинга

Параметры

a0…a3

STRING(10)

Названия сигналов

s0…s3

REAL

Гистерезис сигналов

Используемые модулиT_PLC_MS, DIFFER

Функциональный блок ESR_MON_R4 применяется для мониторинга от одной до четырех переменных типа REAL (R0...R3). На вход DT_in подается значение системного времени в формате DT (считанного с помощью одной из доступных пользователю библиотек). При изменении значения переменных R0...R3 на величину s0…s3 или выше данные мониторинга сохраняются в массив ESR_Out, элементы которого являются экземплярами структуры типа ESR_DATA. Массив содержит 4 элемента и, соответственно, позволяет хранить данные о последнем изменении для каждой переменной. Для ведения архива мониторинга можно использовать ФБ ESR_COLLECT. Выход ESR_flag принимает значение TRUE на один цикл при обновлении данных мониторинга.

Структура ESR_DATA включает следующую информацию:

Переменная структуры

Тип

Описание

TYP

BYTE

Принимает значение 20 при изменении переменной.

Изменяется только на один цикл, после чего сбрасывается в 0

ADRESS

STRING(10)

Описание переменной (указывается в параметрах модуля)

DS

DT

Дата и время изменения

TS

TIME

Относительное время изменения (в мс после старта проекта)

DATA

ARRAY [0..7] OF BYTE

В первых четырех байтах содержится новое значение переменной в формате IEEE 754

ESR_MON_X8

Тип модуля: ФБ

Переменная

Тип

Описание

Входы

s0…s7

BYTE

Сигналы для мониторинга

DT_in

DT

Текущие дата и время

Mode

BYTE

Режим работы блока

Выходы

ESR_Flag

BOOL

Признак обновления данных

Входы-выходы

ESR_out

ARRAY [0…3] OF ESR_DATA

Информация мониторинга

Параметры

a0…a7

STRING(10)

Названия сигналов

Используемые модулиT_PLC_MS, STATUS_TO_ESR

Функциональный блок ESR_MON_X8 применяется для мониторинга от одной до восьми переменных типа BYTE (s0...s7), которые содержат информацию о состоянии других ФБ. Такие переменные обычно называются Status. В качестве примера можно привести выход Status ФБ SEQUENCE_4. На вход DT_in подается значение системного времени в формате DT (считанного с помощью одной из доступных пользователю библиотек). Вход Mode определяет режим работы блока:

  • Mode=1 – обрабатываются только сообщения об ошибках;

  • Mode=2 – обрабатываются сообщения об ошибках и состоянии ФБ;

  • Mode=3 – обрабатываются сообщения об ошибках, состоянии ФБ.

При изменении значения переменных s0...s7 данные мониторинга сохраняются в массив ESR_Out, элементы которого являются экземплярами структуры типа ESR_DATA. Массив содержит 4 элемента и, соответственно, позволяет хранить данные мониторинга для четырех одновременно изменившихся переменных. Иными словами, при одновременном (произошедшем в одном цикле ПЛК) изменении всех восьми переменных будет сохранена информация только о четырех (приоритет отдается сигналам с меньшим номером). Для ведения архива мониторинга можно использовать ФБ ESR_COLLECT. Выход ESR_flag принимает значение TRUE на один цикл при обновлении данных мониторинга.

Структура ESR_DATA включает следующую информацию:

Переменная структуры

Тип

Описание

TYP

BYTE

Код статуса. Изменяется только на один цикл, после чего сбрасывается в 0

ADRESS

STRING(10)

Описание переменной (указывается в параметрах модуля)

DS

DT

Дата и время изменения

TS

TIME

Относительное время изменения (в мс, после старта ПЛК)

DATA

ARRAY [0..7] OF BYTE

В нулевом байте содержится код статуса

OSCAT_VERSION

Тип модуля: функция

Переменная

Тип

Описание

Входы

IN

BOOL

Вход функции

Выходы

OSCAT_VERSION

DWORD

Версия библиотеки/дата релиза

Функция OSCAT_VERSION возвращает версию библиотеки (в формате DWORD) при значении IN=FALSE и дату релиза данной версии (в формате DWORD) при значении IN=TRUE.

VAR xIn : BOOL; dwVer : DWORD; (* версия библиотеки *) dwRel : DWORD; (* дата релиза *) END_VAR xIn := FALSE; dwVer := OSCAT_BASIC.OSCAT_VERSION(IN := xIn); (* вернёт версию библиотеки (DWORD), зависит от установленной версии *) xIn := TRUE; dwRel := OSCAT_BASIC.OSCAT_VERSION(IN := xIn); (* вернёт дату релиза (DWORD), зависит от установленной версии *) END_PROGRAM

STATUS_TO_ESR

Тип модуля: функция

Переменная

Тип

Описание

Входы

statusBYTEКод статуса
adressSTRING(10)Описание переменной
DT_inDTДата и время изменения
TSTIME

Относительное время изменения (в мс, после старта ПЛК)

Выходы

STATUS_TO_ESR

ESR_DATA

Информация мониторинга

Функция STATUS_TO_ESR собирает элемент структуры ESR_DATA из отдельных переменных.

Коды статуса 1...99 соответствуют сообщениям об ошибках, 100…199 – состояниям ФБ, 200…255 – отладочным сообщениям.

VAR bStatus : BYTE := 101; (* 100..199 — состояния ФБ *) sAddr : STRING(10) := 'FB1.STATE'; (* описание/имя параметра *) dtChange : DT := DT#2026-06-18-12:00:00; (* дата/время события *) tStamp : TIME := T#1234ms; (* мс после старта *) esr : OSCAT_BASIC.ESR_DATA; (* результат *) typ : BYTE; addrOut : STRING(10); dsOut : DT; tsOut : TIME; b0 : BYTE; END_VAR esr := OSCAT_BASIC.STATUS_TO_ESR( status := bStatus, adress := sAddr, DT_in := dtChange, TS := tStamp ); (* Пример чтения полей структуры ESR_DATA *) typ := esr.TYP; addrOut := esr.ADRESS; dsOut := esr.DS; tsOut := esr.TS; b0 := esr.DATA[0]; END_PROGRAM