PDA

Просмотр полной версии : Как запомнить настройки?



Flomaster
03.09.2008, 04:48
Здравствуйте!
Использую ПЛК-150 (master) и панельку ИП320 (slave). Идея такая, что на панели должны задаваться параметры работы системы. Т.е. оператор вводит определенные параметры в ПЛК посредством панели, а уже ПЛК в свою очередь организует работу системы в соответствии с этими параметрами.
Меня интересует ответ на такой вопрос: как правильно можно сохранить в ПЛК введенные оператором настройки, чтобы в случае перебоев с питанием система продолжила работу с теми же параметрами? Причем при возобновлении питания те же настройки должны отображаться на экране панели.
Предполагаю, что надо связать переменные Universal Modbus Device и RETAIN область памяти.

Малышев Олег
03.09.2008, 08:05
Если Вы используете ИП в качестве мастера а ПЛК слейвом то для модбас слейва автоматически создастся retain

Flomaster
03.09.2008, 08:09
А этот retain будет создан на ПЛК?

Малышев Олег
03.09.2008, 08:13
Да - на внутреннем флеш диске ПЛК

Flomaster
03.09.2008, 08:16
Спасибо, буду пробовать.

Gans
03.09.2008, 08:18
На компакт диске есть пример работы там есть пример работы в том числе и с уставками!
Если панель оператора настроена в режиме мастер то уставки введенные с панели оператора (ИП320) сразу сохраняются в энергонезависимую память и ни какого геморроя :-)

Serp
03.09.2008, 08:55
Если Вы используете ИП в качестве мастера а ПЛК слейвом то для модбас слейва автоматически создастся retain

т.е. все переменные в модуле модбас слейв в конфигурации ПЛК являются retain?

Малышев Олег
03.09.2008, 13:30
т.е. все переменные в модуле модбас слейв в конфигурации ПЛК являются retain?

Так точно.

Виктор_Л
15.11.2008, 13:54
А если ПЛК-мастер, тогда как быть?

Логвиненко Андрей
15.11.2008, 14:36
Если ИП slave, то наоборот, большой геморрой.
Для каждого регистра панели для ввода переменных надо сделать три переменных в ПЛК:на чтение. на запись и retain.
В конфигураторе для каждого экрана делается отдельный UMD by command на чтение регистров, UMD by polling time на чтение номера экрана, UMD by command на запись переменных.
Значение, считаное с регистра панели тут-же записывается в retain, из
retain передаётся в переменную для записи, возникает вопрос, когда писать в панель? Я поступил следуюшим способом:
Переход на экраны записи значений закрыл паролем, для ввода пароля создал отдельный экран, при переходе на него ПЛК пишет во все регистры ввода. Таким способом данные сохраняются при отключении контроллера и при отключении панели.Довольно коряво, может кто делает и лучше. Сам алгоритм несложный, геморрой с конфигурированием вввода-вывода в тройном объеме.

Kirill
17.11.2008, 12:54
Действительно, работа с панелью-слэйвом тяжела, необходимо по три переменных. Посмотрите этот пример:
823

Flomaster
18.11.2008, 04:07
Эта ветка у нас продублировалась. Точнее в моей другой теме начался оффтоп.
Посмотрел пример, суть понятна. Попробовал у себя реализовать на SFC - не получается. Тот UMD, который предназначен для восстановления настроек, отрабатывает, записывает данные в соответствующие регистры панели. Однако, в саму панель данные не попадают! Поэтому и в в UMD, предназначенном для чтения значений, заданных пользователем, соответствующие регистры содержат нули. И еще не совсем понял, для чего в примере используется ФБ BLINK?

Пробовал реализовать работу этих UMD By Command и By poll time. Результат не порадовал.

Сергей71
18.11.2008, 13:40
Сам такое пробовал на разных языках.
Очень много проблем если много переменных. Даже если они на разных экранах.
Глобальная проблема в скорости опроса. наилучший результат на 38400. 115200 - кто-то не работал.
Вообщем намучился и бросил тупую затею.

Им надо было сделать сохраняемые переменные в панели. Тогда там можно хранить настройки и уставки.

Kirill
18.11.2008, 15:15
Посмотрел пример, суть понятна. Попробовал у себя реализовать на SFC - не получается. Тот UMD, который предназначен для восстановления настроек, отрабатывает, записывает данные в соответствующие регистры панели. Однако, в саму панель данные не попадают! Поэтому и в в UMD, предназначенном для чтения значений, заданных пользователем, соответствующие регистры содержат нули. И еще не совсем понял, для чего в примере используется ФБ BLINK?

Пробовал реализовать работу этих UMD By Command и By poll time. Результат не порадовал.

Без вашего примера разобраться затруднительно. Blink - для того, чтобы инициировать обмен через заданный промежуток времени.

