Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
doc:jroboplc:modules:kkormsvr [2020/10/09 17:15]
denis [Теги]
doc:jroboplc:modules:kkormsvr [2023/02/20 18:55] (текущий)
denis [Теги]
Строка 9: Строка 9:
 ===== Основные отличия от kkormrcpsvr2.exe ===== ===== Основные отличия от kkormrcpsvr2.exe =====
   * Опрос дозаторов и управление процессом дозирования выполняют независимые друг от друга модули. Добавление нового типа дозатора в ''​peripherial''​ не требует изменения программного кода модуля ''​kkormsvr''​.   * Опрос дозаторов и управление процессом дозирования выполняют независимые друг от друга модули. Добавление нового типа дозатора в ''​peripherial''​ не требует изменения программного кода модуля ''​kkormsvr''​.
-  * Возможность работать как на сервере (старый вариант),​ так и в составе ПЛК с использованием сервера в качестве удаленного СУБД. Работа на одной аппаратной платформе с ПЛК позволяет отказаться от дискретных сигналов управления дозаторами без ущерба общей скорости дозирования.+  * Возможность размещаться как на сервере (старый вариант),​ так и в составе ПЛК с использованием сервера в качестве удаленного СУБД. Работа на одной аппаратной платформе с ПЛК позволяет отказаться от дискретных сигналов управления дозаторами без ущерба общей скорости дозирования.
   * Хранение оперативных данных в базе данных,​ т.е. там же где и хранятся все остальные данные. Старый вариант использовал для сохранения оперативных данных обычные файлы, что в случае сбоя может привести к рассинхронизации. Другой минус старого варианта при использовании на борту ПЛК - это частые операции записи в файл, что также является потенциально опасным.   * Хранение оперативных данных в базе данных,​ т.е. там же где и хранятся все остальные данные. Старый вариант использовал для сохранения оперативных данных обычные файлы, что в случае сбоя может привести к рассинхронизации. Другой минус старого варианта при использовании на борту ПЛК - это частые операции записи в файл, что также является потенциально опасным.
 +  * В ситуации когда на линии несколько дозаторов,​ а по рецепту используются не все, то в неиспользуемые дозаторы не посылается нулевой рецепт,​ как это делал ''​kkormrcpsvr2''​. Также ''​Kkormsvr''​ для выполнения задачи не требует наличия связи с неиспользуемыми дозаторами.
   * Работа одной транзакцией на цикл, что гарантирует целостность данных и положительно влияет на производительность приложения.   * Работа одной транзакцией на цикл, что гарантирует целостность данных и положительно влияет на производительность приложения.
   * Возможность отключения,​ включения и перезагрузки ''​kkormsvr''​ без прерывания выполнения задачи дозирования. ​   * Возможность отключения,​ включения и перезагрузки ''​kkormsvr''​ без прерывания выполнения задачи дозирования. ​
Строка 78: Строка 79:
 |kksvr.connected  ​       |  BOOL    |      |Подключение к базе данных. ​   | |kksvr.connected  ​       |  BOOL    |      |Подключение к базе данных. ​   |
 ^Линия 1  ^^^^ ^Линия 1  ^^^^
-|kksvr.L1.CycleCnt  ​       |  INT     ​| ​     |Количество выполненных полных циклов. ​   | +|kksvr.Line1.CycleCnt  ​       |  INT     ​| ​     |Количество выполненных полных циклов. ​   | 
-|kksvr.L1.CycleReq  ​       |  INT     ​| ​ rw  |Заданное количество циклов. ​   | +|kksvr.Line1.CycleReq  ​       |  INT     ​| ​ rw  |Заданное количество циклов. ​   | 
-|kksvr.L1.State  ​               |  INT     ​| ​     |<​html>​Состояние линии:<​br>​+|kksvr.Line1.State  ​               |  INT     ​| ​     |<​html>​Состояние линии:<​br>​
 0 - остановлено<​br>​ 0 - остановлено<​br>​
 1 - работа<​br>​ 1 - работа<​br>​
Строка 87: Строка 88:
 4 - ошибка:​ один из дозаторов не принял задачу<​br>​ 4 - ошибка:​ один из дозаторов не принял задачу<​br>​
 </​html> ​   | </​html> ​   |
-|kksvr.L1.TaskId  ​       |  INT     ​| ​     |''​TaskId''​ текущей задачи из таблицы ''​KK_TASK''​. Если задача отсутствут,​ равно 0.  | +|kksvr.Line1.TaskId  ​       |  INT     ​| ​     |''​TaskId''​ текущей задачи из таблицы ''​KK_TASK''​. Если задача отсутствут,​ равно 0.  | 
-|kksvr.L1.Receipt  ​       |  STRING ​ |      |Название рецепта текущей задачи. ​   | +|kksvr.Line1.Receipt  ​       |  STRING ​ |      |Название рецепта текущей задачи. ​   | 
-|kksvr.L1.Reset  ​               |  BOOL    |  rw  |1 - Сброс линии. ​   | +|kksvr.Line1.Reset  ​               |  BOOL    |  rw  |1 - Сброс линии. ​   | 
-|kksvr.L1.Suspend  ​       |  BOOL    |  rw  |1 - Приостановить работу линии. 0 - возобновить. ​ |+|kksvr.Line1.Suspend  ​       |  BOOL    |  rw  |1 - Приостановить работу линии. 0 - возобновить. ​ |
 ^Линия 1 - Группа 0  ^^^^ ^Линия 1 - Группа 0  ^^^^
