Сема писал(а):Я не понимаю, как мне с этим менеджером рецептов работать?? Как адресация идет?? Я пример изучил, но там много непонятного, как он понимает, что ему надо из той группы рецептов брать?? как мне с MODBUS протоколом это связать??
В менеджере рецептов создаете таблицу такого же формата, как и представленная, с любым количеством записей. Либо, если вам нужно изменить формат, например, добавить полей или увеличить поле имени, то в проекте это нужно учесть - в макросах поменяйте размер записи:
Макрос Init:
- Код: Выделить всё
short RecipeSize=13//Размер записи
Макрос ApplyRecipe:
- Код: Выделить всё
i=i*13
Длина записи 13 слов(регистров), 10 на название рецепта и по одному на каждый параметр (мука, время, сахар).
Данные таблицы записываются в память панели начиная с регистра RW0.
Записи идут последовательно, как записаны в таблице, первая запись "Хлеб 1" начинается с регистра RW0, а запись "Хлеб 2" с регистра RW13.
Так как объект "Список" может брать только последовательно размещенные записи, в макросе Init есть следующий код:
- Код: Выделить всё
//Создадим список названий рецептов
for i=0 to RecipeCount
GetData(Name[0], "Local HMI", RW, 0+i*RecipeSize, 10)
SetData(Name[0], "Local HMI", LW, 101+i*10, 10)
next i
То есть, названия рецептов записываются в память LW последовательно для дальнейшего использования выпадающим списком.
Для выбора конкретной записи рецептов используется индексный регистр, который указывает смещение от регистра RW0.
Так как выпадающий список может записать в регистр только номер выбранного пункта, необходимо выполнить макрос ApplyRecipe, который задает размер смещения в индексном регистре.
Для запуска этого макроса используется кнопка "применить", либо, если необходимо делать это автоматически, используется ПЛК-триггер на запуск макроса, который включается кнопкой "мониторить".
Чтобы связать выбранный рецепт с регистрами ModBus, предлагаю дописать примерно следующий код в макрос ApplyRecipe:
- Код: Выделить всё
//Запишем данные выбранного рецепта в регистры модбас
short val[3]//массив значений параметров рецепта
GetData(val[0], "Local HMI", RW, 10+i, 3)// в переменной i содержится смещение; параметры первой записи начинаются с регистра RW10
SetData(val[0], "MODBUS RTU", 4x, 1, 1)//записываем в 1 модбас-регистр количество муки
SetData(val[1], "MODBUS RTU", 4x, 2, 1)//записываем во 2 модбас-регистр время
SetData(val[2], "MODBUS RTU", 4x, 3, 1)//записываем в 3 модбас-регистр количество сахара
Вроде все рассказал, если есть еще вопросы, задавайте.