Сообщение от
capzap
owen.pngэта конструкция и эта
owen.png не имеют отличий и не нарушают Вашу концепцию непринятия портянок
О том Вам и говорил в предыдущих постах.
Сообщение от
capzap
owen.pngвыделенные строки не имеют отличий
Этот код:
Код:
IF SpL11_PurgePeriod.tmVal <> PersistentVars.SpL11_PurgePeriod THEN
IF (SpL11_PurgePeriod.tmVal>=GVL.PurgePeriod_MIN) AND (SpL11_PurgePeriod.tmVal<=GVL.PurgePeriod_MAX) THEN
PersistentVars.SpL11_PurgePeriod:= SpL11_PurgePeriod.tmVal;
ELSE
SpL11_PurgePeriod.tmVal:= PersistentVars.SpL11_PurgePeriod;
END_IF
PLC_PRG.SpL11_PurgePeriod:= PersistentVars.SpL11_PurgePeriod;
ModbusTcpData.SpL11_PurgePeriod.tmVal:= PersistentVars.SpL11_PurgePeriod;
END_IF
отличается от этого:
Код:
IF SpL11_PurgePeriod.tmVal <> PersistentVars.SpL11_PurgePeriod THEN
IF (SpL11_PurgePeriod.tmVal>=GVL.PurgePeriod_MIN) AND (SpL11_PurgePeriod.tmVal<=GVL.PurgePeriod_MAX) THEN
PersistentVars.SpL11_PurgePeriod:= SpL11_PurgePeriod.tmVal;
ELSE
SpL11_PurgePeriod.tmVal:= PersistentVars.SpL11_PurgePeriod;
END_IF
PLC_PRG.SpL11_PurgePeriod:= PersistentVars.SpL11_PurgePeriod;
ModbusRtuData.SpL11_PurgePeriod.tmVal:= PersistentVars.SpL11_PurgePeriod;
END_IF
Смысл в проверке разных входных данных. Выделенный код одинаков просто для того, чтобы во всех входных данных были одни и те же значения.
Код:
а я ни где не утверждал что именно это поможет.
Я собственно и не ожидаю чудесного решения проблемы.
[CODE]Я просто не вижу потребности делать вещи лишенные смысла, такие как входные переменные выполняют свою задачу, они потому и входные что их менять нельзя, только читать, зачем в этом проекте PERSISTENT, инициализация VAR foo : BOOL := TRUE END_VAR вполне себе заменяет ПОУ с IF NOT xFlag THEN foo := TRUE; xFlag := TRUE; END_IF и т.д.и т.п.[/QUOTE]
Соглашусь с замечанием. Хотя технически входные переменные на время выполнения POU являются для него локальными переменными, и изменение их возможно из кода POU. Проблема в том, что изначально эти переменные не были VAR_INPUT. Но так как понадобилось изменять их из смежных POU - появилось такое неизящное решение. Сами входные переменные привязаны в соотнесении входов Modbus RTU/TCP Slave. А т.к. мне необходимо, чтобы при неверном значении, полученном по Modbus, в регистр писалось верное значение (для последующего чтения извне), то понадобилась возможность изменять внутреннюю переменную POU привязанную к регистру Modbus. Собственно так они и стали VAR_INPUT. Можно сделать их глобальными и замечание снимется. Но как писал выше, изменение кода в таком ключе основной проблемы не снимает.
По ссылке проект без VAR_INPUT и весь код полностью в одном POU https://disk.yandex.ru/d/4UUg_wj09z8FyA