Flomaster
18.11.2008, 15:32
826
Вот часть проекта, в которой пытаюсь сохранить данные с панельки и затем восстановить.
Ко всему прочему появился вопрос по ФБ TON, который используется в данном примере. На его вход подано IN:=TRUE, интервал времени истек, а на выходе TRUE так и не появляется. Такое замечал уже не раз при использовании TON. Почему это может происходить?

Flomaster
18.11.2008, 15:34
828
Еще раз.

Flomaster
20.11.2008, 10:40
Уважаемая техподдержка!
Как там дела с моей проблемой? Есть ли у вас мысли по поводу ее решения?

Филоненко Владислав
20.11.2008, 13:58
Чтобы таймер изменил состояние, его надо периодически вызывать, а не только изменять ему входную переменную

Flomaster
20.11.2008, 16:12
Чтобы таймер изменил состояние, его надо периодически вызывать, а не только изменять ему входную переменную

А где и каким образом его лучше вызывать для моего проекта?
И всё-таки по поводу сохранения и восстановления данных в панели. Вы мне что-нибудь посоветуете?

Филоненко Владислав
20.11.2008, 16:21
Вставить его вызов в те состояния, где и анализируется его выходная переменная.
Или сделать отдельную задачу

Flomaster
24.11.2008, 07:35
Спасибо, так получается с таймером.

А как на счет моего основного вопроса в этой ветке по сохранению параметров ИП320 на ПЛК ???
Чувствую, что сегодня вечером заказчик будет меня убивать :-(((

Kirill
24.11.2008, 11:07
Спасибо, так получается с таймером.

А как на счет моего основного вопроса в этой ветке по сохранению параметров ИП320 на ПЛК ???
Чувствую, что сегодня вечером заказчик будет меня убивать :-(((

Не совсем ясно, в чем у вас сложность. Пример мы вам выложили, пример этот рабочий. Если не получается его вставить в ваш проект - задайте вопросы по примеру. Перекапывать ваш проект и искать, где вы ошиблись, у нас физически нет возможности.

Задайте конкретный вопрос и получите конкретный ответ.

"Тот UMD, который предназначен для восстановления настроек, отрабатывает, записывает данные в соответствующие регистры панели. Однако, в саму панель данные не попадают!"


Если UMD отрабатывает, значит данные в панель должны попадать. Соответственно, UMD у вас работает некорректно. Проверьте условия, при которых он включается в работу.

Flomaster
25.11.2008, 02:28
Без вашего примера разобраться затруднительно. Blink - для того, чтобы инициировать обмен через заданный промежуток времени.

Для чего тогда был этот пост? Если для того, чтобы просто отписаться, проще было сказать, что Вы не можете мне помочь. А как задать вопрос еще более конкретно - фантазии уже не хватает.
Если созданы 2 UMD, которые определяют одно и то же физическое устройство, то при здравой логике запись в регистры одного UMD (при выключенном втором UMD) должна отражаться на ИП320. Однако в программе в регистры значения попадают, а в самой ИП320 ничего не меняется. Причем посыл команды 0x00FF тому UMD, который должен восстановить настройки, ничего не меняет. Уж как только не пробовал.

Так что как с этим всем бороться - неизвестно...

Малышев Олег
25.11.2008, 08:18
Может загадка решится тем, что в режиме BY command по команде =FF идет запись только одного регистра??

Kirill
25.11.2008, 12:58
Для чего тогда был этот пост? Если для того, чтобы просто отписаться, проще было сказать, что Вы не можете мне помочь. А как задать вопрос еще более конкретно - фантазии уже не хватает.
Если созданы 2 UMD, которые определяют одно и то же физическое устройство, то при здравой логике запись в регистры одного UMD (при выключенном втором UMD) должна отражаться на ИП320. Однако в программе в регистры значения попадают, а в самой ИП320 ничего не меняется. Причем посыл команды 0x00FF тому UMD, который должен восстановить настройки, ничего не меняет. Уж как только не пробовал.

Так что как с этим всем бороться - неизвестно...

блок blink у вас вызывается следующим образом
BLINK_RESTORE(ENABLE:=TRUE , TIMELOW:=T#98ms , TIMEHIGH:=T#200ms );

соответственно, 98 мс передача не производится, а потом в течение 200мс в каждом цикле вы заставляете umd стучаться в панель.
Попробуйте задать
BLINK_RESTORE(ENABLE:=TRUE , TIMELOW:=T#200ms , TIMEHIGH:=T#2ms );

Быть может даже не 200мс, а более в time low, но timehigh надо задать примерно равным одному циклу ПЛК.

Kirill
25.11.2008, 13:33
Еще одно важное замечание.

Поставьте в конфигурации ПЛК в модбас мастере в свойствах интерфейса параметр framing time 10 или 20 мс.

и в UMD параметр amount repeat 1.