PDA

Просмотр полной версии : Два 110-60 и тормозная визуализация



s22
06.06.2013, 15:08
Здравствуйте! Имеется объект, на котором установлены два контроллера ПЛК-110-60 (без ограничения памяти). На первый по rs-485 (скорость 115200) навешаны: по ModBus RTU: МВА8, МВ110-32 ДН (2 шт), МВ110-32Р (2 шт), СИ-30 (2 шт) и по OWEN ТРМ148 (2шт). На второй 16ДН, ТРМ-148 и два водосчетчика. Программа разбита на 2 контроллера, связь через сетевые переменные. Визуализация-панель управления на втором контроллере/проекте. Так вот, вся эта махина жутко тормозит. Причем тормозит визуализация и исполнение. Нажимаешь на кнопку=true отработка приходит через 3-10 секунд. Чтобы исключить задержку сетевых переменных панель была продублирована на второй проект/контроллер. Цикл опроса Pooling time у ModBUS RTU менялся от 10 до 9000 мс. Результат: на 10 мс, и 20 мс таймаута реакция на изменение состояния (например, 32Р 5-8 секунд). Контроллеры на цикле такта от 5 до 50 мс ведут себя одинаково (т.е. "тормозят"). В чем может быть дело? Как избавиться от фатального торможения? Программа реализована всего на 1/2 и уже давит не на ту педаль :)

SBER
06.06.2013, 16:21
По какому интерфейсу происходит связь между контроллерами, какие настройки связи.
Какая панель, как ней подключаетесь, какие настройки?
Плк овен отлично работают на больших проектах, проблема явно в реализации обмена.

s22
06.06.2013, 17:26
Обмен сетевыми переменными, также как и подключение к компу с CodeSys, происходит по Ethernet через хаб. Функцию панели выполняет визуализация CodeSys.На данный момент около 170 сетевых переменных разделенных на группы:
1) Переменные, которые работают в обе стороны (чтение-запись), это кнопки управления.
2) Аналоговые переменные (только чтение, передача по изменению)
3) Дискретные переменные (трансляция по изменению и каждые 5 секунд)
UPD:
4) Строковые переменные (трансляция по изменению и каждые 5 секунд)

Позже выложу скриншоты.

SBER
06.06.2013, 17:44
Есть мнение, что с визуализацией кодесис вы не достигнете успехов.
Использование визуализации очень сильно тормозит плк.
Ее имеет смысл использовать только для самых мелких объектов.
Ищите скаду, не взлетит.

s22
06.06.2013, 21:42
Обещанные скриншоты:

Sergey666
06.06.2013, 22:08
Во первых смысл опрашивать дискретные модули с периодом 20-50мс?
250мс- за 250 мс паровоз далеко не уедет.:)
Обмен "тормозит" когда устройство(какое-либо) не отвечает.
Внимательно проинспектируйте проекты-где-то "слабое звено".
Визуализацией КоДеСис HMI не пользовался , но визуализация в "проекте" работает очень быстро,быстрее чем OPC сервер (Пробовал гатевейский и лектус).
Если общий обмен "Тормозит" СКАДА тем более "Тормозить" будет.
Но такая конфигурация должна работать "быстро" . Проект надо оптимизировать.
В чем и желаю удачи.:)

Николаев Андрей
06.06.2013, 22:39
Ну и мое ИМХО:
1. Надо оптимизировать программу? Не знаю - надо смотреть программу.
2. Обмен точно оптимизировать надо.
2.1 Во первых разнести модули на два RS. На один дискретные, на второй аналоговые (модули и ТРМ). Опрашивать и записывать дискретные модули ТОЛЬКО по маске.
2.2 Обмен сетевыми переменными штука хорошая. Но я когда-то отказался в пользу ModBus TCP. Опять же дискретные переменные гонять ТОЛЬКО собрав в байт или word.
3. Визуализация - тема отдельная. CODESYS HMI вертится в контроллере. А на компе просто отображается отрисовка. Так что ресурс лопает за обе щеки. Да и плюс сам Gateway - протокол с шифрованием и очень ресурсоемкий.
Так что лично я бы выбрал SCADA пакет внешний, и ModBus TCP.

