Обмен между 8 шт. S7-1200

Промышленные Логические Контроллеры SIMATIC S7-200/300/400
Alex3110
Posts: 159
Joined: Mon Sep 27, 2010 7:17 pm

Обмен между 8 шт. S7-1200

Post by Alex3110 »

Всем привет !

Делаю проект с ПЛК S7-1200 (8 шт.), каждый с CPU 1214C.
Связь - по встроенному в CPU Profinet - интерфейсу.
Какой протокол лучше выбрать (или какой подойдёт), если каждый из 8 CPU S7-1200 должен периодически быть то "сервером", то "клиентом" ?
А именно:
- если происходит какое-либо событие, которое отслеживает CPU1, то он должен отправить бит сообщения другим CPU2 ... CPU7;
- если происходит какое-либо событие, которое отслеживает CPU2, то он должен отправить бит сообщения другим CPU1, CPU3 ... CPU7;

и так далее.

Возможно ли в моём случае такое в принципе, т.е. каждый ПЛК то "сервер", то "клиент" ?
Если нет, то как тогда настроить обмен ?
Какой (какие) протоколы (S7-connection, "Open User Communication" или др.) подойдут ?

Ранее никогда не приходилось настраивать обмен данными между PLC, да ещё и между 8 шт.

Заранее благодарен.
Yaroslav-70
Posts: 44
Joined: Mon Dec 15, 2014 10:48 am

Re: Обмен между 8 шт. S7-1200

Post by Yaroslav-70 »

PUT-GET(Ethernet), вот здесь: https://www.youtube.com/watch?v=2-uiKhyp8RQ , показано на примере 2-х ЦПУ, но можно и больше(пробовал до 10, больше у меня не получилось).
Dfcz
Posts: 878
Joined: Tue Dec 26, 2006 5:21 am
Location: Russia

Re: Обмен между 8 шт. S7-1200

Post by Dfcz »

Они могут сразу быть и сервером и клиентом, зачем то … то..?
Начните с двух, а то сразу 8.
Или это диплом?
Alex3110
Posts: 159
Joined: Mon Sep 27, 2010 7:17 pm

Re: Обмен между 8 шт. S7-1200

Post by Alex3110 »

Нет, увы, это не диплом, а реальная задача. Диплом-то можно было бы, по привычке у кого-нибудь "содрать" :)
Yaroslav-70 wrote: Mon Jul 01, 2019 11:12 am PUT-GET(Ethernet), вот здесь: https://www.youtube.com/watch?v=2-uiKhyp8RQ , показано на примере 2-х ЦПУ, но можно и больше(пробовал до 10, больше у меня не получилось).
Да мне 10 шт. PLC то и не надо, достаточно 8.

Вот тут :
"Максимальное количество соединений для порта PROFINET
Порт PROFINET на CPU поддерживает следующие одновременные соединения для обмена данными.
● 3 соединения для обмена данными между устройством человеко-машинного интерфейса и CPU
● 1 соединение для обмена данными между устройством программирования (PG) и CPU
● 8 соединений для коммуникаций программы S7-1200 с помощью команд типа T-блоков (TSEND_C, TRCV_C, TCON, TDISCON, TSEN, TRCV)
● 3 соединения для пассивного CPU S7-1200, обменивающегося данными с активным CPU S7
– Активный CPU S7 использует команды GET и PUT (S7-300 и S7-400) или команды ETHx_XFER (S7-200).
– Активное коммуникационное соединение S7-1200 возможно только с помощью команд типа T-блоков."

GET и PUT упоминаются всего только для 3-х соединений. Чёт непонятно.

Вопрос в том, можно ли сконфигурировать S7-1200 так (неважно с помощью каких коммуникационных системных блоков), чтобы он когда надо работал как "client" (т.е. инициировал обмен), а когда надо сам выступал в роли server - ра (т.е. просто получал данные от другого "клиента").
И так для каждого из 8-шт. PLC.

И как это сделать ?
Попозже гляну видео, пока доступа нет к нему. Надеюсь, что это то, что мне нужно.
Dfcz
Posts: 878
Joined: Tue Dec 26, 2006 5:21 am
Location: Russia

Re: Обмен между 8 шт. S7-1200

Post by Dfcz »

Если уж так надо отдельно по времени принимать и отдельно по времени отправлять, так вызывайте команды (или функции,называйте, как хотите, TSEND_C, TRCV_C) по времени.

П.С. Думается мне, что вы не точно сформулировали вашу задачу?
Alex3110
Posts: 159
Joined: Mon Sep 27, 2010 7:17 pm

Re: Обмен между 8 шт. S7-1200

Post by Alex3110 »

