PDA

Просмотр полной версии : ПЛК100 + ИП320



rox
20.11.2014, 21:26
Добрый вечер уважаемые форумчане!
Прошу помощи. У меня есть 2 плк100 для сбора физических сигналов + 1 плк100 с ип-320 в так называемой "диспетчерской", который через Ethernet по udp собирает данные с двух плк100.
ип320 подключена по 485 как slave. Контроллер передает на панель порядка 50 переменных (около 104 регистров) для отображения. и принимает несколько сигналов на квитирование ошибок.
На 232 порту этого контроллера сидит пм-01, только для передачи смс на 5 телефонов в случае возникновения аварийной ситуации.
Проблема в следующем: данные на панели обновляются 1 раз в 55сек.!!!!!!!!!!!!!!! Это видно по времени которое она берет с контроллера, и если прилетит авария и вкл. звонок, то отключится он тоже через 55 сек. после нажатия кнопки квитирования.
Настройки 485 прилагаю. Мин.время цикла стоит 10мс. Провод от панели до контроллера 10см. Вариации с poll time особо не помогают. В онлайне в течении этих 55сек. несколько раз проскакивает ошибка(last error) 81.
Помогите победить данную проблему. Как можно ускорить обмен? Какими настройками поиграть чтоб снизить время реакции хотябы до 5сек.(этого будет достаточно).
Все оборудование новое, покупалось в этом месяце, поэтому прошивки скорее всего новые.

amn
20.11.2014, 21:57
Когда панель слэйв, то ПЛК вынужден каждый раз опрашивать все 50 переменных по одной. Попробуйте сделать панель мастером. Тогда панель будет опрашивать только те регистры, которые есть на текущем экране.

Валенок
20.11.2014, 23:04
Когда панель слэйв, то ПЛК вынужден каждый раз опрашивать все 50 переменных по одной
Про групповые запросы слышали ?

A ТС уверен что данные в плк с других плк приходят достаточно часто ?

amn
21.11.2014, 00:01
Про групповые запросы слышали ?
Тут (http://www.owen.ru/forum/showthread.php?t=17207&p=141316&viewfull=1#post141316) в соседней теме petera исследовал мастер конфигуратора. Думаю с ИП320 будет то же самое.

Валенок
21.11.2014, 00:21
Даже с мастером конфигуратора 5с очень много - думаю можно в 0.5с уложится. (но syslibcom - лучше)
Ну и простейшая оптимизация: На каком-таком экране ИП помещается 50 переменных ?

petera
21.11.2014, 02:40
Простейшая оптимизация -разделить регистры на запись в панель и чтение из панели по разным Universal Modbus Device и задать режим работы Work mode By value change для Universal Modbus Device, в которых расположены регистры на запись в панель.
Когда мастером является ПЛК, то мастер из конфигурации групповых запросов делать не умеет. Если в конфигурации все Universal Modbus Device с Work mode By poll time, то ПЛК тупо делает запросы к 50 переменным по одному запросу на каждую с периодом Polling time и это не теория, а реальность.
Обратите внимание на заданный период Polling time=500мс:eek:, то есть последнюю из 50 переменную конфигуратор обработает через 25 сек после первой. И это в идеальном случае, без учета возможных ошибок обмена и необходимости повторных запросов мастера к панели.
Какой смысл записывать в панель, например каждые 100 мс, HMI_Hour, HMI_min, HMI_sec, HMI_Day, HMI_Mouth, HMI_Year и другие переменные которые не меняются в программе так часто? Записывать в панель переменные нужно только при изменении их состояния в программе (Work mode By value change).
Дополнительно можно попробовать установить Мин.время цикла=0 http://www.owen.ru/forum/showthread.php?t=14379

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

capzap
21.11.2014, 07:21
Смысл был в том, что если ПЛК мастер и не предпринято никаких мер по оптимизации, то ПЛК будет делать запросы ко всем 50 переменным в панели не зависимо от количества оных на текущем экране со всеми вытекающими последствиями.
А если мастером будет панель, то она будет читать из слейва в ПЛК только те переменных, которые имеются на текущем экране а записывать в слейв переменные текущего экрана только по факту их изменения(нажатие кнопки или ввод значений). И это количество переменных существенно меньше чем 50.[/COLOR]

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

petera
21.11.2014, 07:24
через библиотеки,зная какой экран открыт,можно посылать нужные данные,когда панель слейв
В принципе даже через конфигуратор это можно тоже сделать.

capzap
21.11.2014, 07:30
:) попытайтесь, надо же по времени обновлять данные и только те которые нужны

