PDA

Просмотр полной версии : Проблемы после замены контроллера



mike_if
28.04.2011, 21:18
Есть контроллер ПЛК 154, на котором собрана установка.

В процессе эксплуатации (6 месяцев) сгорел аналоговый выход.

После замены на новый контроллер вылезли следующие ошибки:

1. Не стабильно работает PD- регулятор из библиотеки UTIL.lib (выходные значения рассчитываются не правильно) но не всегда!!!

2. Значения Retain переменных иногда сами обнуляются.

На контроллере прошивка 2.10.5 таргет соответствует (до замены прошивка была такая же).

Вопросы

1 -На что нужно обратить внимание в данной ситуации???

2 - Как дата изготовления контроллера может влиять на библиотечные функции???

Николаев Андрей
29.04.2011, 00:58
1. На работу Util.lb версия контроллера и дата выпуска не влияют. Не должны, мне о таких фактах не известно.
2. Что значит Retain сами иногда обнуляются??? Они либо не сохраняются, либо сохраняются...

Адрей
29.04.2011, 08:09
Изменение блока переменных Retain всегда желательно делать через кнопку записи.

mike_if
29.04.2011, 10:29
1. На работу Util.lb версия контроллера и дата выпуска не влияют. Не должны, мне о таких фактах не известно.


Тогда какие причины неправильной работы блока PD ?? Он точно без сбоев работал 6 месяцев а после замены контроллера начались проблемы. Может контроллер поменяли не правильно?


2. Что значит Retain сами иногда обнуляются??? Они либо не сохраняются, либо сохраняются...

В Retain сохраняются уставки для процесса сохраняются они один раз а потом вызываются по мере надобности.
Происходит следующее:
процесс могут запускать несколько раз подряд, причем, например, первые два раза все значения правильные, а на третий раз значения=0 (но не все а только некоторые).


Сообщение от Адрей
Изменение блока переменных Retain всегда желательно делать через кнопку записи.

Если имеется ввиду что переменные должны изменятся по нажатию кнопки то так и есть, причем кроме кнопки нужно еще ключ повернуть в замке, но тогда процесс остановится, а переменные пропадают прямо во время процесса.

Николаев Андрей
29.04.2011, 13:05
Тогда какие причины неправильной работы блока PD ?? Он точно без сбоев работал 6 месяцев а после замены контроллера начались проблемы. Может контроллер поменяли не правильно?

Нельзя контроллер поменять не правильно. ЛЮБОЙ, любой контроллер, поддерживающий Util.lib будет обрабатывать блок одинаково. Смотрите программу. К стати, после перевода на новый контроллер команду "Перекомпилировать все" сделали?



В Retain сохраняются уставки для процесса сохраняются они один раз а потом вызываются по мере надобности.
Происходит следующее:
процесс могут запускать несколько раз подряд, причем, например, первые два раза все значения правильные, а на третий раз значения=0 (но не все а только некоторые).

Не понимать или моя Вас или Вы меня.
Retain не сохраняется "когда Вам надо", Retain сохраняется только при пропадании питания. И сохраняется то значение, которое Retain переменная в этот момент имела. Все. Проверяется просто. Берете ПЛК. заводите переменную Retain. Присваиваете ей какое то значение. Выключаете ПЛК (если это ПЛК1ХХ, то выключаете на 5-7 минут, чтобы аккумулятор успел разрядится, и произошла запись). Включаете - проверяете. Если переменная не сохранилась - значит проблемы с Retain.




Если имеется ввиду что переменные должны изменятся по нажатию кнопки то так и есть, причем кроме кнопки нужно еще ключ повернуть в замке, но тогда процесс остановится, а переменные пропадают прямо во время процесса.
Тут честно говоря вообще не понял о чем речь...

mike_if
29.04.2011, 19:48
Нельзя контроллер поменять не правильно. ЛЮБОЙ, любой контроллер, поддерживающий Util.lib будет обрабатывать блок одинаково. Смотрите программу. К стати, после перевода на новый контроллер команду "Перекомпилировать все" сделали?