Задача такая.
Только у 5-ти PLC1…PLC5 из 8-ми будет информация, которую они должны передавать всем остальным, по мере её изменения. Данных очень мало. Это биты, и их не более 2-х слов. Биты – это состояния каких-то «концевиков» и ручных переключателей.
Если у какого-то из PLC1…PLC5 есть обновлённые данные, например у PLC3, то он должен передать их всем остальным 7-ми, т.е. PLC1, PLC2, PLC4…PLC8 .
И так для любого из PLC1…PLC5.

Чисто теоретически, инициировать обмен, наверное, может любой из всех PLC.
Если так, то я вижу 2 варианта для решения задачи организации обмена.

Вариант 1
Можно сделать один PLC «клиентом» (т.е. инициатором обмена) и пусть это будет PLC1, а остальные – «серверами».
Но в этом случае этот «клиент» PLC1 должен будет постоянно вести опрос остальных PLC2…PLC5 и сеть будет постоянно загружена этими посылками. А сеть – это обычные телефонные кабели с ADSL-модемами.
И потом, в случае отказа этого PLC1 (или обрыва линия связи к этому PLC1), весь обмен прекратится.

Поэтому напрашивается второй вариант.

Вариант 2
Если возможно, то :
- чтобы не грузить лишнего сеть ;
- чтобы повысить надёжность обмена

сделать так, чтобы любой из PLC1…PLC5 становился «клиентом» и инициировал обмен только тогда, когда у него в «поле» что-то изменилось.
Ну и, к примеру, раз в 2 минуты посылал бы всем остальным 7 шт. PLC дежурные запросы на «живучесть».

Т.е. мне :
1. Сначала нужно понять, какой из вариантов 1, 2 лучше использовать.
2. Потом – с помощью каких протоколов и коммуникационных блоков организовать обмены между всеми PLC для выбранного варианта.
Dfcz
Posts: 878
Joined: Tue Dec 26, 2006 5:21 am
Location: Russia

Re: Обмен между 8 шт. S7-1200

Post by Dfcz »

сделать так, чтобы любой из PLC1…PLC5 становился «клиентом» и инициировал обмен только тогда, когда у него в «поле» что-то изменилось.
Как вы себе представляете "инициализацию"?
Сразу при включении еще до начала работы самой программы на уровне "железа" идет формирование сети. Это уже обмен данными. Причем на нескольких уровнях. И любой сбой приведет к потере связи.
А вы боитесь, что ваши биты "не пролезут"?
Мне кажется, что постоянный обмен данными между процами или обмен данными по времени ничем не отличаются в плане сбоев в сети.
И я не представляю, как можно в процессе работы процессоров "инициализировать" обмен с указанием параметров сети и в частности, кто сервер и кто клиент.
Как по мне, в вашем случае можно как-то синхронизировать по времени команды отправки на одном проце и команды приемки данных на других процессорах, хотя повторюсь, это не защитит от сбоев в сети, если они могут быть. (т.е. в сети все процы и отправляют и принимают, но сами команды синхронизированы по времени, а сама конфигурация сети всегда одинаковая)
Alex3110
Posts: 159
Joined: Mon Sep 27, 2010 7:17 pm

Re: Обмен между 8 шт. S7-1200

Post by Alex3110 »

Всё, что я написал - это всего лишь смесь того, что я прочитал в документации по "Communications" и того, что мне нужно реализовать в проекте.
Я ничуть не претендую на истину в последней инстанции, вполне возможно я что-то не до конца пока понимаю.
....т.е. в сети все процы и отправляют и принимают, ...
т.е. надо ли это понимать так, что я в каждом из 8 PLC могу запрограммировать определённые коммуникационные блоки и программно, в нужный момент времени, могу вызывать нужный из них, чтобы послать любому из 7 других PLC запрос на "передачу ему" или "получение от него" нужных данных ?

А могу я, к примеру, использовать для этого S7-communication и блоки GET и PUT ?
И если нет, то почему ?
Yaroslav-70
Posts: 44
Joined: Mon Dec 15, 2014 10:48 am

Re: Обмен между 8 шт. S7-1200

Post by Yaroslav-70 »

Ну обычно эти блоки GET/PUT или TSEND_C/TRCV_C(как-на меня одно и тоже) инициализируются внутренними меркерами(обычно 1 или 10Гц), что мешает активировать прием/передачу по какому-то событию.В любом случае тебе в настройках этого блока нужно указать ЦПУ-партнера и ДБ из/в который будет записываться/читаться информация от ЦПУ-партнера и так для каждого ЦПУ. Т.е. в твоем случае у тебя в каждом ЦПУ будет 7 TSEND с 7-ю ДБ передаваемых данных, и, соответственно 7 TRCV со своими ДБ с принятой инфой. Как-то так в общих чертах.
Вернее, может я не совсем правильно выразился, 1 или 10Гц не инициализируют, а задают частоту чтения/записи.
Dfcz
Posts: 878
Joined: Tue Dec 26, 2006 5:21 am
Location: Russia

