PDA

Просмотр полной версии : Два мастера в сети Ethernet



spinogryz57
26.01.2015, 18:54
Здравствуйте, Уважаемые!

Я окончательно запутался в этих сетях))

Имеется лок. сеть в ней 6 устройств (схемка во вложении) OPCсервер(мастер), который опрашивает ПЛК1 и СПК1 "зеленая зона"
А теперь еще понадобилось, что бы ПЛК2 обменивался данными с ПЛК3,4 "красная зона".

Я так понял, что два мастера в сети быть не может? а если ПЛК2 будет слейв он сможет взаимодействовать с ПЛК3,4 ?
И еще, существует документация о том, как реализовать "обмен" переменными между ПЛК100 в сети Ethernet?:)

melky
26.01.2015, 21:39
И что мешает ? делите на порты и все, это же ТСP а не 485, по одному порту плк может быть слейвом, по другому порту мастером.

Scream
26.01.2015, 22:16
Документация существует, где-то в полезностях было.
Не путайте интерфейсы, в сети RS 485 не может быть более 1 мастера, как подметил melky, в ethernet нечто другое, сокеты.

"а если ПЛК2 будет слейв он сможет взаимодействовать с ПЛК3,4 ?"
Что значит взаимодействовать? Опрашивать?

В целом я не понял проблему.

В зеленой зоне как понял всё хорошо.
В красной зоне настроите по найденому примеру обмен между плк2, плк3 и плк4. Подумайте о RS485, надежней будет и легче в 2 раза.

При этом вам не надо соединять красную и зеленую зону?
__________________________________________________
И как там дела с пробросом? Получилось? Какого решение?

spinogryz57
26.01.2015, 23:47
melky,Scream, и снова Вы спасаете человечество - спасибо))


И что мешает ? делите на порты и все, это же ТСP а не 485, по одному порту плк может быть слейвом, по другому порту мастером.

А порты меняются в ModBus (Slave) > TCP > Remote Port? (См. во вложении)
Т.е. я должен добавить ModBus (Master) > TCP а в Remote Port указать другой номер порта?


Документация существует, где-то в полезностях было.
Не путайте интерфейсы, в сети RS 485 не может быть более 1 мастера, как подметил melky, в ethernet нечто другое, сокеты.

"а если ПЛК2 будет слейв он сможет взаимодействовать с ПЛК3,4 ?"
Что значит взаимодействовать? Опрашивать?

Хм... сокет - почитаю!

Да, опрашивать. Смысл такой, что как вы помните через интернет я могу подключиться только к одному ПЛК (на схеме ПЛК2). Так вот надо, что бы я через него управлял другими ПЛК в сети.


В целом я не понял проблему.

Плохо у меня с терминологией, поэтому и не понятно))



В зеленой зоне как понял всё хорошо.
В красной зоне настроите по найденому примеру обмен между плк2, плк3 и плк4. Подумайте о RS485, надежней будет и легче в 2 раза.

Да, в зеленой зоне OPC опрашивает ПЛК1 и СПК1 (и что то я припоминаю, что там в ПЛК100 я добавлял ModBus Slave > TCP) и там все нормально работает.

RS485 не получится т.к. шкафы сильно разнесены, да плюс ко всему на них модули расширения навешаны.


При этом вам не надо соединять красную и зеленую зону?
__________________________________________________
И как там дела с пробросом? Получилось? Какого решение?

Обе зоны нужны, в идеале и ПЛК1 и СПК1 будут управляться(опрашиваться) ПЛК2, но это позже пока я тренируюсь на кошках))
__________________________________________________ ____
Пробросил все работает но только для одного ПЛК т.к. порт 1200 можно использовать только один раз даже для разных IP, а тех. поддержка тренднета еще не ответила.

melky
27.01.2015, 10:51
spinogryz57 да, если через конфигуратор, то это оно.

Scream
27.01.2015, 10:59
"А порты меняются в ModBus (Slave) > TCP > Remote Port? (См. во вложении)"
В яблочко.

В Modbus master добавляете устройство которое будете опрашивать (Universal Modbus device)
В Universal Modbus device -> параметры модуля ищем NetMode ставим TCP. Настраиваем SlaveAdress. Как опрашивать (по команде\по таймеру...) и TCPport это порт в SLAVE (Remote Port тот самый).

Итак. Наверное я понял.

ПЛК2 (из красной зоны) является Slave(для OPC из зеленой) и Master'ом для ПЛК4 и ПЛК3 (из красной).
Тоесть ПЛК2 опрашивает ПЛК3 и ПЛК4 -> копирует в свой модуль Slave для которого является мастером OPC, короче OPC опрашивает крайние плк через средний.

Если так, то это не правильно (если самому ПЛК2 не нужны эти данные).
Проще будет пробросить порты на все ПЛК и если нет возможности использовать 1 внутренний порт роутера, то просто ставим другие о чем вы спрашиваете в первой строке.

melky
27.01.2015, 12:33
Интересно, в Codesys есть передача глобальных переменных по multicast ?
Передача глобальных переменных точно есть

spinogryz57
27.01.2015, 20:56
Итак. Наверное я понял.

