УкраїнськаEnglishmRussian
Вход/Новый
В теме много сообщений

OpenSCADA как посредник посередине


Автор Сообщение
Сообщение создано: 06. 02. 2018 [18:12]
mobelus86
Paul Schmidt
Создатель темы
Зарегистрирован(а) с: 05.02.2018
Сообщения: 8
Здравствуйте. Удалось разобраться как работать с OpenSCADA в серверном режиме и в клиентском режиме.
Но что делать, если хочется использовать openSCADA "Посередине" между Клиентом и Сервером, причём:
Клиент на 1-ой машине (свой ip_1) <=> 2-ая машина "посередине" с openSCADA (свой ip_2) <=> Сервер находящийся на 3-ей машине. (свой ip_3)
Как в таком случае настроить в OpenScada входящий/исходящий Транспорты, или кто на что должен ссылаться ? Протокол везде Modbus.
Сообщение создано: 06. 02. 2018 [18:49]
ponysonata
Anastasia Anastasia
Зарегистрирован(а) с: 04.02.2018
Сообщения: 1
я бы сделала - мастером для ip1 и слейвом для ip3

ip1 - слейв
ip3 - мастер соотв.
Сообщение создано: 06. 02. 2018 [20:15]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"mobelus86" wrote:

Здравствуйте. Удалось разобраться как работать с OpenSCADA в серверном режиме и в клиентском режиме.
Но что делать, если хочется использовать openSCADA "Посередине" между Клиентом и Сервером,

Раз не хотите изучать демонстрацию, которая одновременно и сервер и клиент ModBus, а также не читаете документацию о модуле, где описан режим шлюза, чтобы данные не переваливать, то ничего не делайте!

P.S. Какое отношение этот и предыдущий вопрос имеет к документации, кроме того, что Вы её не читаете!?

Learn, learn and learn better than work, work and work.
Сообщение создано: 08. 02. 2018 [21:29]
mobelus86
Paul Schmidt
Создатель темы
Зарегистрирован(а) с: 05.02.2018
Сообщения: 8
Здравствуйте. На сколько смог ознакомился с демонстрационным видео и документацией и несколько продвинулся со своей исходной задачей. Отдельно извиняюсь за пост не в том разделе.

Итак, если принять в рамках задачи уже упомянутые пользователем ponysonata термины:
Slave - Сервер
Master - Клиент

"ponysonata" wrote:

я бы сделала - мастером для ip1 и слейвом для ip3

ip1 - слейв
ip3 - мастер соотв.


ponysonata Не до конца понимаю, как можно организовать всё так как вы описываете.

Как я на пока что понял мне необходимо построить следующую взаимосвязь:

3я машина (ip_3) – Сервер – Эмулятор Modbus Server (Slave) – условный ВХ.транспорт
|
v
Шлюз-Клиент – Client (Master) – Настройка шлюза на ??? транспорт
^
2ая машина “посередине” (свой ip_2) – Шлюз – OpenSCADA Gate (Client and Server)
v
Шлюз-Сервер – Server (Slave) – Настройка шлюза на ??? транспорт
|
v
1ая машина (ip_1) – Клиент – OpenSCADA Client (Master) – ВЫХ.транспорт


Задача именно такова – Получить данные от Сервера на 3-ей машине, через OpenSCADA-шлюз, стоящую на 2-ой машине перенаправить данные в конечном итоге на последнюю 1-ую машину, и чтобы они были успешно прочитаны в OpenSCADA-клиенте.



Пока получилось настроить следующие 2 части:
1) Подключение OpenSCADA-клиента к Серверу через настройку на OpenSCADA-е ВЫХодного транспорта, тэгов и т.д.

3я машина (ip_3) – Сервер – Эмулятор Modbus Server (Slave) – условный ВХ.транспорт
и
1я машина (ip_1) – Клиент – OpenSCADA Client (Master) – ВЫХ.транспорт

2) Установка соединения между OpenSCADA-сервером и OpenSCADA-клиентом с настройкой на Серверной стороне ВХодного транспорта и на Клиентской стороне ВЫХодного транспорта

