Supongamos que yo quiero recibir mensajes de los SID 100 a 103, que mi placa tiene el SID 104.
Dicho SID tengo que configurarlo yo??Cómo sé que SID tiene mi placa??
Partamos de la base que quien programa ese micro eres tu, así que deberías saberlo, no??

Pero supongamos que quieres hacer una placa genérica que transmite una temperatura, una presion y humedad, o sea, tres valores, y ninguno de ellos debería ser transmitido en una misma trama, es decir, vas a tener tres tramas diferentes a enviar.
En CAN esas tres tramas deberán llevar in ID diferente, para saber quien lo transmitió y que dato viene alli, para las placas que consuman esa información (recuerda que pueden ser varias).
Vamos a suponer que los IDs son asignados así:
- Temperatura ID 1001
- Presion ID 1002
- Humedad ID 1003
Esto hará que quien reciba esa información, estará diferenciando las tres variables sin inconvenientes, porque vendrán en mensajes diferentes con IDs diferentes.
¿¿Pero que pasa si agregamos en ese BUS dos placas mas iguales a esta, que envían la misma información ??
En este caso debo ademas diferenciar entre placas, ademas de las variables, ¿¿ como lo hago ??
Hay dos formas (o tal vez tres), que son de distinta implementación pero igual resultado:
- Agrego un ID de placa, que puede ser de 4 bits (admite 16 placas iguales) o los que necesite, siempre dentro del rango que permite el direccionamiento de CAN. Este ID podrá ser cambiado por comunicación o por teclado, y guardado en una posición de la EEPROM. Al inicio del programa debo recuperarlo.
- Le pongo a la placa una serie de dip switchs (normalmente 4) que me permiten configurarle ese ID con el programa en marcha, y lo leo al inicio del programa (no se hace en marcha porque puede traer problemas imprevistos)
- Hago una rutina inteligente que al agregar una de estas placas (tendrá grabada un ID que no corresponda al rango posible), descubra que debe configurarse y escuche la mensajería o testee cuales responden y auto configure su propio ID, y lo guarde en memoria EEPROM
Finalmente, luego deberás agregarle como offset a los tres IDs de las variables, el ID de la placa, que quedaría mas o menos así:
- Placa 1 ID de placa 05
Temperatura ID 1006
Presión ID 1007
Humedad ID 1008
- Placa 2 ID de placa 08
Temperatura ID 1009
Presión ID 1010
Humedad ID 1011
- Placa 3 ID de placa 15
Temperatura ID 1016
Presión ID 1017
Humedad ID 1018
Como veras, ya no hay forma de equivocarse desde que placa viene cada dato, ni que dato es cada uno, no??
Ademas hiciste tres placas idénticas y con el mismo software tambien...