Но и в этой конфигурации все должно работать.

НЕ забудьте в конце описание проекта выложить, если не сложно:
http://www.owen.ru/projects/

s22
07.06.2013, 11:44
Небольшой апдейт:

1) кроме всего прочего, используются еще строковые сетевые переменные, каждая из которых весит по 80 байт, всего их порядка 50.

2) На одном слоте rs-485 сидят:

по ModBUS RTU:


МВ110-16ДН
МВА-8
МВА-8
СИ-30
СИ-30
СИ-30
МВ110-32ДН
МВ110-32ДН
МВ110-32Р
МВ110-32Р


по OWEN:


ТРМ-148
ТРМ-148
ТРМ-148


Пока дело не дошло до 32Р одновременно два протокола без проблем уживались на одном слоту, тормозов не было. Опрос шел достаточно быстро. Второй слот зарезервирован под расширение, так что его не желательно использовать.


Во первых смысл опрашивать дискретные модули с периодом 20-50мс?
250мс- за 250 мс паровоз далеко не уедет.

Насколько я понял, опрос происходит последовательно, а значит если устройств 13 то при pooling time 50 ms и таймауте у больших девайсов (МВА8, 32ДН, 32Р) в 120 мс (именно такой таймаут не вызывает ошибок опроса) цикл завершается за...более чем секунду, это в теории на практике с 32Р все гораздо медленнее, по крайней мере сейчас. Реакция нужна быстрая, так как 32Р осуществляет управление задвижкой приоткрывая ее всего на 2 секунды (5 секунд пауза), при этом учитываются данные давления приходящие с ТРМ-148 и данные состояния приходящие с 32ДН.


Опрашивать и записывать дискретные модули ТОЛЬКО по маске.

С 32ДН опрос ведется именно так: распаковываются 2 WORD'а, но вот в 32Р записывается 1000 WORD'ом в каждый регистр с 0 по 31. Состояния считываются так же как в 32ДН. НО, я не вижу в инструкции адреса регистров на запись состояний битовой маской. Как? Где?


3. Визуализация - тема отдельная. CODESYS HMI вертится в контроллере.

HMI не используется. Используется прямая визуализация CodeSys (скриншотики внизу).


Обмен сетевыми переменными штука хорошая. Но я когда-то отказался в пользу ModBus TCP.

Если не трудно, по подробнее как это реализовывается?

petera
07.06.2013, 12:10
С 32ДН опрос ведется именно так: распаковываются 2 WORD'а, но вот в 32Р записывается 1000 WORD'ом в каждый регистр с 0 по 31. Состояния считываются так же как в 32ДН. НО, я не вижу в инструкции адреса регистров на запись состояний битовой маской. Как? Где?

http://s019.radikal.ru/i607/1306/3c/4504ced55259t.jpg (http://s019.radikal.ru/i607/1306/3c/4504ced55259.png)
http://s61.radikal.ru/i173/1306/b5/83ff274cee9at.jpg (http://s61.radikal.ru/i173/1306/b5/83ff274cee9a.png)
http://s017.radikal.ru/i414/1306/32/19ad678f3409t.jpg (http://s017.radikal.ru/i414/1306/32/19ad678f3409.png)
Страницы 11, 13,14 РЭ

s22
07.06.2013, 13:36
http://s019.radikal.ru/i607/1306/3c/4504ced55259t.jpg (http://s019.radikal.ru/i607/1306/3c/4504ced55259.png)
http://s61.radikal.ru/i173/1306/b5/83ff274cee9at.jpg (http://s61.radikal.ru/i173/1306/b5/83ff274cee9a.png)
http://s017.radikal.ru/i414/1306/32/19ad678f3409t.jpg (http://s017.radikal.ru/i414/1306/32/19ad678f3409.png)
Страницы 11, 13,14 РЭ


