You are on page 1of 35

ThinkChip

V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Guia de Usuario Convertidor MDB USB


En esta gua el usuario encontrar la distribucin de la tarjeta, caracteristicas tcnicas, as como la
forma de utilizar el archivo DLL SimpleUSB.dll en un entorno de programacin Visual Studio, as
como las constantes necesarias para la correcta comunicacin con el dispositivo MDB USB.
Introduccin
Hardware
La distribucin de la tarjeta es el siguiente:

Alimentacin MDB: 24VDC 2Amp.


Conexin USB: 5VDC 500 mA (proteccin optoaislado).
Led Error: Indica Error en Coin Changer, Bill Acceptor, etc.
Led MDB: Indica comunicacin entre Dispositivos MDB y dispositivo MDB USB.
Led USB: Indica comunicacin entre PC y Dispositivo MDB USB.
Configuracin de Billetes Habilitados
La tarjeta tiene una serie de switches, las cuales en ellas se puede seleccionar que billete puede aceptar
el validador, siendo BIT0 = 20 pesos, BIT1=50 pesos, BIT2=100 pesos y BIT3=200 pesos.

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Instalacin
Al conectar el dispositivo MDB USB, el sistema operativo Windows tratar de buscar en su base de
datos el driver correspondiente, al no encontrarlo, le pedir al usuario que instale manualmente el
driver. Para windows XP es automtico la peticin de instalar manualmente el driver, pero en windows
vista y seven, se deber instalar desde administrador de dispositivos.
Al conectar el dispositivo convertidor MDB USB, aparecer en la carpeta de Otros dispositivos, como
se ve en la figura:

Selecciona el dispositivo con botn secundario del ratn, y selecciona Propiedades

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Aparecer una ventana, en la cual seleccionaremos Actualizar controlador....

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Seleccionamos Buscar software de controlador de equipo

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Buscamos la carpeta donde se encuentra el driver llamado Convertidor MDB USB, al aceptar e
instalar, aparecer la siguiente ventana, alertando, esto pasa por que en Windows no esta certificado el
dispositivo USB, seleccionamos Instalar este software de controlador de todas formas

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Si se ha instalado correctamente, aparecer la siguiente ventana:

Si se ha instalado el driver exitosamente, se visualizar en Administrador de Dispositivos

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Software
Las funciones y tareas que estn disponibles para esta versin del convertidor MDB USB son las
siguientes:

Inicializacin de dispositivos de cobro


Recepcin de monto de efectivo insertado, mediante un evento
Peticin de Status de Coin Changer y Bill Acceptor
Peticin de Informacin de dinero en tubos en Coin Changer
Peticin de Informacin nmero de billetes en stack de Bill Acceptor
Habilitacin y deshabilitacin de Coin Changer y Bill Acceptor
Envi de monto de cambio en coin changer

Preparando el ambiente de trabajo


Antes de empezar a utilizar el archivo DLL, necesitamos agregarlo a nuestras herramientas, solo
necesitamos buscar en la carpeta Software en la direccin donde copiamos los archivos del disco, el
archivo llamado SimpleUSB.dll y arrastrarlo en las herramientas de Visual Studio.

Al seleccionar la nueva herramienta e integrarla a nuestra Form, deberemos de configurar una


propiedad llamada GUID.
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Por default tiene 00000000-0000-0000-0000-000000000000, este nmero tiene que modificarse por :

a3c4dc3e-683a-4220-9279-cdba089ea343
Una vez modificado esta propiedad, podrmos empezar a trabajar en el programa.
En el archivo DLL existen diferentes funciones, a continuacin explicamos cada una de ellas, as como
un ejemplo de uso. En los siguientes ejemplos, la herramienta SimpleUSB se le ha dejado el nombre
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

que tiene por default simpleUSB1.

Conexin y Desconexin de dispositivo

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Para conectar el dispositivo a la interfaz de usuario, se necesita llamar primero a la funcin