При замене контроллера сделали:
1 - прошили контроллер на версию которая была в предыдущем контроллере
2 - Перекомпилировали ВСЕ
3 - Залили в контроллер

Был ПЛК154 - 220.У-М новый тоже ПЛК154 - 220.У-М, отличия заметили на аналоговых выходах на старом стояли детали похожие на диоды (они и почернели) а на новом вроде как транзисторы, хотя в схемотехнику сильно не вникал просто в глаза бросилось:)


Не понимать или моя Вас или Вы меня.
Retain не сохраняется "когда Вам надо", Retain сохраняется только при пропадании питания. И сохраняется то значение, которое Retain переменная в этот момент имела. Все...

Как проверял я:
1 - записал переменные в массив Retain
2 - выключил питание на 20 минут (батарейка новая была:D )
3 - включил питание и проверил переменные- все как надо
4 - запустили процес - все ОК
5 - после 3-х нормальных запусков процесс неожидано завершился посреди 4-го
6 - проверил переменные - значения НЕКОТОРЫХ =0??
7 - ввел по новому
8 - работало 3 дня, на 4-й опять =0, (но уже другие переменные)

P.S. На записи в массив стоит проверка значения переменных - если 0 то значение не меняется, кроме того чтоб что-нибудь записать нужен ключ (кнопка с ключом)+нажать подтверждение записи на панели оператора.


Тут честно говоря вообще не понял о чем речь...

Сам не совсем понял но думаю что ответил в предыдущем вопросе:)

Адрей
29.04.2011, 21:22
Интересно из-за чего сгорел выход.

Николаев Андрей
29.04.2011, 23:29
Mike. Нужны подробности, описание проекта и, по возможности сам проект. Не совсем понятно про запуски и не корректное завершение...
Ну и опять же - сложно в формате форума решать такие вопросы. У нас есть специальный ящик plc@owen.ru

mike_if
05.05.2011, 11:46
Прошу простить за молчание, работа:o

По порядку:


Сообщение от Адрей
Интересно из-за чего сгорел выход.

К аналоговому выходу был подключен вход регестратора (термопринтер) а почему сгорел ХЗ? Кстати уже во второй раз:o


Сообщение Николаев Андрей
Mike. Нужны подробности, описание проекта и, по возможности сам проект. Не совсем понятно про запуски и не корректное завершение...
Ну и опять же - сложно в формате форума решать такие вопросы. У нас есть специальный ящик plc@owen.ru

Про запуск и завершение:

Запуск осуществляется кнопкой старт.Процес разделен на шаги, каждый шаг имеет 3 параметра, которые берутся из массива Retain. Если один из параметров массива = 0, то считается что программа выполнена!! Это я про не корректное заваршение!!

Программу, могу выложить, но не думаю что проблемы с ней, все таки 6 месяцев работала:D

A PD- регулятор ручками переписали, сейчас все работает!!

Николаев Андрей
05.05.2011, 14:47
Случайно эти переменные на панель не выводятся?

mike_if
05.05.2011, 15:23
Случайно эти переменные на панель не выводятся?

Случайно выводятся, но только когда не запущена программа
для того чтоб эти же переменные ввести или проверить

PS На протяжении недели збоев не наблюдалось, надеюсь так будет и дальше:rolleyes:

Николаев Андрей
05.05.2011, 21:44
Не не не. Тут 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% - сам проверял на паре объектов.

mike_if
06.05.2011, 14:24
Спасибо за информацию очень информативно :)

Но все совсем не так :o .

Панель СП270 стоит не мастером (в мастере постоянно выводилась табличка про потерю связи), поетому переменные опрашивать не может (если я правильно понимаю).

Модуль статистики тоже стоит но показывает нереальные числа а пропадание питания вобще не видит. Ну да ладно, это не важно.

А про Retain есть мысль одна, не знаю на сколько правильная, Дело в том что установку никто никогда не выключает и, возможно, учитивая полный заряд аккумулятора, контроллер не успевал начать сохранение переменных при выключении питания на 15-25 минут??? А в оперативке информация за это время мола и пропасть??? Хотелось бы знать ваше мнение про эту теорию:)

