Посібник по промисловим мережам
Протоколи S7 TCP/IP повсякмісно використовуються в системах керування, впроваджених в Україні. Це зумовлено великою кількістю впроваджених ПЛК Simatic фірми Siemens. У той же час протокол є пропрієтарним і як мені відомо не описаний у відкритих джерелах. Тому для обміну даними з ПЛК Simatic з інших систем, де не впроваджено протокол, потрібно піти одним з кількох шляхів:
Перший варіант є найбільш прийнятним, але потребує реалізації зі сторони ПЛК Simatic. Приводом для створення даного розділу та ініціації робіт по вивченню протоколу стала ідея впровадження бібліотеки імітаційних моделей в імітаторі контролеру PLCNext, який я озвучив в пості у Фейсбуці. У цьому випадку потребується зв’язок з імітатором ПЛК Simatic Step7, який не підтримує більшість комунікаційних функцій, окрім S7 серверних. Отже перший варіант не підходить.
Другий варіант потребує реалізації підсистеми, що потребує драйвер. Бібліотека Libnodave розроблена для ПК або пристроїв з відкритим інтерфейсом до ОС Linux, Windows. Для пристроїв з Node.js є бібліотека nodeS7, є також адаптації її для Node-RED. Хоч PLCNext має такі можливості, для мене цей шлях складніший і не є таким універсальним.
Я вибрав третій варіант, розібратися з протоколом S7 для того щоб реалізовувати драйвер самостійно. Це дасть можливість написати комунікаційну функцію на будь якому пристрої, що підтримує Open TCP комунікації. У якості джерела інформації я використовував відкриті джерела в Інтернеті, на які даю посилання.
Слід зауважити що підключення до імітатора ПЛК Simatic Step7 зі сторонніх програм можливе за використання безкоштовної утиліти nettoplcsim.
Усі правки та зауваження давайте в даному issue. Якщо у Вас немає обліковки GitHub, можете створити, як описано тут . Інші контакти та репозиторії можете знайти на моїй сторінці https://github.com/pupenasan
Усі процесори SIMATIC S7 і процесори C7 мають інтегровані служби зв’язку S7, за допомогою яких програма користувача може читати та записувати дані.
Наступні функції доступні для процесорів S7 і C7 незалежно від використовуваної системи мережі, щоб ви могли використовувати зв’язок S7 через Industrial Ethernet, PROFIBUS або MPI:
Позиція протоколу S7 в еталонній моделі ISO-OSI показана на рис.1. Рис. 1. Позиція протоколу S7 в еталонній моделі ISO-OSI.
Таблиця 1. Огляд сервісів протоколу S7.
Service | Description |
---|---|
PUT / GET | Цей сервіс для читання/запису невеликих обсягів даних на станцію та зі станції по запиту. |
BSEND / BRCV | Цей сервіс є двонаправленим та блоково-орієнтованим для передачі великих обсягів даних між двома станціями |
USEND / URCV | Цей сервіс є двонаправленим та некоординованою послугою для передачі невеликих обсягів даних між двома станціями. |
Протокол S7 дозволяє передавати дані від 1 байту до 64 Кбайт. Максимальний розмір даних залежить від використовуваного сервісу та процесора S7.
Таблиця 2
Service | S7-300 CPU | S7-400 CPU | S7-1200 CPU | S7-1500 CPU |
---|---|---|---|---|
PUT / GET | 160 bytes | 400 bytes | 160 bytes | 880 bytes |
BSEND / BRCV | 32768 bytes / 65534 bytes | 65534 bytes | - | 65534 bytes with standard access 65535 bytes with optimized access |
USEND / URCV | 160 bytes | 440 bytes | - | 920 bytes |
У наступній таблиці показано властивості протоколу S7.
Table 3
Властивості | PUT / GET | BSEND / BRCV | USEND / URCV |
---|---|---|---|
Області пам’яті | M, D, E, A, T, Z | M, D, E, A, T, Z | M, D, E, A, T, Z |
Консистентність даних | Від 8 до 32 байтів, 32 байти загальної довжини (залежить від ЦПУ, У програмі користувача ви повинні переконатися, що блок даних не змінюється під час передачі даних.) | Загальна довжина на одне завдання (У програмі користувача ви повинні переконатися, що блок даних не змінюється під час передачі даних) | Загальна довжина на одне завдання (У програмі користувача ви повинні переконатися, що блок даних не змінюється під час передачі даних) |
Комунікаційний принцип | Client / Server | Client / Client | Client / Client |
Максимальна кількість підключень | Див специфікацію CPU | Див специфікацію CPU | Див специфікацію CPU |
Функції | FB15 / SFB15 “PUT” FB14 / SFB14 “GET” |
FB12 / SFB12 “BSEND” FB13 / SFB13 “BRCV” |
FB8 / SFB8 “USEND “FB9 / SFB9 “URCV” |
Протокол S7 підтримується всіма доступними CPU і комунікаційними процесорами S7. Крім того, комп’ютерні системи з відповідним апаратним і програмним забезпеченням підтримують зв’язок через протокол S7.
RFC1006 - це протокол шлюзування транспортного протоколу ISO8072/ISO8073 на TCP. Саме його використовують для передачі S7 поверх TCP/IP (див.рис.1). Опис RFC знаходиться у розділі ISO RFC1006.
Опис S7 протоколу наведений у цьому файді. За джерело для цього опису взяті матеріали з відкритиої бібліотеки libnodave та парсингу бібліотеки nodeS7.
NodeS7 — це бібліотека для Node.js, яка дозволяє зв’язуватися з ПЛК S7-300/400/1200/1500 за допомогою протоколу Siemens S7 Ethernet RFC1006.
Опис та розбір бібліотеки знаходиться у розділі nodeS7 .
S7comm (S7 Communication) — це власний протокол Siemens, який працює між програмованими логічними контролерами (PLC) сімейства Siemens S7-300/400. Він використовується для програмування ПЛК, обміну даними між ПЛК, доступу до даних ПЛК із систем SCADA (диспетчерського керування та збору даних) і діагностичних цілей.
Дані S7comm надходять як корисне навантаження пакетів даних COTP. Перший байт завжди 0x32
як ідентифікатор протоколу. Спеціальні комунікаційні процесори для серії S7-400 (CP 443) можуть використовувати цей протокол без рівнів TCP/IP.
OSI layer | Protocol | |
---|---|---|
7 | Application Layer | S7 communication |
6 | Presentation Layer | S7 communication |
5 | Session Layer | S7 communication |
4 | Transport Layer | ISO-on-TCP (RFC 1006) |
3 | Network Layer | IP |
2 | Data Link Layer | Ethernet |
1 | Physical Layer | Ethernet |
Для встановлення з’єднання з ПЛК S7 потрібно виконати 3 кроки:
s7comm.param.func = 0xf0
, налаштування зв’язку)Крок 1) використовує IP-адресу PLC/CP.
Крок 2) використовує як пункт призначення TSAP довжиною два байти. Перший байт TSAP призначення кодує тип зв’язку (1=PG
, 2=OP
). Другий байт цільового TSAP кодує стійку та номер слота: це позиція центрального процесора PLC. Номер слота кодується в бітах 0-4
, номер стійки - в бітах 5-7
.
Крок 3) призначений для узгодження конкретних деталей S7comm (наприклад, розмір PDU).
Цей протокол використовується Siemens з моменту запуску серії продуктів Simatic S7 у 1994 році. Протокол також використовується поверх інших фізичних/мережевих рівнів, таких як RS-485 з MPI (Multi-Point-Interface) або Profibus.
S7-комунікації складається (принаймні) з таких протоколів:
Диссектор S7comm частково справний.
(XXX додає посилання на налаштування параметрів, які впливають на те, як розбирається PROTO).
Повний перелік полів фільтра відображення PROTO можна знайти в довідці про фільтр відображення
Показати лише трафік на основі S7comm:
s7comm
Ви не можете безпосередньо фільтрувати протоколи S7comm під час захоплення.
S7comm використовує порт 102, тому можна отримувати дані S7comm за допомогою фільтра захоплення
tcp port 102