Спасибо! Понял!

s22
10.06.2013, 16:24
Господа! Можно ли запаковать строковые сетевые переменные (string, 80 байт) для передачи?

Sergey666
10.06.2013, 16:41
А,если не секрет,зачем такие строки???
Вы поздравления отправляете??:)
Или распоряжение:"Взять лопату в подсобке , идти к забору и копать до обеда" (57 байт)

s22
10.06.2013, 16:56
Пока что придумал так: на "передатчике" состояние присваивается определенной цифре с типом USINT. В "приёмнике" цифровому значению присваивается строка. 1 байт на одну переменную, вместо 80.

petera
10.06.2013, 17:33
Пока что придумал так: на "передатчике" состояние присваивается определенной цифре с типом USINT. В "приёмнике" цифровому значению присваивается строка. 1 байт на одну переменную, вместо 80.
Полагаю, что в качестве приемника используется некое устройство HMI (панель или SCADA) тогда в приемнике должен быть представлен объект типе "динамический текст". Тогда ни чего запаковывать не надо.

Sergey666
11.06.2013, 20:22
Пока что придумал так: на "передатчике" состояние присваивается определенной цифре с типом USINT. В "приёмнике" цифровому значению присваивается строка. 1 байт на одну переменную, вместо 80.

А , зачем такой тип Usint ??? Стандартный Word не подойдет???
Почему строки - понятно, в HMI CDS другого не предусмотрено,но если строковые значения фиксированные , то назначьте им цифровые "аватарки" :D(Прикольно да)и "гоняйте" по UDP 1-2 Worda , вместо строк по 80 символов.

Валенок
11.06.2013, 21:18
в HMI CDS другого не предусмотрено,
Почему ? Индекс и массив строк - прямой аналог. И хоть usint, хоть dint
Для udp - что 1-2 слова, что 80 байт. Накладные расходы - смешны. Если плющит - есть и string(20-30).

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

Sergey666
11.06.2013, 21:40
Почему ? Индекс и массив строк - прямой аналог. И хоть usint, хоть dint
Для udp - что 1-2 слова, что 80 байт. Накладные расходы - смешны. Если плющит - есть и string(20-30).

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

В HMI CDS нету "Динамический текст".Поэтому для отображения "статуса" надо строку передавать.
Прямой текст проще загнать , только:
пример - отображается 6 статусов (Динамический текст) + один "Обратный отсчет) .Статусы в среднем 8 символов .
Для отображения строкой 6*8+3:=51байт. Если Wordами 6*2+2:=14байт . Есть разница???

petera
11.06.2013, 21:59
В HMI CDS нету "Динамический текст".Поэтому для отображения "статуса" надо строку передавать.
Зачем так опрометчиво?
Читаем "codesys_visu_v23_ru.pdf"
http://s45.radikal.ru/i109/1306/fe/38e7a9dd537et.jpg (http://s45.radikal.ru/i109/1306/fe/38e7a9dd537e.png)
.................................................. ......................
http://s017.radikal.ru/i440/1306/79/c42dce4f3962t.jpg (http://s017.radikal.ru/i440/1306/79/c42dce4f3962.png)
.............................................
и т.д.
На страницах от 2-54 до 2-57 есть описание и пример реализации.:)

Валенок
11.06.2013, 22:03
Прямой текст проще загнать , только:
пример - отображается 6 статусов (Динамический текст) + один "Обратный отсчет) .Статусы в среднем 8 символов .
Для отображения строкой 6*8+3:=51байт. Если Wordами 6*2+2:=14байт . Есть разница???

Да есть. 37 байт. Это целых 2-3мс. Это на RS. А на udp ? А с учетом минимального размера пакета ?
И вот кончился обратный отсчет для режима - и нуль на экране не нужен. Еще экран/макросы на панели ?

