Ошибка 4250 codesys

Для одной из моих программ мне нужно нормально замкнутое реле с закрытием по времени (NCTC) на лестничной диаграмме.

Я не знаю стандартного метода для его реализации, поэтому пытаюсь создать его сам. Мой нынешний подход требует обнаружения спада. Код такого детектора я нашел в конце книги: «МЭК 61131-3: Программирование промышленных систем» (2-е издание, стр. 327). Выглядит так:

FUNCTION_BLOCK       F_TRIG      (* falling edge *)
    VAR_INPUT
        CLK  :     BOOL;
    END_VAR
    VAR_OUTPUT
        Q   :   BOOL;
    END_VAR
    VAR RETAIN
        MEM   :   BOOL := 1;       (* initialise edge flag *)
    END_VAR
    Q   :=  NOT CLK AND NOT MEM;   (* recognise falling edge *)
    MEM :=  NOT CLK;               (* reset edge flag *)
END_FUNCTION_BLOCK

Это дает мне ровно 5 ошибок (игнорируя сбой сборки из-за них):

ОШИБКА 4250: F_TRIG (1): ожидается еще один оператор ST или конец POU
ОШИБКА 4250: F_TRIG (4): ожидается еще один оператор ST или конец POU
ОШИБКА 4250: F_TRIG (7): ожидается еще один оператор ST или конец POU
ОШИБКА 4250: F_TRIG (10): ожидается еще один оператор ST или конец POU
ОШИБКА 4250: F_TRIG (13): ожидается еще один оператор ST или конец POU

Я правильно настроил тип POU как функциональный блок, а язык POU — как ST. Я подозреваю, что мой синтаксис устарел, но я открыт для предложений. Особенно, если я решаю эту проблему совершенно неверно.

Мне это кажется нормальным. Что не так?

Запуск Codesys 2.3.

2 ответа

  1. Удалить END_FUNCTION_BLOCK
  2. Удалить RETAIN. Вы можете сохранить функциональный блок. Не переменная в функциональном блоке
  3. Q и MEM внизу ничего не объявлены.
  4. F_TRIG уже является типом кодовых систем. Нужно заявить как-то еще

Вот пример того, как это должно выглядеть.

FUNCTION_BLOCK  CustomTrig    
VAR_INPUT
    CLK  :     BOOL;
END_VAR
VAR_OUTPUT
    Q   :   BOOL;
END_VAR
VAR
    MEM   :   BOOL := 1;     
END_VAR

Не могли бы вы подробнее объяснить, что пытаетесь сделать? Возможно, я смогу помочь вам что-то разработать (или, возможно, что-то уже встроено в коды)


2

mrsargent
23 Фев 2017 в 01:24

Если я правильно понимаю, вы хотите, чтобы результат был:

  • ИСТИНА при простое (нормально замкнутый)
  • ЛОЖЬ во время таймера
  • ИСТИНА, когда время истекает

Это противоположно встроенному функциональному блоку TP (синхронизированный импульс). Просто инвертируйте выход TP «Q».


1

Scott
27 Фев 2017 в 16:09

For one of my programs I need a normally closed, timed-closing (NCTC) relay in Ladder Diagram.

I do not know of a standard method to implement such, so I’m trying to construct one myself. My current approach needs a falling-edge detection. The code of such a detector I’ve found in the back of a book: «IEC 61131-3:
Programming Industrial
Systems» (2nd edition, page 327). Looks like this:

FUNCTION_BLOCK       F_TRIG      (* falling edge *)
    VAR_INPUT
        CLK  :     BOOL;
    END_VAR
    VAR_OUTPUT
        Q   :   BOOL;
    END_VAR
    VAR RETAIN
        MEM   :   BOOL := 1;       (* initialise edge flag *)
    END_VAR
    Q   :=  NOT CLK AND NOT MEM;   (* recognise falling edge *)
    MEM :=  NOT CLK;               (* reset edge flag *)