Re: Обмен между 8 шт. S7-1200

Post by Dfcz »

Все немного не так, но примерно похоже.
т.е. надо ли это понимать так, что я в каждом из 8 PLC могу запрограммировать определённые коммуникационные блоки и программно, в нужный момент времени, могу вызывать нужный из них, чтобы послать любому из 7 других PLC запрос на "передачу ему" или "получение от него" нужных данных ?
Да, так, и это относится к любым видам связи по Сименс-протоколам.
НО! Надо одновременно запускать ПУТ и ГЕТ на двух процах, о чем я и писал, что для вашего "странного" случая нужно как-то синхронизировать запуск этих блоков (функций).
Я бы сначала без этих условий настроил связь, получил обмен данными, а потом бы уже решал, что ай-ай сеть перегружена, надо запускать обмен по времени.

П.С. Коль уж пошла такая пьянка. В общем случае так не делают, как вы хотите: куча процев и обмен через задницу. А поднимают OPC сервер или другой какой и устаивают уже обмен как только заблагорассудится.
sania
Site Admin
Posts: 1387
Joined: Sat Aug 13, 2005 6:15 am

Re: Обмен между 8 шт. S7-1200

Post by sania »

А если посмотреть в сторону модбаса?
Alex3110
Posts: 159
Joined: Mon Sep 27, 2010 7:17 pm

Re: Обмен между 8 шт. S7-1200

Post by Alex3110 »

sania wrote: Wed Jul 03, 2019 2:06 pm А если посмотреть в сторону модбаса?
Боюсь, что не получится. Перепроектировать уже сделанный и сданный проект и докупать коммуникационные "модбасовские" модули уже никто не будет. Если Вас смущает телефонная линия в качестве связи, то в будущем таки планируется заменить всё на "оптику". Т.е. однозначно нужно использовать в качестве интерфейса - Profinet, который имеется в каждом из "проектных" CPU.

Сложность ещё и в том, что пока у меня нет ни одного CPU и когда будет их поставка известно только примерно. Если были хотя бы 2 шт.(а лучше - все), то можно было бы применить метод "научного тыка" и пробовать все мыслимые и не очень варианты. Но как я понял, протестировать коммуникации, хотя бы даже между двумя CPU, в режиме симуляции (как это делается с помощью "PLCSIM") - не получится :( , и для проверки правильности настройки нужны реальные ЦПУ.
Alex3110
Posts: 159
Joined: Mon Sep 27, 2010 7:17 pm

Re: Обмен между 8 шт. S7-1200

Post by Alex3110 »

Yaroslav-70 wrote: Wed Jul 03, 2019 11:58 am Ну обычно эти блоки GET/PUT или TSEND_C/TRCV_C(как-на меня одно и тоже) инициализируются внутренними меркерами(обычно 1 или 10Гц), что мешает активировать прием/передачу по какому-то событию.
Да, я не уточнил, что задержка передачи изменённого состояния какого-либо бита - не критична. Если ПЛК-7 получит его от ПЛК-1 только через 5 секунд (даже 10 сек.) -пофиг, лишь бы получил. Но я так понимаю, что я могу в коде программы зарядить какой-нибудь таймер-меандр и на 5 сек. (и на любое время) и по нему, циклически вызывать эти GET/PUT или TSEND_C/TRCV_C . Или разве нельзя по наступлению изменения бита взводить какой-нибудь триггер, который будет разрешать вызов(работу) блоков GET/PUT (или TSEND_C/TRCV_C) . Обмен произошёл, триггер сбросился и запретил вызов(работу) тех блоков.
Alex3110
Posts: 159
Joined: Mon Sep 27, 2010 7:17 pm

Re: Обмен между 8 шт. S7-1200

Post by Alex3110 »

Dfcz wrote: Wed Jul 03, 2019 1:10 pmНО! Надо одновременно запускать ПУТ и ГЕТ на двух процах, о чем я и писал, что для вашего "странного" случая нужно как-то синхронизировать запуск этих блоков (функций).
А как тогда организуется синхронизация запуска "PUT" на одном ЦПУ и "GET" на другом в других случаях, где всё попроще ?
Разве коммуникац. блок "PUT" (или другой какой SFB или SFC), запущенный любой момент времени на одном ЦПУ не может имееть прямого доступа к какому-нибудь DB в ЦПУ-партнёре, куда он собирается передавать данные ? Например, кинул туда "1"-цу (или число INTEGER для помехозащищённости), потом ЦПУ партнёр считал оттуда и понял, что с ним хотят общаться и запустил свой блок "GET".
Dfcz wrote: Wed Jul 03, 2019 1:10 pm Я бы сначала без этих условий настроил связь, получил обмен данными, а потом бы уже решал, что ай-ай сеть перегружена, надо запускать обмен по времени.?
Ну на самом деле "перегрузка" сети, наверное, не так страшна, т.к. :
- задержка передачи бита состояния между ЦПУ даже до 5 сек. - не критична, лишь бы передалось ;
- вскорости телефонные кабеля обещали заменить на "оптику"

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

Да мне уж и не до "красивостей" разных.
Пойдёт даже и через "НЕпередницу" :-), лишь бы работало.
Dfcz
Posts: 878
Joined: Tue Dec 26, 2006 5:21 am
Location: Russia

