V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la...

35
ThinkChip Soluciones Vending y Control V1.1 05/2012 Archivo Confidencial Guia de Usuario Convertidor MDB USB En esta guía el usuario encontrará la distribución de la tarjeta, caracteristicas técnicas, así como la forma de utilizar el archivo DLL “SimpleUSB.dll” en un entorno de programación Visual Studio, así como las constantes necesarias para la correcta comunicación con el dispositivo MDB USB. Introducción Hardware La distribución de la tarjeta es el siguiente: Alimentación MDB: 24VDC 2Amp. Conexión USB: 5VDC 500 mA (protección optoaislado). Led Error: Indica Error en Coin Changer, Bill Acceptor, etc. Led MDB: Indica comunicación entre Dispositivos MDB y dispositivo MDB USB. Led USB: Indica comunicación entre PC y Dispositivo MDB USB. Configuración 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

Transcript of V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la...

Page 1: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

Guia de Usuario Convertidor MDB USB

En esta guía el usuario encontrará la distribución de la tarjeta, caracteristicas técnicas, así como la forma de utilizar el archivo DLL “SimpleUSB.dll” en un entorno de programación Visual Studio, así como las constantes necesarias para la correcta comunicación con el dispositivo MDB USB.

Introducción

HardwareLa distribución de la tarjeta es el siguiente:

Alimentación MDB: 24VDC 2Amp.Conexión USB: 5VDC 500 mA (protección optoaislado).Led Error: Indica Error en Coin Changer, Bill Acceptor, etc.Led MDB: Indica comunicación entre Dispositivos MDB y dispositivo MDB USB.Led USB: Indica comunicación entre PC y Dispositivo MDB USB.

Configuración de Billetes HabilitadosLa 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

Page 2: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

Instalación

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 automático la petición 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 botón secundario del ratón, y selecciona Propiedades

Copyright Todos los derechos reservados. ThinkChip

Page 3: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

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

Copyright Todos los derechos reservados. ThinkChip

Page 4: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

Seleccionamos “Buscar software de controlador de equipo”

Copyright Todos los derechos reservados. ThinkChip

Page 5: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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

Page 6: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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

Page 7: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

SoftwareLas funciones y tareas que están disponibles para esta versión del convertidor MDB USB son las siguientes:

• Inicialización de dispositivos de cobro• Recepción de monto de efectivo insertado, mediante un evento• Petición de Status de Coin Changer y Bill Acceptor• Petición de Información de dinero en tubos en Coin Changer• Petición de Información número de billetes en stack de Bill Acceptor• Habilitación y deshabilitación de Coin Changer y Bill Acceptor• Envió de monto de cambio en coin changer

Preparando el ambiente de trabajoAntes de empezar a utilizar el archivo DLL, necesitamos agregarlo a nuestras herramientas, solo necesitamos buscar en la carpeta “Software” en la dirección 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

Page 8: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

Por default tiene 00000000-0000-0000-0000-000000000000, este número tiene que modificarse por :

a3c4dc3e-683a-4220-9279-cdba089ea343Una vez modificado esta propiedad, podrémos empezar a trabajar en el programa.

En el archivo DLL existen diferentes funciones, a continuación 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

Page 9: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

que tiene por default “simpleUSB1”.

• Conexión y Desconexión de dispositivo

Copyright Todos los derechos reservados. ThinkChip

Page 10: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

Para conectar el dispositivo a la interfaz de usuario, se necesita llamar primero a la función OpenConnection()Para el siguiente ejemplo del uso de esta función, se ha creado un botón, que al llamar al evento _Click se conecta el dispositivo, este metodo puede variar facilmente dependiendo de su aplicación.

private void button1_Click(object sender, EventArgs e) { simpleUSB1.OpenConnection(); }

Para desconectar el dispositivo se necesita llamar a la función CloseConnection()Para el siguiente ejemplo del uso de esta función, se ha creado un botón, que al llamar al evento _Click se desconecta el dispositivo, este metodo puede variar facilmente dependiendo de su aplicación.

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