END_FUNCTION_BLOCK

Which gives me exactly 5 errors (ignoring the build failing because of those):

ERROR 4250: F_TRIG (1): Another ‘ST’ statement or end of POU expected
ERROR 4250: F_TRIG (4): Another ‘ST’ statement or end of POU expected
ERROR 4250: F_TRIG (7): Another ‘ST’ statement or end of POU expected
ERROR 4250: F_TRIG (10): Another ‘ST’ statement or end of POU expected
ERROR 4250: F_TRIG (13): Another ‘ST’ statement or end of POU expected

I properly configured the type of POU to be a function block and the language of the POU to be ST. I suspect my syntax is rusty, but I’m open for suggestions. Especially if I’m tackling this problem in an all wrong approach.

It looks okay to me. What’s going wrong?

Running Codesys 2.3.

Для одной из моих программ мне нужно нормально замкнутое реле с таймером закрытия (NCTC) на лестничной диаграмме.

Я не знаю стандартного метода реализации такого, поэтому я пытаюсь создать его сам. Мой текущий подход требует обнаружения заднего края. Код такого детектора я нашел в конце книги: «IEC 61131-3: Программирование промышленных систем» (2-е издание, стр. 327). Выглядит так:

FUNCTION_BLOCK       F_TRIG      (* falling edge *)
    VAR_INPUT
        CLK  :     BOOL;
    END_VAR
    VAR_OUTPUT
        Q   :   BOOL;
    END_VAR
    VAR RETAIN
        MEM   :   BOOL := 1;       (* initialise edge flag *)
    END_VAR
    Q   :=  NOT CLK AND NOT MEM;   (* recognise falling edge *)
    MEM :=  NOT CLK;               (* reset edge flag *)
END_FUNCTION_BLOCK

Что дает мне ровно 5 ошибок (игнорируя сбой сборки из-за них):

ОШИБКА 4250: F_TRIG (1): ожидается другой оператор ST или конец POU
ОШИБКА 4250: F_TRIG (4): ожидается другой оператор ST или конец POU
ОШИБКА 4250: F_TRIG (7): Ожидается другой оператор «ST» или конец POU
ОШИБКА 4250: F_TRIG (10): ожидается другой оператор «ST» или конец POU
ОШИБКА 4250: F_TRIG (13): другой оператор «ST» или конец Ожидается POU

Я правильно настроил тип POU, чтобы он был функциональным блоком, а язык POU был ST. Я подозреваю, что мой синтаксис заржавел, но я открыт для предложений. Особенно, если я решаю эту проблему совершенно неправильным подходом.

Мне кажется, все в порядке. Что происходит не так?

Запуск Codesys 2.3.

Это может быть при выполнении инструкции не формирующей результат (например ‘CAL’).4213″‘S’ and ‘R’ require ‘BOOL’ operand»Используйте логическую переменную.4250″Another ‘ST’ statement or end of POU expected»Строка должна начинаться с корректной ST инструкции.4251″Too many parameters in function ‘<name>'»Число параметров больше, чем в объявлении функции.4252″Too few parameters in function ‘<name>'»Число параметров меньше, чем в объявлении функции.4253″‘IF’ or ‘ELSIF’ require ‘BOOL’ expression as condition»Условие IF или ELSIF должно содержать логическое выражение.4254″‘WHILE’ requires ‘BOOL’ expression as condition»Условие ‘WHILE’ должно содержать логическое выражение.4255″‘UNTIL’ requires ‘BOOL’ expression as condition»Условие ‘‘UNTIL’ должно содержать логическое выражение.CoDeSys V2.310-139Приложение J: Ошибки и предупреждения компилятора4256″‘NOT’ requires ‘BOOL’ operand»Убедитесь, что за ‘NOT’ следует логическое выражение.4257″Variable of ‘FOR’ statement must be of type ‘INT'»Убедитесь, что счетчик итераций ‘FOR’ целая переменная или битовая строка (т.е.

