Камней действительно нет. Осмелюсь предположить, что некоторые думают, что такой способ ничего не уменьшает. А на самом деле в некоторых случаях еще как уменьшает. Вернемся к начальному примеру (конечно утрированному) с чтением 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 вполне достаточно, что бы ПРка организовала и выдала "принудительный" запрос на чтение соответствующей сетевой переменной.




.
Ответить с цитированием