OpenConnection()
Para el siguiente ejemplo del uso de esta funcin, se ha creado un botn, que al llamar al evento _Click
se conecta el dispositivo, este metodo puede variar facilmente dependiendo de su aplicacin.
private void button1_Click(object sender, EventArgs e)
{
simpleUSB1.OpenConnection();
}
Para desconectar el dispositivo se necesita llamar a la funcin

CloseConnection()
Para el siguiente ejemplo del uso de esta funcin, se ha creado un botn, que al llamar al evento _Click
se desconecta el dispositivo, este metodo puede variar facilmente dependiendo de su aplicacin.
private void button2_Click(object sender, EventArgs e)
{
simpleUSB1.CloseConnection();
}
Si se ha conectado existosamente el dispositivo MDB USB, se invocar a un evento llamado

_onDeviceConnect()
Si se ha desconectado exitosamente el dispositivo, se invocar a un evento llamado

_onDeviceDisconnect()
Ejemplo de uso:

private void SimpleUSB1_onDeviceConnect()


{
label1.Text = "Conectado";
SimpleUSB1.StartReadingInterruptEndPoint(2, 8);
}
private void SimpleUSB1_onDeviceDisconnect()
{
label1.Text = "Desconectado";
simpleUSB1.StopReadingInterruptEndpoint();
}

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

En cualquier momento en el programa, podemos preguntar si se est conectado o desconectado el


dispositivo con la propiedad booleana DeviceConnected.
if (simpleUSB1.DeviceConnected = true)
{
//accin a realizar
}

Comenzar Lectura de datos


Para comenzar la lectura de datos provenientes del dispositivo, se llamar a la funcin

StartReadingInterruptEndPoint(2, 8)
Se recomienda llamar a esta funcin en el evento _onDeviceConnect(), como se ve en el ejemplo de
arriba, los parametros (2,8) son datos internos del funcionamiento del dispositivo y no deben de ser
modificados.
Detener Lectura de datos
Para detener la lectura de datos provenientes del dispositivo, se llamar a la funcin

StopReadingInterruptEndpoint()
Se recomienda llamar a esta funcin en el evento _onDeviceDisconnect()

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Inicializacin de dispositivos MDB

El dispositivo al ser conectado a la PC, empezar a escanear si existen dispositivos MDB conectados
como son Coin Changer y Bill Acceptors, en caso negativo, veremos el Led Error parpadear, esto
quiere decir que no existe ningun dispositivo conectado, para que el dispositivo pueda escanear
correctamente los dispositivos, debe haber desde luego al menos un dispositivo de cobro conectado, y
alimentado con una fuente de voltaje de por lo menos 24VDC a 2Amp.
En caso de que no se haya conectado la alimentacin de 24VDC y los dispositivos antes de conectar el
convertidor MDB USB a la PC, se necesita inicializarlo de nuevo.
Antes de llamar a la funcin que le dir al convertidor MDB, que, inicialice los dispositivos de cobro,
es necesario crear un buffer de datos de salida y de entrada.
byte[] OutputBuffer = new byte[32];
byte[] InputBuffer = new byte[32];

Una vez creado estos buffer, se llamar a la funcin WriteData(1, Buffer_de_salida,8)


En donde el primer parametro 1 no se modifica, el segundo parametro se refiere a el buffer de salida
que se ha creado, y el tercer parametro se refiere al tamao del dato a enviar. En este ejemplo, se
presionar un botn, al llamar al evento Click, se preguntar antes de llamar a la funcin, si est
conectado el convertidor MDB USB.
private void button3_Click(object sender, EventArgs e)
{
if (simpleUSB1.DeviceConnected == true)
{
OutputBuffer[0] = INIT_MDB_DEVICES;
simpleUSB1.WriteData(1, OutputBuffer,8);
}
}
La constante INIT_MDB_DEVICES se explicar ms adelante.
A partir de ahora, la mayora de las funciones tienen una respuesta, la respuesta de la funcin para
Inicializar los dispositivos de cobro MDB se concentrar en un evento llamado:

