Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
doc:jroboplc:modules:motohr [2025/02/28 11:50] denis |
doc:jroboplc:modules:motohr [2025/03/21 14:11] (текущий) denis [Системные команды] |
||
|---|---|---|---|
| Строка 23: | Строка 23: | ||
| module.mh: | module.mh: | ||
| database: db | database: db | ||
| - | |||
| - | counters: | ||
| - | - name: c1 | ||
| - | descr: Счетчик 1 | ||
| - | timer: off | ||
| - | |||
| - | - name: c2 | ||
| - | descr: Счетчик 2 | ||
| - | |||
| - | - name: t1 | ||
| - | descr: Таймер 1 | ||
| - | timer: on | ||
| machines: | machines: | ||
| - | - prefix: M | + | - expr.tag: .*\.MCHB_(.*)_Plata |
| - | expr.tag: .*\.MCHB_(.*)_Plata | + | |
| expr.descr: (.*)(MCHB.*)(_Plata) | expr.descr: (.*)(MCHB.*)(_Plata) | ||
| - | repl.descr: $1$2.descr | + | repl.descr: $1.$2.descr |
| - | counters: | + | include.tag: ^UVRD.* |
| - | - total | + | exclude.tag: .*Beep.* |
| - | - c1 | + | include.descr: .*(Дробилка|Нория|Шнек).* |
| - | - t1 | + | exclude.descr: .*(101|102).* |
| - | include: ^UVRD.* | + | |
| - | exclude: .*Beep.* | + | |
| - | | + | |
| - | - prefix: M | + | |
| - | counters: | + | |
| - | - c2 | + | |
| - | include: .*1001.* | + | |
| - | | ||
| </code> | </code> | ||
| Строка 59: | Строка 38: | ||
| ^ Параметр ^ Умолчание ^ Описание ^ | ^ Параметр ^ Умолчание ^ Описание ^ | ||
| |**database**| ''db'' |Модуль базы данных ([[doc:jroboplc:modules:database]]) | | |**database**| ''db'' |Модуль базы данных ([[doc:jroboplc:modules:database]]) | | ||
| - | ^ counters - типы счетчиков ^^^ | ||
| - | |**name**| '''' |Уникальное имя счетчика | | ||
| - | |**descr**| '''' |Описание счетчика | | ||
| - | |**timer**| ''off'' |Счетчик является таймером | | ||
| ^ machines - правила формирования списка машин и назначения им счетчиков ^^^ | ^ machines - правила формирования списка машин и назначения им счетчиков ^^^ | ||
| |**prefix** | '''' |Префикс имени машины | | |**prefix** | '''' |Префикс имени машины | | ||
| Строка 68: | Строка 43: | ||
| |**expr.descr** | ''(.*)(MCHB.*)(_Plata)'' |regex-выражение для преобразования имени тега статуса машины в имя тега описания | | |**expr.descr** | ''(.*)(MCHB.*)(_Plata)'' |regex-выражение для преобразования имени тега статуса машины в имя тега описания | | ||
| |**repl.descr** | ''$1$2.descr'' |Выражение подстановки для формирования имени тега описания машины | | |**repl.descr** | ''$1$2.descr'' |Выражение подстановки для формирования имени тега описания машины | | ||
| - | |**include** | '''' |regex-выражение включающего фильтра имен тегов статуса. Если пусто, не используется | | + | |**include.tag** | '''' |regex-выражения фильтров по имени тега статуса и описанию. Если пусто, то не используется | |
| - | |**exclude** | '''' |regex-выражение исключающего фильтра имен тегов статуса. Если пусто, не используется | | + | |**exclude.tag** |::: |::: | |
| - | |**counters** | '''' |Список типов счетчиков | | + | |**include.descr** |::: |::: | |
| + | |**exclude.descr** |::: |::: | | ||
| Строка 80: | Строка 56: | ||
| |''system.util '' | ''STRING '' | ''RW'' |Тег для ввода системных команд (см. ...) | | |''system.util '' | ''STRING '' | ''RW'' |Тег для ввода системных команд (см. ...) | | ||
| | Группы тегов по каждому типу счетчиков |||| | | Группы тегов по каждому типу счетчиков |||| | ||
| - | |''cnttype.<счетчик>.descr '' | ''STRING '' | '''' |Описание счетчика | | + | |''cnttype.<ctId>.descr '' | ''STRING '' | '''' |Описание счетчика | |
| - | |''cnttype.<счетчик>.timer '' | ''BOOL '' | '''' |Счетчик является таймером | | + | |''cnttype.<ctId>.timer '' | ''BOOL '' | '''' |Счетчик является таймером | |
| | Группы тегов по каждой единице оборудования |||| | | Группы тегов по каждой единице оборудования |||| | ||
| - | |''<машина>.<cчетчик> '' | ''INT '' | ''RW'' |Значение счетчика без учета рабочего времени с момента последнего старта | | + | |''<machName>.cnt<ctId> '' | ''INT '' | ''RW'' |Значение счетчика без учета рабочего времени с момента последнего старта | |
| - | |''<машина>.time '' | ''LONG '' | '''' |Локальное время в секундах с момента последнего старта, либо 0, если машина остановлена | | + | |''<machName>.time '' | ''LONG '' | '''' |Локальное время в секундах с момента последнего старта, либо 0, если машина остановлена | |
| - | |''<машина>.descr '' | ''STRING '' | ''RW'' |Описание машины | | + | |''<machName>.descr '' | ''STRING '' | ''RW'' |Описание машины | |
| + | где: | ||
| + | * ''ctId'' - идентификатор типа счетчика, значения от 1 и более. Значение 1 всегда имеет счетчик "Всего", называемый далее **''total''**. | ||
| + | * ''machName'' - имя машины | ||
| + | |||
| + | Примечание: | ||
| + | *Локальное время в секундах - от 1970-01-01T00:00:00Z без часового пояса. | ||
| - | Примечание: Локальное время в секундах - от 1970-01-01T00:00:00Z без часового пояса. | ||
| - | + | Пример выборки тегов: | |
| - | Пример выборки тегов для машины ''M1001'' из вышеприведенной конфигурации: | + | |
| ^ Имя тега ^ Тип данных ^ Значение тега ^ | ^ Имя тега ^ Тип данных ^ Значение тега ^ | ||
| - | |''mh.cnttype.c1.descr '' | ''STRING'' | ''Счетчик 1'' | | + | |''mh.cnttype.1.descr'' | ''STRING'' | ''Всего '' | |
| - | |''mh.cnttype.c1.timer '' | ''BOOL '' | '' off '' | | + | |''mh.cnttype.1.timer'' | ''BOOL '' | ''off '' | |
| - | |''mh.cnttype.c2.descr '' | ''STRING'' | ''Счетчик 2'' | | + | |''mh.cnttype.2.descr '' | ''STRING'' | ''Счетчик A'' | |
| - | |''mh.cnttype.c2.timer '' | ''BOOL '' | ''off '' | | + | |''mh.cnttype.2.timer '' | ''BOOL '' | ''off '' | |
| - | |''mh.cnttype.t1.descr '' | ''STRING'' | ''Таймер 1 '' | | + | |''mh.cnttype.3.descr '' | ''STRING'' | ''Счетчик B'' | |
| - | |''mh.cnttype.t1.timer '' | ''BOOL '' | ''on '' | | + | |''mh.cnttype.3.timer '' | ''BOOL '' | '' off '' | |
| - | |''mh.cnttype.total.descr'' | ''STRING'' | ''Всего '' | | + | |''mh.cnttype.4.descr '' | ''STRING'' | ''Таймер 1 '' | |
| - | |''mh.cnttype.total.timer'' | ''BOOL '' | ''off '' | | + | |''mh.cnttype.4.timer '' | ''BOOL '' | ''on '' | |
| - | |''mh.M1001.c1 '' | ''INT '' | ''5328 '' | | + | |''mh.100.cnt1 '' | ''INT '' | ''5328 '' | |
| - | |''mh.M1001.c2 '' | ''INT '' | ''5328 '' | | + | |''mh.100.cnt2 '' | ''INT '' | ''5328 '' | |
| - | |''mh.M1001.t1 '' | ''INT '' | ''-5328 '' | | + | |''mh.100.cnt4 '' | ''INT '' | ''-5328 '' | |
| - | |''mh.M1001.descr '' | ''STRING'' | ''1001 Световой сигнализоатор '' | | + | |''mh.100.descr '' | ''STRING'' | ''100 Нория '' | |
| - | |''mh.M1001.time '' | ''LONG '' | ''1740347568 '' | | + | |''mh.100.time '' | ''LONG '' | ''1740347568 '' | |
| - | |''mh.M1001.total '' | ''INT '' | ''5328 '' | | + | |
| |''mh.system.time '' | ''LONG '' | ''1740349832 '' | | |''mh.system.time '' | ''LONG '' | ''1740349832 '' | | ||
| |''mh.system.util '' | ''STRING'' | '' '' | | |''mh.system.util '' | ''STRING'' | '' '' | | ||
| |''mh.connected '' | ''BOOL'' | ''on '' | | |''mh.connected '' | ''BOOL'' | ''on '' | | ||
| - | |''UVRD.MCHB_1001_Plata '' | ''INT '' | ''1 '' | | + | |''UVRD.MCHB_100_Plata '' | ''INT '' | ''1 '' | |
| ===== База данных ===== | ===== База данных ===== | ||
| - | {{:doc:jroboplc:modules:motohr_db2.png|}} | + | {{:doc:jroboplc:modules:motohr_db.png|}} |
| Строка 134: | Строка 113: | ||
| Машины | Машины | ||
| * ''DESCR'' - описание машины, подтягиваемое из тега описания. Если тег описания отсутствует, то допустима произвольная запись в данное поле | * ''DESCR'' - описание машины, подтягиваемое из тега описания. Если тег описания отсутствует, то допустима произвольная запись в данное поле | ||
| + | * ''TAGNAME'' - полное имя тега состояния машины, например: ''UVRD.MCHB_100_Plata'' | ||
| === MH_COUNTER === | === MH_COUNTER === | ||
| Строка 158: | Строка 138: | ||
| * ''SEC'' - время от старта до стопа в секундах | * ''SEC'' - время от старта до стопа в секундах | ||
| | | ||
| + | === MH_LOGBOOK === | ||
| + | Журнал изменений значений счетчиков пользователем | ||
| ===== Принцип работы ===== | ===== Принцип работы ===== | ||
| === Формирование списка типов счетчиков === | === Формирование списка типов счетчиков === | ||
| - | Создается тип счетчика ''total'' (Всего), после чего из конфигурации загружаются другие типы счетчиков. | + | Создается тип счетчика ''total'' (Всего), после чего из базы данных загружаются другие типы счетчиков. |
| - | Тип счетчика ''total'' - это несбрасываемый счетчик. Данный тип не нужно прописывать, он создается по умолчанию. Однако в правилах машин он должен быть указан в составе счетчиков, если он необходим. | + | Тип счетчика ''total'' - это обязательный счетчик, сбрасываемый только при полной замене оборудования. Данный тип не нужно явно прописывать, он создается по умолчанию. Другие типы счетчиков добавляются в базу данных через клиентское приложение. |
| === Формирование списка машин === | === Формирование списка машин === | ||
| Строка 170: | Строка 151: | ||
| Выполняется поиск тегов статуса по всем модулям приложения по правилам, описанным в конфигурации в разделе ''machines''. Данные теги должны отдавать статус машины: 0 - стоит, 1 - работает. | Выполняется поиск тегов статуса по всем модулям приложения по правилам, описанным в конфигурации в разделе ''machines''. Данные теги должны отдавать статус машины: 0 - стоит, 1 - работает. | ||
| - | Из найденого тега статуса формируются имя тега описания, после чего из него берется значение - текст описания машины. Если тег описания не найден, то берется описание машины из ''MH_MACH.DESCR'', введенное пользователем позредством тега машины ''descr'' или непосредственно update-запросом к данной таблице. | + | Из найденого тега статуса формируется имя тега описания, после чего из него берется значение - текст описания машины. Если тег описания не найден, то берется описание машины из ''MH_MACH.DESCR'', введенное пользователем посредством тега машины ''descr'' или непосредственно update-запросом к данной таблице. |
| - | Допускается попадание одного и того же тега в несколько правил, при этом наборы счетчиков, указанные в правилах, объединяются. | + | Допускается попадание одной и той же машины в несколько правил. |
| === Синхронизация === | === Синхронизация === | ||
| - | Полученная конфигурация машин и счетчиков сохраняется/обновляется в базе данных. Из базы данных загружается состояние машин и значения счетчиков. | + | Полученная конфигурация машин и счетчиков сохраняется/обновляется в базе данных. Из базы данных загружается состояние машин и значения назначенных счетчиков. |
| === Мониторинг === | === Мониторинг === | ||
| Строка 192: | Строка 173: | ||
| === Запись статистики === | === Запись статистики === | ||
| - | В 00:00:00 происходит сброс накопленных данных для машин, имеющих счетчик типа ''total''. По каждой машине: | + | В 00:00:00 происходит сброс накопленных за сутки данных в таблицу статистики. По каждой машине: |
| * в таблице ''MH_STAT'' создается запись: | * в таблице ''MH_STAT'' создается запись: | ||
| * ''CNT = MH_MACH_STATE.STATCNT'' | * ''CNT = MH_MACH_STATE.STATCNT'' | ||
| Строка 210: | Строка 191: | ||
| Пример с использованием тегов: | Пример с использованием тегов: | ||
| <code java> | <code java> | ||
| - | long machtime = getTagVal("mh.M1001.time"); | + | long machtime = getTagVal("mh.100.time"); |
| long systime = getTagVal("mh.system.time"); | long systime = getTagVal("mh.system.time"); | ||
| - | int cnt = getTagVal("mh.M1001.total") + (machtime == 0? 0: systime - machtime); | + | int cnt = getTagVal("mh.100.total") + (machtime == 0? 0: systime - machtime); |
| </code> | </code> | ||
| Строка 224: | Строка 205: | ||
| join mh_mach_state ms on ms.mach_id = m.id | join mh_mach_state ms on ms.mach_id = m.id | ||
| where | where | ||
| - | m.name = 'M1001' and ct.name = 'total' | + | m.name = '100' and ct.id = 1 |
| </code> | </code> | ||
| Строка 232: | Строка 213: | ||
| </code> | </code> | ||
| ===== Установка счетчика ===== | ===== Установка счетчика ===== | ||
| - | Пользовательская установка значений возможна только через теги во все счетчики, кроме ''total''. | + | Пользовательская установка значений возможна только через теги во все счетчики. |
| В таймеры можно записать значение от 0 включительно и более. В не-таймеры можно записать только 0. | В таймеры можно записать значение от 0 включительно и более. В не-таймеры можно записать только 0. | ||
| + | |||
| + | Запись 0 в ''total'' возможна только при остановленной машине. | ||
| + | |||
| + | Если счетчик временно не используется, можно его отключить, записав значение ''0x7FFF_FFFF''. | ||
| Также при необходимости можно править значения счетчиков в базе данных, предварительно остановив приложение jrobo во избежание перезаписи данных. | Также при необходимости можно править значения счетчиков в базе данных, предварительно остановив приложение jrobo во избежание перезаписи данных. | ||
| Строка 244: | Строка 229: | ||
| * ''sweep-stat <yyyymm>'' - удаление из ''MH_STAT'' записей старше заданной даты включительно | * ''sweep-stat <yyyymm>'' - удаление из ''MH_STAT'' записей старше заданной даты включительно | ||
| * ''pach-mach'' - удаление из ''MH_MACH'' не актуальных машин, которые отсутствуют в текущем сформированном списке машин | * ''pach-mach'' - удаление из ''MH_MACH'' не актуальных машин, которые отсутствуют в текущем сформированном списке машин | ||
| + | * ''reinit'' - перезагрузка модуля. Данную команду необходимо послать для вступления в силу изменений, сделанных в базе данных клиентом. | ||
| Команды ''sweep-*'' использовать с осторожностью, т.к. можно легко остаться с пустыми таблицами. | Команды ''sweep-*'' использовать с осторожностью, т.к. можно легко остаться с пустыми таблицами. | ||