Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 21

Тема: Инициализация Modbus slave (Retain) переменных

  1. #1
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию Инициализация Modbus slave (Retain) переменных

    Добрый вечер, форумчане.
    Прикрепляю небольшой тестовый проект TestModbusSlaveRetain.pro.
    Проект создан для контроллера ПЛК110-24.30.Р-М [M02], т.е. речь идет об обновленной линейке.
    В проекте созданы две retain переменных: RetainReal и SlaveReal. Первая расположена в классической области retain переменных. Вторая в области Modbus (Slave) и потому также является retain-переменной.
    При первоначальной загрузке программы в контроллер обе переменные инициализируются начальными значениями, заданными при объявлении:
    RetainReal : REAL := 11;
    SlaveReal AT %QD6.1.0 : REAL := 22;

    Далее, если я делаю "Сброс (заводской)" и снова загружаю проект, переменная RetainReal принимает начальное значение 11, а вот переменная SlaveReal равна нулю (см. рисунок).

    Как добиться того, чтобы после заводского сброса переменные из области Modbus (slave) принимали свои начальные значения?
    Изображения Изображения
    • Тип файла: jpg Retain.jpg (221.9 Кб, Просмотров: 171)
    Вложения Вложения
    Последний раз редактировалось Спорягин Кирилл; 07.03.2016 в 16:43.

  2. #2
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    И еще почему-то по команде "Сброс" переменные сбрасываются в 0, что для Retain-переменных не должно быть.

  3. #3
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Вопрос актуален.

  4. #4
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Кажется это похоже на ответ: http://www.owen.ru/forum/showthread....2%E0%F0%F2+opc

  5. #5
    Пользователь
    Регистрация
    19.11.2011
    Адрес
    г. Белгород
    Сообщений
    357

    По умолчанию

    При заводском сбросе ретаин переменные не сохраняются. Это же не отключение питания. Наоборот, ПЛК приходит в исходное заводское состояние, и все что там было записано удаляется и создается с нуля. Вполне возможно, что регистры слэйва конфигурации и переменные ретаин хранятся в разных файлах, и при загрузке сначала считываются переменные, сохраненные в файле слэйва конфигурации, потом из файла ретаин переменных (если он уже есть).

    Как добиться того, чтобы после заводского сброса переменные из области Modbus (slave) принимали свои начальные значения?
    Можно в одном из регистров слэйва хранить какое-нибудь "определенное число" (кроме нуля). При загрузке программы смотреть, что в этом регистре. Если 0, то "вручную" инициализировать регистры нужными начальными значениями, если "определенное число", то ретаин считались правильно и ничего инициализировать не надо.

  6. #6
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Цитата Сообщение от amn Посмотреть сообщение
    При заводском сбросе ретаин переменные не сохраняются.
    Это понятно, но RetainReal при этом принимает значение 11, т.е. то, которое задано при инициализации, а вот переменная SlaveReal из области Modbus, принимает значение 0. И это не понятно.
    Так же не понятно, почему при простом сбросе (Онлайн - Сброс) переменная SlaveReal сбрасывается, хотя не должна. Так переменная RetainReal при простом сбросе сохраняет свое значение.

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

    По умолчанию

    Цитата Сообщение от SKV Посмотреть сообщение
    Это понятно, но RetainReal при этом принимает значение 11, т.е. то, которое задано при инициализации, а вот переменная SlaveReal из области Modbus, принимает значение 0. И это не понятно.
    Так же не понятно, почему при простом сбросе (Онлайн - Сброс) переменная SlaveReal сбрасывается, хотя не должна. Так переменная RetainReal при простом сбросе сохраняет свое значение.
    а какая вобще жизненная необходимость делать сброс?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  8. #8
    Пользователь
    Регистрация
    19.11.2011
    Адрес
    г. Белгород
    Сообщений
    357

    По умолчанию

    Это понятно, но RetainReal при этом принимает значение 11, т.е. то, которое задано при инициализации, а вот переменная SlaveReal из области Modbus, принимает значение 0. И это не понятно.
    Предположу, что может быть так: после заводского сброса еще нет сохраненного файла с переменной RetainReal, поэтому инициализация идет из области объявления переменных. А в слэйв конфигурации считывается значение из файла (заводского, где изначально все нули).

  9. #9

    По умолчанию

    Цитата Сообщение от SKV Посмотреть сообщение
    Это понятно, но RetainReal при этом принимает значение 11, т.е. то, которое задано при инициализации, а вот переменная SlaveReal из области Modbus, принимает значение 0. И это не понятно.
    Так же не понятно, почему при простом сбросе (Онлайн - Сброс) переменная SlaveReal сбрасывается, хотя не должна. Так переменная RetainReal при простом сбросе сохраняет свое значение.
    Потому, что RetainReal это для CoDeSys ретайн, а SlaveReal - переменная.
    Ретайн для SlaveReal делается нашей системой. Т.к. проект тот-же самый - ретайн остаются как и были, а не отстутствуют. И контроллер при загрузке перетирает число 22 числом 0.
    Тролль-наседка, добрый, нежный и ласковый

  10. #10
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Потому, что RetainReal это для CoDeSys ретайн, а SlaveReal - переменная.
    Ретайн для SlaveReal делается нашей системой. Т.к. проект тот-же самый - ретайн остаются как и были, а не отстутствуют. И контроллер при загрузке перетирает число 22 числом 0.
    Вопрос 1.
    А почему по комаде "Сброс" сбрасывается SlaveReal?
    Но это не самое плохое. Хуже если я внес изменения в проект, которые не могут быть загружены как горячее обновление кода. Тогда при загрузке он обнуляет все Modbus slave переменные.

    Вопрос 2.
    И вопрос связанный же с областью Modbus Slave. Команда "Онлайн - Сброс (заводской)"
    отличается от сброса по переключателю на контроллере (обновленный ПЛК110 М02)?

    Поясню суть вопроса 2. Для того, чтобы заново проинициализировать Modbus slave переменные мне необходимо проделывать следующую вещь.
    1. Сброс (заводской);
    2. Отключение;
    3. Сброс по переключателю (Работа - Стоп - Сброс);
    4. Изменение области Modbus slave (например добавление переменной в конфигурации);
    5. Загрузка контроллера.

    Только после этого контроллер инициализирует Modbus slave переменные повторно после первоначальной загрузки.
    Последний раз редактировалось Спорягин Кирилл; 10.03.2016 в 22:02.

Страница 1 из 3 123 ПоследняяПоследняя

Похожие темы

  1. Ответов: 17
    Последнее сообщение: 15.09.2015, 06:05
  2. Обновление Retain переменных
    от PotokU в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 22.07.2015, 12:18
  3. Ответов: 19
    Последнее сообщение: 09.02.2011, 09:15
  4. Ответов: 3
    Последнее сообщение: 21.04.2008, 19:54

Ваши права

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