_onReadComplete()
Al llamarse al evento _onReadComplete, se avisa al sistema que un nuevo dato proviene del
convertidor MDB USB, pero an no hemos asociado, hacia donde
Cuando el dispositivo convertidor MDB USB ha terminado de conectarse e inicializarse con los
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

dispositivos de cobro, responder en este evento, en el siguiente ejemplo, preguntamos en la localidad


del buffer [0] si la respuesta corresponde con la inicializacin, en el byte [1] de la cadena, especifica
que dispositivos estn conectados.
private void simpleUSB1_onReadComplete()
{
simpleUSB1.ReadInterruptEndpoint(ref InputBuffer, 8);
if (InputBuffer[0] == INIT_MDB_DEVICES)
{
if (InputBuffer[1] == COIN_CHANGER)
{
label2.Text = "Coin Changer finded";
}
else if (InputBuffer[1] == BILL_ACCEPTOR)
{
label2.Text = "Bill Changer finded";
}
else if (InputBuffer[1] == COIN_AND_BILL)
{
label2.Text = "coin and bill";
}
else
{
label2.Text = "no encontrados";
}
}
}

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Recepcin de monto insertado

Cuando se ha recibido dinero desde el coin changer y el bill acceptor, el convertidor MDB USB enviar
automticamente el dato a travs del evento _onReadComplete()
El dato del monto enviado se enva como el doble, esto quiere decir que si se recibe el dato "2",
entonces lo que se recibi en realidad es 1 peso. Esto se hizo para no tener que manejar nmeros con
punto decimal en la comunicacin, el dato que se enva es un entero de 16 bits, pero al manejar un
buffer de 8 bits, se enva dividido en 2 bytes.
En el buffer de entrada, que para este ejemplo, tienen el nombre de InputBuffer recibe alrededor de 3
datos, cada uno enviado en el siguiente orden:
InputBuffer[0] = CASH_INSERTED (constante indicando que el datos enviado, se trata de dinero
insertado por usuario)
InputBuffer[1] = msb
InputBuffer[2] = lsb

(byte ms significativo del monto insertado)


(byte menos significativo del monto insertado)

En el siguiente ejemplo, se muestra como recibir el dato y guardarlo en una variable tipo int, adems de
imprimirlo en una etiqueta, para la visualizacin del usuario.
private void simpleUSB1_onReadComplete()
{
simpleUSB1.ReadInterruptEndpoint(ref InputBuffer, 8);
if (InputBuffer[0] == CASH_INSERTED)
{
byte msb, lsb;
int cash_inserted = 0;
float cash;
msb = InputBuffer[1];
lsb = InputBuffer[2];
cash_inserted = msb;
cash_inserted <<= 8;
cash_inserted |= lsb;
cash = cash_inserted * 0.5;
label3.Text = cash.ToString();
}
}

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Recepcin de errores en Coin Changer y Bill Acceptor

En la recepcin de errores que pudiera tener los dispositivos MDB, se requiere de primero realizar la
peticin de envio de informe de errores, para realizar esto, se necesita utilizar la funcin

WriteData(1, Buffer_de_salida,8)
En donde el dato de Buffer_de_salida se reemplaza por el buffer que nosotros hemos creado en nuestro
programa, con la constante de envio de datos de errores, como se ve en el siguiente ejemplo, el cual,
cada determinado tiempo se estar preguntado por el status de error, utilizando un timer y el evento
Tick
private void timer1_Tick(object sender, EventArgs e)
{
OutputBuffer[0] = ERROR_STATUS;
simpleUSB1.WriteData(1, OutputBuffer,8);
}
La recepcin de la respuesta se recibe en el evento _onReadComplete()
En donde el buffer de entrada InputBuffer recibe los datos de la siguiente manera:
InputBuffer[0] = constante que indica que se recepciona los datos de status de error
InputBuffer[1] = msb (byte ms significativo de error en coinchanger)
InputBuffer[2] = lsb (byte menos significativo de error en coinchanger)
InputBuffer[3] = ErrorBill (dato de status de error en bill acceptor)
El ejemplo siguiente demuestra la recepcin del error, y en una etiqueta imprime los status de cada uno
de los dispositivos MDB.
private void simpleUSB1_onReadComplete()
{
simpleUSB1.ReadInterruptEndpoint(ref InputBuffer, 8);
if (InputBuffer[0] == ERROR_STATUS)
{
byte msb, lsb, error;
int error_coinchanger;
msb = InputBuffer[1];
lsb = InputBuffer[2];
error_coinchanger = msb;
error_coinchanger <<= 8;
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

error_coinchanger |= lsb;
InputBuffer[3] = error;
label4.Text = "Error coinchanger =" + error_coinchanger.ToString()
+ " Error bill=" + error.ToString();
}
}

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Tabla de constante de errores para Coin Changer, donde Z1 es el byte menos significativo, y Z2 el byte
ms significativo.

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Tabla de constante de errores en Bill Acceptor

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Peticin de Informacin de dinero en tubos en Coin Changer