Page 11: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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) { //acción a realizar }

• Comenzar Lectura de datosPara comenzar la lectura de datos provenientes del dispositivo, se llamará a la función StartReadingInterruptEndPoint(2, 8)Se recomienda llamar a esta función 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 datosPara detener la lectura de datos provenientes del dispositivo, se llamará a la función StopReadingInterruptEndpoint()Se recomienda llamar a esta función en el evento _onDeviceDisconnect()

Copyright Todos los derechos reservados. ThinkChip

Page 12: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

• Inicialización 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 alimentación 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 función 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 función 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 tamaño del dato a enviar. En este ejemplo, se presionará un botón, al llamar al evento Click, se preguntará antes de llamar a la función, 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á más adelante.

A partir de ahora, la mayoría de las funciones tienen una respuesta, la respuesta de la función 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 aún 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

Page 13: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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 inicialización, en el byte [1] de la cadena, especifica que dispositivos están 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

Page 14: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

• Recepción de monto insertado

Cuando se ha recibido dinero desde el coin changer y el bill acceptor, el convertidor MDB USB enviará automáticamente el dato a través del evento _onReadComplete() El dato del monto enviado se envía 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 números con punto decimal en la comunicación, el dato que se envía es un entero de 16 bits, pero al manejar un buffer de 8 bits, se envía 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 (byte más significativo del monto insertado)InputBuffer[2] = lsb (byte menos significativo del monto insertado)

En el siguiente ejemplo, se muestra como recibir el dato y guardarlo en una variable tipo int, además de imprimirlo en una etiqueta, para la visualización 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

Page 15: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

• Recepción de errores en Coin Changer y Bill Acceptor

En la recepción de errores que pudiera tener los dispositivos MDB, se requiere de primero realizar la petición de envio de informe de errores, para realizar esto, se necesita utilizar la función 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 recepción 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 errorInputBuffer[1] = msb (byte más 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 recepción 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

Page 16: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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

Page 17: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

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

Copyright Todos los derechos reservados. ThinkChip

Page 18: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

Copyright Todos los derechos reservados. ThinkChip

Page 19: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

Tabla de constante de errores en Bill Acceptor

Copyright Todos los derechos reservados. ThinkChip

Page 20: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

• Petición de Información 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 función 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 tubosInputBuffer[1] = msb (byte más 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

Page 21: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

}}

Copyright Todos los derechos reservados. ThinkChip

Page 22: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

• Petición de Información número de billetes en stack de Bill Acceptor

La petición de información de número de billetes, nos dá el número de billetes, no el monto de dinero en billetes. Para pedir está información, se utiliza la función:WriteData(1, Buffer_de_salida,8)En el siguiente ejemplo, se pide por la información mediante el evento Click de un botón:

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 práctica, preguntar antes, sí el dispositivo está conectado, antes de enviar la información, como se ve en el ejemplo de arriba.

La respuesta a esta función se enviará al evento _onReadComplete() El envío de datos es de la siguiente forma, en el buffer de entrada

InputBuffer[0] = constante que indica que se trata de billetes en stackInputBuffer[1] = msb (byte más significativo de número de billetes en stack)InputBuffer[2] = lsb (byte menos significativo de número 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

Page 23: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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

Page 24: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

• Habilitación y deshabilitación de Coin Changer y Bill Acceptor

En esta función, 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:

Habilitación y deshabilitación de coin changerOutBuffer[0] = constante que indica tarea de configuración de coinchangerOutBuffer[1] = valor booleano que indica habilitación= “1” y deshabilitación = “0”

Habilitación y deshabilitación de bill acceptorOutBuffer[0] = constante que indica tarea de configuración de bill acceptorOutBuffer[1] = valor booleano que indica habilitación= “1” y deshabilitación = “0”

En el siguiente ejemplo, se utiliza cuatro botones para habilitación y deshabilitación 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

Page 25: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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

Page 26: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

• Envió de monto de cambio en coin changer

La función de envio de monto, es como su nombre lo dice, devolver cambio de dinero, mediante el coin changer, para utilizar está función, 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 más significativo y luego el menos significativo, en el buffer de salida se muestra el orden a más detalle:

OutputBuffer[0] = constante que indica que envio de monto de cambioOutputBuffer[1] = msb (byte más significativo)OutputBuffer[2] = lsb (byte menos significativo)

En el siguiente ejemplo, se muestra como utilizar esta función, mediante un TextBox y un botón 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, más adelante se muestran las posibles respuestas a la función. 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 función, ya que

Copyright Todos los derechos reservados. ThinkChip

Page 27: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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 número diferente de 1, será error y probablemente se tendrá que repetir la tarea.

Copyright Todos los derechos reservados. ThinkChip

Page 28: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

CONSTANTES

Anteriormente en el ejemplo, se habla de unas constantes, estas constantes se definen al principio del programa, para que sea más 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

Page 29: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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

Page 30: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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

Page 31: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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

Page 32: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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

Page 33: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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

Page 34: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 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

Page 35: V1.1 05/2012 Archivo Confidencial Guia de Usuario ... · En caso de que no se haya conectado la alimentación de 24VDC y los dispositivos antes de conectar el convertidor MDB USB

ThinkChip Soluciones Vending y ControlV1.1 05/2012 Archivo Confidencial

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

}}

Copyright Todos los derechos reservados. ThinkChip