добрый день. есть вопрос по циклу жизни переменных в codesys. имею экземпляр функционального блока, который выполняю в цикле программы. в нём объявлена локальная переменная Init : BOOL; , неинициализирована. внутри ФБ есть сравнение Init и оно некорректно отрабатывает, отладчик говорит, что переменная не задана. но структура и фб таймера внутри этого фб отрабатывают корректно. все локальные переменные же должны сохраняться в экземпляре ФБ? Init я ниже по циклу задаю, после сравнения.

Комментарии: 20

  1. Berkeman

    Это и есть ответ

    • Andrew

      Структуры то помнят состояние

  2. 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

                                    Ну у меня все норм.

Не нашли ответ?

Вам также может быть интересно