| Both sides previous revision Previous revision Next revision | Previous revision |
| doc:jroboplc:modules:arctrm [2026/07/22 21:41] – denis | doc:jroboplc:modules:arctrm [2026/08/01 11:25] (current) – [События] denis |
|---|
| ====== arctrm ====== | ====== arctrm ====== |
| |
| Модуль ''arctrm'' предназначен для периодического архивирования температурных значений в базе данных Firebird. Значения считываются из тегов модулей ''promauto.termo5''. | Модуль ''arctrm'' предназначен для периодического архивирования температурных значений в базе данных Firebird. На текущий момент значения считываются только из тегов модулей ''promauto.termo5''. В дальнейшем возможно расширение поддержки других модулей термометрии. |
| |
| Модуль сохраняет: | Модуль сохраняет: |
| |
| * температурные срезы по каждому подвесу; | * температурные срезы по подвескам с актуальными данными; |
| * сведения о подвесах; | * сведения о подвесках; |
| * события запуска архива и изменения состояния связи с устройствами. | * события запуска архива, изменения состояния связи с устройствами и потери актуальности данных подвесок. |
| |
| Сам модуль не выполняет обмен с оборудованием. Данные и состояние связи он получает через ссылки ''Ref'' на теги других модулей. | Сам модуль не выполняет обмен с оборудованием. Данные и состояние связи он получает из тегов других модулей. |
| |
| [[doc:jroboplc:modules:arctrm_dev]] | [[doc:jroboplc:modules:arctrm_dev]] |
| | ''period'' | ''1h'' | Период сохранения архива. Поддерживаются суффиксы ''ms'', ''s'', ''m'', ''h'', ''d''. | | | ''period'' | ''1h'' | Период сохранения архива. Поддерживаются суффиксы ''ms'', ''s'', ''m'', ''h'', ''d''. | |
| | ''size'' | ''1000000'' | Максимальное количество строк в таблице ''TEMPER''. | | | ''size'' | ''1000000'' | Максимальное количество строк в таблице ''TEMPER''. | |
| | ''sensorCount'' | ''6'' | Количество датчиков в каждом подвесе. | | | ''sensorCount'' | ''6'' | Количество датчиков в каждой подвеске. | |
| | ''promauto.termo5'' | — | Список модулей-источников и настроенных подвесов. | | | ''promauto.termo5'' | — | Список модулей-источников и настроенных подвесок. | |
| |
| Значения ''size'', ''period'' и ''sensorCount'' должны быть больше нуля. | Значения ''size'', ''period'' и ''sensorCount'' должны быть больше нуля. |
| ==== Настройка устройств ==== | ==== Настройка устройств ==== |
| |
| Ключ первого уровня в секции ''promauto.termo5'' является именем модуля-источника тегов. Ключ подвеса состоит из произвольного первого символа и числового номера. Например, из ключа ''p5'' модуль получает номер подвеса ''5''. | Ключ первого уровня в секции ''promauto.termo5'' является именем модуля-источника тегов. Ключ подвески состоит из произвольного первого символа и числового номера. Например, из ключа ''p5'' модуль получает номер подвеса ''5''. |
| |
| Для каждого подвеса создаются ссылки на теги: | Для каждой подвески создаются ссылки на теги: |
| |
| <code text> | <code text> |
| <deviceName>:Pdv<podvesNum>.T<sensorCount-1> | <deviceName>:Pdv<podvesNum>.T<sensorCount-1> |
| </code> | </code> |
| | |
| | Актуальность данных подвески определяется по тегу: |
| | |
| | <code text> |
| | <deviceName>:Pdv<podvesNum>.Time |
| | </code> |
| | |
| | Данные считаются актуальными, если ссылка на тег существует, а его значение находится в диапазоне от ''0'' до ''600'' включительно. |
| |
| Состояние связи с устройством определяется по тегу: | Состояние связи с устройством определяется по тегу: |
| - создаёт необходимые таблицы и индексы; | - создаёт необходимые таблицы и индексы; |
| - добавляет отсутствующие колонки ''T0...Tn'' в таблицу ''TEMPER''; | - добавляет отсутствующие колонки ''T0...Tn'' в таблицу ''TEMPER''; |
| - синхронизирует справочник подвесов; | - синхронизирует справочник подвесок; |
| - загружает дату последней архивной записи; | - загружает дату последней архивной записи; |
| - записывает событие запуска архива. | - записывает событие запуска архива. |
| |
| На каждом рабочем цикле модуль считывает текущие значения датчиков. Время берётся с сервера базы данных и округляется вниз до границы периода ''period''. | На каждом рабочем цикле модуль сначала проверяет ''Pdv<podvesNum>.Time'' каждой подвески. Значения датчиков считываются только для подвесок с актуальными данными. Время архивного среза берётся с сервера базы данных и округляется вниз до границы периода ''period''. |
| |
| Если наступил новый период, в ''TEMPER'' записывается по одной строке для каждого подвеса. При превышении лимита ''size'' удаляются строки с наименьшими значениями ''ID''. | Если наступил новый период, в ''TEMPER'' записывается по одной строке для каждой подвески с актуальными данными. Для подвески с отсутствующим тегом ''Time'' или значением вне диапазона ''0...600'' строка не создаётся. При превышении лимита ''size'' удаляются строки с наименьшими значениями ''ID''. |
| |
| ===== База данных ===== | ===== База данных ===== |
| |
| ^ Таблица ^ Назначение ^ | ^ Таблица ^ Назначение ^ |
| | ''PODVES'' | Справочник подвесов: имя и описание. | | | ''PODVES'' | Справочник подвесок: имя и описание. | |
| | ''TEMPER'' | Архив температурных срезов. Содержит ''PODVES_ID'', ''DT'' и динамические колонки ''T0...Tn''. | | | ''TEMPER'' | Архив температурных срезов. Содержит ''PODVES_ID'', ''DT'' и динамические колонки ''T0...Tn''. | |
| | ''EVENTLOG'' | Журнал запуска архива и изменения состояния связи с устройствами. | | | ''EVENTLOG'' | Журнал запуска архива, изменения состояния связи с устройствами и потери актуальности данных подвесок. | |
| |
| Основные связи: | Основные связи: |
| </code> | </code> |
| |
| Одна строка ''TEMPER'' содержит значения всех датчиков одного подвеса за один архивный период. | Одна строка ''TEMPER'' содержит значения всех датчиков одной подвески за один архивный период. |
| |
| ===== Значения датчиков ===== | ===== Значения датчиков ===== |
| |
| ^ Значение ^ Состояние ^ | ^ Значение ^ Состояние ^ |
| | ''3000'' | Тег датчика не найден — ''NOLINK''. | | | ''3010'' | Значение ниже допустимого диапазона — короткое замыкание. | |
| | ''3010'' | Значение ниже допустимого диапазона — обрыв датчика. | | | ''3011'' | Значение выше допустимого диапазона — обрыв. | |
| | ''3011'' | Значение выше допустимого диапазона — короткое замыкание. | | | ''3013'' | Тег датчика не найден — ''NOLINK''. | |
| |
| Допустимый диапазон обычного значения: от ''-1000'' до ''2000'' включительно. | Допустимый диапазон обычного значения: от ''-1000'' до ''2000'' включительно. |
| |
| ^ Код ^ Событие ^ | ^ Код ^ Событие ^ |
| | ''0'' | Инициализация архива. | | | ''0'' | Ссылка на ''SYSTEM.ErrorFlag'' не найдена. | |
| | ''1'' | Связь с устройством установлена. | | | ''1'' | Связь с устройством потеряна: ''SYSTEM.ErrorFlag = true''. | |
| | ''2'' | Связь с устройством потеряна: ''SYSTEM.ErrorFlag = true''. | | | ''3'' | Данные подвески неактуальны: ссылка на ''Pdv<podvesNum>.Time'' не найдена или значение находится вне диапазона ''0...600''. | |
| | ''3'' | Ссылка на ''SYSTEM.ErrorFlag'' не найдена. | | | ''99'' | Связь с устройством установлена. | |
| | | ''100'' | Инициализация архивации. | |
| | |
| | Для событий состояния устройства в поле ''MESSAGE'' записывается имя устройства, для события неактуальных данных — имя подвески в формате ''<deviceName>.<podvesNum>'', для события инициализации — пустая строка. |
| |
| Событие состояния устройства записывается только при изменении его состояния. | Событие состояния устройства записывается только при изменении его состояния. Событие неактуальных данных формируется при первой потере актуальности, записывается при наступлении следующего архивного периода и не повторяется до восстановления актуальности и её следующей потери. |
| |
| ===== Теги модуля ===== | ===== Теги модуля ===== |
| ^ Поле ^ Описание ^ | ^ Поле ^ Описание ^ |
| | ''devices'' | Количество настроенных устройств. | | | ''devices'' | Количество настроенных устройств. | |
| | ''podves'' | Общее количество подвесов. | | | ''podves'' | Общее количество подвесок. | |
| | ''sensors'' | Общее количество датчиков. | | | ''sensors'' | Общее количество датчиков. | |
| | ''nolinkSensors'' | Количество датчиков без ссылки; выводится только при ненулевом значении. | | | ''nolinkSensors'' | Количество датчиков без ссылки; выводится только при ненулевом значении. | |
| |
| * Поддерживается только Firebird. | * Поддерживается только Firebird. |
| * Значение ''sensorCount'' является общим для всех подвесов. | * Значение ''sensorCount'' является общим для всех подвесок. |
| * Таблица ''EVENTLOG'' автоматически не очищается. | * Таблица ''EVENTLOG'' автоматически не очищается. |
| * Удаление архивных строк выполняется по ''ID'', а не по дате ''DT''. | * Удаление архивных строк выполняется по ''ID'', а не по дате ''DT''. |