viernes, 3 de febrero de 2012

OBTENER TRAMAS CCTALK

(EN) Getting cctalk frames.
(FR) Obtenir trames cctalk.
(PT) Obter trama cctalk.
-----------------------------------------------------------------------------------------------------------------------------   

PARA REPASAR: En la web de Money Controls,  o buscando por cctalk.org puedes descargarte las especificaciones genéricas de como funciona el protocolo de comunicaciones serie ccTalk.

 Bueno, me he estado peleando algo más con esto del protocolo ccTalk. Hay una entrada anterior sobre este tema. En esta nueva entrada voy a tratar de presentar un poco más mis progresos. CCTalk es un protocolo de comunicación serie, hecho por personal de Money Controls, de baja velocidad, para control de redes de dispositivos, especialmente en la industria del tratamiento de monedas (selectores de monedas, pagadores, ...). Esto no impide que también se pueda usar para otras cuestiones que no requieran una velocidad en la transmisión de datos excesiva.
En mi afán de aprender a usar comunicación serie, me he interesado por este protocolo por dos cuestiones:
 a) ccTalk es un estándar abierto. En la web de Money Controls puedes descargarte las especificaciones generales del protocolo. Aunque ccTalk es marca registrada, permiten el uso sin pagar royaltis, ni obtener licencias.
 b) Hoy por hoy, tengo acceso a dispositivos de control de monedas, y por eso me resulta fácil hacer pruebas y experimentos. Se trata de un protocolo sencillo para aplicar con microcontroladores pequeños y de bajo coste. Y esto me parece ideal para aprender de forma autodidacta.

En esta ocasión he conseguido leer una trama real de datos de un bus cctalk de una máquina de apuesta de monedas. Y esto es lo que trataré de exponer en esta entrada. En alguna posterior a ver si me dedico a analizarla. Pero por si acaso alguien lo quiere ir haciendo expondré la trama y como he hecho para conseguirla. Ni que decir tiene, que estamos hablando de los datos que se transmiten por el bus para hacer interactuar a los diferentes dispositivos. No hablamos nunca de lo que la cpu de la máquina "piensa" o calcula para realizar el juego. Ni sé, ni pretendo, descubrir algoritmos ocultos, o secretos de empresa, ni trucos de juego. Me limito a intentar estudiar un protocolo abierto y público para conseguir usarlo.

Primero dejaremos constancia de algunas ideas básicas,de en que consiste la comunicación de un bus cctalk. Si te interesa ampliar. Todo está sacado de las especificaciones generales que puedes conseguir en inglés buscando por cctalk.org  y Money Controls. Actualmente, yo hablo del Issue 4.5. También puedes buscar algo por la red sobre dispositivos Azkoyen (selectores de monedas X6, Z6, hopper U-II, ...). Para mi, los dispositivos Azkoyen son los más conocidos, y con los cuales, es más fácil que pueda hacer pruebas. En España, está muy extendido su uso, pero el protocolo cctalk es compartido por muchos fabricantes.


Un bus de datos ccTalk consta únicamente de un hilo. La comunicación es serie, asíncrona y half-duplex. Sólo un dispositivo de todos puede estar transmitiendo en un momento dado. La forma de transmitir es idéntica al RS232 estándar, pero las tensiones no son de +15 a -15, sino con niveles TTL. Un uno lógico será +5v, y un cero lógico serán 0v. Y no usaremos las señales RTS,CTS,DTR,DCD,DSR. Solo nos interesan Rx y Tx que usarán este mismo único cable de datos para viajar. Los parámetros para la transmisión que usará ccTalk son: 9600 baudios, 1 bit de start, 8 bits de datos, sin paridad, 1 bit de stop. Puede haber una opción de velocidad más lenta a 4800 baudios, y hay nuevos dispositivos que intentan usar velocidades de puerto USB, pero el estándar son 9600 baudios.
La alimentación de los dispositivos necesita de dos cables más para la alimentación. La masa que será referencia también para los 0v del cable de DATOS. Y el positivo de la alimentación que suele ser +12v aunque hay dispositivos que van a 24v. 

Con estas ideas, a mi ya se me ocurrió lo siguiente. Hay una serie de integrados de Maxim: MAX202, ..., MAX232, que adaptan las tensiones (+15v a -15v) de un puerto serie común de un pc, a las tensiones TTL (0v y +5v). Así que podría conectar el pin de lectura del puerto serie del pc al cable de datos del bus cctalk, mediante este integrado, y manejando el puerto serie leer lo que sucede en el bus cctalk.
Luego me he encontrado con que el asunto pintaba más fácil todavía. En el manual de las especificaciones genéricas del ccTalk, publicadas por Money Controls ya se propone un circuito sencillo para conectar el pc al bus ccTalk. Usando un MAX232 en vez de un MAX202 porque es el que encontré, y añadiendo un 7805 para alimentar al circuito desde la alimentación más común de +12v de los dispositivos que conozco ccTalk, monté mi adaptador PC (RS232) a ccTalk según he comentado en su momento. (Copia el esquema y amplíalo si no lo ves demasiado bien en el blog).

