База рецептов: что это такое и как этим пользоваться?

Здесь мы публикуем ответы на ваши наиболее частые вопросы по продукции Weintek

Модераторы: kiv, 8bit, VanMo

База рецептов: что это такое и как этим пользоваться?

Сообщение 8bit » 24 июл 2020, 17:31

База рецептов доступна для всех моделей серии , кроме cMT-G01, cMT-G02, cMT-G03, cMT-G04, cMT-CTRL01.

Изображение
Изображение

Механизм рецептов очень удобен для хранения наборов уставок.
Рецепты могут пригодиться в таких процессах как испытания различных устройств и механизмов, различная обработка чего либо в разных режимах и т.д.

В проекте представлено два набора рецептов для двух различных (вымышленных) процессов: термообработка (thermo) и электрические испытания (electric)

В проекте используется два экрана:
1) предназначен для работы с базой рецептов (просмотр, добавление, удаление, обновления) рецептов и записи конкретного рецепты в переменные устройства
Изображение

2) предназначен для импорта/экспорта самой базы данных рецептов для сохранения и редактирования на ПК.
Изображение

На первом экране можно выделить три блока: рецепты, уставки в HMI. таблицы с с рецептами.
В первом блоке отображаются значения полей выбранного в соответствующей таблице.

В блоке следующие элементы:
1) № выбранной строки - номер текущей строки в таблице рецепта (нумерация с 0)
2) Количество строк в рецепте - общее количество строк в рецепте (полезный индикатор, потому что таблица не отображает этого)
3) Кнопки команд: Добавить (добавляет новую строку в таблице рецепта), Удалить (удаляет текущую строку в таблице), Удалить все (удаляет все строки в таблице), Обновить (необходимо нажимать после каждой операции по удалению или добавлению для переноса изменений из таблицы в базу рецептов)
4) Результат - результат выполнения операций с таблицей (удачно или нет)
5) Значения соответствующих полей в текущей строке таблицы

Изображение

В результате выполнения операций со строками могут быть ошибки. Список ошибок приведен на рисунке ниже
Изображение

В одном блоке собраны данные от двух таблиц.

Для предотвращения свободного редактирования значений текущего рецепта предусмотрена блокировка - кнопка со значком замка.
Изображение

Для отображения результат операций со строками в таблице использован объект "Список опций"
Изображение

Во втором блоке отображаются значения уставок в устройстве (для простоты в данном случае это регистры HMI, но могут быть сразу теги ПЛК).
Кнопка Копировать в панель - вызывает макрос, который копирует значения полей текущей строки в соответствующие регистры панели.
Изображение
Изображение
Изображение

Код: Выделить всё
macro_command main()

short temper1, temper2
unsigned short time
float press1, press2
float lw200

lw200 = 123.456
SetData(lw200, "Local HMI", LW, 200, 1)

GetData(temper1, "Local HMI", RECIPE, "thermo.temper1")
SetData(temper1, "Local HMI", LW, 0, 1)

GetData(temper2, "Local HMI", RECIPE, "thermo.temper2")
SetData(temper2, "Local HMI", LW, 1, 1)

GetData(press1, "Local HMI", RECIPE, "thermo.press1")
SetData(press1, "Local HMI", LW, 2, 1)

GetData(press2, "Local HMI", RECIPE, "thermo.press2")
SetData(press2, "Local HMI", LW, 4, 1)

GetData(time, "Local HMI", RECIPE, "thermo.time")
SetData(time, "Local HMI", LW, 6, 1)



end macro_command


В третьем блоке сами таблицы рецептов.

В проекте даны текстовые метки регистрам, используемых для получения имен файла, папки и полного пути к файлу экспорта базы рецептов.
Изображение

В база данных рецептов создаем две таблицы : thermo и electric .
Изображение
Изображение

Для отображения таблиц рецепта в окно необходимо добавить объект "Просмотрщик рецептов"
Изображение

Чтобы работали кнопки импорта/экспорта базы рецептов в текстовый файл *.csv необходимо сконфигурировать соответствующие регистры
Изображение

Для выбора папки для экспортируемого файла на носителе (в данном случае SD карте) в проекте использован объект Проводник
Изображение

Макрос генерирующий имя файла экспорта вызывается циклически пока открыта окно "Импорт/экспорт базы рецептов"
Код: Выделить всё

