Показано с 1 по 3 из 3

Тема: Работа функционального блока

  1. #1

    По умолчанию Работа функционального блока

    Добрый день!
    Прошу разъяснить следующую ситуацию.
    В тестовом проекте написал функциональный блок, в котором используется локальная переменная для хранения некоторого значения, полученного в предыдущем цикле. В проекте 8 цепей, экземпляр моего FB используется в 5-й цепи. Загружаю проект в ПЛК150, перевожу в состояние Run. Через некоторое время отключаю питание ПЛК минут на 15, затем снова включаю питание. Программа загружается из флэшки в ОЗУ, переходит в состояние Run и начинает исполняться. Но исполняются цепи до моего FB, а цепь с моим FB и следующие за ней не выполняются(пробовал записывать и фиксировать различные значения на входе блоков других цепей).Программа начинает полностью работать после команды Reset (cold).

    Вопросы:
    1. Какую ошибку я допустил при создании блока (файл проекта прикрепляю)? Переменную для хранения значения вычисленного в предыдущем цикле объявлял локальной, глобальной, Retain - никаких изменений.
    2. Где можно найти описание кодов ошибок которые возникают при исполнении программы и видны в редакторе CoDeSys? (при работе у переменной было значение -1.#QNAN)
    3. Когда в моем FB возникает ошибка после подачи питания на ПЛК, почему не останавливается вся программа (ее состояние - Run) , а ее часть до данного блока работает, а после него нет (почему не работают следующие за блоком цепи)?
    Вложения Вложения
    • Тип файла: zip test.zip (12.3 Кб, Просмотров: 45)

  2. #2

    По умолчанию

    Есть предположение, что происходит арифметическое переполнение и выброс исключительной ситуации.

    К сожалению не понял из проекта какой нужен таргет.

    Настоятельно рекомендую до использования значений с аналоговых входов плк прогнать их через блок DECODE_FLOAT библиотеки pid_regulators.lib. Это связано с тем что при нештатных ситуациях значение с измерителя может быть некорректным.

  3. #3

    По умолчанию

    Версия прошивки 2.00.4, таргет 2.0.
    Спасибо за подсказку, версия с арифметическим переполнением мне тоже представляется наиболее вероятной. Удивляет, что при появлении исключительной ситуации часть кода (начальная) продолжает выполняться и не происходит останов всей программы. Почему именно Reset(cold) позволяет начать выполняться всему коду программы?

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •