PDA

Просмотр полной версии : Ошибка 4051: PLC_PRG: не является функцией



Denis_Kay
03.11.2016, 06:11
Добрый день!

Заранее отмечу что help внутри программы я читал, руководство по codesys читал, форум читал(хотя может что то и не доувидел).
На форуме нет четкого ответа на эту ошибку, кроме наплевательского "смотрите пример". Сделал все по примеру. Результат на картинке.
Отличие от примера (который компилит нормально) в том, что в нем не т конфигурации, я работаю пока нет живого ПЛК в режиме эмуляции (на картинке показано). PS Другие способы вызова я пробовал, хотя согласно примеру этот должен работать.

Хотелось бы услышать ответ в чем же моя "детская" ошибка и надюсь кому то это еще пригодится, для этого и была создана отдельная тема(вопрос).


Пример программы на случай если не отображается картинка (в конфигурации PLC 160 M)
функция из примера (название мое)
__________________
FUNCTION_BLOCK fbAIScale
VAR_INPUT
delta: REAL;
END_VAR
VAR_OUTPUT
out1: REAL;
END_VAR
VAR
END_VAR
-----
out1:=out1+delta;
__________________

PROGRAM PLC_PRG
VAR
i1: REAL;
END_VAR
-----
fbAIScale(delta:=1 , out1=>i1);
__________________
Ошибка 4051: PLC_PRG(4): 'FBAISCALE' не является функцией

27425

capzap
03.11.2016, 06:33
раз создали функцию сканирования как блок, то в программе его надо объявлять

Denis_Kay
03.11.2016, 06:49
Спасибо, добрый человек, наконец то получилось и я частично понял)
привожу пример доработки, для тех кто будет искать свои ответы (для быстроты), доработана только программа в которой вызываются функциональные блоки
__________________
PROGRAM PLC_PRG
VAR
i1: REAL;
fbAIScale1:fbAIScale; (*ДОРАБОТАНО ЗДЕСЬ - ДОБАВЛЕНО ЭТО ОБЪЯВЛЕНИЕ*)
END_VAR
-----
fbAIScale1(delta:=1 , out1=>i1);(*ДОРАБОТАНО ЗДЕСЬ - НЕМНОГО ИЗМЕНЕН ВЫЗОВ FB*)

Denis_Kay
03.11.2016, 06:51
раз создали функцию сканирования как блок, то в программе его надо объявлять

пока недалеко от кассы хотелось бы уточнить, в программе надо объявлять только функциональные блоки? или функции также? нужно ли объявлять библиотечные функции и функ блоки?

capzap
03.11.2016, 07:08
только ф.блоки, любые

Denis_Kay
03.11.2016, 08:08
Спасибо за помощь!

В итоге, признаю, в примере это было, но я не обратил внимание на это, в след раз постараюсь быть более сконцентрированным. ;-)
добавлю, что в руководстве это тоже есть, нашел также опосля "Руководство пользователя по программированию ПЛК в CoDeSys 2.3" стр. 2-3, когда знаешь что конкретно искать - находится быстро.
но все же считаю вопрос актуальным для новичков в кодесисе, думаю пригодится кому-нибудь

YuriBel
03.11.2016, 09:57
Не поленитесь еще раз прочитать справку по Codesys, в частности раздел "что есть что в codesys". Там достаточно четко объясняется разница между функцией и функциональным блоком. ФБ, в отличие от функций, имеют экземпляры, которые нужно объявлять в разделе объявления переменных, каждый экземпляр со своим именем. при этом у каждого экземпляра будет свой собственный набор данных, хранящих результаты его работы. А функция один раз отрабатывает, выдает результат, и ничего нигде не хранит. Это ключевые вещи, их нужно четко прояснить с самого начала, тогда все остальное пойдет легче.

Denis_Kay
03.11.2016, 11:36
Не поленитесь еще раз прочитать справку по Codesys, в частности раздел "что есть что в codesys". .

уже указал где нашел и даже номер страницы, там практически ваша цитата "Руководство пользователя по программированию ПЛК в CoDeSys 2.3" стр. 2-3