PDA

Просмотр полной версии : ИП320, ПЛК160, технологические уставки



kholonkin
02.11.2011, 08:42
Здравствуйте!
Смотрел примеры работы ИП320 с ПЛК и не смог понять принципа работы с переменными, которые хранятся в энергонезависимой памяти ПЛК.
Т.е. в процессе работы все записывается и меняется.
А вот при старте программы эти переменные затираются нулями.

В дух словах на пальцах пожалуйста кто может объясните изюминку.

Александр Приходько
02.11.2011, 10:42
Прежде чем вникать как, нужно понимать - почему?

1) У ИП320 нет! энергонезависимой памяти.
2) ИП320 не имеет возможности при старте считать изначальные данные.

Поэтому при отключении питания на панели данные все обнуляются и когда на ПЛК подается питание в него пишутся одни нолики.

Для предотвращения потери данных вводится специальный алгоритм, который позволяет предотвратить потерю данных.

Например, есть список переменных, которые нужно сделать энегронезависимыми. Делаем дублирование этих переменных, объявляем их как Retain.
Например так:



VAR
x:real;
y:bool;
z:word;
END_VAR

VAR RETAIN
ret_x:real;
ret_y:bool;
ret_z:word;
END_VAR


Префикс "ret_" может быть любым, это нужно только для того, чтобы не путать простые переменные и энегонезависимые.

Теперь нужно как-то организовать работу с этими переменными.

Если кратко, то смысл работы таков:

В энергонезависимых переменных должны быть записаны значения (из обычных) переменных в момент отключения питания. Когда питание отсутствует, программу не выполняем.
Как только питание подается на ПЛК и он начинает работу, взводим таймер, примерно на 10 секунд.
Это ну случай если панель включится позже и чтоб данные однозначно пришли в панель.
Далее в течении работы таймера данные из энергонезависимой памяти пишутся в обычные переменные, которые отвечают за работу по интерфейсу. Как только таймер закончит работу, даем добро на работу основного алгоритма программы.

В момент отключения питания данные из обычных переменных заносятся в Retain и включается запрет на выполнение основного цикла программы.


Момент включения\отключения питания можно отловить по переменной Power, которую можно объявить в конфигурации ПЛК, объявив модуль Статистика (Statistik).

Для определения момента включения и отключения питания можно использовать триггеры R_TRIG и F_TRIG.

Ельцов Андрей
02.11.2011, 10:58
Я делаю по другому.
Я предусматриваю в программе ИП320 кнопку "применить". И тогда в ПЛК новые значения заносятся только после подтверждения.
На мой взгляд, так удобнее.

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

При условии что оператор добросовестный и не забывает нажимать кнопку применить.
В том варианте, что описан выше реализация более сложная, но зато нет лишних кнопок, что в дальнейшем упрощает работу оператора.

capzap
02.11.2011, 11:39
"Вы еще подеритесь, горячие ОВЕНовские парни" :)

Леонид
06.11.2011, 00:21
Прежде чем вникать как, нужно понимать - почему?

1) У ИП320 нет! энергонезависимой памяти.
2) ИП320 не имеет возможности при старте считать изначальные данные.

Поэтому при отключении питания на панели данные все обнуляются и когда на ПЛК подается питание в него пишутся одни нолики.
.

Несколько раз выключал и включал панель при включенном плк 100, затем наоборот, при этом уставки в ModBus Slave не сбрасывались.
Как можно спровацировать такую ситуацию?
Зачем панель что то записывает в плк при включении, если ее задача все время читать, а записывать лишь в режиме редактирования после нажатия "ENT"?

capzap
06.11.2011, 00:30
Несколько раз выключал и включал панель при включенном плк 100, затем наоборот, при этом уставки в ModBus Slave не сбрасывались.
Как можно спровацировать такую ситуацию?
Зачем панель что то записывает в плк при включении, если ее задача все время читать, а записывать лишь в режиме редактирования после нажатия "ENT"?

На сколько я понял, речь шла о том, что после включения питания Панель как мастер затирает нулями переменные слейва в которые производится запись, а не чтение.

Леонид
06.11.2011, 00:54
На сколько я понял, речь шла о том, что после включения питания Панель как мастер затирает нулями переменные слейва в которые производится запись, а не чтение.

А что в конфигурации ModBus Slave эти переменные разные?

capzap
06.11.2011, 02:23
в конфигурации ПЛК они как раз останутся после подачи питания, такими же как были до отключения, а панель производящая запись в них без какого нибудь подтверждения перепишет их в ноль, так как по включению все регистры в панели будут равны нулю