:D Во вложении схема.

Зеленые линии - то, что опрашивает OPC.
Синии линии - Ethernet
Черные линии - показывают, кто и чем должен управлять (или взаимодействовать или опрашивать...)

Смысл всей идеи в том, что бы я мог останавливать работу любой установки (на одну установку один ПЛК) удаленно.
И самое главное, что бы при отключении ПЛК2 от сети(интернет) все установки прекращали работу.

P.S. Вреде я понял в какую сторону копать, на выходных попробую - Спасибо!))

melky
27.01.2015, 23:06
лучше разобраться с сетью, чем изобретать велосипед
Разобраться с передачей глобальных переменных в CDS, например какой-нить бит состояния с каждого плк каждому и согласно этому построить алгоритм отключения. В том числе и удаленно через скаду.

Ну и с сетью тоже разбираться, чтобы не ходить на каждый плк через задний проход.

spinogryz57
30.01.2015, 20:17
И это снова я:)

Начал пробовать реализовать "общение" ПЛК100 по сети Ethernet и возник ряд вопросов:

Про мастера сети (скрин во вложении)

Для передачи шести переменных(BOOL) другим контроллерам, правильно ли я добавил "8 bit output module" ?
Или для каждого ПЛК надо создавать свой "Universal Modbus device" и указывать свой порт?
ModuleIP - Тут надо что то прописывать или IP контроллера и так достаточно?
ModuleSlaveAddress - Я так понимаю этот адрес произвольный, как и при RS485?

Про слейв устр-а сети (скрин во вложении)

Тут я вообще не знаю какой подэлемент добавлять, что бы "принять" переменные от мастера сети.


P.S. Извеняйте, если вопросы банальные, просто без ответов на них не получается двигаться дальше.

capzap
30.01.2015, 22:49
так если Вам одну и туже информацию надо раздать на шесть контроллеров, легче библиотеками организовать связь по UDP, сервер раздает что имеет, а кто подключился к порту тот и принимает данные

spinogryz57
30.01.2015, 23:03
так если Вам одну и туже информацию надо раздать на шесть контроллеров, легче библиотеками организовать связь по UDP, сервер раздает что имеет, а кто подключился к порту тот и принимает данные

Информация разная. Всего шесть переменных, по одной на каждый контроллер.

capzap
30.01.2015, 23:04
Информация разная. Всего шесть переменных, по одной на каждый контроллер.

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

spinogryz57
31.01.2015, 08:44
и что это меняет, передавайте вместе с данными метку кто это должен прочитать

А библиотека OwenNet? Я к ней описание найти не могу что то.

spinogryz57
31.01.2015, 20:11
Убил целый день и понимание ситуации так и не пришло:)

В сети (Ethernet) всего 2 контроллера 1мастер 2слейв и для понимания надо передать хоть что нибудь от одного другому))
Ну например значение "1" (я добавил Float) от слейва к мастеру сети.
Что у меня не так? (я понимаю что многое, но хочется знать конкретно)

capzap
31.01.2015, 20:35
Убил целый день и понимание ситуации так и не пришло:)

В сети (Ethernet) всего 2 контроллера 1мастер 2слейв и для понимания надо передать хоть что нибудь от одного другому))
Ну например значение "1" (я добавил Float) от слейва к мастеру сети.
Что у меня не так? (я понимаю что многое, но хочется знать конкретно)
так документацию надо же почитывать иногда перед сном :) какой интерфейс у Вас слушает мастер, последовательный? Какие адреса у плк, лучше в виде скринов PLCInfo?

petera
31.01.2015, 20:52
Убил целый день и понимание ситуации так и не пришло:)

В сети (Ethernet) всего 2 контроллера 1мастер 2слейв и для понимания надо передать хоть что нибудь от одного другому))
Ну например значение "1" (я добавил Float) от слейва к мастеру сети.
Что у меня не так? (я понимаю что многое, но хочется знать конкретно)
То, что видно из картинок
16499
Через ПЛК-Браузер посмотрите какой IP у второго ПЛК. Неправильный режим работы UMD и в нем неправильный модуль чтения регистра из слейва.

По слейву
16500

По картинкам всего не видно, нужно проекты выкладывать.
Надеюсь, ВЫ понимаете, что каждый ПЛК должен иметь уникальные IP, которые должны быть в одной подсети. А какие IP Вы назначили каждому ПЛК неизвестно.

Начните с примера, который есть и на диске и на форуме, в разделе "Примеры программ..." http://kipshop.ru/Primeri/Samples_plc1xx/Communication/02_Modbus%20TCP.zip

spinogryz57
31.01.2015, 21:28
так документацию надо же почитывать иногда перед сном :)

Читал, там куча матерных слов: Word, DWord, Coils, регистр, 0х03-чтение регистров, 0х01-чтение битов, адрес Modbus регистра, адрес контроллера, выравнивание области памяти, флоты там всякие и т.д.:confused:


какой интерфейс у Вас слушает мастер, последовательный?

Я думаю, что параллельный (Ethernet)
16506


Какие адреса у плк, лучше в виде скринов PLCInfo?