DINT, DWORD).4258″Expression in ‘FOR’ statement is no variable with write access»Используйте для счетчика итераций переменную с доступом на запись.4259″Start value in ‘FOR’ statement is no variable with write access»Начальное значение счетчика ‘FOR’ должно быть совместимо с типом переменной.4260″End value of ‘FOR’ statement must be of type ‘INT'»Конечное значение счетчика ‘FOR’ должно быть совместимо с типом переменной.4261″Increment value of ‘FOR’ statement must be of type ‘INT'»Значение приращения ‘FOR’ должно быть совместимо с типом переменной.4262″‘EXIT’ outside a loop»Используйте ‘EXIT’ только в циклах ‘FOR’, ‘WHILE’ или ‘UNTIL’.4263″Expecting Number, ‘ELSE’ or ‘END_CASE'»После ‘CASE’ должно быть число либо инструкция.4264″‘CASE’ requires selector of an integer type»Убедитесь, что оператор имеет тип целое или битовая строка (т.е.

DINT, DWORD).4265″Number expected after ‘,'»CoDeSys V2.310-140Приложение J: Ошибки и предупреждения компилятораВ перечислении в секторах CASE после запятой должно быть число.4266″At least one statement is required»Вставьте инструкцию или хотя бы точку с запятой.4267″Function block call requires function block instance»Объявите экземпляр вызываемого функционального блока или исправьте идентификатор.4268″Expression expected»Вставьте выражение.4269″‘END_CASE’ expected after ‘ELSE’-branch»Закройте ‘CASE’ после ‘ELSE’ с помощью ‘END_CASE’.4270″‘CASE’ constant ‘<name>’ already used»Селектор ‘CASE’ должен быть уникален в пределах одной ‘CASE’ инструкции.4271″The lower border of the range is greater than the upper border.»Измените границы диапазона так, чтобы начальный был меньше конечного.4272″Expecting parameter ‘<name>’ at place <position> in call of ‘<name>’!»При вызове функции можно использовать присваивание значений параметрам, но их последовательность нарушать нельзя.4273Parts of the ‘CASE’-Range ‘<range>’ already used in Range ‘<range>’Убедитесь, что диапазоны начальных CASE селекторов не пересекаются.4274″Multiple ‘ELSE’ branch in ‘CASE’ statement»CASE инструкция не должна содержать более одного ‘ELSE’.CoDeSys V2.310-141Приложение J: Ошибки и предупреждения компилятора4300″Jump requires ‘BOOL’ as input type»Убедитесь, что вход jump — логическое выражение.4301″POU ‘<name>’ need exactly <number> inputs»Число входов не соответствует заданному в объявлении VAR_INPUT и VAR_IN_OUT.4302″POU ‘<name>’ need exactly %d outputs».Число выходов не соответствует заданному в объявлении VAR_ OUTPUT.4303″‘<name>’ is no operator»Замените ‘<name>’ на допустимый оператор.4320″Non-boolean expression ‘<name>’ used with contact»Сигнал переключения контакта должен быть логического типа.4321″Non-boolean expression ‘<name>’ used with coil»Выходная переменная обмотки реле должна быть логического типа.4330″Expression expected at input ‘EN’ of the box ‘<name>’ «Задайте логическое выражение или соединение на вход EN.’.4331″Expression expected at input ‘<number>’ of the box ‘<Name>’ «Вход <number> оператора не присвоен.4332Expression expected at input ‘<name>’ of the box ‘<Name>'»Не присвоен вход типа VAR_IN_OUT.4333″Identifier in jump expected»CoDeSys V2.310-142Приложение J: Ошибки и предупреждения компилятораУказанная метка перехода отсутствует.4334″Expression expected at the input of jump»Задайте логическое выражение на вход jump.