mike_if
06.05.2011, 14:31
Да кстати, если я правильно понял ваш пример, то при работе с ИП320 нужно было бы создавать два набора энергонезависимых переменных?

Если так то мне бы этот вариант и не подошел переменные уже занимают 86% енергонезависимой памяти:)

Николаев Андрей
06.05.2011, 17:58
1.Набор переменных для Retain - один. Как раз для промежуточных переменных.
К тому же есть пара обсуждений как уменьшить трафик за счет создания массивов в ПЛК, и записи значений в переменные обмена с панелью в зависимости от номера экрана панели.
А закончилось у Вас 4КБ или 16 Retain памяти?
2. Не появление таблички потеря связи ведет к невозможности опроса. А отсутствие ответа на запросы хотя бы по одному из расположенных на действующем экране элементов... То есть, скорее всего, в настройке обмена. (ИП320 или СП270 в данном случае без разницы). Так что рекомендую, если это конечно возможно вернуться в режим Панель - мастер. Это и трафик экономит (опрашиваются\записываются только параметры, используемые на действующем окне.

Про работу на аккумуляторе.
1.Ну во первых контроллер 25 минут на аккумуляторе вряд ли проработает.
2. Ваше предположение на 90% может быть вероятным. И его легко проверить. Так как после пропадания питания программа продолжает выполнятся (пока аккумулятор не сядет) нужно понять: может ли программа присвоить вышеобсуждаемой переменной значение 0. Если не может - не оно...

mike_if
06.05.2011, 19:29
1.
А закончилось у Вас 4КБ или 16 Retain памяти?


4 КВ, наверно, настройки не менял



2. Не появление таблички потеря связи ведет к невозможности опроса. А отсутствие ответа на запросы хотя бы по одному из расположенных на действующем экране элементов... То есть, скорее всего, в настройке обмена. (ИП320 или СП270 в данном случае без разницы). Так что рекомендую, если это конечно возможно вернуться в режим Панель - мастер. Это и трафик экономит (опрашиваются\записываются только параметры, используемые на действующем окне.


А появление таблички ведет к невозможно нудным вопросам заказчика:)

На самом деле тормозит модуль МВУ8+МР1, что только не делали и скорость ему меняли, и кабели разные в него тыкали а он .... ошибка 81 ....:) по этому панель в мастер низя, тем более что прогу переписывать надо под мастера а ехать то заливать далеко да и влом:)



Про работу на аккумуляторе.
1.Ну во первых контроллер 25 минут на аккумуляторе вряд ли проработает.
2. Ваше предположение на 90% может быть вероятным. И его легко проверить. Так как после пропадания питания программа продолжает выполнятся (пока аккумулятор не сядет) нужно понять: может ли программа присвоить вышеобсуждаемой переменной значение 0. Если не может - не оно..

теоретически, прграмма может присвоить значение 0 только в следующих случаях:

1 - если внутренняя переменная контроллера, которая осталась от наладки и не используется вобще (не энергонезависимая) станет =1

2 - если бит из панели будет =1, + 3 бита из модуля ввода (МВ110-16 или где-то так) будут = 1, и если все это произойдет не во время процесса.

думаю 1-й вариант вероятнее :rolleyes:


А про проверить теорию - не так уж и легко.
Ехать мне туда 2 дня:) ну и назад столько же, а на месте некому.
Но после первого выключения 15 минут точно держал (после включения сохранилось состояние выходов), 25 уже вроде нет, подключение через Ethernet выбивало секунд через 30 и повторно не конектилось поэтому не скажу.

mike_if
18.05.2011, 18:54
Уважаемый Николаев Андрей, не могли бы Вы ответить по поводу моих размышлений


теоретически, прграмма может присвоить значение 0 только в следующих случаях:

1 - если внутренняя переменная контроллера, которая осталась от наладки и не используется вобще (не энергонезависимая) станет =1

2 - если бит из панели будет =1, + 3 бита из модуля ввода (МВ110-16 или где-то так) будут = 1, и если все это произойдет не во время процесса.

извините что отвлекаю, но на выходных опять был прицидент:)