2ая машина (ip_2) – Сервер – OpenSCADA Server (Slave) – ВХ.транспорт
и
1ая машина (ip_1) – Клиент – OpenSCADA Client (Master) – ВЫХ.транспорт


Эта часть казалось мне важной для выстраивания взаимодействия между 2-ой и 1-ой машинами, чтобы в будущем быстро настроить тем самым вот эту часть уже Шлюзового взаимодействия:

2ая машина “посередине” (свой ip_2) – Шлюз – OpenSCADA Gate (Client and Server)
v
Шлюз-Сервер – Server (Slave) – Настройка шлюза на ВХ.трансорт транспорт
|
v
1ая машина (ip_1) – Клиент – OpenSCADA Client (Master) – ВЫХ.транспорт



ПРОБЛЕМА: После того как я посмотрел на то, какие возможности настройки есть у режима Шлюза, у меня остались вопросы и недопонимания следующего толка:

ВЫХодной транспорт – Клиент Master – нужно настроить для того, чтобы ПРИНИМАТЬ данные с сервера, ибо именно в ВЫХодном транспорте мы указываем IP-шник места, где находится сервер.
А через Сбор данных -> Модуль -> Modbus -> +Наш_источник_данных. Внутри «Нашего_источника_данных» мы уже указываем именно этот самый ВЫХодной транспорт

ВХодной транспорт – Сервер Slave – мы настраиваем по IP-шнику, с которого клиент потом будет считывать данные, которые сервер будет ОТДАВАТЬ клиенту, согласно тем тегам, которыми мы наполним наш сервер. (Теги для которого мы определим в Транспортные протоколы -> ModBus -> Тест (Режим: Данные; ВХ.транспорт:Тот, который мы добавили))

ШЛЮЗ, который мы можем настроить в Транспортные Протоколы -> ModBUS -> gate
Умеет ПЕРЕНАВПРАВЛЯТЬ ВХодной транспорт на -> какой-то ВЫХодной транспорт.


То есть я надеялся получить, в результате движение данных по следующей схеме:
Сервер ip_3 (ВХ) –> Шлюз-Клиент (ВЫХ) -> ip_2 <- Шлюз-Сервер (ВХ) -> Клиент ip_1 (ВЫХ)

А в итоге получается, что, движение данных можно настроить только как-то так:
Сервер ip_3 (ВХ) ??? Шлюз-Сервер (ВХ) -> ip_2 -> Шлюз-Клиент (ВЫХ) ??? Клиент ip_1 (ВЫХ)

Подскажите, что именно я понимаю неверно, или где произвожу настройку некорректно?
Сообщение создано: 09. 02. 2018 [15:02]
mobelus86
Paul Schmidt
Создатель темы
Зарегистрирован(а) с: 05.02.2018
Сообщения: 8
Подскажите всего одну деталь.

Согласно описанию конфигурации узлов ModBus:
http://oscada.org/wiki/Modules/ModBus/ru#.D0.A0.D0.B5.D0.B6.D0.B8.D0.BC_.D1.83.D0.B7.D0.BB.D0.B0_.D0.BF.D1.80.D0.BE.D1.82.D0.BE.D0.BA.D0.BE.D0.BB.D0.B0_.22.D0.94.D0.B0.D0.BD.D0.BD.D1.8B.D0.B5.22

Настройка протокола Modbus в режиме ШЛЮЗА - позволяет только настроить перенаправление Входного транспорта (1) в какой-то Выходной транспорт (2) в рамках одной машины, на которой стоит openSCADA. То есть фактически позволяет нам перенаправить данные только с сервера (slave) на клиент (master). Но что делать, если хочется пробросить данные от клиента (которые он получает с сервера) на другой сервер, который будет распространять не свои данные а именно те, которые ему будет ретранслировать клиентская сторона ? Возможно ли такое ?

Ибо если мы можем организовать только движение данных исключительно от сервера к клиенту
Server to Client (или Input transport -> Output transport)

А в обратную сторону никак. То как же осуществлять переброс данных, если нельзя организовать переброс данных через например:
Server to Server
или
Client to Server
Сообщение создано: 09. 02. 2018 [15:54]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"mobelus86" wrote:

Настройка протокола Modbus в режиме ШЛЮЗА - позволяет только настроить перенаправление Входного транспорта (1) в какой-то Выходной транспорт (2) в рамках одной машины, на которой стоит openSCADA. То есть фактически позволяет нам перенаправить данные только с сервера (slave) на клиент (master). Но что делать, если хочется пробросить данные от клиента (которые он получает с сервера) на другой сервер, который будет распространять не свои данные а именно те, которые ему будет ретранслировать клиентская сторона ? Возможно ли такое ?

Это не шлюз тогда вовсе, а пересылка между серверами, третьим узлом, что во первый и основное не понятно зачем и во вторых прозрачно, абстрогировавшись от структуры PDU сделать нельзя (что делает шлюз).
А значить нужно на том клиенте, что пересылает сконфигурировать оба сервера с данными, пусть даже чтение их блоками-строкой, а затем отдельной процедурой копировать значение этих данных блоков из атрибутов одного сервера на другой.
Но ещё раз! Какой в этом смысл, если Сервер2 может сам взять всё нужное с Сервер1, поскольку они в одной сети.

"mobelus86" wrote:

А в обратную сторону никак. То как же осуществлять переброс данных, если нельзя организовать переброс данных через например:
Server to Server
или
Client to Server

Можно всё, понимать только нужно происходящее!

Learn, learn and learn better than work, work and work.
Сообщение создано: 12. 02. 2018 [10:13]
mobelus86
Paul Schmidt
Создатель темы
Зарегистрирован(а) с: 05.02.2018
Сообщения: 8
"roman" wrote:

не понятно зачем Какой в этом смысл, если Сервер2 может сам взять всё нужное с Сервер1, поскольку они в одной сети.


Понимаю, что выглядит странно и бессмысленно. По условию задачи необходимо организовать трёхзвенную схему передачи данных, где:
Сервер1 (Железный / Hardware) -> Сервер2 (программный / Software = OpenSCADA) -> Клиент (программный / Software = OpenSCADA)
Сервер1, который железный уже присутствует, остальные части, то есть Сервер2 и Клиент хочется как раз использовать OpenSCADA. Таковы просто условия исходной задачи.

"roman" wrote:

а затем отдельной процедурой копировать значение этих данных блоков из атрибутов одного сервера на другой.


Подскажите:
1) "отдельной процедурой" имеется ввиду через OpenSCADA или имеется ввиду процедура какой-то сторонней программы ?
2) "из атрибутов одного сервера на другой" подскажите как это можно сделать или в какой части документации есть информация, по данному вопросу ?
Сообщение создано: 12. 02. 2018 [11:06]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"mobelus86" wrote:

"roman" wrote:

не понятно зачем Какой в этом смысл, если Сервер2 может сам взять всё нужное с Сервер1, поскольку они в одной сети.


Понимаю, что выглядит странно и бессмысленно. По условию задачи необходимо организовать трёхзвенную схему передачи данных, где:
Сервер1 (Железный / Hardware) -> Сервер2 (программный / Software = OpenSCADA) -> Клиент (программный / Software = OpenSCADA)
Сервер1, который железный уже присутствует, остальные части, то есть Сервер2 и Клиент хочется как раз использовать OpenSCADA. Таковы просто условия исходной задачи.

Не понимаете, почему и рисуете структуру шлюза, а говорите про пересылку!
Т.е. из того что Вы говорите там:

Клиент (программный / Software = OpenSCADA)
.............<= Сервер1 (Железный / Hardware);
.............<= Сервер2 (программный / Software = OpenSCADA)

Сервер2 (программный / Software = OpenSCADA)
.............<= Сервер1 (Железный / Hardware);

Что реализуется стандартно и тут нет месту шлюзу, если Сервер2 кроме данных из Сервер1 ещё имеет собственные данные и функции, иначе он тут вообще лишний!

"mobelus86" wrote:

1) "отдельной процедурой" имеется ввиду через OpenSCADA или имеется ввиду процедура какой-то сторонней программы ?
2) "из атрибутов одного сервера на другой" подскажите как это можно сделать или в какой части документации есть информация, по данному вопросу ?

