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

Тема: ПР100 в режиме мастер и много сетевых переменных

  1. #1
    Пользователь
    Регистрация
    05.10.2020
    Адрес
    Питер
    Сообщений
    33

    По умолчанию ПР100 в режиме мастер и много сетевых переменных

    Имеется ПР100 в режиме Modbus Master. К ней подключена панель оператора (Modbus Slave). Оператор на панели может ввести данные в (предположим) 50 сетевых переменных (N1, N2, ..., N50), которые обрабатываются в ПР100. Т.е. все эти сетевые переменные (N1, N2, ..., N50) задействованы в проекте ПР100. Оператор набирает значение параметра на панели и нажимает кнопку "Вввод". Именно в этот момент переменная принимает новое значение. Кроме этого у панели есть "служебная" сетевая переменная "Ввод завершен", которая по кнопке "Вввод" устанавливается в значение номера сетевой переменной куда ввели данные (1 если ввели данные в N1, 2 для N2 и т.п.). Возможно ли в ПР100 организовать обмен с панелью таким образом, что бы запрос на чтение каждой сетевой переменной из панели (N1, N2 ...) формировался (посылался по линии связи) только тогда, когда оператор нажмет кнопку "Вввод" (т.е. кода сетевая переменная "Ввод завершен" изменит свое значение)? Вопрос связан с желанием минимизировать количество обменов по линии связи.
    Первоначально мне показалось, что использование свойства слейв переменной "Запуск чтения" позволяет такую задачу решить. Однако после внимательного прочтения документации оказалось, что "Запуск чтения" предназначен не для управления чтением переменной не по некоторому события, а для для принудительного чтения данной переменной. Хотя не совсем понятно что значит "принудительное" чтение переменной. Насколько я понимаю, как только на холсте появляется входной блок некоторой сетевой переменной (даже, если переменная и не участвует в каких либо вычислениях), то по модбас сразу же начинают идти запросы на чтение этой сетевой переменной.

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

    По умолчанию

    Вроде там есть варианты читать по команде, хотя все замудренно так, что работает через Ж... выставить максимальное время для чтения и командой читать тогда, когда нужно прочитать.

    Поищите в темах видео от Ревака Юрий. Суть, если я правильно понял, можно выставить максимальное время для чтения переменной, отключить совсем нельзя, и командой читать вне этого времени...

  3. #3

    По умолчанию

    Цитата Сообщение от Alex469 Посмотреть сообщение
    Имеется ПР100 в режиме Modbus Master. К ней подключена панель оператора (Modbus Slave). Оператор на панели может ввести данные в (предположим) 50 сетевых переменных (N1, N2, ..., N50), которые обрабатываются в ПР100. Т.е. все эти сетевые переменные (N1, N2, ..., N50) задействованы в проекте ПР100. Оператор набирает значение параметра на панели и нажимает кнопку "Вввод". Именно в этот момент переменная принимает новое значение. Кроме этого у панели есть "служебная" сетевая переменная "Ввод завершен", которая по кнопке "Вввод" устанавливается в значение номера сетевой переменной куда ввели данные (1 если ввели данные в N1, 2 для N2 и т.п.). Возможно ли в ПР100 организовать обмен с панелью таким образом, что бы запрос на чтение каждой сетевой переменной из панели (N1, N2 ...) формировался (посылался по линии связи) только тогда, когда оператор нажмет кнопку "Вввод" (т.е. кода сетевая переменная "Ввод завершен" изменит свое значение)? Вопрос связан с желанием минимизировать количество обменов по линии связи.
    Первоначально мне показалось, что использование свойства слейв переменной "Запуск чтения" позволяет такую задачу решить. Однако после внимательного прочтения документации оказалось, что "Запуск чтения" предназначен не для управления чтением переменной не по некоторому события, а для для принудительного чтения данной переменной. Хотя не совсем понятно что значит "принудительное" чтение переменной. Насколько я понимаю, как только на холсте появляется входной блок некоторой сетевой переменной (даже, если переменная и не участвует в каких либо вычислениях), то по модбас сразу же начинают идти запросы на чтение этой сетевой переменной.
    А почему не сделать мастером панель оператора? Тогда обмен на шине будет только в момент изменения данных на панели, если панель конечно это поддерживает. А так, назначить флаги чтения регистрам получающим информацию из панели и по изменению значения в Вашем контрольном регистре запускать это чтение. Работа в этих режимах показана тут: https://www.youtube.com/watch?v=k9rUF5_kLqk
    С уважением, Ревака Юрий.
    Инженер группы технической поддержки компании "ОВЕН"
    e-mail: yu.revaka@owen.ru

    Шаблон описания ошибки ПР или OL http://ftp-ow.owen.ru/softupdate/OWE...s/Shablon.docx
    Видео уроки по ПР200 и OWEN Logic http://edu.owen.ru/series/pr200_rev/
    Другие видеоролики по тематике ПР https://www.youtube.com/channel/UCj4...H5H3d_t6iDlQOQ

  4. #4
    Пользователь
    Регистрация
    05.10.2020
    Адрес
    Питер
    Сообщений
    33

    По умолчанию

    Всем спасибо! Разобрался с настройками (включая "Запуск чтения") и сделал как хотел.

  5. #5
    Пользователь
    Регистрация
    25.02.2016
    Адрес
    Кострома
    Сообщений
    276

    По умолчанию

    Цитата Сообщение от Alex469 Посмотреть сообщение
    Всем спасибо! Разобрался с настройками (включая "Запуск чтения") и сделал как хотел.
    А что сделал-то? Как там эта настройка "Запуск чтения" работает? Сам пока не разбирался, но интересно, что там за подводные камни.

  6. #6
    Пользователь
    Регистрация
    05.10.2020
    Адрес
    Питер
    Сообщений
    33

    По умолчанию

    Камней действительно нет. Осмелюсь предположить, что некоторые думают, что такой способ ничего не уменьшает. А на самом деле в некоторых случаях еще как уменьшает. Вернемся к начальному примеру (конечно утрированному) с чтением 50 сетевых переменных. Без использования данного способа ПР100 (мастер) для чтения одной целочисленной переменной (holding register в терминах модбас) выдает отдельный запрос на чтение (функция 3) одного регистра. Соответственно для 50 переменных будет 50 запросов на чтение. Это так, даже если переменные-регистры по адресам идут подряд. К сожалению ПР100 не умеет использовать групповые запросы. Т.е. выдать один запрос на чтение нескольких регистров ПР100 не умеет .

    Теперь рассмотрим использование "Запуск чтения". Прилагаю тестовый проект на 3 переменных. Работает это следующим образом. В проекте организованы 2 слейва с разными периодами опроса. На самом деле это один и тот же слейв с одинаковым адресом (5). Период опроса ReadINput 65535 мсек. К сожалению это максимально возможный период. В идеале он должен быть бесконечностью. В этом слейве указаны 3 сетевые переменные Var1, Var2, Var3. У каждой переменной есть своя переменная Запуск чтения (V1_done,...). Любая переменная Var1, Var2 или Var3 будет считана ПРкой только тогда, когда переменная, указанная в поле Запуск чтения, примет значение 1. Эти сетевые переменные (Var1...) нам и нужно считать в программу.
    Второй слейв InputDone. Период его опроса небольшой (в моем случае 1 сек). Т.е. переменную Input_Done (которая указана в данном слейве и не имеет переменной в Запуск чтения) мастер (ПР100) считывает 1 раз в секунду.
    Напомню, что значения в переменные Var1, Var2, Var3 вводятся вручную с панели оператора. Для завершения ввода в переменную Var1 оператор нажимает на панели кнопку "Ввод". Именно по этому нажатию введенные данные заносятся в переменную Var1, а в переменную Input_Done заносится номер переменной Var, в нашем случае 1. Для переменной Var2 заносится 2. И т.п. Т.е. по нажатию Ввод на панели набранные данные попадают в свою сетевую переменную и номер этой сетевой переменной "одновременно" заносится в специальную сетевую переменную (Input_Done). Так ввод с панели оператора организован. Надеюсь теперь понятно, что вместо считывания 3-х переменных (3 запроса на чтение) периодически выполняется один запрос на чтение. А если было бы 50 переменных, то вместо 50-ти запросов на чтение в каждом цикле опроса всего один запрос. Что-то мне подсказывает, что мы тут уменьшаем и не хило ...
    Кстати, удержание в 1 переменной, указанной в Запуск чтения, в течение 1 цикла ПР100 вполне достаточно, что бы ПРка организовала и выдала "принудительный" запрос на чтение соответствующей сетевой переменной.
    Изображения Изображения
    Вложения Вложения
    • Тип файла: owl Var3.owl (117.5 Кб, Просмотров: 6)

  7. #7
    Пользователь
    Регистрация
    05.10.2020
    Адрес
    Питер
    Сообщений
    33

    По умолчанию

    Цитата Сообщение от Alex469 Посмотреть сообщение
    Кстати, удержание в 1 переменной, указанной в Запуск чтения, в течение 1 цикла ПР100 вполне достаточно, что бы ПРка организовала и выдала "принудительный" запрос на чтение соответствующей сетевой переменной.
    Реализация проекта на практике показала, что этого времени НЕ достаточно. Пришлось поставить таймеры TOF с задержкой на 2 секунды перед записью в переменные V1_done,...

Похожие темы

  1. Инициализация сетевых переменных
    от dzukp в разделе Среда программирования OWEN Logic
    Ответов: 24
    Последнее сообщение: 02.11.2022, 20:18
  2. Буферизация сетевых переменных
    от anthrwpos в разделе Среда программирования OWEN Logic
    Ответов: 12
    Последнее сообщение: 22.08.2018, 08:50
  3. <Слишком много переменных для мониторинга>
    от Павел Б. в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 30.11.2015, 09:26
  4. Ответов: 3
    Последнее сообщение: 05.03.2015, 14:01
  5. Энергонезависимость сетевых переменных
    от max_etf в разделе Программируемые реле
    Ответов: 19
    Последнее сообщение: 07.09.2012, 10:03

Ваши права

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