rox
21.11.2014, 08:13
A ТС уверен что данные в плк с других плк приходят достаточно часто ?

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


Даже Ну и простейшая оптимизация: На каком-таком экране ИП помещается 50 переменных ?

У меня в программе 7 экранов.


Обратите внимание на заданный период Polling time=500мс:eek:, то есть последнюю из 50 переменную конфигуратор обработает через 25 сек после первой. И это в идеальном случае, без учета возможных ошибок обмена и необходимости повторных запросов мастера к панели.
Какой смысл записывать в панель, например каждые 100 мс, HMI_Hour, HMI_min, HMI_sec, HMI_Day, HMI_Mouth, HMI_Year и другие переменные которые не меняются в программе так часто? Записывать в панель переменные нужно только при изменении их состояния в программе (Work mode By value change).
Дополнительно можно попробовать установить Мин.время цикла=0.

500мс это уже результат экспериментов. По поводу Work mode, на панели отображается архив приходящих сообщений. Т.е. при появлении сообщения весь архив переписывается, соответственно большее количество регистров меняется.
Т.к. есть еще модем пм-01, тут на форуме прочитал что для его стабильной работы лучше поставить Мин. время цикла 10мс. Так и сделал.


Все дело в том что ОВЕНЫ никогда не программировал. а тут прилетела задача в короткие сроки написать программку. Как говориться что смог то и на бросал за несколько дней.
Спасибо всем за ответы. Попробую хоть как-то оптимизировать обмен. Если не получится перепишу проект где ип320 будет мастером.
Где можно взять описание и примеры для библиотеки syslibcom?

capzap
21.11.2014, 08:39
Т.к. есть еще модем пм-01, тут на форуме прочитал что для его стабильной работы лучше поставить Мин. время цикла 10мс. Так и сделал.

10мс это особенность работы конкретной библиотеки при использовании UNM, на основе syslibcom такое время не обязательно, хотя и не в этом дело

petera
21.11.2014, 09:46
через библиотеки,зная какой экран открыт,можно посылать нужные данные,когда панель слейв


В принципе даже через конфигуратор это можно тоже сделать.


:) попытайтесь, надо же по времени обновлять данные и только те которые нужны
Ключевые слова здесь "зная какой экран открыт,можно посылать нужные данные". В стандартном мастере из конфигурации можно и по команде обмен сделать. Для каждого экрана свой Universal Modbus Device с управлением по команде, с нужными для экрана регистрами, вот и будет "обновлять данные и только те которые нужны"

petera
21.11.2014, 10:06
не думаю что это может тормозить обмен по 485 интерфейсу. Если данные не пришли, значить отправит старые значения.
Именно он и тормозит. Чтобы отправить старые значения, нужно обработать отправку всех предыдущих переменных, со всеми вытекающими(см. выше). Это когда еще мастер доберется до состояния кнопки квитирования.

500мс это уже результат экспериментов. По поводу Work mode, на панели отображается архив приходящих сообщений. Т.е. при появлении сообщения весь архив переписывается, соответственно большее количество регистров меняется.

И где здесь противоречие? Это что у Вас сообщения приходят каждые 100 мс?. А так, как я предлагаю, пришло новое сообщение - переписывается весь архив однократно, а дальше ПЛК только читает состояние кнопки квитирования. И так будет до прихода следующего сообщения.

