добрый день. есть вопрос по циклу жизни переменных в codesys. имею экземпляр функционального блока, который выполняю в цикле программы. в нём объявлена локальная переменная Init : BOOL; , неинициализирована. внутри ФБ есть сравнение Init и оно некорректно отрабатывает, отладчик говорит, что переменная не задана. но структура и фб таймера внутри этого фб отрабатывают корректно. все локальные переменные же должны сохраняться в экземпляре ФБ? Init я ниже по циклу задаю, после сравнения.
Комментарии: 20
Berkeman
Это и есть ответ
Andrew
Структуры то помнят состояние
Alexander
А где она объявлена?
Andrew
В секции var в фб
Alexander
Вот ты выделил память. Теперь надо ее инициализировать
Andrew
похоже на то, недавно с коллегой спорили на тему инициализации :)
Alexander
Мне просто лень кодесис открывать. Но ты можешь написать типо Init:bool:=false Тем самым присвоив значение в момент вызова экземпляра. Чтоб не было null pointer exeption
Andrew
просто коллега привык что при загрузке и первом старте все неинициализированные переменные инициализируются нулевыми значениями самим рантаймом
Alexander
Это где так?
Andrew
но видимо на экземпляры фб такое не распространяется
Alexander
В зависимости от контроллеров, а следовательно среды разработки.
Andrew
https://help.codesys.com/api-content/2/codesys/3.5.12.0/en/_cds_f_declaring_variables/#variable-initialization
Alexander
Что это?
Ilya
в том же портале temp переменные (локальный стек) при оптимизированном доступе инициализируются нулями. @руководство по программированию, вольная интерпретация
Andrew
это веб-справка по codesys
Alexander
Зачем?
Andrew
которая говорит о следующем The standard initialization value for all declarations is 0. In the declaration part you can also specify user-defined initialization values for each variable and each data type.
Alexander
И?
Andrew
соответственно, если переменная не иниализирована, она должна иметь нулевое значение. Ёё инициализирует рантайм я неправ?
Alexander
Ну у меня все норм.