Para poder saber cuanto dinero hay en los tubos de cambio, en el coin changer, se llamar a la funcin

WriteData(1, Buffer_de_salida,8)
En el siguiente ejemplo, se utiliza un boton, llamando al evento Click
private void button4_Click(object sender, EventArgs e)
{
OutputBuffer[0] = CASH_IN_TUBES;
simpleUSB1.WriteData(1, OutputBuffer, 8);
}
En la respuesta, se enviar al evento a _onReadComplete()
En el siguiente ejemplo, se lee la respuesta del convertidor MDB USB, los datos los envia de la
siguiente forma:
InputBuffer[0] = constante que indica dinero en tubos
InputBuffer[1] = msb (byte ms significativo del dato)
InputBuffer[2] = lsb (byte menos significativo del dato)
El dato viene en un entero de 16 bits, y es el doble del monto real, esto quiere decir que multiplicandolo
por 0.5 o dividiendolo entre 2, se tiene el valor real.
private void simpleUSB1_onReadComplete()
{
simpleUSB1.ReadInterruptEndpoint(ref InputBuffer, 8);
if (InputBuffer[0] = CASH_IN_TUBES)
{
byte msb, lsb;
int cash_in_tubes;
double money;
msb = InputBuffer[1];
lsb = InputBuffer[2];
cash_in_tubes = msb;
cash_in_tubes <<= 8;
cash_in_tubes |= lsb;
money = cash_in_tubes * 0.5;
label5.Text = "Dinero en tubos =$" + money.ToString();
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

}
}

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Peticin de Informacin nmero de billetes en stack de Bill Acceptor

La peticin de informacin de nmero de billetes, nos d el nmero de billetes, no el monto de dinero


en billetes. Para pedir est informacin, se utiliza la funcin:

WriteData(1, Buffer_de_salida,8)
En el siguiente ejemplo, se pide por la informacin mediante el evento Click de un botn:
private void button5_Click(object sender, EventArgs e)
{
if (simpleUSB1.DeviceConnected == true)
{
OutputBuffer[0] = CASH_IN_BILL;
simpleUSB1.WriteData(1, OutputBuffer, 8);
}
}
Recuerden, que es una buena prctica, preguntar antes, s el dispositivo est conectado, antes de enviar
la informacin, como se ve en el ejemplo de arriba.
La respuesta a esta funcin se enviar al evento _onReadComplete()
El envo de datos es de la siguiente forma, en el buffer de entrada
InputBuffer[0] = constante que indica que se trata de billetes en stack
InputBuffer[1] = msb (byte ms significativo de nmero de billetes en stack)
InputBuffer[2] = lsb (byte menos significativo de nmero de billetes en stack)
En el siguiente ejemplo, se muestra como leer los datos, e imprimirlos en una etiqueta
private void simpleUSB1_onReadComplete()
{
simpleUSB1.ReadInterruptEndpoint(ref InputBuffer, 8);
if (InputBuffer[0] = CASH_IN_BILL)
{
byte msb, lsb;
int cash_in_bill = 0;
msb = InputBuffer[1];
lsb = InputBuffer[2];
cash_in_bill = msb;
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

cash_in_bill <<= 8;
cash_in_bill |= lsb;
label6.Text = "Numero de billetes =" + cash_in_bill.ToString();
}
}

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Habilitacin y deshabilitacin de Coin Changer y Bill Acceptor