-|kksvr.L1.Group0.CycleCnt | ​ INT     ​| ​     |Количество выполненных циклов. ​  | +|kksvr.Line1.Group0.CycleCnt | ​ INT     ​| ​     |Количество выполненных циклов. ​  | 
-|kksvr.L1.Group0.State  ​       |  INT     ​| ​     |Состояние группы:<​html><​br>​+|kksvr.Line1.Group0.State  ​       |  INT     ​| ​     |Состояние группы:<​html><​br>​
 0 - остановлено<​br>​ 0 - остановлено<​br>​
 1 - подача дозаторам команды "​Старт цикла"​. Ожидание готовности к установке задачи.<​br>​ 1 - подача дозаторам команды "​Старт цикла"​. Ожидание готовности к установке задачи.<​br>​
Строка 101: Строка 102:
 </​html> ​   | </​html> ​   |
 ^Линия 1 - Группа 1  ^^^^ ^Линия 1 - Группа 1  ^^^^
-|kksvr.L1.Group1.CycleCnt | ​ INT     ​| ​     |  ---\\--- ​ | +|kksvr.Line1.Group1.CycleCnt | ​ INT     ​| ​     |  ---\\--- ​ | 
-|kksvr.L1.Group1.State  ​       |  INT     ​| ​     |  ---\\--- ​ |+|kksvr.Line1.Group1.State  ​       |  INT     ​| ​     |  ---\\--- ​ |
 ^Линия 1 - Дозатор d1  ^^^^ ^Линия 1 - Дозатор d1  ^^^^
-|kksvr.L1.d1.CurStorNum | ​ INT     ​| ​     | номер ''​stornum''​ текущего бункера ​   | +|kksvr.d1.CurStorNum         ​|  INT     ​| ​     | номер ''​stornum''​ текущего бункера ​   | 
-|kksvr.L1.d1.CurStorName | ​ STRING ​ |   название ''​name''​ текущего бункера ​   | +|kksvr.d1.CurStorName | ​ STRING ​ |      |название ''​name''​ текущего бункера ​   | 
-|kksvr.L1.d1.CurProduct | ​ STRING ​ |   ​ название текущего загружаемого продукта ​   |  +|kksvr.d1.CurProduct         ​|  STRING ​ |      |название текущего загружаемого продукта ​   |  
-|kksvr.L1.d1.Error  ​       |  INT     ​| ​     |Текущая ошибка работы с дозатором (не путать с кодом ошибки самого дозатора):<​html><​br>​+|kksvr.d1.Error  ​       |  INT     ​| ​     |Текущая ошибка работы с дозатором (не путать с кодом ошибки самого дозатора):<​html><​br>​
 0 - ошибки нет<​br>​ 0 - ошибки нет<​br>​
-1 - LINK - теги дозатора не найдены (проверить есть ли теги и параметр ''​bind''​)<​br>​+1 - LINK - теги дозатора не найдены (проверитьесть ли теги, правильность ​параметра ''​bind''​)<​br>​
 2 - DISCONNECT - нет связи<​br>​ 2 - DISCONNECT - нет связи<​br>​
 3 - CRC - данные не достоверны<​br>​ 3 - CRC - данные не достоверны<​br>​
 4 - TASKDIFFER - заданный вес в дозаторе отличается от заданного по рецепту 4 - TASKDIFFER - заданный вес в дозаторе отличается от заданного по рецепту
 </​html> ​   | </​html> ​   |
-|kksvr.L1.d1.stor1.Product |  STRING ​ |      |Название продукта,​ заданного по рецепту. ​   | +|kksvr.d1.ReqWeightZero  ​       |  INT     ​| ​     | =1, если суммарный заданный вес равен нулю, иначе =0    | 
-|kksvr.L1.d1.stor1.ReqWeight |  LONG    |      |Заданный вес по рецепту. ​   | +|kksvr.d1.Product1 |  STRING ​ |      |Название продукта,​ заданного по рецепту. ​   | 
-|kksvr.L1.d1.stor2.Product |  STRING ​ |      |  ---\\--- ​ | +|kksvr.d1.ReqWeight1 |  LONG    |      |Заданный вес по рецепту. ​   | 
-|kksvr.L1.d1.stor2.ReqWeight |  LONG    |      |  ---\\--- ​ | +|kksvr.d1.Product2 |  STRING ​ |      |  ---\\--- ​ | 
-|kksvr.L1.d1.stor3.Product |  STRING ​ |      |  ---\\--- ​ | +|kksvr.d1.ReqWeight2 |  LONG    |      |  ---\\--- ​ | 
-|kksvr.L1.d1.stor3.ReqWeight |  LONG    |      |  ---\\--- ​ |+|kksvr.d1.Product3 |  STRING ​ |      |  ---\\--- ​ | 
 +|kksvr.d1.ReqWeight3 |  LONG    |      |  ---\\--- ​ |
 ^Линия 1 - Дозатор d2  ^^^^ ^Линия 1 - Дозатор d2  ^^^^
