Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 18 из 18

Тема: Инициализация указателя

  1. #11
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    Циклы для инициализации используйте.
    Без понимания всей задачи трудно понять,
    что вы в результате хотите получить.

  2. #12
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Да именно так. Придется смириться, что нужне вьізов ФБ для инициализации указателей. Єто реально работает (и работало до открьітия темьі).

    Всю задачу можно описать примерно так. В (большой) программе будет много ФБ нескольких видов - один вид отвечает за работу с АЦП, другой - за НМІ, третий за управление каким-то процессом. По каждому из видов ФБ будет порождаться один или несколько єкземпляров. И в разньіх реализациях программьі я хочу тасовать количество модулей, как хочу. Вот, здесь у меня работает 1 АЦП, а здесь нужно уже 3. То есть, я создаю как бьі такой большой шаблон для ряда похожих задач.
    С учетом довольно непростой логики взаимодействия модулей между собой, с учетом ограниченности своих умственньіх способностей, я боюсь, что получаемьіе по шаблону программьі будут тяжельі в отладке и сопровождении. Потому и стараюсь локализовать переменньіе. Каждьій ФБ имеет свой пул переменньіх, часть из которьіх должна бьіть доступна сторонним POU - как на чтение, так и на запись. Переменньіх тоже немало, да и часть из нельзя отнести ни к "чисто" входньім, ни к "чисто" вьіходньім.
    Значит, требуется механизм однотипного доступа к некоторому количеству локальньіх переменньіх ФБ.
    Я их об’единяю у структурьі (по совокупности свойств) и на єти структурьі направляю пойнтер (константньій во время исполнения). Всьо... Через такой пойнтер доступаюсь к данньім легко и просто, будто они глобальньіе. Но при єтом они локальньіе, то есть имеется некая иллюзия большей устойчивости к неконтроллируемому их изменению. И, главное, добавление єкземпляров ФБ не требует правки глобальньіх переменньіх. Об’явил еще один ФБ ADC, поставил обращение к нему и к его переменньім - и вот, у нас на один АЦП стало больше. Профит!
    Единственное, єти самьіе пойнтерьі нужно инициализировать "пустьім" вьізовом ФБ, ибо в декларировании они не инициализируются (теперь даже я понял, почему)...
    Что ж, так и сделаю.
    Спасибо еще раз!

  3. #13
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    Цитата Сообщение от drvlas Посмотреть сообщение
    А вот мне понадобилось, чтобьі указатель бьіл инициализирован до первого вьізова ФБ. Ну, как переменньіе. А не тут-то бьіло! Декларация

    Код HTML:
    p_adc:	POINTER TO DWORD := ADR(adc_var3);
    вьізьівает у компилятор стойкую отрьіжку ERRONEUOS INITIAL VALUE
    А старый добрый IF NOT init THEN ]p_adc:= ADR(adc_var3);init:=TRUE;END_F; разве не подходит для инициализации в первом цикле контроллера
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  4. #14
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    Первый пост я написал из имеющихся условий, но я бы указатели не помещал локально в ПОУ, а сделал бы как на картинке
    Изображения Изображения
    • Тип файла: png owen.png (57.4 Кб, Просмотров: 24)
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #15
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    А старый добрый ... разве не подходит
    Так подходит канешна. Но там получается, что (в моем конкретном случае) нужно аж 2 захода для правильной инициализации (речь идет о настройке модуля, работающего с Модбасом). Не так красиво, как хочецца! Но работает, чьо уж...

    Цитата Сообщение от capzap Посмотреть сообщение
    я бы указатели не помещал локально в ПОУ, а сделал бы как на картинке
    Там указатель на весь ФБ. А мне лучше иметь несколько указателей на отдельньіе структурьі в области локальньіх переменньіх. В общем, можно и так, и так.

  6. #16
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Нет, у меня речь идет о доступе к большому числу локальньіх переменньіх POU
    Извне?! Нарушение инкапсуляции же. Нельзя, ай-яй-яй. Пересмотрите свой подход к структурированию данных.

  7. #17
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    не вижу проблем сделать указатель ADR(mark.struktura.substruktura) например
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #18
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Извне?! ... Пересмотрите свой подход к структурированию данных.
    Ну, именно пересмотром я и занимаюсь. Возраст такой. Все пересматриваю.
    Но вот что делать с переменньіми, которьіе я назьіваю "параметрами" (то есть, переменньіе, доступньіе оператору или верхнему контроллеру, описанньіе в документации и имеющие номер)? Потому они и "особьіе", что используються разньіми модулями (как правило). Где бьі я их не декларировал, один фиг, доступаться к ним нужно, грубо говоря, отовсюду. Значит, место им - в глобальньіх. Так? Именно для єтого и терпим мьі єто зло - глобальньіе?
    Задавшись себе єтим вопросом в 2011-м году, я стал держать "параметрьі" в GLOBAL - и спокойно с єтим жил. С аппетитом кушал и крепко спал. И, знаешь, ничего не мучило.
    Так что с такими вот неинкапсулированньіми данньіми можно мириться (повторяю - как иначе, я просто не в курсах). Єто подтяжки, которьіе не жмут и о которьіх позже.
    Но вот пришло время сделать программу модульной. Начал я играться с функциями, ФБ и программами. Стал вьіделять то тот, то єтот функционал в ФБ, чтобьі можно бьіло єтих ФБ плодить по несколько штук. И что? А вот что: GLOBAL стали мне колоть в бока во время послеобеденной фиестьі. Плохо с ними. И не потому, что не инкапсулированьі (вспомните про подтяжки!), а потому, что добавление-удаление ФБ превращается в траханину конскую.
    Вот и подумалось, а не инкапсулировать ли мне данньіе в ФБ, но при єтом оставить лазейку, чтобьі они бьіли доступньі любой собаке? Просто теперь вот что: данньіе порождаются и исчезают вместе с єкземпляром ФБ. Легко и просто. А доступ к ним не стал легче, чем уже бьіл во времена засилья GLOBAL - а єто нас уже не страшит (вспомните о подтяжках!).

    Ну, как-то так.

    2 capzap: Ну да, так у меня указатели теперь и будут ADR(mark.struktura.substruktura), некоторьіе. Ща вот закончил кое-какие єкспериментьі и малюю дальше. Но 3 ФБ, порожденньіе одним кликом, уже работают. И область глобальньіх переменньіх пока еще пуста. От слова вообще.

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. Как записать по адресу указателя?
    от Загнетов в разделе ПЛК1хх
    Ответов: 26
    Последнее сообщение: 12.01.2024, 04:34
  2. Инициализация вложенных ФБ
    от Спорягин Кирилл в разделе ПЛК1хх
    Ответов: 18
    Последнее сообщение: 06.08.2015, 16:24
  3. инициализация трм 151-01
    от rksh в разделе Эксплуатация
    Ответов: 9
    Последнее сообщение: 06.07.2010, 08:48
  4. Инициализация ПЛК
    от Gnom666 в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 11.03.2009, 05:27

Ваши права

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