PDA

Просмотр полной версии : Перезапись сетевых переменных



Dimaes
14.07.2024, 21:11
Друзья, добрый вечер!
Подскажите пожалуйста. Столкнулся с такой проблемой, если использовать сетевую переменную с макросом SelChgB то при смене значения этой сетевой переменной начинается болтанка (переменные меняются с 0 на 1 бесконечно)
77291
Если использовать локальные переменные все норм. В чем может быть подвох.
77290
Спасибо

Dimensy
14.07.2024, 21:35
А с чего это у вас линия желтым подсветилась? Думаю в этом и проблема

bayk
14.07.2024, 21:38
Внутренняя переменная тоже нужна энергонезависимой. Если подключена к экрану, то можно поставить " запись в конце цикла " в свойствах переменной

Dimaes
14.07.2024, 21:52
Не знаю. Все проверил. В другом проекте тоже сетевая переменная, но желтой линии нет и все работает (не скачет).
77292
Скорее всего дело не в том что переменная сетевая, а в чем то другом.

Dimaes
14.07.2024, 21:57
Подскажите, а где этот параметр задается. Чет я его никогда не встречал.

Dimaes
14.07.2024, 21:58
Внутренняя переменная тоже нужна энергонезависимой. Если подключена к экрану, то можно поставить " запись в конце цикла " в свойствах переменной

Подскажите, а где этот параметр задается. Чет я его никогда не встречал.

Сергей0308
14.07.2024, 22:01
Сетевая переменная в режиме мастер не энергонезависимая, в смысле надо задержку на цикл ставить, короче, зачем эти гадания, Вы поговорить хотите или проблему решить, в смысле где проект или часть проекта с проблемой?

Dimaes
14.07.2024, 22:18
Я же прислал чать проекта в вопросе. Это все что касается вопроса.
Попробую более подробно описать проблему.
Есть "главный контроллер (ПР200)", есть "доп контроллер (ПР200)" Имеем 2 переменные 1 локальную "Сист_Полива_Режим" и 2 сетевую - "20.2.1.Poliv_mode". Локальная меняется с экрана, с помощью макроса передается на сетевую переменную и на другой контроллер. На другом котроллере тоже есть возможность поменять локальную переменную которая также через макрос меняет сетевую и сетевая в свою очередь меняет значение на главном контроллере.
При отладке программы запускал на ПК. Пробовал менять значения локальной переменной, все меняется. Как только начинаешь менять значение сетевой переменной, то начинаются скакания значений, и его уже не остановить.
Я пробовал менять желтую линию связи на линию задержки. Тоже самое - значения скачут.

Dimensy
14.07.2024, 22:34
Удаляйте из проекта все что считаете тайной и выкладывайте здесь. По картинке вам никто ничего не подскажет

EFrol
14.07.2024, 23:10
Я же прислал чать проекта в вопросе. Это все что касается вопроса.
Попробую более подробно описать проблему.
Есть "главный контроллер (ПР200)", есть "доп контроллер (ПР200)" Имеем 2 переменные 1 локальную "Сист_Полива_Режим" и 2 сетевую - "20.2.1.Poliv_mode". Локальная меняется с экрана, с помощью макроса передается на сетевую переменную и на другой контроллер. На другом котроллере тоже есть возможность поменять локальную переменную которая также через макрос меняет сетевую и сетевая в свою очередь меняет значение на главном контроллере.
При отладке программы запускал на ПК. Пробовал менять значения локальной переменной, все меняется. Как только начинаешь менять значение сетевой переменной, то начинаются скакания значений, и его уже не остановить.
Я пробовал менять желтую линию связи на линию задержки. Тоже самое - значения скачут.

Попробуйте вариант с макросом Exchange (обмен 0-м битом сетевой переменной с булевой переменной)
77293
в доп.настройках OnOff обязательно поставьте "Да" в "Запись в конце цикла".


function_block Exchange

var_input
NetIn : udint;
In : bool;
end_var

var_output
NetOut : udint;
Out : bool;
end_var

if In <> Out then
Out := In; NetOut.0 := In;
elsif NetOut <> NetIn then
NetOut := NetIn; Out := NetIn.0;
end_if

end_function_block

Dimaes
15.07.2024, 11:38
Удаляйте из проекта все что считаете тайной и выкладывайте здесь. По картинке вам никто ничего не подскажет

Прикладываю проект, в нем выделил два блока, в одном работает в другом нет.

Dimaes
15.07.2024, 11:45
Попробуйте вариант с макросом Exchange (обмен 0-м битом сетевой переменной с булевой переменной)
77293
в доп.настройках OnOff обязательно поставьте "Да" в "Запись в конце цикла".


function_block Exchange

var_input
NetIn : udint;
In : bool;
end_var

var_output
NetOut : udint;
Out : bool;
end_var

if In <> Out then
Out := In; NetOut.0 := In;
elsif NetOut <> NetIn then
NetOut := NetIn; Out := NetIn.0;
end_if

end_function_block


Спасибо конечно, но я вообще ничего не понял. Я, к сожалению не знаю как работать с кодом. и куда его добавлять. Мои знания пока ограничены только использованием ФБ.

1exan
15.07.2024, 11:47
Прикладываю проект, в нем выделил два блока, в одном работает в другом нет.

Можете попробовать с этой настройкой?
77299

Dimaes
15.07.2024, 12:47
Можете попробовать с этой настройкой?
77299

Спасибо. С такой настройкой все работает нормально. Не скачет. Остается вопрос, почему в зеленом блоке без такой настройки работает сразу нормально.

1exan
15.07.2024, 13:03
Спасибо. С такой настройкой все работает нормально. Не скачет. Остается вопрос, почему в зеленом блоке без такой настройки работает сразу нормально.

А OL там принудительно линию задержки поставил (жёлтая) - это по действию аналогично

Dimensy
15.07.2024, 13:11
А OL там принудительно линию задержки поставил (жёлтая) - это по действию аналогично

Это выкрутасы Лоджика. У меня наоборот, в красной зоне нормально работает, а в зеленой мигает, да и ниже еще один выбор с трех мест - тоже мигает.

Dimaes
15.07.2024, 13:21
А OL там принудительно линию задержки поставил (жёлтая) - это по действию аналогично

Я пробовал вместо желтой линии связи ставить линию с задержкой. Не работает. Скачет.

1exan
15.07.2024, 13:23
Я пробовал вместо желтой линии связи ставить линию с задержкой. Не работает. Скачет.

Да, здесь почему-то это не работает

Dimensy
15.07.2024, 18:27
Кстати, вот с этой редакцией макроса все нормально работает и без выставления галочки "запись в конце цикла"

1exan
16.07.2024, 05:04
Ну и на ST до кучи


function_block SelChgB
var_input
I1 : bool;
I2 : bool;
end_var

var_output
Q : bool;
end_var

var
mem1 : bool;
mem2 : bool;
end_var

if I1 <> mem1 then
mem1 := I1;
Q := I1;
end_if
if I2 <> mem2 then
mem2 := I2;
Q := I2;
end_if

end_function_block

Dimaes
16.07.2024, 09:56
Спасибо большое. Заменил макросы на ваш. Все работает без сбоев.