-|kksvr.L1.d2.CurStorNum  ​       |  INT     ​| ​     | ---\\--- ​  ​+|kksvr.d2.CurStorNum  ​       |  INT     ​| ​     |  ---\\--- ​ 
-|kksvr.L1.d2.CurStorName | ​ STRING ​ |      |  ---\\--- ​ | +|kksvr.d2.CurStorName | ​ STRING ​ |      |  ---\\--- ​ | 
-|kksvr.L1.d2.CurProduct  ​       |  STRING ​ |      |  ---\\--- ​ | +|kksvr.d2.CurProduct  ​       |  STRING ​ |      |  ---\\--- ​ | 
-|kksvr.L1.d2.Error  ​       |  INT     ​| ​     |  ---\\--- ​ | +|kksvr.d2.Error  ​       |  INT     ​| ​     |  ---\\--- ​ | 
-|kksvr.L1.d2.stor1.Product |  STRING ​ |      |  ---\\--- ​ | +|kksvr.d1.ReqWeightZero  ​       |  INT     ​| ​     |  ---\\--- ​ | 
-|kksvr.L1.d2.stor1.ReqWeight |  LONG    |      |  ---\\--- ​ | +|kksvr.d2.Product1 |  STRING ​ |      |  ---\\--- ​ | 
-|kksvr.L1.d2.stor2.Product |  STRING ​ |      |  ---\\--- ​ | +|kksvr.d2.ReqWeight1 |  LONG    |      |  ---\\--- ​ | 
-|kksvr.L1.d2.stor2.ReqWeight |  LONG    |      |  ---\\--- ​ | +|kksvr.d2.Product2 |  STRING ​ |      |  ---\\--- ​ | 
-|kksvr.L1.d2.stor3.Product |  STRING ​ |      |  ---\\--- ​ | +|kksvr.d2.ReqWeight2 |  LONG    |      |  ---\\--- ​ | 
-|kksvr.L1.d2.stor3.ReqWeight |  LONG    |      |  ---\\--- ​ |+|kksvr.d2.Product3 |  STRING ​ |      |  ---\\--- ​ | 
 +|kksvr.d2.ReqWeight3 |  LONG    |      |  ---\\--- ​ |
  
  
Строка 136: Строка 139:
  
 [[doc:​jroboplc:​modules:​kkormsvr_old_tags]] [[doc:​jroboplc:​modules:​kkormsvr_old_tags]]
 +
 +
 +===== Группы =====
 +
 +Процесс приготовления комбикормовой смеси может происходить в несколько этапов.
 +
 +Например,​ некоторые добавки могут предварительно дозироваться и смешиваться (в предсмесителе) отдельно от основной массы ингредиентов. Затем они выгружаются в основной смеситель одновременно с разгрузкой дозаторов,​ дозирующих основные ингредиенты.
 +
 +В таком случае для ускорения цикла приготовления комбикормовой смеси целесообразно разрешить дозаторам,​ разгрузка которых происходит в предсмеситель,​ набирать продукт заранее. Т.е. если линия выполняет первый цикл дозирования - дозаторы основного смесителя выполняют первый цикл, то дозаторы предсмесителя могут выполнять первый и (если все они выгрузились) второй цикл дозирования.
 +
 +Параметр ''​grouplevel''​ определяет на сколько циклов дозирования группа может «обгонять» цикл дозирования линии.
 +
 +В группу целесообразно объединять ДОЗАТОРЫ ОДНОВРЕМЕННО РАЗГРУЖАЕМЫЕ В ОДИН СМЕСИТЕЛЬ.
 +
 +Для дозаторов группы которая заканчивает процесс приготовления комбикормовой смеси (или если группа одна) параметр ''​grouplevel''​ должен быть равен 0.
  
  
Строка 146: Строка 164:
  
 ===== Переходный импорт данных ===== ===== Переходный импорт данных =====
-Для перехода со старого архиватора ​wessvr.exe ​на новый требуется перенести данные из старой базы данных в новую, создаваемою автоматически модулем ''​wessvr''​. Описание действий по шагам:+Для перехода со старого архиватора ​''​kkormrcpsvr2'' ​на новый требуется перенести данные из старой базы данных в новую, создаваемою автоматически модулем ''​kkormsvr''​. Описание действий по шагам:
   * создать два модуля ''​database''​ для подключения к новой (не существующей) и старой (существующей) базам данных.<​code yaml>   * создать два модуля ''​database''​ для подключения к новой (не существующей) и старой (существующей) базам данных.<​code yaml>
 plugin.database:​ plugin.database:​
doc/jroboplc/modules/kkormsvr.1602252955.txt.gz · Последние изменения: 2020/10/09 17:15 — denis
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0