Показано с 1 по 8 из 8

Тема: Доступ к гллбальным переменным через абсолютные адреса

  1. #1

    По умолчанию Доступ к гллбальным переменным через абсолютные адреса

    Добрый день, коллеги,

    требуется помощь с пониманием внутренней логики распределения памяти - если я определяю глобальный масив так

    VAR_GLOBAL
    GLOBAL_VAR: ARRAY [0..2000] OF DINT;
    END_VAR

    но мне нужно обращаться к нему через абсолютный адрес, я могу в приниципе сделать так - все компилируется:

    GLOBAL_VAR AT %MW200 : ARRAY [0..2000] OF DINT;

    Но, что происходит при этом в самом контроллере? Где будет лежать массив физически, в какой памяти в первом случае и во втором?

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

    По умолчанию

    GLOBAL_VAR: ARRAY [0..2000] OF DINT;
    Сегмент глобальных данных.
    GLOBAL_VAR AT %MW200 : ARRAY [0..2000] OF DINT;
    Флаговый сегмент с 200-го по 8200-й байты (плюс позиция начала сегмента, если речь о «физическом» адресе). Адреса эти абсолютные только в пределах сегмента.
    Последний раз редактировалось Yegor; 17.09.2014 в 14:53.

  3. #3

    По умолчанию

    Ок, то есть моя догадка была верна - при декларации AT данные реально помещаются в другое место памяти.
    То есть скорее всего (см. прикрепленный скриншот), в моем случае

    GLOBAL_VAR - в "Global"
    GLOBAL_VAR AT - в "Retain" ?

    А есть еще ключевое слово RETAIN для глобальных переменных - как оно работает - просто помещает опять таки переменные в другую область, только адрес компилятор определяет сам?
    Изображения Изображения

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

    По умолчанию

    Переменные объявляются реманентными именно ключевыми словами PERSISTENT и RETAIN. Да, в этом случае они попадают в ту область оперативной памяти, которая копируется в энергонезависимую память перед выключением и считывается оттуда при включении. Можно ли сделать переменную реманентной указав адрес через AT - я не проверял. Само по себе объявление через AT не обеспечивает попадание переменной именно в ритэйн-сегмент.

  5. #5

    По умолчанию

    Ок, спасибо, все стало гораздо яснее. Я протестирую чтобы подтвердить.

  6. #6

    По умолчанию

    Протестировал - дело в том что абсолютные адреса нужны для доступа извне, через веб-сервер

    192.168.2.100/WRITEPI?ADR1=MW200&VALUE1=1234&FORMAT1=%d

    Запрос вроде выполняется, но значение переменной не меняется. Может я чего-то не понимаю как смотреть значения?


    П.С. И да, это не ОВЕН ПЛК, другой (WAGO), но работает также через CoDeSys
    Изображения Изображения

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

    По умолчанию

    С этого надо было начинать. В Овнах просто нет такого сервера.

    Вот здесь кто-то d в конце на x заменил, например: http://www.oscat.de/community/index.php?topic=1940.0

  8. #8

    По умолчанию

    Все равно спасибо за помощь, многое прояснило. Я даже уже видел этот топик на OSCAT но он там не формат заменил, а у него просто в коде переменная переписывалась другим модулем.

Похожие темы

  1. Ответов: 2
    Последнее сообщение: 27.04.2013, 17:57
  2. HD-2544.VA-управление переменным резистором
    от Ефим в разделе Твердотельное реле
    Ответов: 5
    Последнее сообщение: 22.04.2013, 07:12
  3. Ответов: 3
    Последнее сообщение: 12.04.2012, 10:31
  4. как получить доступ на плк-110 через интернет
    от Goran в разделе Подбор Оборудования
    Ответов: 11
    Последнее сообщение: 07.06.2011, 22:02

Ваши права

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