PDA

Просмотр полной версии : СПК110 работа с рецептами



Unreality
08.12.2024, 10:54
Добрый день,
Пробую на тестовом проекте рецептур прикрутить управление рецептами через код программы (не через визуализацию)
Тестовый проект
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/02_Concepts/11_3_08_Example_RecipeManager_3511v1.projectarchiv e

Добавил внутри определения для библиотеки Recipe Management
Библиотека внутри проекта тоже есть - последняя версия

Добавил определения переменных в программу
bExecution:BOOL;

iRecipeCount:INT;
iArrayElement:INT;
aRecipeName:ARRAY[1..50] OF STRING;

dwErrorCode:DWORD;

sCurrentRecipeName:STRING;

fbRecipe: recipemancommands;

Написал простой код

IF bExecution THEN

iRecipeCount := fbRecipe.GetRecipeCount('RecipesGroup1');

dwErrorCode := fbRecipe.GetLastError;

bExecution:=FALSE;

END_IF;

При компиляции выдает ошибку

[ERROR] Example_RecipeManager: PLC_PRG [Device: Plc Logic: Application](Строка 8, Столбец 1 (Реализ.)): C0032: Невозможно конвертировать тип 'GETLASTERROR(recipe management, 3.5.17.0 (system))' в тип 'DWORD'
Ссылается на dwErrorCode := fbRecipe.GetLastError;

Но, что тут не правильно?

В библиотеке прописано, что метод возвращает DWORD, я и подставил DWORD, что ему не нравится? Причем предыдущую строку, нормально воспринял...

Евгений Кислов
08.12.2024, 10:56
Добрый день.


dwErrorCode := fbRecipe.GetLastError(); // метод надо вызвать, а не просто записать его название

Unreality
08.12.2024, 11:01
Добрый день.


dwErrorCode := fbRecipe.GetLastError(); // метод надо вызвать, а не просто записать его название

Видимо нужно больше спать...)
Спасибо
Забыл совсем про это.

***
Но дополнительно и почему (может тоже глупая ошибка) не работает сам код, который указан выше
То есть bExecute - не сбрасывается, когда становится TRUE (вроде в Вашем примере на видео это было на автомате)
Плюс нет данных по рецептам...
А они там по умолчанию существуют - то есть внутри, пример не трогал
80620

Евгений Кислов
08.12.2024, 11:04
На скриншоте bExecute не присвоено значение TRUE, оно лишь подготовлено для присваивания.
Чтобы произошла запись - нужно выполнить команду Отладка - Записать значения.

Unreality
08.12.2024, 11:07
На скриншоте bExecute не присвоено значение TRUE, оно лишь подготовлено для присваивания.

Значит на видео не уловил, Вашей ловкости рук)
То есть после установленного значения, через правую кнопку мыши нужно нажать "Записать все значения ..."
Другие методы есть? Горячие клавиши для этого? Или только через мышь?

Евгений Кислов
08.12.2024, 11:09
Значит на видео не уловил, Вашей ловкости рук)
То есть после установленного значения, через правую кнопку мыши нужно нажать "Записать все значения ..."
Другие методы есть? Горячие клавиши для этого? Или только через мышь?

Можно использовать команду Отладка - Записать значения.
Горячие клавиши для нее: Ctrl+F7

Unreality
08.12.2024, 11:10
Дополнительный вопрос
Выполнение получилось
Но количество рецептов почему что показывает больше чем есть на самом деле
То есть внутри группы рецептов - их 3 штуки
После выполнения кода показывает, что их 4ре...

В чем подвох?
80621

Unreality
08.12.2024, 11:11
Можно использовать команду Отладка - Записать значения.
Горячие клавиши для нее: Ctrl+F7

тут еще раз спасибо)

Евгений Кислов
08.12.2024, 11:17
Дополнительный вопрос
Выполнение получилось
Но количество рецептов почему что показывает больше чем есть на самом деле
То есть внутри группы рецептов - их 3 штуки
После выполнения кода показывает, что их 4ре...

В чем подвох?
80621

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

Unreality
08.12.2024, 11:26
Сложно сказать, не видя картины в целом.
Давайте вернемся к этому вопросу завтрашним утром в процессе общения по телеграм.

Разобрался (только тему пока не закрывайте)
Суть
Внутри папки где хранятся рецепты, в прошлый тест, я создал ещё один рецепт для группы 'RecipesGroup1' - благополучно про него забыл.
По итогу метод подсчета корректно отработал - показав мне 4 рецепта.
Тогда как внутри кода программы предопределено было 3 штуки