А вот у меня пяток полностью взаимозаменяемых панелей в пределах объекта, а операторы попросили поменять название режима "ОЖИДАНИЕ ЗАГРУЗКИ" на "ЖДЕМ ЗАГРУЗКУ". Все перезаливать ? Есть разница ?


В HMI CDS нету "Динамический текст".Поэтому для отображения "статуса" надо строку передавать.
Я же показал адекватную замену ему. Ну и полетит строка. В потоке информации проекта для HMI CDS она - пыль.
.... Да Petera предложил не хуже

Sergey666
11.06.2013, 22:34
Про HMI CDS попутал... Не пользовался им , только визуализацией в проекте для настройки (отсюда и ассоциация) .
По поводу строк и панели - Валенок , согласен с вами частично . Панели просто есть разные . Есть адекватные и шустрые , есть глючные и тормозные(не будем упоминать производителей).
Все варианты имеют право на жизнь, только у стартера проблемма с "тормозной" визуализацией и , возможно с "тормозным" обменом.Вот обмен и предлагается оптимизировать .
Если меня операторы попросят о подобной "фигне" (Переделка текста) - поставят 0.7 можно и перезалить , а нет... идите лесом...полем...камышом.

Валенок
11.06.2013, 22:59
))))

глючные и тормозные.
Если о СП270 - то у меня не наблюдалось тормозов. Хоть со строками, хоть и без них. Неплохо иметь на панели возможность прямого вывода текста. Ведь и 0.7 (а то и две - за сложность) и не залезать в панель - тоже ничо так :rolleyes:
Ну и дин.текст иногда тоже юзаю. Все по месту.

PS
Смайлы теперь - убогие

Sergey666
11.06.2013, 23:14
Там у СПшки при попытке редактирования свойств строкового индикатора выскакивала ошибка глобальная с крахом конфигуратора...Только не помню для символьного ввода или индикатора .А без ввода-вывода текста - никуда (Название рецепта).

Смайлы да...

Валенок
11.06.2013, 23:26
Странно. Сейчас посмотрел 2.82 и 2.6.CF - ввод текста редактируется (некоторые свойства). Может другая какая версия или какое-то особенное свойство ?

Sergey666
11.06.2013, 23:50
Конечно не в тему . Кофигуратор СП200 в 2.82
См. рис. Текстовый индикатор - нажал "Вид"
На старшей(2.6CF) версии такого нет.

Валенок
12.06.2013, 01:15
Конечно не в тему . Кофигуратор СП200 в 2.82
См. рис. Текстовый индикатор - нажал "Вид"
На старшей(2.6CF) версии такого нет.
Да уж. Это серьезно.

Интересно как ведет себя он-лайн символьный ввод с отключенной клавиатурой

s22
14.06.2013, 12:21
В общем, упаковка сетевых переменных (8 bool to 1 byte, PACK), преобразование строк и посыл команд на МУ110-32Р по сетевой маске значительно снизило "тормоза". Теперь цикл контроллера 10 мс, цикл опроса ModBUS 20 мс, ОВЕН - 50 мс. Сейчас точно не могу сказать, насколько все стало лучше, потому что не на объекте, позже уточню. Всем спасибо!

s22
21.06.2013, 14:45
Сегодня проверил скорость на объекте. Определенно стало лучше! Pooling time уменьшил до 10 мс на ModBus (50 OWEN). Ошибок опроса нет. Но быстродействующей всю эту систему не назовешь. Еще раз напомню, что на одном слоту сидят 8 ModBus устройств и 18 каналов ТРМ-148 работающих на протоколе OWEN. Blink с периодом 1 через 1 секунду не зажигает как того хотелось бы выходы 32Р, они зажигаются и гаснут с периодом +/- 2 секунды. Т.е команды приходят с задержкой, причем задержка произвольным образом варьируется. После удаления протокола OWEN задержка сократилась до приемлемого уровня +/- 0,5 сек. Такое быстродействие необходимо было для того чтобы с периодичностью 1-5 секунд посылать импульсы на дозатор. Но выход из положения был найден - увеличением выброса на 1 импульс. Так что, имейте в виду, господа проектанты, что если вам нужна быстродействующая сетка избегайте большого количества устройств на одном слоту.