En esta funcin, podemos habilitar o deshabilitar los dispositivos MDB, dependiendo de que se desea
habilitar o deshabilitar, se escribe en el buffer de salida, el orden es el siguiente:
Habilitacin y deshabilitacin de coin changer
OutBuffer[0] = constante que indica tarea de configuracin de coinchanger
OutBuffer[1] = valor booleano que indica habilitacin= 1 y deshabilitacin = 0
Habilitacin y deshabilitacin de bill acceptor
OutBuffer[0] = constante que indica tarea de configuracin de bill acceptor
OutBuffer[1] = valor booleano que indica habilitacin= 1 y deshabilitacin = 0
En el siguiente ejemplo, se utiliza cuatro botones para habilitacin y deshabilitacin de los dispositivos:

private void button6_Click(object sender, EventArgs e)


{
if (simpleUSB1.DeviceConnected == true)
{
OutputBuffer[0] = SET_COINCHANGER;
OutputBuffer[1] = 1;
simpleUSB1.WriteData(1,OutputBuffer,8);
}
}
private void button7_Click(object sender, EventArgs e)
{
if (simpleUSB1.DeviceConnected == true)
{
OutputBuffer[0] = SET_COINCHANGER;
OutputBuffer[1] = 0;
simpleUSB1.WriteData(1, OutputBuffer, 8);
}
}
private void button9_Click(object sender, EventArgs e)
{
if (simpleUSB1.DeviceConnected == true)
{
OutputBuffer[0] = SET_BILL;
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

OutputBuffer[1] = 1;
simpleUSB1.WriteData(1, OutputBuffer, 8);
}
}
private void button10_Click(object sender, EventArgs e)
{
if (simpleUSB1.DeviceConnected == true)
{
OutputBuffer[0] = SET_BILL;
OutputBuffer[1] = 0;
simpleUSB1.WriteData(1, OutputBuffer, 8);
}
}

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Envi de monto de cambio en coin changer

La funcin de envio de monto, es como su nombre lo dice, devolver cambio de dinero, mediante el coin
changer, para utilizar est funcin, se necesita enviar el monto del cambio por dos, esto quiere decir,
que si se necesita dar de cambio 10 pesos, se enviar al convertidor MDB USB la cantidad de 20. Esto
se hace mediante un entero de 16 bits, dividido en 2 bytes, enviando primero el ms significativo y
luego el menos significativo, en el buffer de salida se muestra el orden a ms detalle:
OutputBuffer[0] = constante que indica que envio de monto de cambio
OutputBuffer[1] = msb (byte ms significativo)
OutputBuffer[2] = lsb (byte menos significativo)
En el siguiente ejemplo, se muestra como utilizar esta funcin, mediante un TextBox y un botn para
enviar el monto escrito en TextBox, cabe destacar que este ejemplo no tiene ningun tipo de filtro a
letras, ya que es solamente demostrativo.

private void button8_Click(object sender, EventArgs e)


{
int monto_escrito, monto_enviado;
byte msb, lsb;
monto_escrito = Convert.ToInt16(textBox1.Text);
monto_enviado = monto_escrito * 2;
msb = (byte)(monto_enviado >> 8) ;
lsb = (byte)(monto_enviado & 0xff);
OutputBuffer[0] = SEND_CHANGE;
OutputBuffer[1] = msb;
OutputBuffer[2] = lsb;
if (simpleUSB1.DeviceConnected == true)
{
simpleUSB1.WriteData(1, OutputBuffer, 8);
}
}

El convertidor MDB USB responder cuando haya terminado el proceso de envio de cambio, no
necesariamente tiene que ser exitosa la tarea, y depende del coin changer, ms adelante se muestran las
posibles respuestas a la funcin. En el siguiente ejemplo se muestra como se recibe datos desde el
evento _onReadComplete()
Se debe de esperar a la respuesta del convertidor MDB USB, antes de realizar otra funcin, ya que
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

