Автор | Сообщение |
---|---|
Сообщение создано: 21. 06. 2016 [08:07]
|
|
Petr2off
Владимир Петров
Создатель темы
Зарегистрирован(а) с: 08.07.2015
Сообщения: 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) получить время в микросекундах, что бы временные параметры зафиксировать, но она у меня возвращает время только в секундах. |
Сообщение создано: 21. 06. 2016 [10:01]
|
|
roman
Roman Savochenko
![]() Moderator Contributor Developer
![]() Зарегистрирован(а) с: 12.12.2007
Сообщения: 3788
|
"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) получить время в микросекундах, что бы временные параметры зафиксировать, но она у меня возвращает время только в секундах. Примеры не смотрим: JAVASCRIPT utm = 0; tm = SYS.time(utm); Learn, learn and learn better than work, work and work.
|
Сообщение создано: 21. 06. 2016 [13:00]
|
|
Petr2off
Владимир Петров
Создатель темы
Зарегистрирован(а) с: 08.07.2015
Сообщения: 38
|
Насчет везде начинается с 0. Это не совсем так. В Isagraf начинается с 1, И там у меня опечаточка выскочила, извиняюсь. В WinCC тоже с 1. Про смену слов я читал, просто проще это оказалось сделать в WinCC. Про SYS.time. Во первых я ориентировался на описание функции tmTime в библиотеке, А во вторых, я попробовал использовать SYS.time как Вы предложили. Ничего не изменилось. Возвращаются секунды. |
Сообщение создано: 21. 06. 2016 [21:20]
|
|
IrmIngeneer
Константин \m/
![]() Contributor Sponsor
Зарегистрирован(а) с: 16.09.2010
Сообщения: 185
|
"Petr2off" wrote: ... Про SYS.time. Во первых я ориентировался на описание функции tmTime в библиотеке, А во вторых, я попробовал использовать SYS.time как Вы предложили. Ничего не изменилось. Возвращаются секунды. Попробовал выводить кнопкой в виджет Text значение utm по приведенному Романом рецепту. Если период вычисления страницы стоит 1000 мс - выдает трехзначные числа. Если ставлю период 10 мс - шестизначные. |
Сообщение создано: 22. 06. 2016 [06:45]
|
|
Petr2off
Владимир Петров
Создатель темы
Зарегистрирован(а) с: 08.07.2015
Сообщения: 38
|
У меня период стоял 100 мс, попробовал 10 - эффект тот же. Причем в 2-х вариантах. 1) В контейнере ставил 100 и 10 мс, в окне (-1) 2) В окне выставлял 100 и 10 мс. даже такой экзотический вариант попробовал - в контейнере 10мс, в окне 100 мс. А у Вас какая версия Scada ? У меня 0.8. Хотя в принципе конечно не так уж и важно, отсечки по числу циклов работают. |
Сообщение создано: 22. 06. 2016 [07:22]
|
|
Petr2off
Владимир Петров
Создатель темы
Зарегистрирован(а) с: 08.07.2015
Сообщения: 38
|
В догонку, значения у меня возвращает 10 значное. Для проверки я написал виджетик, через поле задается число циклов. По кнопке старт фиксируется начало отчета. Потом на каждом цикле счетчик уменьшается на 1, считывается текущее время. Пишется в текстовое поле. Все изменения идут с шагом 1 сек, независимо от частоты виджета. Хотя сам виджет выполняется безусловно с заданной частотой. Т.е. задаешь счетчик 10 - через секунду процесс завершится - разница во времени - 1 сек. (последняя цифра). Задаешь счетчик 50 - в поле 5 раз значение сменится. и остановится на 5 сек. |
Сообщение создано: 22. 06. 2016 [08:51]
|
|
IrmIngeneer
Константин \m/
![]() Contributor Sponsor
Зарегистрирован(а) с: 16.09.2010
Сообщения: 185
|
"Petr2off" wrote: А у Вас какая версия Scada ? У меня 0.8. Хотя в принципе конечно не так уж и важно, отсечки по числу циклов работают. Думаю, действительно, версия не сильно важна. У меня билд 2385, крайний вроде. Сделал в обработчике так: JAVASCRIPT utm = 0; TX_Test_text = "Sec " + Special.FLibSYS.tmTime(utm) + " mSec " + utm; В тектовом поле выводятся и секунды, и милисекунды. [Сообщение редактировалось 1 раз(а), в последний раз 22.06.2016 в 09:59.] |
Сообщение создано: 22. 06. 2016 [10:51]
|
|
roman
Roman Savochenko
![]() Moderator Contributor Developer
![]() Зарегистрирован(а) с: 12.12.2007
Сообщения: 3788
|
"IrmIngeneer" wrote: Сделал в обработчике так: JAVASCRIPT utm = 0; TX_Test_text = "Sec " + Special.FLibSYS.tmTime(utm) + " mSec " + utm; В тектовом поле выводятся и секунды, и милисекунды. Микросекунды, utm от usec! Learn, learn and learn better than work, work and work.
|
Сообщение создано: 10. 07. 2016 [12:58]
|
|
Petr2off
Владимир Петров
Создатель темы
Зарегистрирован(а) с: 08.07.2015
Сообщения: 38
|
По времени разобрался, я почему то считал - что оно возвращается через значение функции, а тут процесс немного навороченей оказался, миллисекунды в параметре возвращаются. Но у меня с первого раза ничего не получается, карма наверно попорчена. Немного о второй серии интеграции с Сименс. Начал делать следующий шаг. Т.е. предполагается что Сервер скады, будет играть роль технологического гэтвэя, разделяя сетку САУ ТП (10) и сетку WINCC (168) соответственно я туда аж 3 сетевых карты впихал. Одна на сетку 168, две других на 10 сетки (10.2.*.* и 10.3.*.*) там дублирование доступа к модулям УСО идет. Ну в общем то с разделением получилось. Но при этом у меня естественно отвалился АРМ локальный, который в 10 сетке сиди, они стали по MOdbus протоколу конфликтовать. Решил я тогда локальный АРМ сделать как станцию сервера по 10- сетки, и уперся в трабл. Не хочет у меня второй входящий транспорт организовываться, говорит - порт занят. :(. Что меня несколько удивило - до этого у меня на одной карте работало 2 транспорта (правда разных - входящий и выходящий). Завтра думать буду как лучше выкручиваться, Еще одну карту сажать не охота. |
Сообщение создано: 02. 08. 2016 [13:31]
|
|
Petr2off
Владимир Петров
Создатель темы
Зарегистрирован(а) с: 08.07.2015
Сообщения: 38
|
Каюсь, наговорил лишнего. Запустился у меня второй транспорт на том же интерфейсе. Виноват, надо читать внимательно до буквы и мелкий шрифт тоже. В оправдание скажу что слаб я зрением. Просто в строке коннекта задал порт, который не прописан в /etc/services. Сменил порт и заработало. :D |