Re: Обмен между 8 шт. S7-1200

Post by Dfcz »

...
Разве коммуникац. блок "PUT" (или другой какой SFB или SFC), запущенный любой момент времени на одном ЦПУ не может имееть прямого доступа к какому-нибудь DB в ЦПУ-партнёре, куда он собирается передавать данные ? Например, кинул туда "1"-цу (или число INTEGER для помехозащищённости), потом ЦПУ партнёр считал оттуда и понял, что с ним хотят общаться и запустил свой блок "GET".
ПУТ и ГЕТ и другие так не могут. Так можно в ГлобалДата сделать, но в 3ХХ а в 1200 не знаю.
Dfcz
Posts: 878
Joined: Tue Dec 26, 2006 5:21 am
Location: Russia

Re: Обмен между 8 шт. S7-1200

Post by Dfcz »

(или число INTEGER для помехозащищённости)
А это уже фантазмы, которые к помехозащищенности никакого отношения не имеют.
Помехозащищенность (в Сименсах и в других подозреваю тоже) обеспечивается на нижних уровнях, а не на уровне "передачи 1-цы".
sania
Site Admin
Posts: 1387
Joined: Sat Aug 13, 2005 6:15 am

Re: Обмен между 8 шт. S7-1200

Post by sania »

А докупать ничего не надо
Модбас тсп работает вместе с профинетом и на одном и том же профинет разъёме
И не имеет ограничений по количеству связей
Dfcz
Posts: 878
Joined: Tue Dec 26, 2006 5:21 am
Location: Russia

Re: Обмен между 8 шт. S7-1200

Post by Dfcz »

И, кстати сказать, модбас уж точно не будет грузить сеть.
Alex3110
Posts: 159
Joined: Mon Sep 27, 2010 7:17 pm

Re: Обмен между 8 шт. S7-1200

Post by Alex3110 »

sania wrote: Thu Jul 04, 2019 6:41 am А докупать ничего не надо Модбас тсп работает вместе с профинетом и на одном и том же профинет разъёме И не имеет ограничений по количеству связей
А я думал, что если Modbus, то обязательно RS-485 -тый интерфейс. :o Наверное это и есть Modbus RTU :)
Но опять же я попадаю на систему "мастер"-"раб". (см. "Вариант 1"). Т.е. в системе постоянно будет только один ПЛК-"мастер", а все остальные ПЛК - "рабы" ? Тогда, чтобы надёжность не пострадала, придётся программно это учесть. Например, пусть мастер - ПЛК1. Тогда ПЛК2, контролирует обмен у себя, и если в течение, например, 20 сек. если не поступает от "мастера" запрос на обмен, то ПЛК2 сам берёт на себя функции "мастера" и продолжает дело своего "собрата".
Так получается ?
sania
Site Admin
Posts: 1387
Joined: Sat Aug 13, 2005 6:15 am

Re: Обмен между 8 шт. S7-1200

Post by sania »

Нет
1х00 могут быть и сервером и клиентом одновременно.
В прогу проца ставишь 1 блок сервера в него будут все другие кидать инфу,
И 7 клиентов через них проц будет раскидывать по всем остальным свою инфу...
Главное ID соединений были разные
Alex3110
Posts: 159
Joined: Mon Sep 27, 2010 7:17 pm

Re: Обмен между 8 шт. S7-1200

Post by Alex3110 »

sania wrote: Thu Jul 04, 2019 8:17 pm 1х00 могут быть и сервером и клиентом одновременно.
Т.е. имеете ввиду все "прелести" ТСР/IP протокола, при котором для любого устройства возможна одновременная передача данных в обе стороны, т.е. полный дуплекс ?

Пардон, "блок сервера" - это что ? Коммуникац. блок "PUT" ?