Естественно, процедурой OpenSCADA, а копировать используя API пользователя и в логическом контроллере LogicLev или JavaLikeCalc.
Хотя это явно лишнее, исходя из описанного выше!

Learn, learn and learn better than work, work and work.
Сообщение создано: 14. 02. 2018 [11:16]
mobelus86
Paul Schmidt
Создатель темы
Зарегистрирован(а) с: 05.02.2018
Сообщения: 8
Да ретрансляция важна.
Ведь openSCADA, которая стоит на 2-ой машине должна одновременно и получить данные с железного сервера, который стоит на 1-ой машине и передавать эти полученные данные на 3-тью машину, где стоит ещё одна openSCADA, которая должна быть последним конечным клиентом, принимающим информацию.

Роман, вы верно указали причину, почему выбрана такая схема работы (передачи данных до клиента):

"roman" wrote:
если Сервер2 кроме данных из Сервер1 ещё имеет собственные данные и функции,


ибо c 1-ой машины приходят свои данные, а на 2-ой хочется получить данные с 1-ой, на 2-ой машине провести с ними некоторые манипуляции и передать результат на 3-тью машину


Исходя из того, что я нашёл тут:
http://wiki.oscada.org/Doc/OpisanieProgrammy/part3
Мне необходимо реализовать вариант «3.2. Дублированное серверное подключение.»
Возможно мне так же подойдёт вариант с «3.8. Устойчивая, распределённая конфигурация.»

1) Вопрос мой тут только в том, как это сделать чисто технически ? По пункту 3.8 пока изучаю описание, которое присутствует по ссылке.


По поводу
"roman" wrote:

используя API пользователя и в логическом контроллере LogicLev или JavaLikeCalc.


Внутри данного раздела:
http://wiki.oscada.org/Doc/ModBus#h592-7
Нашёл часть про 2.1. API функции исходящих запросов

2) Если я верно понимаю, то можно использовать messIO() для пересылки данных между моими двумя серверами, о которых я говорил в сообщениях выше ?

Осуществлять это возможно, через настройку Transport Protocols -> User Protocol и используя возможности JavaLikeCalc.
Остаётся один вопрос - Как переслать данные из пользовательского протокола в ModBus


3) Есть ли возможность данные из БД одной openSCADA, которая запущенна на первой машине забрать и поместить в БД на второй openSCADA, которая запущенна на второй машине ?



Пока разбирался с остальным заметил, что к openSCADA по мимо прочего можно подключиться через Web. В итоге настроил всё как мне надо с использованием браузера, а именно вот так:

1-ая машина с железным сервером
2-ая машина с openSCADA, на которой
2.1 настроен ВЫХоднрой транспорт на железный сервер соответственно. На 2-ой машине я настроил свою мнемосхему, которая получает данные с 1-ой машины.
2.2 так же настроен ВХодной транспорт для WEB подключения через HTTP протокол на отдельный ip-шник с портом (*).
3-тья машина в которой в браузере указал вышеупомянутый ip-шник с портом (*) и получил в браузере нужную мне работающую мнемосхему

Именно такое взаимодействие и хочется организовать как раз. Только получать данные и работающую мнемосхему отображать на 3-ей машине не в браузере, а в ещё одной openSCADA.
Вот в таком описании надеюсь теперь максимально точно будет понятно, что я хочу получить в итоге

4) Подскажите как настроить именно такое взаимодействие ?
Сообщение создано: 14. 02. 2018 [13:58]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"mobelus86" wrote:

Да ретрансляция важна.

Не нужна!

"mobelus86" wrote:

ибо c 1-ой машины приходят свои данные, а на 2-ой хочется получить данные с 1-ой, на 2-ой машине провести с ними некоторые манипуляции и передать результат на 3-тью машину

Что и требовалось доказать — второй сервер лишний, поскольку "провести с ними некоторые манипуляции" может сам клиент.
А если нужно реальное резервирование то это делается на одном уровне с конечным клиентом, т.е. нужно Server2 поднять до уровня клиентов и назвать Client2. Настройка резервирования в документации детально описана!

Learn, learn and learn better than work, work and work.



0616