Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
doc:jroboplc:modules:kkormsvr [2020/10/09 17:14] 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 | название ''name'' текущего бункера | ---\\--- | | + | |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: |