Ответ: Предотвращение сброса переменных в ноль Modbus
Во-первых, вы используете блок записи с цикличным опросом.
В карте памяти слейва для этого блока указан период отличный от 0 (по умолчанию стоит 100 мсек).
Таким образом, периодически туда идет запрос на запись значения, которое у вас на выходе блока ADD.
Вам лучше бы использовать блок записи с нецикличным опросом (поставить период опроса = 0). Тогда на этом блоке появится дополнительный вход для отправки запроса.
Во-вторых, вы берете текущее значение параметра с выхода этого же блока. Однако, какое либо значение отличное от 0 там появляется только после записи по этому адресу нового значения (с последующим чтением, которое производится автоматически).
То есть, при запуске контроллера значение на этом выходе = 0.
Оно приходит на блок ADD, на котором ещё два входа = 0. Сумма на выходе = 0. А так как производится циклический запрос на запись, то через установленное в карте памяти время в регистр запишется 0.
Если вы хотите организовать такой функционал, то для этого Holding регистра в карте памяти заведите 2 переменных:
- с направлением R (out) и цикличным опросом (период >0) - так вы будете постоянно получать текущее значение регистра;
- с направлением R/W (out) и нецикличным опросом (период = 0) - для записи нового значения, но уже по необходимости.
Также рекомендую после кнопок ставить блоки Rise, чтобы изменения уставок происходило по событию "нажатие", но не срабатывало при дальнейшем удержании.
|