Специальные функции
ESR_COLLECT
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
Функциональный блок 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
Тип модуля: функция | Переменная | Тип | Описание |
|---|---|---|---|
Входы | status | BYTE | Код статуса |
| adress | STRING(10) | Описание переменной | |
| DT_in | DT | Дата и время изменения | |
| TS | TIME | Относительное время изменения (в мс, после старта ПЛК) | |
Выходы | STATUS_TO_ESR | Информация мониторинга |
Функция 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 |