Páteční průmyslový protokol: CAN bus
Zdroj: CiA
CAN vymyslel Bosch pro automobily, protože potřeboval jednu dvoulinku, po které si desítky jednotek řeknou o data bez centrálního masteru. Dnes je to základ strojů, robotů, bateriových systémů i nabíječek — poznáte ho podle toho, že se nikdo neptá, kdo je master, a nižší ID vyhrává.
Co to je a odkud pochází
Controller Area Network navrhl Bosch v polovině 80. let, standardizoval ho ISO 11898. Původní motivace: snížit kilometrovou délku kabelů v autě a umožnit, aby si řídicí jednotky posílaly data podle priority. Do průmyslu se rozšířil přes stroje, mobilní techniku a později CANopen a J1939.
Jak funguje
Klíčový mechanismus je arbitráž na úrovni bitu: všechna zařízení mohou začít vysílat, ale kdo pošle dominantní bit (0) proti recesivnímu (1), vyhrává a ostatní se stáhnou. Identifikátor rámce je tedy zároveň priorita — nižší číslo ID znamená vyšší prioritu. Tomu se říká CSMA/CD s arbitráží podle priorit a je to důvod, proč je CAN deterministický do té míry, že se dá použít pro řízení.
Zařízení nemají adresy. Zpráva má identifikátor obsahu, ne příjemce; kdo ji potřebuje, ten ji čte. Přijímače filtrují podle ID a masky v řadiči.
Rámec
Datový rámec (standardní, 11bitové ID): SOF, identifikátor (11 b), RTR, IDE, rezervovaný bit, DLC (4 b), 0–8 bajtů dat, CRC-15, ACK slot, EOF (7 recesivních bitů). Rozšířený rámec má ID 29 bitů.
Kromě datových rámců existují rámce vzdáleného čtení (RTR), chybové rámce a rámce přetížení. CAN FD rozšiřuje datové pole na 64 bajtů a zvyšuje rychlost datové fáze (až 5 Mbit/s a víc), ale vyžaduje řadiče, které to umí — se starým hardwarem se nedomluví.
Rychlosti a topologie
- Sběrnice, lineární, s 120 Ω na obou koncích; odbočky krátké.
- Rychlosti 125, 250, 500 kb/s a 1 Mbit/s; délka klesá s rychlostí — 1000 m při 50 kb/s, asi 40 m při 1 Mbit/s.
- Diferenciální pár CAN_H/CAN_L, souhlasné napětí 2,5 V v klidu.
Chybová detekce
CAN má pět mechanismů kontroly (bit stuffing, CRC, kontrola formátu, ACK, kontrola bitů). Uzel, který chybu způsobil, inkrementuje počítadla a přechází ze stavu error-active přes error-passive až do bus-off — sám se odpojí, aby nezablokoval síť. To je vlastnost, kterou jiné sběrnice nemají a která se hodí při ladění: vadný uzel se pozná podle chování, ne podle náhody.
Testování a kód
V Linuxu s adaptérem v režimu SocketCAN:
import can
bus = can.Bus(interface="socketcan", channel="can0", bitrate=500_000)
bus.send(can.Message(arbitration_id=0x123, data=b"\x01\x02\x03", is_extended_id=False))
for msg in bus:
print(hex(msg.arbitration_id), msg.data.hex())
break
Na sběrnici se hodí candump can0 a cansend; pro dekódování signálů slouží DBC soubor a cantools.
Kdy to použít
Pro distribuované I/O ve stroji, bateriové systémy (BMS), pohony, joysticky a diagnostiku. Nehodí se pro velké objemy dat a pro sítě, kde výrobci nedodržují datový slovník — bez DBC nebo dokumentace je sběrnice jen proud hexadecimálních čísel.
Licence
Bosch uvolnil specifikaci CAN 2.0B volně v roce 1991; norma ISO 11898 je placená. Protokol není licencovaný, ale patentové nároky na CAN FD řeší Bosch licenčně pro výrobce řadičů.
Pro vývojáře: první věc, kterou si u nové sběrnice zjistěte, není datový slovník, ale obsazenost a zatížení. Sběrnice nad 70 % zatížení přestává být předvídatelná a chyby se projeví jako zpoždění těch nejnižších priorit, ne jako výpadky.
Seriál Páteční průmyslový protokol vychází každý pátek. Další díl najdete v přehledu série.
Zdroje
- CAN knowledge — protocol, frames, arbitration — CiA
- ISO 11898-1:2015 — Road vehicles, CAN data link layer — ISO
Odkazy vedou na primární zdroje. Text článku je redakční shrnutí, ne převzatá zpráva.