Páteční průmyslový protokol: CANopen
Zdroj: CiA
CANopen je to, co CANu chybělo: dohoda, co která zpráva znamená. Postavila ho organizace CiA nad normou CiA 301 a přinesla objektový slovník, přenos parametrů přes SDO, cyklická data přes PDO a správu stavů NMT. Bez něj je CAN jen sběrnice s hexadecimálními čísly. V Česku se mu občas říká špatně — OpenCAN neexistuje.
Co to je a odkud pochází
CANopen vznikl v polovině 90. let v organizaci CAN in Automation (CiA) jako otevřený aplikační profil nad CAN. Základ je CiA 301, na něm stojí profily pro konkrétní obory — CiA 402 pro pohony, CiA 401 pro I/O moduly, CiA 406 pro enkodéry.
Poznámka k názvu: žádný „OpenCAN" neexistuje. V zadání se objevil jako varianta, ale správně je CANopen — a to je dobře si zapamatovat, protože pod špatným jménem se dokumentace hledá marně.
Objektový slovník
Každá veličina v zařízení má adresu ve tvaru index (16 b) / subindex (8 b). Index 0x1000 je typ zařízení, 0x1008 název výrobce, 0x1018 identita, 0x6040 řídicí slovo pohonu podle CiA 402. Slovník je popsaný v EDS souboru (nebo v DCF, což je EDS s konkrétní konfigurací).
Čtyři druhy provozu
- SDO (Service Data Object) — potvrzovaný přenos jednoho objektu, pro konfiguraci. Klient posílá na COB-ID 0x600 + node ID, server odpovídá na 0x580 + node ID.
- PDO (Process Data Object) — nepotvrzovaná cyklická data. TPDO posílá zařízení, RPDO přijímá. Mapování určuje, které objekty se ve kterých bajtech vezou.
- NMT (Network Management) — stavový automat (Initialisation, Pre-operational, Operational, Stopped), COB-ID 0x000.
- SYNC, TIME, EMCY, Heartbeat — synchronizace cyklu, čas, nouzové stavy, hlídání života uzlu.
Horních 4 bity COB-ID nesou funkční kód, dolních 7 bitů node ID — proto má CANopen pevně danou tabulku priorit.
Rychlosti a nastavení
Rychlosti 10 až 1000 kb/s (typicky 125, 250, 500 kb/s), node ID 1–127, heartbeat typicky 500–2000 ms. Na sběrnici platí stejná pravidla jako u CANu: 120 Ω na koncích, společná zem, krátké odbočky.
Konfigurace zařízení
Postup v praxi: nastavíte node ID a přenosovou rychlost (často přepínači nebo přes SDO), nahrajete EDS do konfigurátoru, namapujete PDO a nastavíte heartbeat. Pokud zařízení neodpovídá, zkontrolujte, zda není ve stavu Stopped — NMT ho tam pošle každý start sekvence a zapomene ho probudit.
Testování a kód
V Pythonu knihovna canopen:
import canopen
net = canopen.Network()
net.connect(channel="can0", bustype="socketcan")
node = net.add_node(5, "eds/MDriver.eds")
node.nmt.state = "OPERATIONAL"
print(node.sdo[0x1018][1].raw) # Vendor ID
node.sdo[0x6040].raw = 0x0006 # priprava pohonu (CiA 402)
net.disconnect()
Pro ruční práci candump can0 a cansend; pro diagnostiku heartbeatů candump s filtrem.
Kdy to použít
Všude, kde výrobce nabízí „CANopen" místo proprietární nadstavby — pohony, I/O moduly, enkodéry, váhy, zdvihací zařízení. Hodí se pro distribuované řízení s pevným cyklem do 10 ms. Nehodí se pro velké přenosy (SDO na velké bloky je pomalé) a pro sítě s více master uzly bez plánování.
Licence
CiA 301 je veřejně dostupný dokument, samotný protokol není licencovaný. Platí se členství v CiA a certifikace zařízení, pokud chcete logo; implementace jsou k dispozici i open source (CANopenNode, Lely CANopen).
Pro PLC programátora: než začnete mapovat PDO, ujasněte si, kdo je producent a kdo konzument. Většina chyb v CANopenu není v kódu, ale v tom, že dva uzly posílají na stejné COB-ID nebo že PDO obsahuje objekty, které se v zařízení neaktualizují, protože nejsou v operačním stavu.
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.