2009-08-05 19 views
17

Tenemos un proyecto de robot donde los controladores de motor usan 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).Cómo programar una capa CANopen simple

No sé mucho sobre el CANopen (PDO, SDO, Heartbeat, diccionario de objetos, etc.). Traté de leer las especificaciones CiA, pero fue muy complicado. Apreciaría si alguien pudiera señalarme en la dirección correcta o darme un buen tutorial para programar una capa CANopen simple.

+0

¿Te han parecido las otras preguntas sobre canopen, http://stackoverflow.com/questions/tagged/canopen (nada obviamente útil, pero quién sabe ...) – Johan

Respuesta

1

Desafortunadamente, no hay simple capa CANopen. Para admitir CANopen, debe implementar todo.

Le sugiero que compre una biblioteca CANopen de un proveedor externo. Por lo general, no son baratos, pero teniendo en cuenta el tiempo que necesitaría implementarlo usted mismo es más barato que su salario para ese momento.

Hemos estado usando la biblioteca PORT GmbH's ANSI-C CANopen Library, que tiene un precio moderado y tiene muy pocos errores, en comparación con otras bibliotecas que probamos.

0

Si esto es algo comercial, no consideraría implementar CANopen. Esto te llevará (incluso para un subconjunto) entre cuatro y seis meses (si realmente quieres que funcione). No sé cuál es su salario por hora y cuáles son sus requisitos de tiempo de comercialización. Necesitas hacer las matemáticas tú mismo.

0

Otra solución comercial con la que trabajé es IXXAT's CANopen software. Ofrecen puertos para muchas plataformas diferentes.

Como ya he dicho antes: no lo obtiene de forma gratuita ni es barato. Pero, ¿cuántos miles de USD se comparan con varios meses de tiempo de desarrollo?

1

Estamos utilizando el MicroCANopen acumula con el administrador de complemento, a partir de 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 de modo que pueda Ofrecen un testimonio de cómo funciona con otros dispositivos compatibles con CANOpen.

4

Hemos implementado nuestra capa CANopen desde cero tanto para dispositivos ARM integrados como para PC con Windows. No es imposible, a diferencia de las respuestas anteriores que pueden hacer pensar. Si solo necesita la funcionalidad básica de CANopen y puede aprender rápidamente los conceptos del protocolo, puede ponerlo en marcha rápidamente.

Deberá leer la especificación CiA, no hay forma de evitarla, pero al principio podría resultar abrumadora. Le recomiendo que empiece leyendo "Embedded Networking with CAN and CANopen" por Pfeiffer, Ayre y Keydel. Explica los conceptos básicos muy bien, lo que a su vez ayuda a comprender mejor la especificación.

+1

Sí, puedes implementar la mayoría de las cosas "rápidamente". Pero como algunas personas ya han señalado si desea una implementación compatible estándar, que pueda interactuar con otros nodos CANopen compatibles, entonces le costará menos comprar una pila comercial que escribirla usted mismo. –

+1

Si está trabajando en un proyecto de código abierto, educativo o sin fines de lucro, también hay dos código abierto CANopens tachuelas que son completamente gratuitos. Busque CANFestival y CANopenNode en Google. –

+0

@SimonByholm CANfestival es [LGPL] (http://dev.automforge.net/CanFestival-3/file/tip/COPYING) y CanOpenNode está bajo [GPL con excepción de enlace] (https://github.com/CANopenNode/ CANopenNode # gpl-linking-exception), por lo que ambos pueden usarse en proyectos comerciales. – ntd

9

Dado que esto parece ser un tema de interés general, estoy de acuerdo en que la comprensión de las especificaciones originales completas puede ser una experiencia algo dolorosa. Así que aquí es una sugerencia para "obtener su coche en marcha", en contraposición a "la aplicación de todo el asunto":

  • Comprobar si las unidades CANopen pueden ser operados a través de la CIA 402 objetos estándar y por razones de rendimiento sería está perfectamente bien NO configurar y usar PDO, y realmente no necesita latido del corazón, etc.Por lo general, está cambiando la máquina de estado de la unidad (objeto 6040h, palabra de control), configurando el modo de operación (objeto 6060h) y configurando parámetros adicionales como "velocidad de posición del perfil".

  • Luego implemente transferencias SDO aceleradas solo. (Consulte http://en.wikipedia.org/wiki/CANopen). La descarga SDO es para escribir/cambiar un objeto en su disco. La carga SDO es para leer un objeto.

  • Le sugiero que tome 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 realmente, cualquier otra herramienta de PC para CANopen debería funcionar). Realice algunas lecturas y escrituras de ejemplo 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 hay 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 SDO y procesar las respuestas.

Renuncia - Lo anterior es ni siquiera cerca de "Implementación de CANopen", o "apoyo CANopen", o incluso "CANopen compatible". Se trata de "hacer que su unidad se mueva lo antes posible y sin código de terceros". Lo cual a veces es lo correcto.

+0

Me pareció fundamental también la implementación de TxPDO para evitar contaminar el bus con solicitudes SDO periódicas. Al final, la asignación es un puñado de SDO write y puedes analizar los paquetes TxPDO que esperas. – ntd

+0

Veo su punto, pero creo que depende de la aplicación. La pregunta original fue sobre "¿No hay una manera más simple?". No cuento la asignación de PDO y su configuración a través de SDO a los aspectos más simples de CANopen. Todo depende de la cantidad de nodos y los tiempos de ciclo que realmente necesita. –

+0

Bueno, el mapeo PDO en sí es bastante fácil (4 o 5 escrituras SDO). IMO el manejo de la respuesta es mucho trabajo, pero (de nuevo IMO) comparable si no es menor que un ciclo de sondeo SDO (después de todo lo que definitivamente quiere obtener entradas). Y esto es exactamente [lo que hice] (https://sourceforge.net/projects/lv-canopen/) en una biblioteca CANopen para LabVIEW. – ntd

2

Trate de usar la pila CanFestival - es gratis, y se puede conectar fácilmente desde sistemas operativos como Linux hasta máquinas simples que solo tienen un temporizador de marcación.

4-6 meses parece un poco exagerado, es posible que solo necesite un maestro o un esclavo, e hicimos una implementación exclusiva en C++ en 3-4 semanas.

Cuestiones relacionadas