transmisión de datos CAN

2

Tengo cuatro nodos separados (A, B, C y D) que se transmitirán a través de un bus CAN común. Para que un paquete completo de datos se envíe a un nodo, cada controlador CAN debe enviar tres veces (20 bytes de datos).

Los nodos A, B y C solicitan datos de D.

A tiene una ID más baja que B, B tiene una ID más baja que C, pero mayor que A.

Mi pregunta es: si A envía su primer paquete a D y está a punto de enviar el segundo paquete (retraso debido a la carga de datos en los registros de transmisión), y si B detecta que el bus está inactivo, B comenzará enviar?

Incluso si B comienza a enviar, si se ha cargado el búfer de transmisión de A, ¿enviará A? Si A envía datos, ¿D recibirá los datos no corrompidos?

Nota: Estoy pensando en implementar intervalos de tiempo para cada nodo A, B, C (pero no usaré todo el potencial de CAN).

    
pregunta Akshay

3 respuestas

4

Todos los mensajes CAN son difusiones. Por lo tanto, un mensaje de un nodo a todos los demás nodos solo debe enviarse una vez. De hecho, no se puede enviar solo a un nodo individual. No es así como CAN puede funcionar.

Debes aprender sobre CAN antes de continuar.

    
respondido por el Olin Lathrop
3
  1. Los nodos CAN no tienen una ID, los mensajes que envían tienen una (si cada nodo solo transmite un solo mensaje, puede pensar en la ID de ese mensaje como " ID de nodo ", pero este no es el caso normal).

  2. Cualquier controlador CAN dejará de transmitir una vez que vea un mensaje con una identificación más baja que está actualmente escrita en el bus (el otro nodo puede continuar sin interrupción, esto se llama arbitration ). Así que CAN se asegura de que no haya colisión. Sin embargo, puede darse el caso de que un nodo transmita un mensaje de alta prioridad (= ID baja) repetidamente y los otros nodos no pueden enviar sus mensajes. Usted como diseñador de la red es responsable de asegurarse de que esto no ocurra (por ejemplo, limite la frecuencia con la que se envía un mensaje). Si no puede tolerar ciertos retrasos, debe mantener la carga del bus hasta un cierto umbral para que, en el peor de los casos, el mensaje pueda transmitirse a tiempo.

respondido por el 0x6d64
1

Necesitas aprender sobre CAN; Se centra en el mensaje, no en el nodo. Si A, B y C quieren el mismo mensaje de D, enviarán la misma ID con el bit de RTR establecido y un DLC de cero. Dado que los mensajes de A, B y C son idénticos y si todos se envían en el mismo momento, no habrá colisión (asumiendo que todos los bits llegan al mismo tiempo). Si está monitoreando el bus, verá un solo mensaje con el bit RTR enviado y luego la respuesta de D, que verán A, B y C.

Para responder a su pregunta más amplia: los nodos CAN generalmente no transmiten si ven que el bus está ocupado, y esperan hasta que pase el tiempo entre mensajes antes de intentar enviar. Entonces, "¿enviará A si el mensaje de B ha sido enviado?" - en primer lugar, A, B y C "verán" su mensaje fue enviado ya que no hubo colisión de autobús en el escenario anterior. En segundo lugar, depende de su diseño de software. El hardware generalmente se encarga de recibir el mensaje en el bus, pero la lógica de su software determina si se envía la "Parte B" si la "Parte A" aún está pendiente o no pudo enviarse.

Esto no tiene nada que ver con CAN en sí, y todo que ver con su diseño de protocolo de nivel superior.

    
respondido por el akohlsmith

Lea otras preguntas en las etiquetas