Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
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-*'' использовать с осторожностью, т.к. можно легко остаться с пустыми таблицами. |