смысл вот в чем
if new_valueN <> curr_valueN then
curr_valueN := new_valueN;
DO_N:= curr_valueN;
end_if
если не равно - то в сеть посылаем, если равно - то не посылаем.
смысл вот в чем
if new_valueN <> curr_valueN then
curr_valueN := new_valueN;
DO_N:= curr_valueN;
end_if
если не равно - то в сеть посылаем, если равно - то не посылаем.
Последний раз редактировалось dbkrasn; 07.12.2011 в 16:32.
можете посылать, можете не посылать
результат от действий
do_n := new_val;
и
if new_valueN <> curr_valueN then
curr_valueN := new_valueN;
DO_N:= curr_valueN;
end_if
будет одинаков
Правда чтоль? Серьезно посылаться не будет?
такс, давайте сначала.
у вас есть программа, в которой происходят какие-то действия над переменной new_value. вам надо передать значение этой переменной в модули В/В по rs232/rs485 либо через конфигуратор плк, либо самостоятельно используя библиотеку syslibcom.
если вы в случае использования конфигуратора плк привязываете выходному регистру эту переменную new_value, то получаете это мигание мдвв. причина уже описана.
если же вы заводите пачку "обменных переменных", сажаете их на выходные регистры в конфигураторе и приравниваете этим обменным переменным 1 раз в программе значение своих new_value, то в мдвв будут отсылаться стабильные значения прошлого цикла плк, а не моментально-непредсказуемые текущего.
ну да, и я о том же. Одно НО. Если я хочу минимизировать обмен по сети, то зачем мне записывать новое значение в DO, если это значение не поменялось? Поэтому я и проверяю, поменялось ли значение или нет - еще раз: цель - уменьшить обмен по сети
если это значение не поменялось, а в конфигураторе плк у вас настроено "by value change", тут приравнивай, не приравнивай посылка не будет отправлена => не нужны все эти if then else. подойдет простое do := new_value;
p.s. кстати очень интересный параметр "by value change" - отправляет посылку в устройство только по изменению значения. допустим у вас булева переменная отправляется в модуль дискретного вывода, имеет значение true и не меняется аж 30 сек. в модуле сетевой тайм-аут сколько должен быть, чтобы у вас релюшка в нем не выключилась? логично предположить, что больше 30 сек. а если обрыв связи и надо срочно отключить эту релюшку? модуль то переведет ее в безопасное состояние только через 31 сек.
Последний раз редактировалось swerder; 08.12.2011 в 10:05.