PLC

Páteční průmyslový protokol: CAN bus

Zdroj: CiA

Grafika s označením CAN a rámcovým diagramem
Ilustrace: redakce

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á.

Datový rámec CAN 2.0

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

  1. CAN knowledge — protocol, frames, arbitration — CiA
  2. 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.