Переход выполняется при значении TRUE.4335″Expression expected at the input of the return»Задайте логическое выражение на вход RETURN. Переход выполняется при значении TRUE.4336″Expression expected at the input of the output»Недопустимое выражение на входе блока.4337″Identifier for input expected»Задайте корректное выражение или идентификатор на входе блока.4338″Box ‘<name>’ has no inputs»Ни один из входов POU ‘<Name>’ не содержит корректного присвоения.4339″Typemismatch at output: Cannot convert ‘<name>’ to ‘<name>’.Тип выхода не может быть преобразован к требуемому.4340″Jump requires ‘BOOL’ as input type»Убедитесь, что вход jump — это логическое выражение.4341″Return needs a boolean input»Убедитесь, что вход RETURN — это логическое выражение.4342″Expression expected at input ‘EN’ of the box ‘<name>'»Задайте корректное логическое выражение на вход EN.CoDeSys V2.310-143Приложение J: Ошибки и предупреждения компилятора4343″Values of Constants: ‘<name>’»Вход объявлен как VAR_INPUT CONSTANT.

Но для данного POU в диалоге ‘Edit Parameters’ задановыражение несовместимого типа.4344″‘S’ and ‘R’ require ‘BOOL’ operand»Задайте допустимое логическое выражение после инструкции Set или Reset.4345″Unzulässiger Typ für Parameter ‘<Name>’ von ‘<Name>’: Kann ‘<Typ>’ nicht in ‘<Typ>’konvertieren.»Выражение на входе ‘<Name>’ несовместимого типа.4346″Not allowed to use a constant as an output»На выходе может быть только переменная или прямой адрес с доступом на запись.4347″‘VAR_IN_OUT’ parameter needs variable with write access as input»Для параметра VAR_IN_OUT допустима только переменная с доступом на запись.4348″Invalid program name ‘<name>’. A variable with the same name exists already.»Вы добавили элемент в редакторе CFC, который имеет то же имя, что и глобальная переменная, ужесуществующая в проекте.

Переименуйте элемент.4349“Input or output in POU <name> has been deleted: Check all connections to the box. This errormessage disappears only after the CFC was edited”Удален вход или выход POU. Проверьте все соединения данного POU в CFC.4350″An SFC-Action cannot be accessed from outside!»Действие SFC можно вызывать только из POU, в котором оно объявлено. Эта ошибка может возникнуть при правильном вызове действия из SFC POU, если МЭК шаги не используются, а библиотекаiecsfc.lib включена в проект.

В этом случае удалите библиотеку в менеджере библиотек и перекомпилируйте проект.CoDeSys V2.310-144Приложение J: Ошибки и предупреждения компилятора4351″Step name is no identifier: ‘<name>'»Переименуйте шаг либо выберите допустимый идентификатор.4352″Extra characters following valid step name: ‘<Name>'»Удалите недопустимые символы в имени шага.4353″Step name duplicated: ‘<Name>'»Удалите один из шагов.4354″Jump to undefined Step: ‘<Name>'»Задайте существующий шаг для перехода или создайте такой шаг.4355″A transition must not have any side effects (Assignments, FB-Calls etc.)»Условием перехода должно быть логическое выражение.4356″Jump without valid Step Name: ‘<Name>’ «Используйте правильно определенный идентификатор метки перехода.4357″IEC-Library not found»Убедитесь что библиотека iecsfc.lib подключена в Менеджере библиотек и путь, заданный в ‘Project’‘Options’, определен верно.4358″Action not declared: ‘<name>'»Убедитесь, что имя действия МЭК шага присутствует в SFC POU в Организаторе объектов и в прямоугольнике справа от классификатора в окне редактора SFC.4359″Invalid Qualifier: ‘<name>'»В прямоугольнике слева от имени действия введите МЭК классификатор действия.CoDeSys V2.310-145Приложение J: Ошибки и предупреждения компилятора4360″Time Constant expected after qualifier ‘<name>'»Введите рядом с классификатором слева от имени действия константу времени.4361″‘<name>’ is not the name of an action»Введите справа от классификатора имя действия или определенной в проекте переменной4362″Nonboolean expression used in action: ‘<name>'»Вставьте логическую переменную или верное имя действия.4363″IEC-Step name already used for variable: ‘<Name>'»Переименуйте шаг или переменную.4364″A transition must be a boolean expression»Результат условного выражения должен имеет тип BOOL.4365″Time Constant expected after qualifier ‘<name>'»Откройте диалог ‚step attributes’ шага ‘<Name>’ и задайте имя временной переменной или константувремени.4366″The label of the parallel branch is no valid identifier: ‘<Name>'»Введите корректный идентификатор рядом с треугольником перехода (jump).4367″The label ‘<name>’ is already used»Такая метка или одноименный шаг уже определены.