Amko
21.06.2013, 17:20
А в МУ110-32Р вы команды посылаете всегда или только по изменению маски? Последнее может увеличить быстродействие.

Валенок
22.06.2013, 10:58
. Определенно стало лучше! .. Ошибок опроса нет. .
Как определили что нет ошибок ?


сократилась до приемлемого уровня +/- 0,5 сек.
Приемлимого ? 8(

s22
24.06.2013, 10:40
А в МУ110-32Р вы команды посылаете всегда или только по изменению маски? Последнее может увеличить быстродействие.
Всё было перепробовано. Остановился на Both. По теории это и по времени и по изменению. Потому что, если оставить только по изменению есть риск, что с первого раза состояние не будет зафиксировано прибором из-за возможных ошибок в сети.

Как определили что нет ошибок ?
9078

Приемлимого ? 8(
Да :(

Валенок
25.06.2013, 10:30
Визуально определили или счетчиком ?

s22
27.06.2013, 22:50
Визуально.

Валенок
28.06.2013, 03:33
Нормальный глаз такой. Сечет 50..100 раз в секунду. Завидую. Правда на экран сложно смотреть - мерцает.

MikeF
29.07.2013, 14:03
дискретные переменные гонять ТОЛЬКО собрав в байт или word.
Можно уточнить, в чем польза упаковывать булевы переменные в 2 bytes по сравнению с например двумя модулями 8 bits?

Sergey666
29.07.2013, 14:35
Выравнивать ничего не надо.

MikeF
29.07.2013, 15:55
Выравнивать ничего не надо.
О чем речь? 2 byte = 2 по 8 bits = 16 бит

Валенок
29.07.2013, 17:14
например поменяйте платформу для сравнения

MikeF
29.07.2013, 18:27
В смысле перестать использовать овен?
Если нет времени ответить развернуто, то может и не стоит тратить время? Всё равно ведь непонятно...

Валенок
29.07.2013, 19:40
Ну например с 100 на 150 перейдите

Sergey666
29.07.2013, 21:19
В смысле перестать использовать овен?
Если нет времени ответить развернуто, то может и не стоит тратить время? Всё равно ведь непонятно...

Если совсем конкретно - то категорично : битовые через 2байт передавать и усе , причем счастье вам будет , работаю так и только так и ...НЕТ проблемм у меня с модбасом в ПЛК Овен. Неужели трудно сделать как надо - 1. В Слэйв 2 байтные + в конце 4 байтные (после четного и если надо)
2. Использовать АТ адресацию.

Валенок
30.07.2013, 11:21
Чего-то уж так категорично.
Если мастер с битами - то теряется время на розничных запросах (типа ф5), для ф1,2,15 - запросы длинее и, отсюда, жестче ограничения по макс.размеру информации за раз.
Для слейва это побоку - скорость определяет мастер, но для обоих, при смене платформы, проще переписать имя регистра в конфигурации чем кучу имен битов.
А что касается порядка "как надо" - да как душе угодно если понятно как происходит выравнивание.
Насчет пользы AT адресации - весьма спорный вопрос при возможности просто дать имя каналу

s22
06.08.2013, 16:24
Спасибо всем за помощь! Проект наконец-то отлажен и сейчас проходит испытания. Визуализация теперь "не тормознутая" :D
Циклы контроллеров - 10 и 6 мс.
Сетевые переменные запаковываются в DWORD.
Управление выходами 32Р по битовой маске - 2 WORD'а.
Цикл опроса в ModBus RTU 10 мс, OWEN 100 мс.
Оптимизирован код.

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

Вот так выглядит главная панель оператора станции очистки воды:

9518