Случайно выводятся, но только когда не запущена программа
для того чтоб эти же переменные ввести или проверить
PS На протяжении недели збоев не наблюдалось, надеюсь так будет и дальше:rolleyes:
Вид для печати
Не не не. Тут 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% - сам проверял на паре объектов.
Спасибо за информацию очень информативно :)
Но все совсем не так :o .
Панель СП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-й вариант вероятнее :rolleyes:
А про проверить теорию - не так уж и легко.
Ехать мне туда 2 дня:) ну и назад столько же, а на месте некому.
Но после первого выключения 15 минут точно держал (после включения сохранилось состояние выходов), 25 уже вроде нет, подключение через Ethernet выбивало секунд через 30 и повторно не конектилось поэтому не скажу.
Уважаемый Николаев Андрей, не могли бы Вы ответить по поводу моих размышлений
извините что отвлекаю, но на выходных опять был прицидент:)Цитата:
теоретически, прграмма может присвоить значение 0 только в следующих случаях:
1 - если внутренняя переменная контроллера, которая осталась от наладки и не используется вобще (не энергонезависимая) станет =1
2 - если бит из панели будет =1, + 3 бита из модуля ввода (МВ110-16 или где-то так) будут = 1, и если все это произойдет не во время процесса.
Честно? Не знаю. Склоняюсь к неточности в программе... если бы аккумулятор сдох, или память - сбрасывались бы все переменные, а не 1-2.
Надо проверять все постепенно.
Завести пустой проект, в нем Retain и погонять на вопрос сохранения переменных. Если все ок - смотрим программу (без сетевого обмена с панелью и модулями, просто задав переменным, отвечающим за обмен какие то значения).
На Ваш вопрос ответить не могу, так как не знаю особенностей Вашей программы.
В связи с не постоянностью ошибки проверить путем прогонки несколько затруднительно:(
Программа не очень большая, но одна программа Вам мало что скажет, потому как есть еще прога для панели, где сохраняется часть переменных:p . Но во вложении часть кода, которая отвечает за сохранение Retain-массива + блок работы с массивом. В коментах к переменным я попробовал более-менее подробно описать их функции, но если что - задавайте :confused:
Буду очень признателен за любые, даже невероятные, предположения:cool:
Например диверсия:D (видят то только последствия), но проверить не помешает.
Уважаемый Николаев Андрей, удалось установить фактор, который влияет на сохраненные в энергонезависимой памяти переменные.:)
Кроме проблемы с стиранием данных, есть еще проблема зависания панели СП270 (про это я писал в отдельной теме и мне посоветовали полностью переконфигурировать панель). Так вот, при зависании панели оператор просто выключает рубильник и сразу включает. При этом процесс не останавливается, но после его завершения запущенная программа стирается полностью или частично.
Вы уже писали про проблему с ИП320, когда она является мастером, но у меня СП270 и режим СЛЕЙВ. Программный код я выкладывал в предыдущем посте, может там действительно есть ошибка?
Подскажите, как избавится от данной проблемы и почему контроллер записывает нули в память?