normalmente tarda entre 1 o 5 segundos en terminar de dar cambio, dependiendo del modelo de
coinchanger.
private void simpleUSB1_onReadComplete()
{
simpleUSB1.ReadInterruptEndpoint(ref InputBuffer, 8);
if (InputBuffer[0] == SEND_CHANGE)
{
if (InputBuffer[1] == 1)
{
label7.Text = "TAREA EXITOSA";
}
else
{
label7.Text = "ERROR NO CAMBIO";
}
}
}

El dato enviado en el buffer de entrada en la localidad [1] determina si se realizo exitosamente la tarea
de dar cambio, cualquier nmero diferente de 1, ser error y probablemente se tendr que repetir la
tarea.

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

CONSTANTES
Anteriormente en el ejemplo, se habla de unas constantes, estas constantes se definen al principio del
programa, para que sea ms entendible para el programador. Las constantes son:
const byte INIT_MDB_DEVICES = 1;
const byte COIN_CHANGER = 1;
const byte BILL_ACCEPTOR = 2;
const byte COIN_AND_BILL = 3;
const byte CASH_INSERTED = 2;
const byte ERROR_STATUS = 4;
const byte CASH_IN_TUBES = 3;
const byte CASH_IN_BILL = 6;
const byte SET_COINCHANGER = 10;
const byte SET_BILL = 11;
const byte SEND_CHANGE = 9;

Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

