¿Qué es el arbitraje del bus CAN?
Si dos nodos de una Controller Area Network empiezan a hablar en el mismo instante, algo tiene que decidir quién continúa y quién se retira, y CAN lo hace sin perder jamás un mensaje ni desperdiciar el bus. Ese mecanismo es el arbitraje, y es la característica que hace a CAN lo bastante determinista como para confiarle el control de motores, accionamientos y máquinas. Esta página explica cómo los bits dominantes y recesivos permiten que el identificador más bajo gane el bus bit por bit, por qué el perdedor retransmite automáticamente y qué significa eso al asignar prioridades de mensaje en una red real.
Arbitraje del bus CAN en una línea: El arbitraje del bus CAN es la forma en que una Controller Area Network resuelve que dos nodos transmitan a la vez sin colisión. Cada nodo escribe el identificador de su mensaje en el bus compartido bit por bit mientras lee el bus de regreso. Un bit dominante (0 lógico) siempre se impone a un bit recesivo (1 lógico), así que el nodo que envía el identificador numéricamente más bajo conserva el bus y los demás se detienen en silencio y reintentan. El mensaje ganador nunca se corrompe ni se retrasa.
Bits dominantes y recesivos en un cable compartido
CAN usa un bus diferencial de dos hilos donde el transmisor de cada nodo está conectado en AND cableado sobre el mismo par. Un 0 lógico se llama dominante porque cuando cualquier nodo impone un 0, todo el bus lee 0 sin importar lo que hagan los demás nodos; un 1 lógico es recesivo porque el bus solo lee 1 cuando todos los nodos lo dejan flotar alto. Esa asimetría es todo el truco. Significa que un bit dominante siempre gana sobre un bit recesivo en el cable, y es deliberada, no un accidente de la electrónica.
Durante la transmisión, cada nodo hace dos cosas a la vez: impone el siguiente bit de su mensaje y lee de regreso el nivel real del bus. Mientras lo que lee coincida con lo que envió, sigue adelante. En el momento en que un nodo envía un 1 recesivo pero lee un 0 dominante, sabe que otro nodo con un mensaje de mayor prioridad también está transmitiendo, y por las reglas del protocolo debe dejar de imponer de inmediato y volverse oyente. Ningún nodo se daña, ningún bit se pierde y el bus sigue transportando la trama ganadora sin interrupción.
Gana el identificador más bajo, bit por bit
El arbitraje ocurre a lo largo del campo de identificador al inicio de la trama, enviado con el bit más significativo primero. Como lo dominante vence a lo recesivo, el mensaje cuyo identificador tiene más ceros al inicio va ganando cada comparación de bit, lo que significa que el identificador numéricamente más bajo tiene la prioridad más alta y toma el bus. Un nodo que envía el identificador 0x100 vencerá a uno que envía 0x200 en el primer bit donde difieren, y el nodo del 0x200 se retira antes de que sus datos siquiera se toquen.
Por eso CAN se describe como CSMA/CD con arbitraje no destructivo. Ethernet detecta una colisión después de que ya corrompió ambas tramas y ambas estaciones se retiran por un tiempo aleatorio; CAN resuelve la contienda antes de perder dato alguno y la trama de mayor prioridad procede sin un solo bit desperdiciado. El beneficio práctico es la latencia acotada: en un bus correctamente cargado se puede calcular el tiempo del peor caso para que un mensaje dado llegue al cable, que es exactamente lo que un ingeniero de control necesita de una red de control.
La consecuencia para el perdedor es simple y automática. Un nodo que pierde el arbitraje no reporta error ni necesita intervención de software; espera a que el bus quede libre de nuevo y retransmite la misma trama, reentrando al arbitraje en la siguiente oportunidad. Ese reintento integrado es la razón de que un mensaje de estado de baja prioridad pueda retrasarse por una ráfaga de tráfico de alta prioridad y aun así llegar intacto cuando el bus se calma.
Asignar prioridades a través de los identificadores
Como la prioridad está horneada en el valor del identificador, elegir identificadores es una decisión de diseño, no una formalidad. Los mensajes críticos de seguridad y de tiempo, por ejemplo un paro de emergencia o un comando de par, reciben números de identificador bajos para que siempre ganen el bus; el tráfico lento de diagnóstico y mantenimiento recibe identificadores altos para que ceda ante los datos de tiempo real. Una red con los identificadores asignados al revés funcionará en el laboratorio y luego perderá plazos bajo carga, una de las fallas de campo clásicas en un segmento CAN ocupado.
Una regla que la física impone por usted: dos nodos nunca deben transmitir datos distintos bajo el mismo identificador al mismo tiempo, porque el arbitraje no puede separarlos una vez que los identificadores coinciden y las tramas se corromperían mutuamente. Los protocolos de capa superior lo resuelven dando a cada productor su propio identificador. En CANopen el identificador se empaqueta como el COB-ID que mapea un mensaje a un nodo y una función, y en J1939 se deriva del PGN y la dirección de origen, de modo que el esquema de prioridades lo define el perfil y no el azar.
Cuando usted sube datos CAN hacia una capa de monitoreo o SCADA a través de un gateway, el arbitraje es invisible por encima del cable, pero sus efectos no. Un mensaje que pierde el arbitraje una y otra vez se manifiesta como mayor latencia o actualizaciones periódicas faltantes, no como una falla dura, así que entender el mapa de prioridades del bus es lo que le permite explicar por qué un tag de baja prioridad se actualiza con menos frecuencia que la tasa de la hoja de datos cuando la red está ocupada.
Preguntas frecuentes
¿Un nodo pierde datos cuando pierde el arbitraje CAN?
No. Perder el arbitraje no es un error y ningún dato se corrompe. Un nodo que lee un bit dominante donde envió uno recesivo simplemente deja de transmitir, se vuelve oyente de la trama ganadora y luego retransmite automáticamente su propio mensaje cuando el bus queda libre. El reintento lo maneja el hardware del controlador CAN sin acción de software, y por eso un mensaje de baja prioridad se retrasa en lugar de perderse cuando el bus está ocupado.
¿Por qué el identificador CAN más bajo tiene la prioridad más alta?
Porque el arbitraje compara los identificadores bit por bit y un bit dominante (0 lógico) siempre se impone a uno recesivo (1 lógico) en el cable compartido. Enviar un identificador con más ceros al inicio significa ganar más comparaciones tempranas, así que el identificador numéricamente más bajo conserva el bus. Los diseñadores lo aprovechan asignando identificadores bajos a los mensajes críticos en tiempo para que siempre ganen la contienda.
¿El arbitraje CAN es lo mismo que la detección de colisiones de Ethernet?
No. Ethernet detecta una colisión solo después de que ambas tramas ya se corrompieron, y entonces ambas estaciones se retiran un tiempo aleatorio y retransmiten. CAN resuelve la contienda durante el campo de identificador, antes de enviar dato alguno, así que la trama ganadora nunca se corrompe ni se retrasa. Ese arbitraje no destructivo es lo que da a CAN su latencia de mensajes acotada y predecible.
Fuentes y lecturas
Referencias primarias de los organismos de normas y reguladores que definen este tema:
Servicios de automatización
¿Necesita convertir esta información en un sistema que funcione?
Merobix integra SCADA, programa PLC Allen-Bradley y Siemens, y diseña y fabrica tableros de control industrial.
Las solicitudes de reunión se revisan antes de confirmarse.