TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: jose_manga en 07 de Octubre de 2017, 18:10:11
-
Hola a todos los integrantes de la comunidad de TodoPic, saludos, mi nombre es Jose Manganiello soy Ing Electronico de venezuela, actualmente me encuentro trabajando en un torniquete hercules Ec-lite, para las estaciones de metro aca en el pais, este equipo es relativamente nuevo, hasta ahora varias persona lo han trabajado pero no han podido hacer que responda y/o funcione, luego llevo a mis manos y hasta los momentos he logrado que el equipo me responda mas no me realiza la accion que le envie, esta equipo trabaja via RS485, y el departamento tecnico de gunnebo (fabricante) me he puesto en contacto con ellos, me respondieron 2 veces, pero hasta ahi, ahora de verdad requiero de su ayuda..
Les comento, realice unas pequeña interfaz en Visual Studio (C#) donde le envio los comandos el protocolo de ejemplo dado por el fabricante (pag22) donde su funcion es abrir el selenoide y el equipo me responde :-/ :-/ tal cual como dice el manual pero no me hace tal accion :( :(, ademas que hay que enviarle un bytes de polling para que se mantenga en linea, y cada vez que se envia tambien responde la tarjeta tal cual como lo indica el manual :D, para el calculo del CRC16 XOR uso el polinomio x16 + x15 + x2 +1, (0xA001) como esta en un tema del foro, realizo el calculo (mas no se si esta bueno) le envio los comando y nada que hace nada :5], de verdad ya no se que hacer, acudo a ustedes para ver si esta en sus manos ayudame un poco con esta tarjeta LL2001.
He adjuntado varias fotos, incluyendo la tarjeta LL2001 y del torniquete, y la interfaz.
como adjunto un archivo pdf de 700kb, donde esta el manual....???
Gracias :) :)
-
amigos adjunto el manual, le recorte algunas pagina que no te utilizaban,
-
El calculo del CRC es simple,, no necesitas ningun polinomio.
Usando el ejemplo que te dieron en el PDF:
20 60 90 90 81 80 A8 B1 C0
Esos 2 bytes son el Checksum.. En realidad el Checksum es 81, pero debes enviarlo en 2 partes, la parte alta con una A, y la parte baja con una B.
1010.ssss Check sum High
1011.ssss Check sum Low
¿Como calcula el checksum? Hace una XOR de todos los datos, incluyendo el start y el stop, es decir:
0x20 XOR 0x60 XOR 0x90 XOR 0x90 XOR 0x81 XOR 0x80 XOR 0xC0 = 0x81
Ese es tu Checksum.
---------------------------
Ahora, si enviando el codigo correctamente, el checksum es valido deberia funcionar. Observa que la respuesta del dispositivo, solamente indica que recibio el mensaje, pero no dice nada si lo que recibio esta correcto o no. Tampoco hay aclaracion de que el dispositivo solo responda cuando sea correcto el checksum.
-
Amigo KILLERJC, agradecido por tu explicacion con respecto al calculo del Checksum.
con respecto a comentario, tiene toda la razon sobre la respuesta del dispositivo, que solamente indica la recepcion del mensaje mas no sabemos si es o no correcto :?, ese mismo comentario se lo hice llegar al personal del departamento tecnico que fabrica estos equipo (cuando llegaban a responder los email), parte de la respuesta es, deberia de funcionar realizando la accion con el protocolo de ejemplo del manual :shock:
Incluso le comente, porque no me diseñaban un interfaz demo para solo abrir o cerrar el selenoide del lado A del torniquete, solo para verificar que la tarjeta LL2001 este completamente operativa via RS485 :) :) , porque de forma manual realiza todas las funciones, pero no se va a manejar 30 equipos de forma manual si viene para realizar la comunicacion 485 :?, pero todavia estoy esperando la respuesta, donde seguramente sera NO, por derecho de proteccion de patente, me supongo.
Gracias KILLERJC, hare mas prueba e ire actualizando el tema.
-
No se si diseñar una interfaz demo sea lo correcto, pero pienso que como fabricante, como minimo crearia un codigo de ejemplo, o libreria para usar el dispositivo. De esa forma facilita la implementacion en cualquier sistema.
-
Saludos, Actualizando, estas en lo correcto tu comentario...
he realizado las prueba en base a lo explicado por el compañero KILLERJC, y todavia nada :5] :5], pero fijense que estuve revisando el manual y veo algo extraño, fijense adjunte 2 archivos (CHEKSUM y REGISTRO);
En el protocolo de ejemplo el comando es 20 60 90 90 81 80 A8 B1 C0,
Donde 81 seria Register High 1000-0001 y 80 Register Low 1000-0000 para el Modo A, pero en la imagen del CHEKSUM donde el fabricante explica como calcular el CRC te cambian los registro
El comando seria 20 60 90 91 90 82 A8 B1 C0.
Donde 90 seria Register High 1000-0000 y 82 Register Low 1000-0010 para el Modo B
segun el registro comando 60 (imagen), el byte para el registro es 0, para el Modo A, es decir 90 para el Register High y Register Low, el byte para el registro es 1, para el Modo B ,es decir 90 para el Register High y 91 para el Register Low, hasta ahi bien, pero el ejemplo te explica con el DataHigh del Modo A y para el calculo del cheksum lo hacen con el DataLow del Modo B.
Pienso que se toma el DataLow siendo el registro donde se modifica la accion que realizara el torniquete (ver imagen REGISTRO COMANDO 60), tanto para el Modo A como el Modo B, y a mi parece hay un error en el manual, :5].
dejo abierto para que puedan verificar, Gracias Saludos.
-
Sigamos la descripcion del comando:
COMMAND 60 (Set registers)
Master:
001i.iiii Address of peripheral to be updated (20 - 3F)
0110.0000 Command
Block A:
1001.rrrr Register to be updated (Hi)
1001.rrrr Register to be updated (Lo)
1000.dddd Datum (4 bits)
......... Data (no. of data depends on the register to be updated)
1010.ssss Check sum Hi
1011.ssss Check sum Lo
1100.0000 End
Respuesta
Slave:
010i.iiii Address of updated peripheral (41 - 5F)
111y.yyyy Message received
Primero debo seleccionar la direccion del dispositivo. si esta en 0x00 los DIP switch, entonces queda 0x20
Despues el comando, que es Register Settings y es 0x60
Luego viene la direccion del registro, primero la parte alta y luego la baja, la direccion para el modo A es 0x00, ambos comienzan con 0b1001.iiii, por lo tanto tenemos 2 veces 0x90.
Ahora viene el dato. Y se hace con 0b1000.iiii, El registro posee un byte, por lo tanto debemos enviar 2 veces esto y va a comenzar con un 0x8i
Luego tenemos el checksum, parte alta con 0xAi y luego parte baja con 0xBi,
Y por ultimo el final de la transmision.
Quedandonos para modificar el registro modo A, con direccion de dispositivo 0x00:
20 60 90 90 8i 8i Ai Bi C0
Solo me falta determinar que datos les voy a enviar a ese registro, voy a intentar ponerlo como "Unlocked" y deshabilitar el Single Transit. Es decir enviar 0x02, completando los datos y calculando el Checksum, esto me deja con la trama de esta forma:
20 60 90 90 80 82 A8 B2 C0
-
Gracias por tu respuestas e interes por el tema KILLERJC.
Ok si la direccion del esclavo 0x00.
realice la prueba con la trama 20 60 90 90 80 82 A8 B2 C0 y nada que ver :( e incluso tambien envio la trama 20 60 90 90 80 81 A8 B1 C0 para colocarlo en "Locked" y nada que funciona.
adjunto las imagenes de las respuesta de cada trama enviada....
saludos.
-
Ahora veo que SI responde cuando hay un error. En si hay cosas que falta explicaciones, y tal ves esten en las hojas que sacaste del datasheet estan.
Responde los siguientes 2 bytes:
010i.iiii Address of updated peripheral (41 - 5F)
111y.yyyy End (Slave --> Master)
| ||||
| |||Bit0 =1 -> Data to communicate (1 or more registers change)
| ||Bit1 =1 -> RTX Error
| |Bit2 =1 -> Power-On
| Bit3 =1 -> Local mode(only requests, not settings)
Bit4 =1 -> Device Engaged
Y aca viene el problema... Supuestamente uno puede escribir a las direcciones 00 hasta 1F (0x20 a 0x3F)), el problema es que la respuesta que deberia ser tambien de 00 hasta 1F (0x40 a 0x5F), parece no serlo, El cual comienza con un 01 hasta 1F, Es decir la direccion 00, parece no ser correcta o no tiene respuesta (ya que no es un valor valido de respuesta). Seguramente debe haber algun error en el manual ya que sino faltaria 1 direccion de equipo. Otra de las cosas, es que tenes 4 DIP Switch en la placa, como es posible setear 5 bits con eso ?, o que bits esta usando. Tal ves sea que la direccion de respuesta sea 1 mas de lo enviado, y por eso posee 5 bits. Puede haber multiples causas, pero vamos a apoyarnos en esta ultima.
Por tu parte, veo que la respuesta del circuito dice que se trata del dispositivo numero 1, es decir 01, y el cual nosotros usabamos 00, al menos eso responde con el 0x41 ( A no ser que el 0 responda como 1).
Y luego vienen el estado, el cual te devuelve un 0xED o 0b1110 1101
Si observamos los bits. Tenemos que:
Bit 0: Se pidio el cambio de un registro, Correcto
Bit 1: No hubo error de transmision ( o sea el checksum estaba bien )
Bit 2: Esta en modo Power-On, ya que el Start lo despierta.
Bit 3: El que mas me extraña es este bit, Segun en el datasheet, si esta en 1, el dispositivo esta en "Local Mode", por lo cual NO se puede setear registro, solamente leerlos.
No se si en las otras hojas que quitaste dice algo de esto.
Bit 4: Finalmente este bit, nos indica que no se realizo la operacion.
Mi pregunta ahora es ... Como sacarlo del Local Mode, tal ves un Jumper. No veo comando que lo haga.
-------------------------------------------------------
Posibles solucion para explicar si es correcta la direccion del dispositivo.
Si tenes un solo equipo conectado, se podria probar enviar el comando: COMMAND 71 (Peripheral identification request)
De esa forma, ya que SI se puede pedir cosas, saber si la direccion es realmente 0x00 o si es 0x01
20 71 A9 B1 C0
Si responde correctamente, es decir con cerca de 11 bytes, entonces es correcta la direccion 0x00, sino habra que probar con la direccion 0x01.
-
ok realice las pruebas que me dices, pero la trama es 21 71 A9 B0 C0, ya que la direccion del esclavo es diferente por decir asi, la de trabajo con la de pregunta.
la direccion del esclavo siempre sera 0000, para nuestro caso de realizar las prueba y/o configuraciones.
realice una prueba con el COMANDO 68 (Set Parameters) la trama es la siguiente 20 68 80 81 A9 B9 C0 y no obtuve nada de respuesta :?
Te adjunto el pdf completo con un adicional que tiene la configuración de los trimers, y las posiciones de los dipswitch, ademas de la configuración por defecto que recomienda el fabricante.
-
adjunto las otras partes que faltaron de la respuesta anterior
Saludos.
-
Bueno pero veo que con 21 71 A9 B0 C0 el dispositivo responde correctamente, es decir responde:
41 71 80 81 80 81 80 85 81 80 85 AD B8 ED
Es decir la direccion es la 0x01 y no 0x00 como estabamos haciendo.
Tipo de periferico: Molinete
Version de Firmware : 0x01
Version de Release : 0x05
1 byte que no estan en el datasheet : 0x10
Chekcsum : 0xD8
Status : 0xED
En si respondio, Mi problema es ese "Local Mode" que en los PDF que pasaste no dice como sacarlo, y que segun el PDF, no vas a poder modificar nada a no ser que no este como Local Mode. Deberias preguntar por eso.
-
ok amigo KILLERJC, ya le envie la pregunta, ahora hay que esperar porque ellos duran mucho para responde o simplemente no responden....
ademas sobre la direccion update del esclavo (trabajo) comienza en 20 (si en el dipswitch esta en 0000), pero la direccion para realizarle pregunta al la tarjeta LL2001 es la 21 (en el dipswitch sique el 0000).
Te fijastes ese PDF me lo envio el fabricante porque se le solicito para configurarlos, sino no hubieran enviado nada, ademas estan como de falta de informacion, porque ese mismo se le aplica a lo otros modelos de torniquetes que fabrican.
igualmente seguire buscando informacion y presionando al fabricante, realizando pruebas, actualizando el tema de igual forma gracias por tu interes.
Saludos.
-
Amigos del foros, Saludos, bueno actualizando el tema, por fin se logro contacta a una persona del departamento tecnico de la empresa y nos facilito una interfaz (despues de tanto insistir :-/) (Virtual MAster) de comunicacion con las diferentes tarjeta, para nuestro caso la LL2001 ((:-)).
conecte todo otra vez en su lugar, y llega el momento de la verdad, cuando comienzo a realizar las prueba, resulta y acontece que no funciona :5], ya solicitamos otra tarjeta porque son 32 torniquetes, no creemos que las 32 tengan el mismo inconvenientes.
les adjunto las imagenes de la interfaz y las respuestas.
parte 1
-
segunda parte de las respuesta de la interfaz
-
Bueno espero que ya con esto se logre llegar al punto determinar cual es el problema
-
Saludos integrantes del foro, bueno actualizando el tema sobre el torniquete
Ya el torniquete FUNCIONA !!!!! :-/ :-/
Amigo KILLERJC, recordando tu comentario
" Y aca viene el problema... Supuestamente uno puede escribir a las direcciones 00 hasta 1F (0x20 a 0x3F)), el problema es que la respuesta que deberia ser tambien de 00 hasta 1F (0x40 a 0x5F), parece no serlo, El cual comienza con un 01 hasta 1F, Es decir la direccion 00, parece no ser correcta o no tiene respuesta (ya que no es un valor valido de respuesta). Seguramente debe haber algun error en el manual ya que sino faltaria 1 direccion de equipo. Otra de las cosas, es que tenes 4 DIP Switch en la placa, como es posible setear 5 bits con eso ?, o que bits esta usando. Tal ves sea que la direccion de respuesta sea 1 mas de lo enviado, y por eso posee 5 bits. Puede haber multiples causas, pero vamos a apoyarnos en esta ultima.
Por tu parte, veo que la respuesta del circuito dice que se trata del dispositivo numero 1, es decir 01, y el cual nosotros usabamos 00, al menos eso responde con el 0x41 ( A no ser que el 0 responda como 1)."
Despues de tanto insistir el departamento tecnico y seguir realizando pruebas, parte de tu comentario era una de las respuestas, la direccion 00, no es una direccion valida, aunque el dispositivo (LL2001) responda a la trama, la direccion correcta empieza en 01.
Ademas segun el manual sobre el polling nos dice:
POLLING
This is used to keep the peripheral ‘online’ this means in remote mode. If the peripheral for any reason should not receive a poll (or a command) within 7 seconds) it will go offline.
Master: 000i.iiii Address of peripheral to be tested (01-1F)
Slave: 010i.iiii Address of peripheral tested (01 - 1F)
111y.yyyy End (Status of peripheral)
Transcurrido el tiempo de 7 seg el periferico quedara OFFLINE, es alli donde entra en MODO LOCAL, realizando prueba resulta que el POLLING no debe excede los 3,5 seg (maximo, recomendado seria 2seg), para mantener el sistema ONLINE y que el equipo este en REMOTO (via RS485)
Ademas el funcionamiento no queda ahi, resulta que la LL2001, trae por defecto la configuracion de trabajo en MODO LOCAL, trae habilitadas unas Alarmas, y ENABLES (adjunto imagen DEFAULT, interfaz), hasta no colocar todo en cero 0 y resetear las alarmas y a su ver este activado el POLLING, la controladora NUNCA nos iba a funcionan en MODO REMOTO.
Tambien para el manejo de la LL2001, solo se necesito 2 comando el 0x60 para colocar todo en Cero, borrar las Alarmas y realizar las configuraciones de BLOQUEO, DESBLOQUEO y CONTROL tanto del modo A o B del Torniquete, y el comando 0x71 para solicitar respuestas, de configuración. :?
Por ningun lado en el manual mencionaba que el comando 0x60, trabaja con todas esas funciones, y donde observamos todos esas acciones fue con la interfaz que la empresa nos facilito.
Ahora me queda una gran duda, ¿ Porque una empresa fabricante en un manual diseñado por su departamento tecnico te explica como son las tramas para el control de las tarjeta, luego de tanta insistencia te envian una interfaz (demo) donde los comandos no corresponden al 100% con lo explicado en su propio manual de usuario.....???
He realizado una interfaz simple en C# 2008, para el control de la tarjeta LL2001 (adjunto la imagen)
Gracias por su colaboracion y interes sobre el tema
Saludos...
-
Bueno, primero felicidades por haberlo hecho funcionar.
Y seguramente los manuales sean de alguna version mucho mas vieja y que nunca actualizaron. El programa por su parte, para probarlo ellos seguramente este actualizado.