Jump to content

epson tm-88iv vb.net


Recommended Posts

Hola, estoy desarrollando una aplicacion en vb.net pero tengo unos problemas.

 

Quiero imprimir una boleta con el codigo de ejemplo de epson que es este:

 

 

Me.epson.AddDataField(Chr(&HA) + Chr(&H1))

Me.epson.AddDataField(Chr(&H0) + Chr(&H0))

 

' Número del Logotipo

Me.epson.AddDataField("")

' Resolucion del logo

Me.epson.AddDataField("")

Me.epson.SendCommand()

 

While epson.State = EFP_S_Busy

DoEvents()

End While

 

 

 

Me.epson.AddDataField(Chr(&HA) + Chr(&H2))

Me.epson.AddDataField(Chr(&H0) + Chr(&H0))

 

Me.epson.AddDataField("")

Me.epson.AddDataField("")

Me.epson.AddDataField("")

Me.epson.AddDataField("")

Me.epson.AddDataField("")

 

 

Me.epson.AddDataField("Fotografia Stand 3ro.A")

Me.epson.AddDataField("10000")

Me.epson.AddDataField("8000000")

Me.epson.AddDataField("1900")

 

Me.epson.SendCommand()

 

While epson.State = EFP_S_Busy

DoEvents()

End While

 

' PAGO

Me.epson.AddDataField(Chr(&HA) + Chr(&H5))

Me.epson.AddDataField(Chr(&H0) + Chr(&H0))

 

Me.epson.AddDataField("1")

Me.epson.AddDataField("800")

Me.epson.SendCommand()

 

While epson.State = EFP_S_Busy

DoEvents()

End While

 

'Cerrar Boleta

 

Me.epson.AddDataField(Chr(&HA) & Chr(&H6))

 

If Check_autocorte = 1 Then

Me.epson.AddDataField(Chr(&H0) & Chr(&H1))

Else

Me.epson.AddDataField(Chr(&H0) & Chr(&H0))

End If

 

Me.epson.AddDataField("3")

Me.epson.AddDataField("Gracias por su compra")

Me.epson.AddDataField("")

Me.epson.AddDataField("")

Me.epson.AddDataField("")

Me.epson.AddDataField("")

 

Me.epson.SendCommand()

While epson.State = EFP_S_Busy

DoEvents()

End While

 

el problema es en :

 

 

While epson.State = EFP_S_Busy

DoEvents()

End While

 

y en

 

 

If Check_autocorte = 1 Then

Me.epson.AddDataField(Chr(&H0) & Chr(&H1))

Else

Me.epson.AddDataField(Chr(&H0) & Chr(&H0))

End If

 

Estos codigos funcionan en vb6 pero en vb.net no los reconoce.

 

Ayudaa por favor

Link to comment
Share on other sites

  • El DoEvents() cámbialo por Application.DoEvents() (además deberías agregarle un Thread.Sleep de unos pocos milisegundos dentro del ciclo While)
  • El código de ejemplo que estás usando ¿es para VB.NET o para VB6?
  • No me queda claro a qué te refieres cuando dices que los códigos te funcionan en VB6, pero no en VB.NET.
    ¿Te refieres a los códigos que estás pasando a la impresora o te refieres al código fuente? :nose:
  • ¿Has probado algo más simple que te indique que puedes usar la impresora usando .NET? ¿Reconoce algún comando enviado desde una aplicación .NET?
  • En algunas partes usas el operador + y en otras el & para unir los comandos.
  • He visto en otros ejemplos por ahí que los comandos se pasan de otra manera a la impresora (creo que usan otros métodos, pero no AddDataField ni SendCommand como lo estás haciendo tú). Así que no estoy seguro si estás haciendo una "traducción directa" de VB6 a VB.NET o si has leído documentación actual de la impresora (actualizada para .NET).

Edited by susodicho
Link to comment
Share on other sites

Hola, estoy pasando de vb6 a vb.net

 

El programa en vb.net imprimie el encabezado sin problemas pero a la hora de imprimir un producto no lo hace y el error es aca

 

While epson.State = EFP_S_Busy

DoEvents()

End While

 

No reconoce el comando epson.State = EFP_S_Busy el cual en vb6 lo reconoce sin problemas

 

Ayuda please

Link to comment
Share on other sites

Lo primero, trata de ser más específica, o sea, dices que no lo reconoce, pero ¿cuál es exactamente el problema?:

  • No compila (especifica el error que manda)
  • Ocurre una excepción (qué excepción)
  • Se queda pegado
  • El programa se ejecuta y termina normalmente, pero no realiza la acción que tú quieres que haga

 

Lo otro, si no reconoce el EFP_S_Busy (que no es un comando) y dices que en VB6 funciona sin problemas, entonces puede que la constante EFP_S_Busy no esté definida. Si fuese así, entonces bastaría con que lo ejecutes y/o depures en VB6 para ver el valor de ésta. En alguna parte debe estar definida esta constante (en algún archivo *.BAS ó *.INC). Yo te recomendaría que busques qué valor tiene dicha constante (asumo que es un entero), podrías modificar algún programa en VB6 para que muestre su valor.

En todo caso, parece que EFP_S_Busy vale 2, pero deberías asegurarte que sea así para la impresora que estás usando.

 

Además te dije que cambiaras el DoEvents() por Application.DoEvents() ;)

Escríbelo así:

While epson.State = EFP_S_Busy
  Application.DoEvents()
  Thread.Sleep(20)
End While

 

Ojo, estoy asumiendo que estás desarrollando una aplicación Windows Forms. :nose:

Link to comment
Share on other sites

Intenta de esta forma:

While epson.CtlState = TxFiscalState.EFP_S_Busy
   Application.DoEvents()
   Thread.Sleep(20)
End While

 

IMPORTANTE: Cada vez que llames a SendCommand tienes que hacer lo mismo. O sea, tienes que esperar hasta que el comando haya terminado de ejecutarse, para eso usas ciclo While que se ejecuta hasta que la bandera de estado indica que la impresora ya no está ocupada (Busy). El Thread.Sleep es para darle algo de tiempo para que realice su trabajo.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...