Николаев Андрей
18.05.2011, 19:35
Честно? Не знаю. Склоняюсь к неточности в программе... если бы аккумулятор сдох, или память - сбрасывались бы все переменные, а не 1-2.
Надо проверять все постепенно.
Завести пустой проект, в нем Retain и погонять на вопрос сохранения переменных. Если все ок - смотрим программу (без сетевого обмена с панелью и модулями, просто задав переменным, отвечающим за обмен какие то значения).
На Ваш вопрос ответить не могу, так как не знаю особенностей Вашей программы.

mike_if
23.05.2011, 17:08
Честно? Не знаю. Склоняюсь к неточности в программе... если бы аккумулятор сдох, или память - сбрасывались бы все переменные, а не 1-2.
Надо проверять все постепенно.
Завести пустой проект, в нем Retain и погонять на вопрос сохранения переменных. Если все ок - смотрим программу (без сетевого обмена с панелью и модулями, просто задав переменным, отвечающим за обмен какие то значения).
На Ваш вопрос ответить не могу, так как не знаю особенностей Вашей программы.

В связи с не постоянностью ошибки проверить путем прогонки несколько затруднительно:(
Программа не очень большая, но одна программа Вам мало что скажет, потому как есть еще прога для панели, где сохраняется часть переменных:p . Но во вложении часть кода, которая отвечает за сохранение Retain-массива + блок работы с массивом. В коментах к переменным я попробовал более-менее подробно описать их функции, но если что - задавайте :confused:
Буду очень признателен за любые, даже невероятные, предположения:cool:
Например диверсия:D (видят то только последствия), но проверить не помешает.

mike_if
31.05.2011, 10:45
Уважаемый Николаев Андрей, удалось установить фактор, который влияет на сохраненные в энергонезависимой памяти переменные.:)

Кроме проблемы с стиранием данных, есть еще проблема зависания панели СП270 (про это я писал в отдельной теме и мне посоветовали полностью переконфигурировать панель). Так вот, при зависании панели оператор просто выключает рубильник и сразу включает. При этом процесс не останавливается, но после его завершения запущенная программа стирается полностью или частично.

Вы уже писали про проблему с ИП320, когда она является мастером, но у меня СП270 и режим СЛЕЙВ. Программный код я выкладывал в предыдущем посте, может там действительно есть ошибка?

Подскажите, как избавится от данной проблемы и почему контроллер записывает нули в память?

Александр Приходько
31.05.2011, 11:53
По всей видимости при отключении питания теряются данные в панельке, она отсылает 0-е значения. И вот вам ответ.

Еще раз. ПЛК+панель+отключение питания, это не простой процесс. Тут нужна дополнительная отладка. Уже неоднократно темы на форуме обсуждались. То что панель у вас Slave- это не есть хорошо. Т.к. она управляет процессом- значит должна быть мастером. В СП270 уставки необходимо делать в области PFW. Если это не так, то уставки однозначно будут слетать. Чтоб этого избежать, нужно делать в ПЛК дополнительную защиту. Переменные Retain не должны напрямую использоваться в программе.

На что нужно обратить внимание. Вам нужен модуль статистика. Если он не работает, то крайне велика вероятность, что таргет и прошивка не совпадают! Если это не так, переходите на прошивку 2.14.0 и таргет 2.10.
Далее вам понадобится два тригера R_TRIG и F_TRIG.
Одним ловите пропадание питания, другим подачу питания. Желательно, чтобы 220В подаваемые на ПЛК и на Блок питания панели были с одной фазы и если есть рубильник, то чтоб отключал и включал их одновременно.

Блок R_Trig даст возможность определить подачу питания. Если его выход положителен, то взводите таймер на 10-15 секунд. В течении которых Переменные объявленные как Retain пишете в панель. Это необходино для инициализации панельки! В течении 10-15 вы гарантированно восстанавливаете уставки в панельке, даже если скорость загрузки панельки и ПЛК различна (а она естественно различна).

По блоку F_trig вы должны запретить выполнение программы и произвести запись уставок из сетевых переменных панельки СП270 в Retain.

На самом деле данный алгоритм актуален для ИП320, т.к. она не делает первоначальный опрос данных ПЛК. А СП270 в первую очередь опросит регистры ПЛК, а уже потом в случае изменения данных будет их менять в ПЛК.