Измените идентификатор.4368″Action ‘<name>’ is used in multiple step chains, where one is containing the other!»Действие ‘<Name>’ используется в POU внутри одного или нескольких действий.CoDeSys V2.310-146Приложение J: Ошибки и предупреждения компилятора4369″Exactly one network requried for a transition»В условиях перехода задано несколько FBD или LD цепей. Оставьте только одну цепь.4370″Additional lines found after correct IL-transition»Удалите лишние строки в конце IL текста.4371″Invalid characters following valid expression: ‘<name>»Удалите лишние символы в конце выражения.4372″Step ‘<name>’: Time limit needs type ‘TIME'»Определите пределы времени шага в атрибутах шага через переменные типа TIME или константывремени (например, «t#200ms»).4373″IEC-actions are only allowed with SFC-POUs»Существует действие в не-SFC-POU (см.

For one of my programs I need a normally closed, timed-closing (NCTC) relay in Ladder Diagram.

I do not know of a standard method to implement such, so I’m trying to construct one myself. My current approach needs a falling-edge detection. The code of such a detector I’ve found in the back of a book: «IEC 61131-3:
Programming Industrial
Systems» (2nd edition, page 327). Looks like this:

FUNCTION_BLOCK       F_TRIG      (* falling edge *)
    VAR_INPUT
        CLK  :     BOOL;
    END_VAR
    VAR_OUTPUT
        Q   :   BOOL;
    END_VAR
    VAR RETAIN
        MEM   :   BOOL := 1;       (* initialise edge flag *)
    END_VAR
    Q   :=  NOT CLK AND NOT MEM;   (* recognise falling edge *)
    MEM :=  NOT CLK;               (* reset edge flag *)
END_FUNCTION_BLOCK

Which gives me exactly 5 errors (ignoring the build failing because of those):

ERROR 4250: F_TRIG (1): Another ‘ST’ statement or end of POU expected
ERROR 4250: F_TRIG (4): Another ‘ST’ statement or end of POU expected
ERROR 4250: F_TRIG (7): Another ‘ST’ statement or end of POU expected
ERROR 4250: F_TRIG (10): Another ‘ST’ statement or end of POU expected
ERROR 4250: F_TRIG (13): Another ‘ST’ statement or end of POU expected

I properly configured the type of POU to be a function block and the language of the POU to be ST. I suspect my syntax is rusty, but I’m open for suggestions. Especially if I’m tackling this problem in an all wrong approach.

It looks okay to me. What’s going wrong?

Running Codesys 2.3.

Предложите, как улучшить StudyLib

(Для жалоб на нарушения авторских прав, используйте

другую форму
)

Ваш е-мэйл

Заполните, если хотите получить ответ

Оцените наш проект

1

2

3

4

5

Понравилась статья? Поделить с друзьями:
  • Ошибка 425 что это
  • Ошибка 4294967295 ацк финансы
  • Ошибка 43 при подключении usb не опознано
  • Ошибка 4249 мерседес атего
  • Ошибка 4294962296 консультант плюс