16505

capzap
31.01.2015, 21:36
а надо читать PLC_Configuration_OWEN.pdf 3.2 Модуль Modbus(Мастер) такие параметры универсального модуля модбас как IP-адрес (Module IP) и Режим работы сети (NetMode), собственно petera уже дал наглядные пояснения

spinogryz57
31.01.2015, 22:10
petera, Большое Вам спасибо за довольно понятные замечания на скриншотах и огромное спасибо за пример. А я глупец даже и не подумал открыть папку с примерами.:o

capzap, И Вам большое спасибо!

Все заработало! Надеюсь, что дальше я допру сам как это применить к моей ситуации:D

spinogryz57
01.02.2015, 20:59
А можно как то сделать, что бы когда переменная (скажем "opapa") стала False ПЛК остановил выполнение цикла? (по аналогии нажатия кнопки стоп на панели ПЛК)
Где то мне это попадалось, а найти не могу((

capzap
01.02.2015, 21:55
А можно как то сделать, что бы когда переменная (скажем "opapa") стала False ПЛК остановил выполнение цикла? (по аналогии нажатия кнопки стоп на панели ПЛК)
Где то мне это попадалось, а найти не могу((
а что просто первой строчкой поставить условие с ретурном не подходит, обязательно надо в стоп уходить?

spinogryz57
01.02.2015, 22:47
а что просто первой строчкой поставить условие с ретурном не подходит

Первой строчкой где? и что такое ретурн?:D:confused:

Мне нужно, что бы значения переставали передаваться на SCADA (во вложении скрин проекта)

capzap
01.02.2015, 22:52
создаете в левом верхнем углу элемент с en/eno, пишите там слово return, входу En приставляете переменную блокирующую работу.
:) И всё это Вас не спасает, потому что слейв конфигуратора работает даже если программа находится в состоянии стоп

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

spinogryz57
01.02.2015, 23:33
ЗЫ где Вы оставили свою логику, если скада как мастер не должна принимать данные от слейва, то зачем посылать в плк какую либо переменную, для чего?

Ды вот подумал, что вечер воскресенья идеально подходит для того что бы потупить:D

Спасибо!

spinogryz57
04.02.2015, 13:12
Столкнулся с проблемой:)

Мастер (сеть Ethernet) запросил у слейва состояние переменной "shk9" (было TRUE) тут все путем, но когда слейв отключаешь от сети состояние переменной не изменяется.
Я так понимаю, что так и должно быть т.е. мастер запрашивает состояние переменной, а так как слейва в сети нет, то и ответа нет и он его (состояние) оставляет прежним?

А вот можно ли как то сделать так, что бы при отсутствии слейва в сети он(мастер) присваивал переменной FALSE?

P.S. Извиняйте за коряво поставленный вопрос))

melky
04.02.2015, 17:48
Проверяйте связь и обнуляйте в программе

Scream
04.02.2015, 18:41
Предвижу что следующий вопрос будет как проверить связь.

Вобщем есть в конфигураторе "Last error" так вот, если там 0, то все норм, если 81, то ошибка, могу ошибаться, уточнить коды ошибок можете в инструкции к конфигуратору в приложении.
Если у вас один слейв, то так решите проблему, если несколько, то эта ошибка будет привязана к номеру слейва, который в свою очередь отображается в "Last address".

spinogryz57
04.02.2015, 20:05
Предвижу что следующий вопрос будет как проверить связь.
:D

Сеть работает отлично! Слейв устр-во намеренно аппаратно(физически) отключают от сети. И надо, что бы мастер не получив ответ от слейва перевел переменную в FALSE.

Смысл в том, что бы когда ПЛК(Slave) негодяи отключат от сети, все ПЛК(Master) это поняли.
Я по незнанию предположил, что если мастер при опросе слейва не получит ответа, то переведет переменную в состояние FALSE.

spinogryz57
04.02.2015, 20:23
Пытался использовать переменную "Last error", но она word, а у меня весь проект на LD наколякан.
А word_to_bool на LD как я понял не работает))

capzap
04.02.2015, 20:52
Пытался использовать переменную "Last error", но она word, а у меня весь проект на LD наколякан.
А word_to_bool на LD как я понял не работает))чего это не работает

spinogryz57
04.02.2015, 21:17
чего это не работает

Мда... А я этот блок между переменными вставлял))
Теперь получилось - спасибо!

Scream
04.02.2015, 21:19
Всё должно работать.
Не можете через гору, обойдите её...
Может просто IF last error > 0 THEN veryGood := true ?
Документа рядом нет, но если не ошибаюсь, то всё что отличное от 0 это хорошо.

Scream
04.02.2015, 21:22
...
Смысл в том, что бы когда ПЛК(Slave) негодяи отключат от сети, все ПЛК(Master) это поняли.
...


Все плк мастер поняли?
Ну вы же помните, что в одной сети может быть только один мастер.

spinogryz57
04.02.2015, 21:35
Scream, Все получилось!

P.S. Получилось даже лучше, чем я хотел. Всем ОГРОМНОЕ спасибо! Рад, что не послали:)