Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
doc:jroboplc:modules:motohr [2025/03/21 13:15] denis [Параметры] |
doc:jroboplc:modules:motohr [2025/03/21 14:11] (текущий) denis [Системные команды] |
||
---|---|---|---|
Строка 56: | Строка 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|}} |
Строка 110: | Строка 113: | ||
Машины | Машины | ||
* ''DESCR'' - описание машины, подтягиваемое из тега описания. Если тег описания отсутствует, то допустима произвольная запись в данное поле | * ''DESCR'' - описание машины, подтягиваемое из тега описания. Если тег описания отсутствует, то допустима произвольная запись в данное поле | ||
+ | * ''TAGNAME'' - полное имя тега состояния машины, например: ''UVRD.MCHB_100_Plata'' | ||
=== MH_COUNTER === | === MH_COUNTER === | ||
Строка 134: | Строка 138: | ||
* ''SEC'' - время от старта до стопа в секундах | * ''SEC'' - время от старта до стопа в секундах | ||
| | ||
+ | === MH_LOGBOOK === | ||
+ | Журнал изменений значений счетчиков пользователем | ||
===== Принцип работы ===== | ===== Принцип работы ===== | ||
=== Формирование списка типов счетчиков === | === Формирование списка типов счетчиков === | ||
- | Создается тип счетчика ''total'' (Всего), после чего из конфигурации загружаются другие типы счетчиков. | + | Создается тип счетчика ''total'' (Всего), после чего из базы данных загружаются другие типы счетчиков. |
- | Тип счетчика ''total'' - это несбрасываемый счетчик. Данный тип не нужно прописывать, он создается по умолчанию. Однако в правилах машин он должен быть указан в составе счетчиков, если он необходим. | + | Тип счетчика ''total'' - это обязательный счетчик, сбрасываемый только при полной замене оборудования. Данный тип не нужно явно прописывать, он создается по умолчанию. Другие типы счетчиков добавляются в базу данных через клиентское приложение. |
=== Формирование списка машин === | === Формирование списка машин === | ||
Строка 148: | Строка 153: | ||
Из найденого тега статуса формируется имя тега описания, после чего из него берется значение - текст описания машины. Если тег описания не найден, то берется описание машины из ''MH_MACH.DESCR'', введенное пользователем посредством тега машины ''descr'' или непосредственно update-запросом к данной таблице. | Из найденого тега статуса формируется имя тега описания, после чего из него берется значение - текст описания машины. Если тег описания не найден, то берется описание машины из ''MH_MACH.DESCR'', введенное пользователем посредством тега машины ''descr'' или непосредственно update-запросом к данной таблице. | ||
- | Допускается попадание одной и той же машины в несколько правил, при этом у такой машины наборы счетчиков, указанные в правилах, объединяются. | + | Допускается попадание одной и той же машины в несколько правил. |
=== Синхронизация === | === Синхронизация === | ||
- | Полученная конфигурация машин и счетчиков сохраняется/обновляется в базе данных. Из базы данных загружается состояние машин и значения счетчиков. | + | Полученная конфигурация машин и счетчиков сохраняется/обновляется в базе данных. Из базы данных загружается состояние машин и значения назначенных счетчиков. |
=== Мониторинг === | === Мониторинг === | ||
Строка 168: | Строка 173: | ||
=== Запись статистики === | === Запись статистики === | ||
- | В 00:00:00 происходит сброс накопленных данных для машин, имеющих счетчик типа ''total''. По каждой машине: | + | В 00:00:00 происходит сброс накопленных за сутки данных в таблицу статистики. По каждой машине: |
* в таблице ''MH_STAT'' создается запись: | * в таблице ''MH_STAT'' создается запись: | ||
* ''CNT = MH_MACH_STATE.STATCNT'' | * ''CNT = MH_MACH_STATE.STATCNT'' | ||
Строка 186: | Строка 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> | ||
Строка 200: | Строка 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> | ||
Строка 212: | Строка 217: | ||
В таймеры можно записать значение от 0 включительно и более. В не-таймеры можно записать только 0. | В таймеры можно записать значение от 0 включительно и более. В не-таймеры можно записать только 0. | ||
- | Запись 0 в ''total'' расценивается как замена машины на новую, поэтому обнуляются все используемые счетчики. | + | Запись 0 в ''total'' возможна только при остановленной машине. |
Если счетчик временно не используется, можно его отключить, записав значение ''0x7FFF_FFFF''. | Если счетчик временно не используется, можно его отключить, записав значение ''0x7FFF_FFFF''. | ||
Строка 224: | Строка 229: | ||
* ''sweep-stat <yyyymm>'' - удаление из ''MH_STAT'' записей старше заданной даты включительно | * ''sweep-stat <yyyymm>'' - удаление из ''MH_STAT'' записей старше заданной даты включительно | ||
* ''pach-mach'' - удаление из ''MH_MACH'' не актуальных машин, которые отсутствуют в текущем сформированном списке машин | * ''pach-mach'' - удаление из ''MH_MACH'' не актуальных машин, которые отсутствуют в текущем сформированном списке машин | ||
+ | * ''reinit'' - перезагрузка модуля. Данную команду необходимо послать для вступления в силу изменений, сделанных в базе данных клиентом. | ||
Команды ''sweep-*'' использовать с осторожностью, т.к. можно легко остаться с пустыми таблицами. | Команды ''sweep-*'' использовать с осторожностью, т.к. можно легко остаться с пустыми таблицами. |