Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
doc:jroboplc:modules:motohr [2025/03/21 13:53] denis [База данных] |
doc:jroboplc:modules:motohr [2025/03/21 14:11] (текущий) denis [Системные команды] |
||
---|---|---|---|
Строка 63: | Строка 63: | ||
|''<machName>.descr '' | ''STRING '' | ''RW'' |Описание машины | | |''<machName>.descr '' | ''STRING '' | ''RW'' |Описание машины | | ||
где: | где: | ||
- | * ''ctId'' - идентификатор типа счетчика, значения от 1 и более | + | * ''ctId'' - идентификатор типа счетчика, значения от 1 и более. Значение 1 всегда имеет счетчик "Всего", называемый далее **''total''**. |
* ''machName'' - имя машины | * ''machName'' - имя машины | ||
Строка 144: | Строка 144: | ||
=== Формирование списка типов счетчиков === | === Формирование списка типов счетчиков === | ||
- | Создается тип счетчика ''total'' (Всего), после чего из конфигурации загружаются другие типы счетчиков. | + | Создается тип счетчика ''total'' (Всего), после чего из базы данных загружаются другие типы счетчиков. |
- | Тип счетчика ''total'' - это несбрасываемый счетчик. Данный тип не нужно прописывать, он создается по умолчанию. Однако в правилах машин он должен быть указан в составе счетчиков, если он необходим. | + | Тип счетчика ''total'' - это обязательный счетчик, сбрасываемый только при полной замене оборудования. Данный тип не нужно явно прописывать, он создается по умолчанию. Другие типы счетчиков добавляются в базу данных через клиентское приложение. |
=== Формирование списка машин === | === Формирование списка машин === | ||
Строка 154: | Строка 153: | ||
Из найденого тега статуса формируется имя тега описания, после чего из него берется значение - текст описания машины. Если тег описания не найден, то берется описание машины из ''MH_MACH.DESCR'', введенное пользователем посредством тега машины ''descr'' или непосредственно update-запросом к данной таблице. | Из найденого тега статуса формируется имя тега описания, после чего из него берется значение - текст описания машины. Если тег описания не найден, то берется описание машины из ''MH_MACH.DESCR'', введенное пользователем посредством тега машины ''descr'' или непосредственно update-запросом к данной таблице. | ||
- | Допускается попадание одной и той же машины в несколько правил, при этом у такой машины наборы счетчиков, указанные в правилах, объединяются. | + | Допускается попадание одной и той же машины в несколько правил. |
=== Синхронизация === | === Синхронизация === | ||
- | Полученная конфигурация машин и счетчиков сохраняется/обновляется в базе данных. Из базы данных загружается состояние машин и значения счетчиков. | + | Полученная конфигурация машин и счетчиков сохраняется/обновляется в базе данных. Из базы данных загружается состояние машин и значения назначенных счетчиков. |
=== Мониторинг === | === Мониторинг === | ||
Строка 174: | Строка 173: | ||
=== Запись статистики === | === Запись статистики === | ||
- | В 00:00:00 происходит сброс накопленных данных для машин, имеющих счетчик типа ''total''. По каждой машине: | + | В 00:00:00 происходит сброс накопленных за сутки данных в таблицу статистики. По каждой машине: |
* в таблице ''MH_STAT'' создается запись: | * в таблице ''MH_STAT'' создается запись: | ||
* ''CNT = MH_MACH_STATE.STATCNT'' | * ''CNT = MH_MACH_STATE.STATCNT'' | ||
Строка 192: | Строка 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> | ||
Строка 206: | Строка 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> | ||
Строка 218: | Строка 217: | ||
В таймеры можно записать значение от 0 включительно и более. В не-таймеры можно записать только 0. | В таймеры можно записать значение от 0 включительно и более. В не-таймеры можно записать только 0. | ||
- | Запись 0 в ''total'' расценивается как замена машины на новую, поэтому обнуляются все используемые счетчики. | + | Запись 0 в ''total'' возможна только при остановленной машине. |
Если счетчик временно не используется, можно его отключить, записав значение ''0x7FFF_FFFF''. | Если счетчик временно не используется, можно его отключить, записав значение ''0x7FFF_FFFF''. | ||
Строка 230: | Строка 229: | ||
* ''sweep-stat <yyyymm>'' - удаление из ''MH_STAT'' записей старше заданной даты включительно | * ''sweep-stat <yyyymm>'' - удаление из ''MH_STAT'' записей старше заданной даты включительно | ||
* ''pach-mach'' - удаление из ''MH_MACH'' не актуальных машин, которые отсутствуют в текущем сформированном списке машин | * ''pach-mach'' - удаление из ''MH_MACH'' не актуальных машин, которые отсутствуют в текущем сформированном списке машин | ||
+ | * ''reinit'' - перезагрузка модуля. Данную команду необходимо послать для вступления в силу изменений, сделанных в базе данных клиентом. | ||
Команды ''sweep-*'' использовать с осторожностью, т.к. можно легко остаться с пустыми таблицами. | Команды ''sweep-*'' использовать с осторожностью, т.к. можно легко остаться с пустыми таблицами. |