Когда я удалил из папки 4й рецепт, я воспользовался методом обновления перечня рецептов, и все сработало.
Показывает теперь ровно, столько сколько нужно. При добавлении рецепта, тоже самое - если просто добавить руками документ, это не сработает, до вызова метода пересчета рецептов.

Ниже вырезка из примера (метод пересчета рецептов включен)
80623

Unreality
08.12.2024, 21:40
Новые приключения
При установке чек бокса, в настройках рецептов - управление рецептами в ПЛК
Компилятор выдает сообщения ниже

Доп. проверки кода...
[ERROR] SE_Paint_v1: Менеджер рецептов [A1_SPK110_CC01: Plc Logic: Application]: SA0033: Неиспользуемый Переменная 'pColl'
[ERROR] SE_Paint_v1: Менеджер рецептов [A1_SPK110_CC01: Plc Logic: Application]: SA0033: Неиспользуемый Переменная 'cur'
[ERROR] SE_Paint_v1: Менеджер рецептов [A1_SPK110_CC01: Plc Logic: Application]: SA0033: Неиспользуемый Переменная 'Recipes_86629213'
[ERROR] SE_Paint_v1: Менеджер рецептов [A1_SPK110_CC01: Plc Logic: Application]: SA0033: Неиспользуемый Переменная 'bOverwriteOnDownload'
[ERROR] SE_Paint_v1: Менеджер рецептов [A1_SPK110_CC01: Plc Logic: Application]: SA0033: Неиспользуемый Переменная 'iRecipeCheckOnStart'
[ERROR] SE_Paint_v1: Recipes [A1_SPK110_CC01: Plc Logic: Application: Менеджер рецептов]: SA0027: Переменная 'Write' в 'Write' имеет то же имя, что и константа перечисления в типе 'SocketFlags' в Библиотека 'iodrvmodbustcp, 3.5.17.0 (3s - smart software solutions gmbh)'
[ERROR] SE_Paint_v1: Recipes [A1_SPK110_CC01: Plc Logic: Application: Менеджер рецептов]: SA0027: Переменная 'Read' в 'Read' имеет то же имя, что и константа перечисления в типе 'SocketFlags' в Библиотека 'iodrvmodbustcp, 3.5.17.0 (3s - smart software solutions gmbh)'
[ERROR] SE_Paint_v1: Менеджер рецептов [A1_SPK110_CC01: Plc Logic: Application]: SA0027: Имя переменной 'iRecipeCheckOnStart' в 'RecipeManagementInitAfterOnlineChange' уже используется для объекта в Библиотека 'recipe management, 3.5.17.0 (system)'
Доп. проверки кода завершены -- 8 ошибки (-ок)


Чек бокс отключаешь, компилятор молчит на рецепты.

***
При чем обозначенных переменных под ошибкой "SA0033" в проекте нет. в рецептах тоже нет. От куда они вообще?

***
Пробовал делать то что написано тут:
https://owen.ru/forum/showthread.php?t=23470&page=2
не помогло...
***

Что делать с этими ошибками...?

Евгений Кислов
09.12.2024, 06:23
Что делать с этими ошибками...?

Отключить соответствующие правила статического анализатора (CODESYS Static Analysis), которые на вашем ПК кто-то преднамеренно включил.

Unreality
09.12.2024, 15:18
Отключить соответствующие правила статического анализатора (CODESYS Static Analysis), которые на вашем ПК кто-то преднамеренно включил.

Добрый день,
А где это находится?

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

kondor3000
09.12.2024, 15:29
Добрый день,
А где это находится?

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

Возможно вы никогда не делали Очистить всё, Компилировать всё. Это надо делать после всех изменений проекта.

Unreality
09.12.2024, 15:44
Возможно вы никогда не делали Очистить всё, Компилировать всё. Это надо делать после всех изменений проекта.

"Очистить" и "Очистить все" - за последние две недели стали мои любимые кнопки...))
Но это не помогает, когда появляются сообщения Выше.

***
Евгений - сегодня не было времени утром стыковаться, можно будет завтра попробовать с ранья.

Евгений Кислов
09.12.2024, 15:51
сегодня не было времени утром стыковаться, можно будет завтра попробовать с ранья.

Пишите, как будете готовы.