can-bus - network - can protocol
Cómo programar una simple capa CANopen (7)
Tenemos un proyecto de robot en el que los controladores de motor utilizan CANopen para la comunicación. Necesito comunicarme con estos controladores de motor usando un microcontrolador maestro. El problema es que necesito desarrollar una capa CANopen en este microcontrolador, pero solo sé cómo enviar y recibir en el nivel bajo (CAN).
No sé mucho sobre el CANopen (DOP, SDO, Heartbeat, diccionario de objetos, etc.). Intenté leer las especificaciones CiA, pero era muy complicado. Agradecería que alguien me indicara la dirección correcta o me diera un buen tutorial para programar una capa CANopen simple.
Desafortunadamente, no hay una simple capa CANopen. Para soportar CANopen, tienes que implementar todo.
Le sugiero que compre una biblioteca CANopen de un proveedor externo. Por lo general, no son baratos, pero considerando el tiempo que necesitaría para implementarlo usted mismo, es más barato que su salario para ese momento.
Hemos estado utilizando la biblioteca ANSI-C CANopen Library de PORT GmbH , que tiene un precio moderado y tiene muy pocos errores, en comparación con otras bibliotecas que probamos.
Estamos usando la pila de MicroCANopen con el complemento Manager, desde aquí: http://www.canopenstore.com/pip/microcanopen.html
Es relativamente barato en comparación con otras pilas, aunque lo estamos utilizando en todos los nodos de nuestra red, por lo que no puedo ofrecer un testimonio de cómo funciona con otros dispositivos compatibles con CANOpen.
Hemos implementado nuestra capa CANopen desde cero tanto para dispositivos ARM incrustados como para PC con Windows. No es imposible, a diferencia de las respuestas anteriores pueden hacerte pensar. Si solo necesita la funcionalidad básica de CANopen y puede aprender rápidamente los conceptos del protocolo, puede poner las cosas en funcionamiento rápidamente.
Tendrá que leer la especificación CiA, no hay forma de evitarla, pero al principio puede resultar algo abrumadora. Le recomiendo que empiece por leer " Redes integradas con CAN y CANopen " de Pfeiffer, Ayre y Keydel. Explica muy bien los conceptos básicos, lo que a su vez ayuda a comprender mejor las especificaciones.
Intente usar la pila de CanFestival: es gratuita y se puede transferir fácilmente desde sistemas operativos como Linux a máquinas que solo tienen un temporizador de tick.
4-6 meses parece un poco exagerado: es posible que solo necesite un maestro o un esclavo, e hicimos una implementación solo para maestros en C ++ en 3-4 semanas.
Otra solución comercial con la que trabajé es el software CANopen de IXXAT . Ofrecen puertos para muchas plataformas diferentes.
Como ya se dijo antes: no lo obtienes gratis ni es barato. Pero, ¿cuáles son unos pocos miles de USD en comparación con varios meses de tiempo de desarrollo?
Si esto es algo comercial, no consideraría implementar CANopen. Esto lo llevará (incluso para un subconjunto) en algún lugar entre cuatro y seis meses (si realmente quiere que funcione). No sé cuál es su salario por hora y cuál es su tiempo para cumplir con los requisitos del mercado. Necesitas hacer las matemáticas tú mismo.
Ya que este parece ser un tema de interés general, estoy de acuerdo en que entender las especificaciones originales completas puede ser una experiencia un tanto dolorosa. Así que aquí hay una sugerencia para "poner en marcha su unidad", en lugar de "implementar todo":
Compruebe si sus unidades CANopen pueden operarse a través de los objetos estándar CiA 402 y, por razones de rendimiento, sería perfectamente correcto NO configurar y usar PDO, y realmente no necesita latidos, por lo general, generalmente se cambia la máquina de estado de la unidad (objeto 6040h , palabra de control), configuración del modo de operación (objeto 6060h) y configuración de parámetros adicionales como "velocidad de posición del perfil".
Luego, implemente solo transferencias SDO aceleradas . (Consulte CANopen ). La descarga de SDO es para escribir / cambiar un objeto en su unidad. La carga SDO es para leer un objeto.
Sugiero tomar un software para PC que pueda leer y escribir SDO y que tenga un monitor de bus CAN. (Nuestro freeware Kickdrive Zero puede hacer eso, pero en realidad, cualquier otra herramienta de PC para CANopen debería funcionar). Realice algunos ejemplos de lecturas y escrituras para los tipos de datos y objetos que necesita. Mira cómo esto se traduce en marcos en un nivel CAN. Para los tipos de datos enteros básicos, siempre es solo un marco para la solicitud, uno para la respuesta.
Ahora cree una pila de protocolos simplista en su microcontrolador que pueda enviar las solicitudes de descarga / carga de SDO y procesar las respuestas.
Descargo de responsabilidad: lo anterior no está ni siquiera cerca de "implementar CANopen", o "admitir CANopen", o incluso "cumplir con CANopen". Se trata de "hacer que su unidad se mueva lo antes posible y sin el código de terceros". Que a veces es lo que hay que hacer.