Вот только подскажите как сделать проверку этих ключевых переменных на 0 и запись в них безопасных значений? Хотя бы пример приведите, а то пока с таким не сталкивался. Заранее спасибо.
Вот только подскажите как сделать проверку этих ключевых переменных на 0 и запись в них безопасных значений? Хотя бы пример приведите, а то пока с таким не сталкивался. Заранее спасибо.
Вы думаете, что retein переменные объявленные явно, в программе хранятся в каком-то другом месте чем неявно объявленные перемеренные в модуле слейв?
Масло - масляное хранить одни retein переменные в других retein переменных.
Достаточно, сделать хранение уставок в PFW регистрах панели, при включении панели - однократная запись всех в регистры ПЛК и забыть про проблему retein переменных(батарейка) в ПЛК.
Вот Вам инструкция, как реализовать хранение уставок в PWF, копировать ВСЕ из панели в ПЛК при включении питания и копировать по одной при изменении оператором на экране https://owen.ru/forum/showthread.php...l=1#post316048
Спасибо большое разобрался. В вашем примере все очень просто.
Алексей КИПОВЕЦ
Как делаю я в связке Панель-мастер\ПЛК-слейв:Цитата:
Вот только подскажите как сделать проверку этих ключевых переменных на 0 и запись в них безопасных значений? Хотя бы пример приведите, а то пока с таким не сталкивался.
1. Все переменные, объявленные в соответствующем порту ПЛК-слейв по умолчанию являются ретайн.
2. При перепрошивке\сбросе ПЛК они теряются, т. е. сбрасываются в нули (но остаются при выключении\включении ПЛК).
3. Для того, что бы избежать запуска установки\машины с неправильными (нулевыми) уставками\параметрами делаю проверку следующим образом:
В ПЛЦ_ПРГ:
---Код:var
init:bool; (*Флаг первичной инициализации, при включении ПЛК он всегда FALSE. Обычная BOOL-переменная*)
end_var
-------Код:(*В самом начале ПЛЦ_ПРГ*)
IF NOT init THEN (*Если init не TRUE, то делаем далее*)
FirstInit(); (*Вызов программы первичной проверки и инициализации*)
init:=TRUE; (*Присваиваем TRUE, что бы больше не было вызова FirstInit до следующего перевключения\перезагрузки ПЛК*)
END_IF;
IF RecoveryFlag THEN (*Переменная BOOL GLOBAL*)
==Делаем вызов всплывающего окна с предупреждением о сбросе значений переменных к значениям по умолчанию==
==Сбрасываем RecoveryFlag в FALSE по подтверждению и закрытию окна==
END_IF;
Создаем ПОУ FirstInit на ST
В секции VAR переменные не нужны, т. к. все используемые переменные, объявленные в соответствующем порту ПЛК-слейв по умолчанию являются так же и GLOBAL
----
-------Код:PROGRAMM FirstInit
(*Тело программы*)
IF Var1=0 AND Var2=0 AND Var3=0 THEN (*Var1..Var3 - переменные, объявленные в соответствующем порту ПЛК-слейв, которые по
логике работы установки по определению НЕ могут иметь нулевое значение. Обычно нескольких переменных достаточно,
что бы понять, что произошел сброс в нули всех переменных в регистрах ПЛК-слейв*)
Var1:=*некое безопасное значение 1*;
Var2:=*некое безопасное значение 2*;
.
.
VarN:=*некое безопасное значение N*;
RecoveryFlag:=TRUE; (*Флаг факта сброса значений переменных в значения по умолчанию.
Можно использовать для вызова всплывающего окна на Панели с предупреждением и
квитированием(закрытие окна и сброс флага*)
END_IF;
Преимущества данного способа:
1. Все сохраняемые переменные находятся в одном месте, что удобно при отладке на реальной установке.
2. При потере связи с Панелью ПЛК работает со значениями переменных, оставшихся в регистрах на момент потери связи.
3. Функции Панели сокращаются только до отображения и изменения переменных, т. к. всю математику (масштабирование и пр) можно делать в ПЛК.
---
Не претендую на идеологическую правильнось и кошерность, просто делюсь опытом, который применял на практике.