Author |
Message |
Written on: 21. 06. 2016 [08:07]
|
Petr2off
Владимир Петров
Topic creator
registered since: 08.07.2015
Posts: 38
|
Доброго дня Всем :D
Возникла у меня необходимость интеграции с WinCC. Если упростить - то схема следующая:
1) На нижнем уровне PLC с Isagraf 3.22.
2) Далее Openscada (управление на уровне насосной)
3) На верхнем уровне (центральный диспетчерский пункт) WinCC.
В первом приближении получилось, список "подводных камней" Ниже:
1) параметры соединения с узлом данных "Scads". WinCC может выступать только мастером, соответственно потребовалось организовать Входящий транспорт по протоколу MODBAS. Тут только одна маленькая засада - адрес транспорта нужен в 1-й моде, что то типа TCP:10.2.2.125:8888:1 (если брать моду соединения по умолчанию :0 - не работает)
2)Аналоговый параметр - потребовался свап слов. Можно было это сделать со стороны скады, но проще оказалось со стороны WinCC, там в свойствах соединения можно поставить птицу - swap word in float.
3) Ну Modbas адреса соответственно у wincc начинаются с 0
4) При обработки битов обнаружился зеркальное соответствие. Т.е. бит 0 в Scada соответствует ,биту 15 в winCC
5) Транспортных протоколов сделал 2 (один на 12 slave, другой на 13). Идея такая - информация параметрическая идет по 12 slave всегда, а по 13 идет управление, которое возможно будет отключатся при выборе источника управления - Насосная/ЦДП. В общем прокатило.
Единственно - что напрягло, пытался через tmTime(1) получить время в микросекундах, что бы временные параметры зафиксировать, но она у меня возвращает время только в секундах.
|
Written on: 21. 06. 2016 [10:01]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"Petr2off" wrote:
1) параметры соединения с узлом данных "Scads". WinCC может выступать только мастером, соответственно потребовалось организовать Входящий транспорт по протоколу MODBAS. Тут только одна маленькая засада - адрес транспорта нужен в 1-й моде, что то типа TCP:10.2.2.125:8888:1 (если брать моду соединения по умолчанию :0 - не работает)
Тот клиент просто не любит разрывов соединений после каждого запроса.
"Petr2off" wrote:
2)Аналоговый параметр - потребовался свап слов. Можно было это сделать со стороны скады, но проще оказалось со стороны WinCC, там в свойствах соединения можно поставить птицу - swap word in float.
Документацию внимательно читаем и просто указываем нужный порядок регистров: http://wiki.oscada.org/Doc/ModBus#h592-9
"Petr2off" wrote:
3) Ну Modbas адреса соответственно у wincc начинаются с 0
У всех они так начинаются.
"Petr2off" wrote:
4) При обработки битов обнаружился зеркальное соответствие. Т.е. бит 0 в Scada соответствует ,биту 15 в winCC
В OpenSCADA стандартный порядок бит для регистра.
"Petr2off" wrote:
Единственно - что напрягло, пытался через tmTime(1) получить время в микросекундах, что бы временные параметры зафиксировать, но она у меня возвращает время только в секундах.
Примеры не смотрим:
utm = 0; tm = SYS.time(utm);
Learn, learn and learn better than work, work and work.
|
Written on: 21. 06. 2016 [13:00]
|
Petr2off
Владимир Петров
Topic creator
registered since: 08.07.2015
Posts: 38
|
Насчет везде начинается с 0. Это не совсем так. В Isagraf начинается с 1, И там у меня опечаточка выскочила, извиняюсь. В WinCC тоже с 1.
Про смену слов я читал, просто проще это оказалось сделать в WinCC.
Про SYS.time. Во первых я ориентировался на описание функции tmTime в библиотеке, А во вторых, я попробовал использовать SYS.time как Вы предложили. Ничего не изменилось. Возвращаются секунды.
|
Written on: 21. 06. 2016 [21:20]
|
IrmIngeneer
Константин \m/
Contributor Sponsor
registered since: 16.09.2010
Posts: 185
|
"Petr2off" wrote:
...
Про SYS.time. Во первых я ориентировался на описание функции tmTime в библиотеке, А во вторых, я попробовал использовать SYS.time как Вы предложили. Ничего не изменилось. Возвращаются секунды.
Попробовал выводить кнопкой в виджет Text значение utm по приведенному Романом рецепту. Если период вычисления страницы стоит 1000 мс - выдает трехзначные числа. Если ставлю период 10 мс - шестизначные.
|
Written on: 22. 06. 2016 [06:45]
|
Petr2off
Владимир Петров
Topic creator
registered since: 08.07.2015
Posts: 38
|
У меня период стоял 100 мс, попробовал 10 - эффект тот же. Причем в 2-х вариантах.
1) В контейнере ставил 100 и 10 мс, в окне (-1)
2) В окне выставлял 100 и 10 мс.
даже такой экзотический вариант попробовал - в контейнере 10мс, в окне 100 мс.
А у Вас какая версия Scada ? У меня 0.8.
Хотя в принципе конечно не так уж и важно, отсечки по числу циклов работают.
|
Written on: 22. 06. 2016 [07:22]
|
Petr2off
Владимир Петров
Topic creator
registered since: 08.07.2015
Posts: 38
|
В догонку, значения у меня возвращает 10 значное. Для проверки я написал виджетик, через поле задается число циклов. По кнопке старт фиксируется начало отчета. Потом на каждом цикле счетчик уменьшается на 1, считывается текущее время. Пишется в текстовое поле. Все изменения идут с шагом 1 сек, независимо от частоты виджета. Хотя сам виджет выполняется безусловно с заданной частотой. Т.е. задаешь счетчик 10 - через секунду процесс завершится - разница во времени - 1 сек. (последняя цифра). Задаешь счетчик 50 - в поле 5 раз значение сменится. и остановится на 5 сек.
|
Written on: 22. 06. 2016 [08:51]
|
IrmIngeneer
Константин \m/
Contributor Sponsor
registered since: 16.09.2010
Posts: 185
|
"Petr2off" wrote:
А у Вас какая версия Scada ? У меня 0.8.
Хотя в принципе конечно не так уж и важно, отсечки по числу циклов работают.
Думаю, действительно, версия не сильно важна. У меня билд 2385, крайний вроде.
Сделал в обработчике так:
utm = 0;
TX_Test_text = "Sec " + Special.FLibSYS.tmTime(utm) + " mSec " + utm;
В тектовом поле выводятся и секунды, и милисекунды.
[This article was edited 1 times, at last 22.06.2016 at 09:59.]
|
Written on: 22. 06. 2016 [10:51]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"IrmIngeneer" wrote:
Сделал в обработчике так:
utm = 0;
TX_Test_text = "Sec " + Special.FLibSYS.tmTime(utm) + " mSec " + utm;
В тектовом поле выводятся и секунды, и милисекунды.
Микросекунды, utm от usec!
Learn, learn and learn better than work, work and work.
|
Written on: 10. 07. 2016 [12:58]
|
Petr2off
Владимир Петров
Topic creator
registered since: 08.07.2015
Posts: 38
|
По времени разобрался, я почему то считал - что оно возвращается через значение функции, а тут процесс немного навороченей оказался, миллисекунды в параметре возвращаются. Но у меня с первого раза ничего не получается, карма наверно попорчена.
Немного о второй серии интеграции с Сименс. Начал делать следующий шаг. Т.е. предполагается что Сервер скады, будет играть роль технологического гэтвэя, разделяя сетку САУ ТП (10) и сетку WINCC (168) соответственно я туда аж 3 сетевых карты впихал. Одна на сетку 168, две других на 10 сетки (10.2.*.* и 10.3.*.*) там дублирование доступа к модулям УСО идет. Ну в общем то с разделением получилось. Но при этом у меня естественно отвалился АРМ локальный, который в 10 сетке сиди, они стали по MOdbus протоколу конфликтовать. Решил я тогда локальный АРМ сделать как станцию сервера по 10- сетки, и уперся в трабл. Не хочет у меня второй входящий транспорт организовываться, говорит - порт занят. :(. Что меня несколько удивило - до этого у меня на одной карте работало 2 транспорта (правда разных - входящий и выходящий). Завтра думать буду как лучше выкручиваться, Еще одну карту сажать не охота.
|
Written on: 02. 08. 2016 [13:31]
|
Petr2off
Владимир Петров
Topic creator
registered since: 08.07.2015
Posts: 38
|
Каюсь, наговорил лишнего. Запустился у меня второй транспорт на том же интерфейсе. Виноват, надо читать внимательно до буквы и мелкий шрифт тоже. В оправдание скажу что слаб я зрением. Просто в строке коннекта задал порт, который не прописан в /etc/services. Сменил порт и заработало. :D
|