macro_command main()

// объявляем переменные
short iSecond, iMinute, iHour, iDay, iMonth, iYear
char sSecond[2], sMinute[2], sHour[2], sDay[2], sMonth[2], sYear[4]

char filename[100]  // имя файла в виде thermo_2020-05-28_18-55-34.csv (40 символов)
char foldername[100]
char fullpath[100]


// считываем регистры
GetData(iSecond, "Local HMI", LW, 9017, 1)
GetData(iMinute, "Local HMI", LW, 9018, 1)
GetData(iHour, "Local HMI", LW, 9019, 1)
GetData(iDay, "Local HMI", LW, 9020, 1)
GetData(iMonth, "Local HMI", LW, 9021, 1)
GetData(iYear, "Local HMI", LW, 9022, 1)

StringGet(foldername[0], "Local HMI", "receipe_foldername", 40)


// конвертируем числа в текст
DEC2ASCII(iSecond, sSecond[0], 2)
DEC2ASCII(iMinute, sMinute[0], 2)
DEC2ASCII(iHour, sHour[0], 2)
DEC2ASCII(iDay, sDay[0], 2)
DEC2ASCII(iMonth, sMonth[0], 2)
DEC2ASCII(iYear, sYear[0], 4)

// склеиваем имя файла
StringCat("thermo_", filename[0])    // thermo_
StringCat(sYear[0], filename[0])   // thermo_2020
StringCat("-", filename[0])       // thermo_2020-

StringCat(sMonth[0], filename[0])   // thermo_2020-05
StringCat("-", filename[0])       // thermo_2020-05-

StringCat(sDay[0], filename[0])      // thermo_2020-05-28
StringCat("_", filename[0])       // thermo_2020-05-28_

StringCat(sHour[0], filename[0])   // thermo_2020-05-28_18
StringCat("-", filename[0])       // thermo_2020-05-28_18-

StringCat(sMinute[0], filename[0])   // thermo_2020-05-28_18-55
StringCat("-", filename[0])       // thermo_2020-05-28_18-55-

StringCat(sSecond[0], filename[0])   // thermo_2020-05-28_18-55-34
StringCat(".csv", filename[0])       // thermo_2020-05-28_18-55-34.csv



StringCat(foldername[0], fullpath[0])   // склеиваем полный путь=имя_папки + имя_файла
StringCat("/", fullpath[0])

StringCat(filename[0], fullpath[0])      // копируем имя файла в полный путь

// записываем значения в регистры
StringSet(foldername[0], "Local HMI", "receipe_foldername", 100)
StringSet(filename[0], "Local HMI", "recipe_filename", 100)
StringSet(fullpath[0], "Local HMI", "receipe_fullpath", 100)

// ощищаем переменну "путь к файлу" для следующего цикла
StringCopy("", filename[0])
StringCopy("", fullpath[0])



end macro_command


В данном случае нет необходимости в имя файла вставлять текущую дату, это сделано как демонстрация возможностей панелей, которая может пригодиться в другом случае.

Для экспорта таблицы в текстовый файл необходимо в проводнике выбрать необходимую папку и нажать соответствующую кнопку экспорта.
Изображение

Файлы экспорта отображаются сразу же.
Изображение

Забрать их можно подключившись к панели по ftp
Изображение
Изображение

Смотрим файл в текстовом редакторе - все верно
Изображение

Саму базу рецептов можно взять по ftp в папке recipe и открыть SQLite редактором
Изображение

Проект для ознакомления прикреплен.
Вложения
recipe_database_cMT3090.7z
(8.41 МБ) Скачиваний: 1
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1112
Зарегистрирован: 20 апр 2020, 19:07

Re: База рецептов: что это такое и как этим пользоваться?

Сообщение 8bit » 15 фев 2022, 13:45

mik писал(а):В проекте "рецепты cMT3090" используется библиотека rusavto.flbx. Скорее всего, ее отсутствие не влияет на функционал проекта. Но лучше наверное ее выложить сюда.


перезалил файл архивом ccmp, в котором эта библиотека в комплекте
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1112
Зарегистрирован: 20 апр 2020, 19:07


Вернуться в Часто задаваемые вопросы по Weintek (F.A.Q.)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1