Циклы для инициализации используйте.
Без понимания всей задачи трудно понять,
что вы в результате хотите получить.
Вид для печати
Циклы для инициализации используйте.
Без понимания всей задачи трудно понять,
что вы в результате хотите получить.
Да именно так. Придется смириться, что нужне вьізов ФБ для инициализации указателей. Єто реально работает (и работало до открьітия темьі).
Всю задачу можно описать примерно так. В (большой) программе будет много ФБ нескольких видов - один вид отвечает за работу с АЦП, другой - за НМІ, третий за управление каким-то процессом. По каждому из видов ФБ будет порождаться один или несколько єкземпляров. И в разньіх реализациях программьі я хочу тасовать количество модулей, как хочу. Вот, здесь у меня работает 1 АЦП, а здесь нужно уже 3. То есть, я создаю как бьі такой большой шаблон для ряда похожих задач.
С учетом довольно непростой логики взаимодействия модулей между собой, с учетом ограниченности своих умственньіх способностей, я боюсь, что получаемьіе по шаблону программьі будут тяжельі в отладке и сопровождении. Потому и стараюсь локализовать переменньіе. Каждьій ФБ имеет свой пул переменньіх, часть из которьіх должна бьіть доступна сторонним POU - как на чтение, так и на запись. Переменньіх тоже немало, да и часть из нельзя отнести ни к "чисто" входньім, ни к "чисто" вьіходньім.
Значит, требуется механизм однотипного доступа к некоторому количеству локальньіх переменньіх ФБ.
Я их об’единяю у структурьі (по совокупности свойств) и на єти структурьі направляю пойнтер (константньій во время исполнения). Всьо... Через такой пойнтер доступаюсь к данньім легко и просто, будто они глобальньіе. Но при єтом они локальньіе, то есть имеется некая иллюзия большей устойчивости к неконтроллируемому их изменению. И, главное, добавление єкземпляров ФБ не требует правки глобальньіх переменньіх. Об’явил еще один ФБ ADC, поставил обращение к нему и к его переменньім - и вот, у нас на один АЦП стало больше. Профит!
Единственное, єти самьіе пойнтерьі нужно инициализировать "пустьім" вьізовом ФБ, ибо в декларировании они не инициализируются (теперь даже я понял, почему)...
Что ж, так и сделаю.
Спасибо еще раз!
Первый пост я написал из имеющихся условий, но я бы указатели не помещал локально в ПОУ, а сделал бы как на картинке
Так подходит канешна. Но там получается, что (в моем конкретном случае) нужно аж 2 захода для правильной инициализации (речь идет о настройке модуля, работающего с Модбасом). Не так красиво, как хочецца! Но работает, чьо уж...
Там указатель на весь ФБ. А мне лучше иметь несколько указателей на отдельньіе структурьі в области локальньіх переменньіх. В общем, можно и так, и так.
Извне?! Нарушение инкапсуляции же. Нельзя, ай-яй-яй. Пересмотрите свой подход к структурированию данных.Цитата:
Нет, у меня речь идет о доступе к большому числу локальньіх переменньіх POU
не вижу проблем сделать указатель ADR(mark.struktura.substruktura) например
Ну, именно пересмотром я и занимаюсь. Возраст такой. Все пересматриваю.
Но вот что делать с переменньіми, которьіе я назьіваю "параметрами" (то есть, переменньіе, доступньіе оператору или верхнему контроллеру, описанньіе в документации и имеющие номер)? Потому они и "особьіе", что используються разньіми модулями (как правило). Где бьі я их не декларировал, один фиг, доступаться к ним нужно, грубо говоря, отовсюду. Значит, место им - в глобальньіх. Так? Именно для єтого и терпим мьі єто зло - глобальньіе?
Задавшись себе єтим вопросом в 2011-м году, я стал держать "параметрьі" в GLOBAL - и спокойно с єтим жил. С аппетитом кушал и крепко спал. И, знаешь, ничего не мучило.
Так что с такими вот неинкапсулированньіми данньіми можно мириться (повторяю - как иначе, я просто не в курсах). Єто подтяжки, которьіе не жмут и о которьіх позже.
Но вот пришло время сделать программу модульной. Начал я играться с функциями, ФБ и программами. Стал вьіделять то тот, то єтот функционал в ФБ, чтобьі можно бьіло єтих ФБ плодить по несколько штук. И что? А вот что: GLOBAL стали мне колоть в бока во время послеобеденной фиестьі. Плохо с ними. И не потому, что не инкапсулированьі (вспомните про подтяжки!), а потому, что добавление-удаление ФБ превращается в траханину конскую.
Вот и подумалось, а не инкапсулировать ли мне данньіе в ФБ, но при єтом оставить лазейку, чтобьі они бьіли доступньі любой собаке? Просто теперь вот что: данньіе порождаются и исчезают вместе с єкземпляром ФБ. Легко и просто. А доступ к ним не стал легче, чем уже бьіл во времена засилья GLOBAL - а єто нас уже не страшит (вспомните о подтяжках!).
Ну, как-то так.
2 capzap: Ну да, так у меня указатели теперь и будут ADR(mark.struktura.substruktura), некоторьіе. Ща вот закончил кое-какие єкспериментьі и малюю дальше. Но 3 ФБ, порожденньіе одним кликом, уже работают. И область глобальньіх переменньіх пока еще пуста. От слова вообще.