Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
doc:jroboplc:modules:motohr [2025/02/28 11:52]
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''​ - это ​обязательный счетчик, ​сбрасываемый только при полной замене оборудования. Данный тип не нужно явно прописывать,​ он создается по умолчанию. ​Другие типы счетчиков добавляются в базу данных ​через клиентское ​приложение.
  
 === Формирование списка машин === === Формирование списка машин ===
Строка 172: Строка 153:
 Из найденого тега статуса формируется имя тега описания,​ после чего из него берется значение - текст описания машины. Если тег описания не найден,​ то берется описание машины из ''​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-*''​ использовать с осторожностью,​ т.к. можно легко остаться с пустыми таблицами.
doc/jroboplc/modules/motohr.1740732762.txt.gz · Последние изменения: 2025/02/28 11:52 — denis
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0