Николаев Андрей
06.11.2011, 11:04
1.Панель включается быстрее ПЛК.
2. ПЛК загружается сам, начинается сетевой обмен (работа с областью входов\выходов), и уже после этого выполняется программа, которая и запишет значение переменных из Retain или из области памяти входов.

Вот в момент, пока ПЛК не начал выполнять программу - панель увидела нули, и записала нули в область входов. Она ведь не только записывает по Ent но и постоянно опрашивает указанные регистры.

capzap
06.11.2011, 11:39
не смог понять принципа работы с переменными, которые хранятся в энергонезависимой памяти ПЛК.
Т.е. в процессе работы все записывается и меняется.
А вот при старте программы эти переменные затираются нулями.

Если вернутся к первоначальному вопросу, речь шла о ПЛК. Так что единственным разумным объяснением на вопрос остается
Панель включается быстрее ПЛК

lara197a
06.11.2011, 12:38
панель не увидит нули, т.к. нет обмена с ПЛК. Вывалится предупреждение об отсутствии связи. Во избежании этого нужно запитывать панель через выход ПЛК.
К примеру.
TON_Panel(IN:=TRUE , PT:=T#1s , Q=>OUT1 , ET=> );

Николаев Андрей
06.11.2011, 13:37
Во избежании этого нужно запитывать панель через выход ПЛК.
К примеру.
TON_Panel(IN:=TRUE , PT:=T#1s , Q=>OUT1 , ET=> );

Круто, об этом мы как то не подумали...
Очередной респект Lara197a...

Леонид
06.11.2011, 14:46
Вот в момент, пока ПЛК не начал выполнять программу - панель увидела нули, и записала нули в область входов. Она ведь не только записывает по Ent но и постоянно опрашивает указанные регистры.

И что после этого опроса она их сравнивает со своими и переписывает если они не равны?
Почему панель самостоятельно подает команду на запись?

В ситуации при одновременном включении плк и панели еще не получалось такой ситуации, может потому что панели которая у меня уже 4 года и она чемто отличается от нынешних?

Николаев Андрей
06.11.2011, 17:34
Нет - это дело случая. Если панель начала раньше к ПЛК обращаться - нули можно ждать. Если панель не обращается, пока цикл не начался - все будет хорошо.
Лично я из принципа завожу еще один набор переменных в Retain. Смотрю модуль power. Если питание пропало - записываю переменные в временные.
Если питание появилось (если программа поняла, что питание появилось - цикл начался) - записываю из промежуточных в основные.
Таким образом вопрос снял на 100%

Ельцов Андрей
06.11.2011, 19:39
Не понимаю, откуда такая уверенность, что панель пишет что-то в ПЛК. Кто-нибудь это видел? Кто-нибудь лог записи данных в ПЛК может продемонстрировать?
За все время ни разу не встречал, чтобы панель самопроизвольно, без команды, записывала данные в ПЛК (если не делать соответствующих настроек).

Леонид
06.11.2011, 19:57
Не понимаю, откуда такая уверенность, что панель пишет что-то в ПЛК. Кто-нибудь это видел? Кто-нибудь лог записи данных в ПЛК может продемонстрировать?
За все время ни разу не встречал, чтобы панель самопроизвольно, без команды, записывала данные в ПЛК (если не делать соответствующих настроек).

Вот и я об этом спрашивал!
А о каких дополнительных настройках идет речь?

kholonkin
11.11.2011, 10:39
Во дискуссию то справоцировал:D
Через букву не я один читаю оказывается.

В общем у меня панель слэйв, ПЛК мастер.
Еще бОлее внимательнее ознакомился с примером.
Санта-Барбара, не меньше:)
В общем разграничиваем два режим работы, это старт и сама работа непосредственно.
Так как в панели используются регистры, то на них можно несколько переменных в кодесисе вешать.(не думаю что открыл Америку для присутствующих) Вот одна переменная регистр - запись, другая регистр-чтение. Та что чтение, пишем в регистр значение при старте, то что было в энергонезависимой памяти ПЛК. А то что запись уже используем в процессе работы.
ВОт как то так. Описал как смог своими словами. В общем пока фурычит.

Спасибо за внимание.

Ельцов Андрей
11.11.2011, 20:52
От себя добавлю.
В ПЛК четкая последовательность запуска программы:1.определение переменных, 2. определение переменных plc-configuration, 3. запуск самой программы. 4. опрос plc-configuration. (3 и 4-й могут быть по другому, но по-моему так)
Т.е. получается так: что переменные из ПЛК-конфигурации (устал на английскую раскладку переключаться, пунто свитчер замучал :)) определяются после определения самой программы (глобал, ретейн и т.п.), а т.к. опрос еще не начался, то они, естественно, равны 0.