El problema de "ojear" el puerto serie lo he resuelto buscando algún programa para escanear o monitorizar el puerto serie. Hay varios. El problema fue que me he limitado de momento a software shareware y demos, con lo que las posibilidades vienen lógicamente limitadas. He conseguido algo satisfactorio con el programa Docklight pero tiene la limitación de que no puedes guardar los datos. Así que para este primer intento cutre, me he limitado a sacar unas fotos a la pantalla de mi portátil, y luego recortar y pegar para quedarme con los datos que me interesaban.

Un esquema general de como he conectado para monitorizar el bus de una máquina tragaperras es el siguiente. He usado  una fuente de alimentación externa, para que no importe el consumo ni la tensión del adaptador PC-ccTalk. Así que es importante el interconexionar las masas para que el potencial 0v sea igual en el PC, la máquina tragaperras, y el adaptador cctalk-pc.

Una vez enchufado todo. Con el ordenador corriendo y monitorizando el puerto serie, enciendo la máquina tragaperras y arranca, introduzco una moneda de 2 euros, y espero a que me cambie (paga una moneda de 1 euro y cuatro de 20 céntimos), juego el crédito correspondiente a los 20 céntimos, me da opción de avances y saco un premio que luego pierdo por bonos para un juego superior. Durante todo esto he monitorizado y aparece en la foto.
No quiero aquí indicar de que máquina ni fabricante se trata, es irrelevante. Sólo saber que dispone, al menos, de selector de monedas, hoppers, y lector de billetes en un bus cctalk.
A continuación muestro la foto, en donde he recortado, de las diferentes fotos de la pantalla, todos los datos monitorizados y por orden. Es un poco chapuzero. Marca de estilo de este blog. Pero son los medios que se me han ocurrido dentro de los que podía disponer en el momento.
En una siguiente entrada espero explicar un poco como van las tramas ccTalk y las iré poniendo más ordenaditas.  De momento creo que la entrada se me empieza a hacer larga. Si no puedes ver la foto claramente, sugiero que sobre la imagen "botón derecho/ guardar imagen como.../" guárdala como un documento de imagen tuyo, y luego ábrela con tu "visor de imágenes" y haz zoom. También puedes descargar,la original, con más calidad aquí.




Os animo a transmitirme comentarios y sugerencias.
Un saludo para todos.

(CONTINÚA)







