Не не не. Тут Retain, скорее всего, не причем.
Не раз уже писалось - повторюсь.
Когда контроллер Slave а панель Master, а я подозреваю ИП320, есть нюанс.
Работа с областью ввода\вывода начинается раньше, чем выполнение программы, и, соответственно считывания программой Retain.
В это время панель начав обмен видя отличные значения записывает в контроллер значения переменных при включении. А они... правильно - 0.
Случается не всегда и не со всеми переменными - сколько успела панель записать - столько и успела.
Как лечится.
Добавляется модуль Statistica. В ней опрашивается переменная Power.
В начале программы (в самом самом верху):
if R_TRIG(power) then
Присваиваем переменным, которые созданы для обмена с панелью, значения промежуточных, специально для этого созданных Retain переменных.
a:=a_prom;
...
end_if;
ВАША ПРОГРАММА
if F_TRIG(power) then
Присваиваем промежуточным переменным значения наших переменных на момент снятия с ПЛК питания...
a_prom:=a;
end_if;
Лечится 100% - сам проверял на паре объектов.
Спасибо за информацию очень информативно
Но все совсем не так .
Панель СП270 стоит не мастером (в мастере постоянно выводилась табличка про потерю связи), поетому переменные опрашивать не может (если я правильно понимаю).
Модуль статистики тоже стоит но показывает нереальные числа а пропадание питания вобще не видит. Ну да ладно, это не важно.
А про Retain есть мысль одна, не знаю на сколько правильная, Дело в том что установку никто никогда не выключает и, возможно, учитивая полный заряд аккумулятора, контроллер не успевал начать сохранение переменных при выключении питания на 15-25 минут??? А в оперативке информация за это время мола и пропасть??? Хотелось бы знать ваше мнение про эту теорию
Да кстати, если я правильно понял ваш пример, то при работе с ИП320 нужно было бы создавать два набора энергонезависимых переменных?
Если так то мне бы этот вариант и не подошел переменные уже занимают 86% енергонезависимой памяти
1.Набор переменных для Retain - один. Как раз для промежуточных переменных.
К тому же есть пара обсуждений как уменьшить трафик за счет создания массивов в ПЛК, и записи значений в переменные обмена с панелью в зависимости от номера экрана панели.
А закончилось у Вас 4КБ или 16 Retain памяти?
2. Не появление таблички потеря связи ведет к невозможности опроса. А отсутствие ответа на запросы хотя бы по одному из расположенных на действующем экране элементов... То есть, скорее всего, в настройке обмена. (ИП320 или СП270 в данном случае без разницы). Так что рекомендую, если это конечно возможно вернуться в режим Панель - мастер. Это и трафик экономит (опрашиваются\записываются только параметры, используемые на действующем окне.
Про работу на аккумуляторе.
1.Ну во первых контроллер 25 минут на аккумуляторе вряд ли проработает.
2. Ваше предположение на 90% может быть вероятным. И его легко проверить. Так как после пропадания питания программа продолжает выполнятся (пока аккумулятор не сядет) нужно понять: может ли программа присвоить вышеобсуждаемой переменной значение 0. Если не может - не оно...
4 КВ, наверно, настройки не менял
А появление таблички ведет к невозможно нудным вопросам заказчика2. Не появление таблички потеря связи ведет к невозможности опроса. А отсутствие ответа на запросы хотя бы по одному из расположенных на действующем экране элементов... То есть, скорее всего, в настройке обмена. (ИП320 или СП270 в данном случае без разницы). Так что рекомендую, если это конечно возможно вернуться в режим Панель - мастер. Это и трафик экономит (опрашиваются\записываются только параметры, используемые на действующем окне.
На самом деле тормозит модуль МВУ8+МР1, что только не делали и скорость ему меняли, и кабели разные в него тыкали а он .... ошибка 81 .... по этому панель в мастер низя, тем более что прогу переписывать надо под мастера а ехать то заливать далеко да и влом
теоретически, прграмма может присвоить значение 0 только в следующих случаях:Про работу на аккумуляторе.
1.Ну во первых контроллер 25 минут на аккумуляторе вряд ли проработает.
2. Ваше предположение на 90% может быть вероятным. И его легко проверить. Так как после пропадания питания программа продолжает выполнятся (пока аккумулятор не сядет) нужно понять: может ли программа присвоить вышеобсуждаемой переменной значение 0. Если не может - не оно..
1 - если внутренняя переменная контроллера, которая осталась от наладки и не используется вобще (не энергонезависимая) станет =1
2 - если бит из панели будет =1, + 3 бита из модуля ввода (МВ110-16 или где-то так) будут = 1, и если все это произойдет не во время процесса.
думаю 1-й вариант вероятнее
А про проверить теорию - не так уж и легко.
Ехать мне туда 2 дня ну и назад столько же, а на месте некому.
Но после первого выключения 15 минут точно держал (после включения сохранилось состояние выходов), 25 уже вроде нет, подключение через Ethernet выбивало секунд через 30 и повторно не конектилось поэтому не скажу.
Уважаемый Николаев Андрей, не могли бы Вы ответить по поводу моих размышлений
извините что отвлекаю, но на выходных опять был прициденттеоретически, прграмма может присвоить значение 0 только в следующих случаях:
1 - если внутренняя переменная контроллера, которая осталась от наладки и не используется вобще (не энергонезависимая) станет =1
2 - если бит из панели будет =1, + 3 бита из модуля ввода (МВ110-16 или где-то так) будут = 1, и если все это произойдет не во время процесса.
Честно? Не знаю. Склоняюсь к неточности в программе... если бы аккумулятор сдох, или память - сбрасывались бы все переменные, а не 1-2.
Надо проверять все постепенно.
Завести пустой проект, в нем Retain и погонять на вопрос сохранения переменных. Если все ок - смотрим программу (без сетевого обмена с панелью и модулями, просто задав переменным, отвечающим за обмен какие то значения).
На Ваш вопрос ответить не могу, так как не знаю особенностей Вашей программы.
В связи с не постоянностью ошибки проверить путем прогонки несколько затруднительно
Программа не очень большая, но одна программа Вам мало что скажет, потому как есть еще прога для панели, где сохраняется часть переменных . Но во вложении часть кода, которая отвечает за сохранение Retain-массива + блок работы с массивом. В коментах к переменным я попробовал более-менее подробно описать их функции, но если что - задавайте
Буду очень признателен за любые, даже невероятные, предположения
Например диверсия (видят то только последствия), но проверить не помешает.
Уважаемый Николаев Андрей, удалось установить фактор, который влияет на сохраненные в энергонезависимой памяти переменные.
Кроме проблемы с стиранием данных, есть еще проблема зависания панели СП270 (про это я писал в отдельной теме и мне посоветовали полностью переконфигурировать панель). Так вот, при зависании панели оператор просто выключает рубильник и сразу включает. При этом процесс не останавливается, но после его завершения запущенная программа стирается полностью или частично.
Вы уже писали про проблему с ИП320, когда она является мастером, но у меня СП270 и режим СЛЕЙВ. Программный код я выкладывал в предыдущем посте, может там действительно есть ошибка?
Подскажите, как избавится от данной проблемы и почему контроллер записывает нули в память?