Programa completo de ejemplo


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace EjemploMDBUSB
{
public partial class Form1 : Form
{
byte[] OutputBuffer = new byte[32];
byte[] InputBuffer = new byte[32];
const byte INIT_MDB_DEVICES = 1;
const byte COIN_CHANGER = 1;
const byte BILL_ACCEPTOR = 2;
const byte COIN_AND_BILL = 3;
const byte CASH_INSERTED = 2;
const byte ERROR_STATUS = 4;
const byte CASH_IN_TUBES = 3;
const byte CASH_IN_BILL = 6;
const byte SET_COINCHANGER = 10;
const byte SET_BILL = 11;
const byte SEND_CHANGE = 9;
public Form1()
{
InitializeComponent();
}
private void simpleUSB1_onDeviceConnect()
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

{
label1.Text = "Conectado";
simpleUSB1.StartReadingInterruptEndPoint(2, 8);
}
private void simpleUSB1_onDeviceDisconnect()
{
label1.Text = "Desconectado";
simpleUSB1.StopReadingInterruptEndpoint();
}
private void button1_Click(object sender, EventArgs e)
{
simpleUSB1.OpenConnection();
}
private void button2_Click(object sender, EventArgs e)
{
simpleUSB1.CloseConnection();
}
private void button3_Click(object sender, EventArgs e)
{
if (simpleUSB1.DeviceConnected == true)
{
OutputBuffer[0] = INIT_MDB_DEVICES;
simpleUSB1.WriteData(1, OutputBuffer,8);
}
}
private void simpleUSB1_onReadComplete()
{
simpleUSB1.ReadInterruptEndpoint(ref InputBuffer, 8);
if (InputBuffer[0] == INIT_MDB_DEVICES)
{
if (InputBuffer[1] == COIN_CHANGER)
{
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

label2.Text = "Coin Changer finded";


timer1.Start();
}
else if (InputBuffer[1] == BILL_ACCEPTOR)
{
label2.Text = "Bill Changer finded";
timer1.Start();
}
else if (InputBuffer[1] == COIN_AND_BILL)
{
label2.Text = "coin and bill";
timer1.Start();
}
else
{
label2.Text = "no encontrados";
}
}
if (InputBuffer[0] == CASH_INSERTED)
{
byte msb, lsb;
int cash_inserted = 0;
double cash;
msb = InputBuffer[1];
lsb = InputBuffer[2];
cash_inserted = msb;
cash_inserted <<= 8;
cash_inserted |= lsb;
cash = cash_inserted * 0.5;
label3.Text = cash.ToString();
}
if (InputBuffer[0] == ERROR_STATUS)
{
byte msb, lsb, error;
int error_coinchanger;
msb = InputBuffer[1];
lsb = InputBuffer[2];
error_coinchanger = msb;
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

error_coinchanger <<= 8;
error_coinchanger |= lsb;
error = InputBuffer[3];
label4.Text = "Error coinchanger =" + error_coinchanger.ToString()
+ " Error bill=" + error.ToString();
}
if (InputBuffer[0] == CASH_IN_TUBES)
{
byte msb, lsb;
int cash_in_tubes;
double money;
msb = InputBuffer[1];
lsb = InputBuffer[2];
cash_in_tubes = msb;
cash_in_tubes <<= 8;
cash_in_tubes |= lsb;
money = cash_in_tubes * 0.5;
label5.Text = "Dinero en tubos =$" + money.ToString();
}
if (InputBuffer[0] == CASH_IN_BILL)
{
byte msb, lsb;
int cash_in_bill = 0;
msb = InputBuffer[1];
lsb = InputBuffer[2];
cash_in_bill = msb;
cash_in_bill <<= 8;
cash_in_bill |= lsb;
label6.Text = "Numero de billetes =" + cash_in_bill.ToString();
}
if (InputBuffer[0] == SEND_CHANGE)
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

{
if (InputBuffer[1] == 1)
{
label7.Text = "TAREA EXITOSA";
}
else
{
label7.Text = "ERROR NO CAMBIO";
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
OutputBuffer[0] = ERROR_STATUS;
simpleUSB1.WriteData(1, OutputBuffer,8);
}
private void button4_Click(object sender, EventArgs e)
{
OutputBuffer[0] = CASH_IN_TUBES;
simpleUSB1.WriteData(1, OutputBuffer, 8);
}
private void button5_Click(object sender, EventArgs e)
{
if (simpleUSB1.DeviceConnected == true)
{
OutputBuffer[0] = CASH_IN_BILL;
simpleUSB1.WriteData(1, OutputBuffer, 8);
}
}
private void button6_Click(object sender, EventArgs e)
{
if (simpleUSB1.DeviceConnected == true)
{
OutputBuffer[0] = SET_COINCHANGER;
OutputBuffer[1] = 1;
simpleUSB1.WriteData(1,OutputBuffer,8);
}
}
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

private void button7_Click(object sender, EventArgs e)


{
if (simpleUSB1.DeviceConnected == true)
{
OutputBuffer[0] = SET_COINCHANGER;
OutputBuffer[1] = 0;
simpleUSB1.WriteData(1, OutputBuffer, 8);
}
}
private void button8_Click(object sender, EventArgs e)
{
int monto_escrito, monto_enviado;
byte msb, lsb;
monto_escrito = Convert.ToInt16(textBox1.Text);
monto_enviado = monto_escrito * 2;
msb = (byte)(monto_enviado >> 8) ;
lsb = (byte)(monto_enviado & 0xff);
OutputBuffer[0] = SEND_CHANGE;
OutputBuffer[1] = msb;
OutputBuffer[2] = lsb;
if (simpleUSB1.DeviceConnected == true)
{
simpleUSB1.WriteData(1, OutputBuffer, 8);
}
}
private void button9_Click(object sender, EventArgs e)
{
if (simpleUSB1.DeviceConnected == true)
{
OutputBuffer[0] = SET_BILL;
OutputBuffer[1] = 1;
simpleUSB1.WriteData(1, OutputBuffer, 8);
}
}
private void button10_Click(object sender, EventArgs e)
Copyright Todos los derechos reservados. ThinkChip

ThinkChip
V1.1
05/2012

Soluciones Vending y Control


Archivo Confidencial

{
if (simpleUSB1.DeviceConnected == true)
{
OutputBuffer[0] = SET_BILL;
OutputBuffer[1] = 0;
simpleUSB1.WriteData(1, OutputBuffer, 8);
}
}

}
}

Copyright Todos los derechos reservados. ThinkChip

You might also like