Páteční průmyslový protokol: CIP
Zdroj: ODVA
CIP není přenosový protokol, ale objektový model a sada služeb, které se vezou po různých přenosech. Stejná zpráva „přečti atribut 7 instance 1 třídy Identity“ funguje v EtherNet/IP přes TCP, v DeviceNetu přes CAN i v ControlNetu. Pochopit CIP znamená přestat se učit tři protokoly.
Co to je a odkud pochází
Common Industrial Protocol vyvinula ODVA jako společnou aplikační vrstvu pro své sítě. Myšlenka: zařízení se popisuje jako objekt, ne jako paměťová mapa. Adresa „holding registr 40001" je nahrazena adresou „třída 0x04, instance 3, atribut 1" — tedy sémantikou, ne offsetem.
Objektový model
Základ jsou tři pojmy:
- Třída — typ objektu (Identity 0x01, Message Router 0x02, Assembly 0x04, Connection Manager 0x06, Parameter 0x0F).
- Instance — konkrétní výskyt třídy v zařízení; jedno zařízení má typicky jednu Identity a několik Assembly instancí.
- Atribut — vlastnost instance: ID výrobce, sériové číslo, stav, velikost dat.
Každá třída má navíc povinné atributy dané specifikací — proto se každé zařízení umí představit stejně, i když je od jiného výrobce.
Služby a zpráva
Zpráva má tři části: kód služby (1 bajt), velikost cesty (1 bajt) a EPATH, za kterým následují data. Nejpoužívanější služby:
| Kód | Služba | Význam |
|---|---|---|
| 0x01 | Get_Attributes_All | přečti všechny atributy instance |
| 0x0E | Get_Attribute_Single | přečti jeden atribut |
| 0x10 | Set_Attribute_Single | zapiš jeden atribut |
| 0x4C | Forward_Open | otevři spojení pro I/O data |
| 0x4E | Forward_Close | uzavři spojení |
| 0x52 | Unconnected_Send | pošli zprávu bez spojení |
EPATH se skládá ze segmentů. Logický segment začíná 0x20 (8bitová třída), 0x21 (16bitová), 0x24 (8bitová instance), 0x25 (16bitová), 0x30 (atribut). Pro Identity, instance 1, atribut 7 tedy pošlete 20 01 24 01 30 07.
Na čem to běží
CIP je přenosově nezávislý — to je jeho hlavní konstrukční vlastnost:
- EtherNet/IP — CIP přes TCP (explicit) a UDP (implicit), porty 44818 a 2222.
- DeviceNet — CIP přes CAN, 125/250/500 kb/s, max. 64 uzlů.
- ControlNet — deterministický přenos, dnes už okrajový.
- CompoNet — pro velké množství levných I/O.
Stejný objektový model znamená, že nástroj pro konfiguraci DeviceNetu mluví stejnými službami jako EtherNet/IP.
Konfigurace
Konfiguruje se přes EDS soubor (popis objektů a parametrů) a nástroj výrobce. Pro I/O data se nastavují assembly instance — které objekty se mají posílat cyklicky. Typický postup: vybrat vstupní assembly (např. instance 100), výstupní (150), nastavit RPI a velikosti, otevřít spojení.
Testování a kód
CIP zprávu lze poslat i ručně — v Pythonu přes pycomm3:
from pycomm3 import CIPDriver
with CIPDriver("192.168.1.30") as dev:
# precti atribut 7 (Product Name) instance 1 tridy Identity (0x01)
r = dev.generic_message(service=0x0E, class_code=0x01, instance=1, attribute=0x07)
print(r.value) # b'1756-L83E/B'
Stejnou zprávu uvidíte ve Wiresharku jako cip.service == 0x0e.
Kdy to použít
Vždy, když pracujete s rodinou protokolů ODVA. Pro integraci stačí vědět, že každá hodnota má svou třídu, instanci a atribut — a že „tag" v Rockwellu je jen pojmenovaná cesta k takovému objektu.
Licence
Specifikace CIP je dostupná od ODVA (členství a zakoupení dokumentů), implementace musí projít conformance testem. CIP není open source a nevznikne jeho otevřená varianta — je to průmyslový standard s vlastníkem.
Pro vývojáře: když si nejste jistí, co zařízení umí, přečtěte si třídu Identity (0x01) a Object List (0xAC) — první dá výrobce a verzi, druhá seznam všech instancí. Z těch dvou zpráv se dá odvodit skoro celé rozhraní.
Seriál Páteční průmyslový protokol vychází každý pátek. Další díl najdete v přehledu série.
Zdroje
Odkazy vedou na primární zdroje. Text článku je redakční shrnutí, ne převzatá zpráva.