6 comentarios:

  1. Hola,
    Mas que buscar un programa espia lo mejor es hacer un cable espia. Luego puedes utilizar cualquier programa, incluso el HyperTerminal.

    Como ccTalk es Half duplex, incluso hacer el cable es mas simple. Aca te dejo un enlace de ejemplo:
    http://www.lammertbies.nl/comm/cable/RS-232-spy-monitor.html

    Puedes hacer un programa en C# para mostrar las tramas que se envian y reciben en orden....

    Un saludo,
    Francisco Vicente
    http://franciscovicente.com

    ResponderEliminar
  2. Hola Francisco. Gracias por el aporte.
    En un principio mi idea sí que pasó por leer o espiar el bus serie con algo parecido a lo que propone la web de lammertbles, que comentas. Mi idea era como el "Full duplex RS232 spy / monitor / sniffer cable" de la web en cuestión. Pero también necesitaba pasar los 5 voltios del data del cctalk al rs232 (por eso el max232). Estando en ello encontré el circuito que propone Money Controls, que me permite trabajar directamente sobre el bus cctalk. Ya no se trata sólo de poder espiar, sino además de poder "escribir" y manejar el bus con el pc. Así que me parecío mejor opción. Sobre lo de programar en C#, perfecto pero no lo manejo.(Controlo un poco de C Ansi bastante básico) Estoy intentando hacer algo con Python. De todas formas, con el programa Docklight el trabajo estaba hecho.
    Un saludo y gracias.

    ResponderEliminar
  3. Hola.
    Llego aqui en busca de información acerca de cctalk, porque la verdad es que no encuentro nada, y mucho menos en la lengua de cervantes.
    Te comento mi situación por si pudieses orientarme en la dirección correcta en lugar de golpearme a mi mismo una y otra vez con el mismo muro.
    Estoy tratando de comunicarme con un monedero RM5 HD de Comestero, que está conectado mediante USB a un PC, para poder activarlo, leer las monedas que se introducen y desactivarlo.
    Actualmente utilizo (y compruebo que funciona) un programa llamado cctalk demo que permite saber que monedas y de que valor se han introducido en el monedero.
    He estado leyendo tus articulos y estoy aun mas pez que antes.
    Mi idea es implementar un programa que permita encender ese monedero, contar las monedas que se introducen y pasarle ese dato a otro programa (en principio un emulador).
    Podrías decirme si existe alguna web/pagina/fuente a la que me pudiese acercar para llevarlo a cabo? Preferiría hacerlo por software para no tener que ponerme a cacharrear, pero aun asi, cualquier ayuda seria bienvenida.
    Muchisimas gracias y sigo leyendo para ver si aprendo algo.
    Un saludo y feliz navidad.

    sat2ep@gmail.com

    ResponderEliminar
  4. Hola Sat2ep.
    Antes de nada comentarte que he dejado tu email en el correo (aunque prefiero evitarlos por esto del spam) porque yo no controlo mucho más del tema de lo que se puede ver en el blog. Con lo que voy yo golpeandome, es lo que vuelco al blog. A lo mejor alguien que controle más se anima ayudar.

    Por mi parte, por si te sirve de algo:
    Nunca he visto un monedero RM5 HD de Comestero, asi que para hacerme una idea me he parado en: (buscando en google por: "rm5 hd comestero cctalk")

    http://www.casino-software.de/download/manual_rm5.pdf

    En la paguina 17 tienes los códigos que dicho monedero tiene implementados y que tú puedes usar para operar con él.

    Puedes leerte todo el protocolo cctalk, pero como es estandar y resumiendo a mi me gusta (de lo poco que conozco) el manual de uno de azkoyen: (buscando en google por "modular x6 cctalk")

    http://www.sitekiosk.com/Product/DeviceDocuments/x6_cctalk.pdf

    Atención especialmente al punto 4 (Procedimiento de puesta en marcha).

    El de comestero no debe de tener còdigo pin porque no parece tener implementado el codigo 218. Y fíjate que has de hacer un 229 (Read bufferred credit or error codes) al menos una vez cada segundo.
    Tampoco sé como va ese interface que usas usb. El protocolo cctalk estandar es serie y a 9600 baudios. Como dices que consigues algo con el demo cctalk doy por supuesto que la conexión de comunicación está resuelta.

    Por cierto. Si conseguiste el demo cctalk de forma "comunicable" y "redistribuible". ¿Podrías comentárnoslo?

    Por lo demás suerte y cuenta si te apetece lo que consigas, o donde estaba el quid del problema para que aprendamos los demás.

    NOTA: pongo aquí enlaces a la web, que al día de hoy yo he encontrado, pero no puedo asegurar que sigan existiendo según pase el tiempo. Por eso indico también como he encontrado la información. Si alguien observa que los enlaces se han caido me gustaría que me lo comentaseis.

    Gracias y suerte.


    ResponderEliminar
  5. Un pequeño añadido a mi comentario anterior de ayuda a Sat2ep:

    Creo que he encontrado el programa que usas. Si alguien está interesado yo lo he encontrado. Buscando por "cctalk demo" hay enlaces a nri que es fabricante de monederos. De ahí acabo redirigido a una web de Crane Payment Solutions. En Suport/NRI suport/Other accesories/ccTalk-Demo-Software, v.3.1.0.0 for PC-based applications of ccTalk coin validators

    El programa es un test de (sólo) monederos cctalk. Un dibujito de un selector de monedas, nos indica que moneda ha entrado. Podemos elegir el puerto de entrada y poco más.

    Esto es bastante sencillo. Y me hace reinterpretar tu consulta. Me temo que lo que quieres son programas ya hechos que den como salida el resultado de esa aceptación de monedas y que puedas usar este resultado con otros que realicen lo que tu quieres.
    Yo no conozco ninguno. Supongo que los propios fabricantes podrán tener o hacerte alguna aplicación a tal efecto, pero previo pago. Estás en un mundo bastante minoritario y de un entorno bastante cerrado. A lo mejor existe y yo no lo conozco.

    Por mi parte decirte, que tendrás que programar a pelo. Se trata de manejar el puerto serie. El usb es un puerto serie algo especial. Escribir datos y leer las respuestas del monedero, y en función de lo que quieras hacer, "dialogar" con él. De qué datos son los que tienes que intercambiar es de lo que hablo en el blog.

    Si tienes nociones de programación no parece demasiado complejo, Si no quieres programar y lo que quieres es usar software ya hecho no sé ayudarte. Solo conozco algún programa de test. Hablar directamente con los fabricantes es lo único que se me ocurre. Si te atreves con la progración te propongo Visual C, o Visual Basic. O mejor todavía, usa Python y la libreria PySerial. Es sencillo, y es multiplataforma. No conozco utilidades cctalk para linux por ejemplo y esto ayudaría si lo dejas como software libre y con documentación...

    Suerte

    ResponderEliminar
  6. Al final he añadido una entrada más sobre el tema a raíz de alguno de estos comentarios. Buscad por:

    http://electronicaychapuzas.blogspot.com.es/2013/04/analisis-de-trama-de-comunicion-cctalk.html

    ResponderEliminar

Agradezco comentarios, aportaciones, o críticas...