Валенок
21.11.2014, 11:19
. Для каждого экрана свой Universal Modbus Device с управлением по команде, с нужными для экрана регистрами, вот и будет "обновлять данные и только те которые нужны"
Еще вариант - сужаем область обмена
UMD 1. String (сами же юзали). А в него загоняем данные соответственно экрану,by change
UMD 2 чтение экрана, poll time
И команды не нужны.
var
a : struct_a; //вне зависимости от кол-ва нужных данных - проще подогнать размер всех
b : struct_b; //структур под размер str в области обмена. Ненужное забить пустыми полями
..
---------------------------
case СurrentScreen of //сюда читаем номер экрана
..: p := adr(a);
..: p := adr(b);
..:
end_case
sysmemcpy(adr(str),p,размер_блоков_константа); //ессно - всё ровняем и проверяем

PS
Чисто для информации. Для ИП320 - 38400 существенно оптимальней

petera
21.11.2014, 12:25
Еще вариант - сужаем область обмена
UMD 1. String (сами же юзали). А в него загоняем данные соответственно экрану,by change
UMD 2 чтение экрана, poll time
И команды не нужны.
var
a : struct_a; //вне зависимости от кол-ва нужных данных - проще подогнать размер всех
b : struct_b; //структур под размер str в области обмена. Ненужное забить пустыми полями
..
---------------------------
case СurrentScreen of //сюда читаем номер экрана
..: p := adr(a);
..: p := adr(b);
..:
end_case
sysmemcpy(adr(str),p,размер_блоков_константа); //ессно - всё ровняем и проверяем

PS
Чисто для информации. Для ИП320 - 38400 существенно оптимальней
Согласен.
Я ТС самый простой способ ускорения реакции на кнопки предложу:)
Дело в том, что если в конфигурации несколько UDM, то мастер обрабатывает по одной переменной из каждого UMD по очереди. Т.е сначала одну переменную из одного UMD, затем одну переменную из второго UMD, опять одну переменную из одного UMD, затем одну переменную из второго UMD и т.д. Если количество переменных в UMD разное, то переменные одного UMD фактически будут опрашиваться чаще. Даже при одинаковом времени Polling time для обоих UMD.

Если среди этих 50 переменных подавляющее большинство записываются в панель (Т.е. при появлении сообщения весь архив переписывается, соответственно большее количество регистров меняется). То достаточно завести второй Universal Modbus Device c предположим 8bit input module, который будет читать из панели состояние кнопок и оставить все остальные регистры в первом UMD.
Теперь даже для режима работы By poll time должно быть существенное ускорение реакции на нажатие кнопок.
Запись первой переменной
Чтение состояния кнопок
Запись второй переменной
Чтение состояния кнопок
Запись третей переменной
Чтение состояния кнопок
...................................
Запись n-ой переменной
Чтение состояния кнопок
Затем сначала, в той же последовательности.

rox
28.11.2014, 07:01
Переписал проект. ИП-320 - мастер плк-100 слейв. Все "полетело".

AlexKry
06.12.2014, 19:58
Добрый вечер или день. Не подскажете ссылку, где почитать теорию, чтобы понять суть подключения к ПЛК других устройств, в частности инд. панели, а то я в этом деле начинающий. Написал первую прогу на ld с таймерами - не будешь же каждый раз тащить ПЛК к компу, чтобы изменить уставки таймера. Вот и решил прицепить что-то типа ип-320, но как это сделать нет малейшего понятия. Спасибо.

petera
06.12.2014, 20:04
Добрый вечер или день. Не подскажете ссылку, где почитать теорию, чтобы понять суть подключения к ПЛК других устройств, в частности инд. панели, а то я в этом деле начинающий. Написал первую прогу на ld с таймерами - не будешь же каждый раз тащить ПЛК к компу, чтобы изменить уставки таймера. Вот и решил прицепить что-то типа ип-320, но как это сделать нет малейшего понятия. Спасибо.
Смотреть примеры http://www.owen.ru/forum/showthread.php?t=13581