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

Тема: Время жизни переменных метода ФБ. Абстрактный вопрос по организации ST кода

  1. #1

    По умолчанию Время жизни переменных метода ФБ. Абстрактный вопрос по организации ST кода

    Добрый день. Есть ФБ, у которого есть несколько методов. В каждом методе есть переменные, необходимые для работы метода.
    С точки зрения порядка в коде было бы очень неплохо локальные переменные методов объявлять в самих методах, дабы не захламлять список переменных ФБ.
    Но я столкнулся с проблемой. Переменные, объявленные в методе, обнуляются при каждом вызове.
    Пытался решить проблему через VAR STAT, но в этом случае переменные метода расшариваются на все экземпляры ФБ.

    Есть ли какой-то способ не пихать все переменные в шапку ФБ? Очень снижает читаемость кода и удовольствие от работы.
    Хотелось бы:
    1) чтобы переменные, необходимые чисто для работы метода, объявлялись в нём, а не на уровне ФБ
    2) чтобы эти переменные сохраняли свои значения всё время жизни ФБ
    3) чтобы была возможность скрыть эти переменные из списка переменных ФБ в ассистенте ввода, чтоб они не мозолили глаза лишний раз (может, через какую-то прагму?)
    4) чтобы лето не кончалось, чтоб оно за мною мчалось

    Спасибо
    Последний раз редактировалось Нидвораич; 10.05.2025 в 18:32.

  2. #2

  3. #3

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.
    VAR_INST решит хотелки 1) и 2)
    спасибо но столкнулся с ещё одной непоняткой. Помимо обычных переменных у меня есть константа, определяющая размер массива.
    И вот при объявлении массива в рамках VAR_INST, а константы в VAR CONSTANT - получаю ошибку
    [ERROR] varsInMet: FB [Device: Plc Logic: Application](Строка 7 (Объявл.)): C0161: Граница 'cv' массива не является постоянным значением

    ошибка воспроизводится и в совершенно пустом проекте. CDS 3.5 sp5.
    Код:
    FUNCTION_BLOCK FB
    VAR_INPUT
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR
    END_VAR
    Код:
    METHOD METH
    VAR_INPUT
    END_VAR
    
    VAR CONSTANT
    	cv: USINT:=55;
    END_VAR
    
    VAR_INST
    	arrr: ARRAY [0..cv] OF INT;
    END_VAR

  4. #4

  5. #5

    По умолчанию

    печально, спасибо. Вынес константу из метода в ФБ. Остальное вроде работает

Похожие темы

  1. Область видимости и время жизни переменных.
    от kakmyc в разделе Панели оператора (HMI)
    Ответов: 8
    Последнее сообщение: 07.03.2025, 22:58
  2. Ответов: 2
    Последнее сообщение: 29.06.2021, 22:01
  3. Ответов: 4
    Последнее сообщение: 26.10.2014, 13:01
  4. Еще один вопрос о переменных
    от tigdin в разделе Программируемые реле
    Ответов: 4
    Последнее сообщение: 27.08.2014, 15:31
  5. Ламерский вопрос по организации системы
    от eta4ever в разделе Подбор Оборудования
    Ответов: 3
    Последнее сообщение: 18.06.2009, 10:47

Ваши права

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