Я на своей практике делал много проектов, в которых отключается пиитание и используются Retain. Вам бы посоветовал сделать как описал я, или сделать облать PFW в панельке и из нее копировать регистры в плк функциональной областью. При этом панель мастер.

mike_if
31.05.2011, 16:00
При работе в мастере (уже писал на форуме) панель постоянно выдавала сообщение про потерю связи, что не есть гуд, поскольку заказчику трудновато объяснить появление сообщения про плохую работу системы. Скорость и кабель меняли, сетевые параметры перебрали все, но это отдельная тема:) . В общем не смог я включить панель как мастер:( а как слейв тормоза (секунд 5-8) есть, но в автомате не заметны.

Про панель вроде понял, т.е при включении питания в ее регистрах могут появляться какие-то данные (в моем случае это должны быть логические 1) ?

Но тогда вопрос по связке ПЛК и модулям ввода МХ110, получается что при включении питания контроллер видит 1 и на всех входах?

Модуль статистики установлен, но показывает какие-то нереальные числа по температуре, а на пропадание питания вообще не реагирует:( да и время выполнения всегда =0, может подключаем его не правильно?

Ну есть еще ошибка 81 при опросе модуля МВУ8+МР1 (через раз), отсюда неверно и тормоза при работе с панелью.

Еще один не приятный нюанс ( к теме не очень относится, но хотелось бы для себя узнать) при записи на выхода МХ110 (не битовая маска) значение на каждый выход передается в разные моменты времени? Получается что при подаче сигнала на включение 16 выходов (каждый выход отдельная строка в программе и строки расположены подряд) выхода включаются приблизительно за 2 секунды (частота опроса * к-во выходов). При скорости 115200 так должно быть?

Программа писалась под контроллер с прошивкой 2,10.5, пробовали когда-то прошивать его под 2.10.7 для работы с модемом по CSD, но модемное соединение установить так и не удалось, зато программа начала работать как-то странно (постоянно были сбои в разных местах программы), решили эту проблему перепрошивкой ПЛК назад на версию 2.10.5 (таргет в КДС естественно меняли). такие вот пироги:D

Andy
01.06.2011, 14:53
Переменные Retain не должны напрямую использоваться в программе.

У меня два конфигурационных массива 7*20 целых описаны как Retain (в числе других Retain оперативных параметров). Чем это чревато?

Александр Приходько
01.06.2011, 15:37
А вот тут самое интересное.
1) Про статистику я уже писал! Таргет-прошика!
2) Ошибка в интерфейсе - либо "кривая" настройка обмена, либо схема подключения, либо что-то дает очень сильную помеху! Ошибки быть не должно, ну максимум - крайне редко, одна на 200-500 запросов.
3) То что панель ошибку дает, скорее всего где-то некорректно проект сделан. Скорее всего есть регистр, который панель опрашивать пытается, а в ПЛК его нет!
4) >У меня два конфигурационных массива 7*20 целых описаны как Retain (в числе других Retain оперативных параметров). Чем это чревато?
-ни чем. На практике делал много больше.
5) >Еще один не приятный нюанс ( к теме не очень относится, но хотелось бы для себя узнать) при записи на выхода МХ110 (не битовая маска) значение на каждый выход передается в разные моменты времени? Получается что при подаче сигнала на включение 16 выходов (каждый выход отдельная строка в программе и строки расположены подряд) выхода включаются приблизительно за 2 секунды (частота опроса * к-во выходов). При скорости 115200 так должно быть?

-????? у вас точно не так что-то настроено. В этом случае все выходы пишутся последовательно. Ну пусть на запись одного выхода нужно 50ms, умножаем на 16, получаем 800ms. Секунда.
6) О модемах.
Делал 3 проекта, все разные по сложности, жалоб еще ни с одного объекта не было. Самый первый уже года полтора работает.

Все же мое мнение - дело тут не в плк, а в программе и настройках.

Александр Приходько
01.06.2011, 15:39
Те куски кода, что вы выложили не помогут. Подавайте полный проект ПЛК и панели. Посмотрю.