Страница 689 из 711 ПерваяПервая ... 189589639679687688689690691699 ... ПоследняяПоследняя
Показано с 6,881 по 6,890 из 7101

Тема: CODESYS V3.5. Вопросы и ответы

  1. #6881

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Не одинаковые, а разные. Это два разных буфера.
    Да, кажется понял. То есть по сути блок копирует данные из запросов к определенному регистру, поэтому этот регистр надо указывать? Я так понял функция определяется автоматически. А что делать, если адрес данных - 0х0000 [0], а блок ругается на нулевой адрес ?

  2. #6882
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,171

    По умолчанию

    Цитата Сообщение от Андрей999 Посмотреть сообщение
    Да, кажется понял. То есть по сути блок копирует данные из запросов к определенному регистру, поэтому этот регистр надо указывать? Я так понял функция определяется автоматически. А что делать, если адрес данных - 0х0000 [0], а блок ругается на нулевой адрес ?
    Никаких регистров указывать не надо.
    Если блог "ругается на нулевой адрес" - значит, вы что-то делаете не так.
    Продемонстрируйте эту ошибку скриншотом.

  3. #6883

    По умолчанию

    Добрый день. Подскажите такой момент. При создании экземпляра структуры с помощью оператора __NEW по условию, возможно ли обращение к предыдущему экземпляру, если условия срабатывает повторно? Нужно ли для этого создавать отдельную переменную или массив? Что происходит с зарезервированной для экземпляра памятью, если я создаю ещё один экземпляр, но не сохраняю адрес предыдущего в отдельный указатель?

  4. #6884
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,171

    По умолчанию

    Цитата Сообщение от alixx Посмотреть сообщение
    Добрый день. Подскажите такой момент. При создании экземпляра структуры с помощью оператора __NEW по условию, возможно ли обращение к предыдущему экземпляру, если условия срабатывает повторно? Нужно ли для этого создавать отдельную переменную или массив? Что происходит с зарезервированной для экземпляра памятью, если я создаю ещё один экземпляр, но не сохраняю адрес предыдущего в отдельный указатель?
    Добрый день.

    1. Да.
    2. Нужно сохранить указатель, полученный при вызове __NEW.
    3. Ничего.

  5. #6885

    По умолчанию

    alixx Попробую ответить схематически (не до конца уверен в точности ответов).
    Если тут всё работает так же, как в СИ-подобных языках, то __NEW просто всегда выделяет новую память. Старая остаётся выделенной до тех пор, пока программа не закончит работу (то есть, ПЛК не выключат). Это будет приводить к утечкам памяти. Например, через какое-то время свободная память кончится - и программа в ПЛК даст сбой.
    Поэтому так обычно не делают. Обычно, если надо просто указать какой-то адрес чего-то для буфера - то этот буфер объявляют как переменную и потом при помощи оператора ADR() указывают её адрес (для приёма данных, например).
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  6. #6886

    По умолчанию

    То есть если использовать только один указатель, непосредственно для сохранения адреса, то при повторном срабатывании условия он перепишется и его значение будет утеряно навсегда...А не будет ли ошибкой создать в самой структуре переменную типа DWORD и сохранять адрес в ней же?

  7. #6887
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,171

    По умолчанию

    Цитата Сообщение от alixx Посмотреть сообщение
    То есть если использовать только один указатель, непосредственно для сохранения адреса, то при повторном срабатывании условия он перепишется и его значение будет утеряно навсегда...А не будет ли ошибкой создать в самой структуре переменную типа DWORD и сохранять адрес в ней же?
    Скорее всего, это закончится исключением.
    См. также XY problem в подписи.

  8. #6888

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    alixx Обычно, если надо просто указать какой-то адрес чего-то для буфера - то этот буфер объявляют как переменную и потом при помощи оператора ADR() указывают её адрес (для приёма данных, например).
    А если неизвестно сколько раз сработает условие. Как сохранить неизвестное количество указателей?

  9. #6889

    По умолчанию

    Цитата Сообщение от alixx Посмотреть сообщение
    А если неизвестно сколько раз сработает условие. Как сохранить неизвестное количество указателей?
    Чтобы ответить, нужно понимать, зачем вообще создавать новые блоки памяти и указатели для них. Расскажи полностью всю идею, потому что ВСЕ стандартные идеи укладываются в стандартный ADR(), а именно:
    * Создание буферов для приёма данных из портов.
    * Создание буферов для склеивания и перестановки всяких байт в памяти.
    * Передача или обработка (подсчёт CRC, например) данных и буферов памяти.
    * Передача структур или буферов в разные куски программы или FB.
    Всё-всё это работает через ADR прям вот прекрасно (я перешёл с СИ на ПЛК и привык с адресами, указателями и буферами работать).
    Для чего нужен __NEW?
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  10. #6890

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Никаких регистров указывать не надо.
    Если блог "ругается на нулевой адрес" - значит, вы что-то делаете не так.
    Продемонстрируйте эту ошибку скриншотом.
    Вот:
    2024-03-09_22-02-51.png

Страница 689 из 711 ПерваяПервая ... 189589639679687688689690691699 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 3197
    Последнее сообщение: 23.04.2024, 13:45
  2. Панели оператора ИП320. Вопросы и ответы
    от automat в разделе Панели оператора (HMI)
    Ответов: 822
    Последнее сообщение: 20.11.2023, 17:48
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 245
    Последнее сообщение: 02.10.2022, 11:34
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе Панели оператора (HMI)
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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