Надеюсь понятно мысль изложил.

kholonkin
24.11.2011, 22:20
В общем пока тут работу работал, осваивая бескрайние просторы возможностей техники овен, ситуация вышла, питание с панели пропало в процессе работы проекта, с ПЛК питание не пропадало. Подаю питание на панель вновь и все уставки какие были прописаны нулями становятся. Хорошо что на столе в лаборатории, а вот если на объекте работающем такое произойдет? Что делать? Как предотвратить?

capzap
24.11.2011, 22:29
вариантов масса от установки ИБП, сделать ПЛК мастером и т.д.

kholonkin
24.11.2011, 23:07
вариантов масса от установки ИБП, сделать ПЛК мастером и т.д.
Ну ИБП не вариант. Ибо пропасть теоретически может в каком угодно месте. У меня и так ПЛК мастер.
Ситуация честно говоря напрягает, обнуление уставок так то серъезное весьма событие.
Можно конечно же сигнализировать такие состояния, но это больше похоже на лечение симптомов, а не причины.
Смотрел код примера, когда панель мастер, (честно не проверил, не успел), и там так же кажись уставки затруться. Не айс как то это все:(

capzap
24.11.2011, 23:28
вот именно, что дело серьезное, поэтому и относится надо серьезно. Уставки должны идти с ПЛК для отображения на экране, а оператор либо должен заводить их через дополнительный регистр, который ПЛК читает и сравнивает со значением за предыдущий цикл и если есть изменение, переписать уставку. А можно использовать два бита, ведь оператор добавляет приращение к уже отображаемой уставке, поэтому достаточно двух кнопок + и -, по прочтенным битам ПЛК изменит значение уставки на соответствующее приращение и обнулит эти биты, для того чтоб оператор продолжил изменять уставку

kholonkin
24.11.2011, 23:51
Как то через слово понятно и то не все, ибо только начал разбираться.
То что уставки для отображения передавать ПЛК на панель, не вопрос, так и делаем.
Их еще было бы не плохо как то с панели менять при необходимости. И тут мы ПЛК опрашиваем в панели регистры, которые редактируются.
И тут вот скользкое место выходит.
Системе получается все равно, от чего изменилась уставка, опреатор ее там покрутил как то, либо питание панели пропало потом появилось и регистр обнулился...... Я так понимаю, возможности отследить, от чего происходит изменения нет, с кнопок там редактируют либо оно самостоятельно как то изменилось. Возможно я чего не догоняю.....
Как вариант, завтра нужно его будет покурить, отслеживать изменение уставки, задать допустимый диапазон в ПЛК, если изменение вне диапазона, либо равно нулю, вернуть старое значение....., только вот как быть если 0 например в допустимом диапазоне....

capzap
25.11.2011, 07:45
К примеру, SP- уставка, PV-текущее значение измеряемого объекта, на панели после пропадания питания Вы, как я понял, наблюдаете SP обнулилось, а PV тоже что ли обнулилось? Раз о других значениях неговорите, значит нет. Так вот и должны в конфигураторе ПЛК уставку передавать в режиме записи, а не чтения, все переменные в модбас-устройствах хранят свои значения, так же как и retain. В этом случае после появления связи с панелью, регистры панели обновятся, как PV, так и SP.
Проще простого отследить что с панелью что то не так, когда ПЛК в роли мастера, переменные последнее устройство и ошибка, для этого и предназначениы. Создайте условие в котором, если нет ошибки идет нармальная работа с уставками, если есть ошибка, значит работа идет с уставкой, которая была до потери связи
Отслеживать изменение уставки, тут вроде тоже проблем нет. Если оператор делает изменение уставки, он подтверждает кнопкой ENT или любой другой по усмотрению программиста, в ПЛК эту кнопку можно обрабатывать и принимать решение о корректном изменении уставки

kholonkin
25.11.2011, 11:01
Уставки не привязаны к измеряемым величинам. Это переменные ритэйн, их несколько, необходимые для расчетов уставок, и параметров работы.
Сейчас опробовал отслеживание нулевого значения. Если вдруг ноль, значит не присваиваем значения новые. Единственное что после снятия подачи питания панели, поля ввода уставок обнуляются, но сами уставки в ПЛК не портятся. Возможно так и оставлю.