Abrir cajon portamonedas a traves de impresora de tickets

06/07/2006 - 11:56 por Brocilla | Informe spam
Hola

Alguien sabe como abrir un cajon portamonedas conectada al PC a traves
de una impresora de tickets?

Gracias de antemano

Preguntas similare

Leer las respuestas

#11 Brocilla
07/07/2006 - 18:43 | Informe spam
Hola

le envío un String, y lo hago de esta forma

SECURITY_ATTRIBUTES sa = new SECURITY_ATTRIBUTES();
sa.bInheritHandle = 0;
sa.lpSecurityDescriptor = 0;
sa.nLength = Marshal.SizeOf(sa);
int hLPT1 = CreateFile("LPT1", GENERIC_WRITE,
FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
IntPtr.Zero);
FileStream fs = new FileStream((IntPtr)hLPT1,
FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);

sw.WriteLine("\u0027 \u0112 \u0000 \u0064 \u0240");

sw.Flush();
fs.Flush();
fs.Close();

Lo que me imprime son caracteres, una comilla, una d, etc

En cuanto a la secuencia no creo que sea por eso, ya que he probado con
varias que he sacado de por ahí y ninguna de ellas funciona.

Lo de hexadecimal me parece un poco raro ya que todos los ejemplos que
encontré aparecen con los dígitos que indico más arriba, yo los
completo hasta hacerlos de 4 ya que es lo que me pide el C#.

La impresora es una Samsung SRP 350


RFOG ha escrito:

Se hace así.

Puede que

a) Estés enviando la secuencia incorrecta.
b) No estés enviando los caracteres ascii correctos (aunque pienses que sí).
Mira el manual de la impresora. ¿Tiene opción de imprimir los caracteres
enviados en forma hexadecimal (algunas lo tienen)? Ponme la cadena que
quieres enviar y lo que sale impreso.

De todos modos con un FileStream... mmmm... ¿Envías como secuencia de bytes
(o sea, una cadena de Byte) o como un String? Si lo haces como String el
problema puede estar ahí: los strings son unicode, por lo que para cada byte
que tu pones, él envía dos

Visita mi blog: http://rfog.blogsome.com
Libros, ciencia ficción y programación
=Luchemos por cosas lo bastante
grandes para que nos importen, y lo suficiente pequeñas para poder ganarlas.

"Brocilla" wrote in message
news:

Tengo abierto el puerto paralelo mediante CreateFile, ahora debo enviar
los caracteres de control. Lo intento mediante un FileStream pero no me
abre el cajón, sólo me escribe en la impresora unos caracteres.

Se debe enviar los caracteres de alguna manera especial o debo seguir
probando de esta forma?


RFOG ha escrito:

> Al final tendrás que usar Interop y enviarlo de forma nativa...
>
> El puerto paralelo se puede abrir mediante CreateFile, y luego compones y
> envías la cadena compuesta a mano.
> Te lo pongo más o menos en C:
>
> char chCmd[5];
> chCmd[0]=0x27;
> ...
>
> CreateFile("\\.\LPT1",...) //OpenExisting y Shared
> WriteFile(...)
> CloseHandle(...)
>
> Visita mi blog: http://rfog.blogsome.com
> Libros, ciencia ficcion y programacion
> > > La ansiedad es un arroyito de temor que corre por la mente. Si se le
> alimenta puede convertirse en un torrente que arrastrara todos nuestros
> pensamientos.
>
> "Alberto Poblacion" wrote
> in message news:
> > "Brocilla" wrote in message
> > news:
> >> Lo que no se es como le indico a la impresora en C# los códigos de
> >> control. Se que hay que pasarselos como si fueran una cadena de texto
> >> pero indicandole que son caracteres de control.
> >
> > Con las impresoras tipo Epson, que son las más corrientes, la
> > secuencia
> > que hay que enviar es <esc> p <0> <25> <250>, es decir, el carácter 27
> > (escape), que es el que indica que se trata de una secuencia de control,
> > seguido de la letra p, seguido de los tres bytes cuyos códigos en base
> > 10
> > son 0, 25 y 250.
> >
> >
Respuesta Responder a este mensaje
#12 RFOG
07/07/2006 - 18:56 | Informe spam
Estás enviando una cadena de caracters unicode, no ascii, y encima al final
un "".

Haz esto:

Char cad[5];
cad[0]';
...
sw.Write(cad);


Visita mi blog: http://rfog.blogsome.com
Libros, ciencia ficción y programación
=Luchemos por cosas lo bastante
grandes para que nos importen, y lo suficiente pequeñas para poder ganarlas.

"Brocilla" wrote in message
news:

Hola

le envío un String, y lo hago de esta forma

SECURITY_ATTRIBUTES sa = new SECURITY_ATTRIBUTES();
sa.bInheritHandle = 0;
sa.lpSecurityDescriptor = 0;
sa.nLength = Marshal.SizeOf(sa);
int hLPT1 = CreateFile("LPT1", GENERIC_WRITE,
FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
IntPtr.Zero);
FileStream fs = new FileStream((IntPtr)hLPT1,
FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);

sw.WriteLine("\u0027 \u0112 \u0000 \u0064 \u0240");

sw.Flush();
fs.Flush();
fs.Close();

Lo que me imprime son caracteres, una comilla, una d, etc

En cuanto a la secuencia no creo que sea por eso, ya que he probado con
varias que he sacado de por ahí y ninguna de ellas funciona.

Lo de hexadecimal me parece un poco raro ya que todos los ejemplos que
encontré aparecen con los dígitos que indico más arriba, yo los
completo hasta hacerlos de 4 ya que es lo que me pide el C#.

La impresora es una Samsung SRP 350


RFOG ha escrito:

Se hace así.

Puede que

a) Estés enviando la secuencia incorrecta.
b) No estés enviando los caracteres ascii correctos (aunque pienses que
sí).
Mira el manual de la impresora. ¿Tiene opción de imprimir los caracteres
enviados en forma hexadecimal (algunas lo tienen)? Ponme la cadena que
quieres enviar y lo que sale impreso.

De todos modos con un FileStream... mmmm... ¿Envías como secuencia de
bytes
(o sea, una cadena de Byte) o como un String? Si lo haces como String el
problema puede estar ahí: los strings son unicode, por lo que para cada
byte
que tu pones, él envía dos

Visita mi blog: http://rfog.blogsome.com
Libros, ciencia ficción y programación
=Luchemos por cosas lo bastante
grandes para que nos importen, y lo suficiente pequeñas para poder
ganarlas.

"Brocilla" wrote in message
news:

Tengo abierto el puerto paralelo mediante CreateFile, ahora debo enviar
los caracteres de control. Lo intento mediante un FileStream pero no me
abre el cajón, sólo me escribe en la impresora unos caracteres.

Se debe enviar los caracteres de alguna manera especial o debo seguir
probando de esta forma?


RFOG ha escrito:

> Al final tendrás que usar Interop y enviarlo de forma nativa...
>
> El puerto paralelo se puede abrir mediante CreateFile, y luego compones
> y
> envías la cadena compuesta a mano.
> Te lo pongo más o menos en C:
>
> char chCmd[5];
> chCmd[0]=0x27;
> ...
>
> CreateFile("\\.\LPT1",...) //OpenExisting y Shared
> WriteFile(...)
> CloseHandle(...)
>
> Visita mi blog: http://rfog.blogsome.com
> Libros, ciencia ficcion y programacion
> > > La ansiedad es un arroyito de temor que corre por la mente. Si se le
> alimenta puede convertirse en un torrente que arrastrara todos nuestros
> pensamientos.
>
> "Alberto Poblacion"
> wrote
> in message news:
> > "Brocilla" wrote in message
> > news:
> >> Lo que no se es como le indico a la impresora en C# los códigos de
> >> control. Se que hay que pasarselos como si fueran una cadena de texto
> >> pero indicandole que son caracteres de control.
> >
> > Con las impresoras tipo Epson, que son las más corrientes, la
> > secuencia
> > que hay que enviar es <esc> p <0> <25> <250>, es decir, el carácter 27
> > (escape), que es el que indica que se trata de una secuencia de
> > control,
> > seguido de la letra p, seguido de los tres bytes cuyos códigos en base
> > 10
> > son 0, 25 y 250.
> >
> >
Respuesta Responder a este mensaje
#13 Brocilla
07/07/2006 - 19:34 | Informe spam
Bueno, pues al final di con la solucion, tenias razon con el tema del
String. Estuve probando en pasar los parametros con BinaryWriter y al
final salió.

Gracias por tu ayuda

RFOG ha escrito:

Estás enviando una cadena de caracters unicode, no ascii, y encima al final
un "".

Haz esto:

Char cad[5];
cad[0]';
...
sw.Write(cad);


Visita mi blog: http://rfog.blogsome.com
Libros, ciencia ficción y programación
=Luchemos por cosas lo bastante
grandes para que nos importen, y lo suficiente pequeñas para poder ganarlas.

"Brocilla" wrote in message
news:

Hola

le envío un String, y lo hago de esta forma

SECURITY_ATTRIBUTES sa = new SECURITY_ATTRIBUTES();
sa.bInheritHandle = 0;
sa.lpSecurityDescriptor = 0;
sa.nLength = Marshal.SizeOf(sa);
int hLPT1 = CreateFile("LPT1", GENERIC_WRITE,
FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
IntPtr.Zero);
FileStream fs = new FileStream((IntPtr)hLPT1,
FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);

sw.WriteLine("\u0027 \u0112 \u0000 \u0064 \u0240");

sw.Flush();
fs.Flush();
fs.Close();

Lo que me imprime son caracteres, una comilla, una d, etc

En cuanto a la secuencia no creo que sea por eso, ya que he probado con
varias que he sacado de por ahí y ninguna de ellas funciona.

Lo de hexadecimal me parece un poco raro ya que todos los ejemplos que
encontré aparecen con los dígitos que indico más arriba, yo los
completo hasta hacerlos de 4 ya que es lo que me pide el C#.

La impresora es una Samsung SRP 350


RFOG ha escrito:

> Se hace así.
>
> Puede que
>
> a) Estés enviando la secuencia incorrecta.
> b) No estés enviando los caracteres ascii correctos (aunque pienses que
> sí).
> Mira el manual de la impresora. ¿Tiene opción de imprimir los caracteres
> enviados en forma hexadecimal (algunas lo tienen)? Ponme la cadena que
> quieres enviar y lo que sale impreso.
>
> De todos modos con un FileStream... mmmm... ¿Envías como secuencia de
> bytes
> (o sea, una cadena de Byte) o como un String? Si lo haces como String el
> problema puede estar ahí: los strings son unicode, por lo que para cada
> byte
> que tu pones, él envía dos
>
> Visita mi blog: http://rfog.blogsome.com
> Libros, ciencia ficción y programación
> =Luchemos por cosas lo bastante
> grandes para que nos importen, y lo suficiente pequeñas para poder
> ganarlas.
>
> "Brocilla" wrote in message
> news:
>
> Tengo abierto el puerto paralelo mediante CreateFile, ahora debo enviar
> los caracteres de control. Lo intento mediante un FileStream pero no me
> abre el cajón, sólo me escribe en la impresora unos caracteres.
>
> Se debe enviar los caracteres de alguna manera especial o debo seguir
> probando de esta forma?
>
>
> RFOG ha escrito:
>
> > Al final tendrás que usar Interop y enviarlo de forma nativa...
> >
> > El puerto paralelo se puede abrir mediante CreateFile, y luego compones
> > y
> > envías la cadena compuesta a mano.
> > Te lo pongo más o menos en C:
> >
> > char chCmd[5];
> > chCmd[0]=0x27;
> > ...
> >
> > CreateFile("\\.\LPT1",...) //OpenExisting y Shared
> > WriteFile(...)
> > CloseHandle(...)
> >
> > Visita mi blog: http://rfog.blogsome.com
> > Libros, ciencia ficcion y programacion
> > > > > La ansiedad es un arroyito de temor que corre por la mente. Si se le
> > alimenta puede convertirse en un torrente que arrastrara todos nuestros
> > pensamientos.
> >
> > "Alberto Poblacion"
> > wrote
> > in message news:
> > > "Brocilla" wrote in message
> > > news:
> > >> Lo que no se es como le indico a la impresora en C# los códigos de
> > >> control. Se que hay que pasarselos como si fueran una cadena de texto
> > >> pero indicandole que son caracteres de control.
> > >
> > > Con las impresoras tipo Epson, que son las más corrientes, la
> > > secuencia
> > > que hay que enviar es <esc> p <0> <25> <250>, es decir, el carácter 27
> > > (escape), que es el que indica que se trata de una secuencia de
> > > control,
> > > seguido de la letra p, seguido de los tres bytes cuyos códigos en base
> > > 10
> > > son 0, 25 y 250.
> > >
> > >
Respuesta Responder a este mensaje
#14 RFOG
07/07/2006 - 20:39 | Informe spam
De nadas... :-)

On Fri, 07 Jul 2006 19:34:53 +0200, Brocilla wrote:


Bueno, pues al final di con la solucion, tenias razon con el tema del
String. Estuve probando en pasar los parametros con BinaryWriter y al
final salió.

Gracias por tu ayuda

RFOG ha escrito:

Estás enviando una cadena de caracters unicode, no ascii, y encima al
final
un "".

Haz esto:

Char cad[5];
cad[0]';
...
sw.Write(cad);


Visita mi blog: http://rfog.blogsome.com
Libros, ciencia ficción y programación
=Luchemos por cosas lo bastante
grandes para que nos importen, y lo suficiente pequeñas para poder
ganarlas.

"Brocilla" wrote in message
news:

Hola

le envío un String, y lo hago de esta forma

SECURITY_ATTRIBUTES sa = new SECURITY_ATTRIBUTES();
sa.bInheritHandle = 0;
sa.lpSecurityDescriptor = 0;
sa.nLength = Marshal.SizeOf(sa);
int hLPT1 = CreateFile("LPT1", GENERIC_WRITE,
FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
IntPtr.Zero);
FileStream fs = new FileStream((IntPtr)hLPT1,
FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);

sw.WriteLine("\u0027 \u0112 \u0000 \u0064 \u0240");

sw.Flush();
fs.Flush();
fs.Close();

Lo que me imprime son caracteres, una comilla, una d, etc

En cuanto a la secuencia no creo que sea por eso, ya que he probado con
varias que he sacado de por ahí y ninguna de ellas funciona.

Lo de hexadecimal me parece un poco raro ya que todos los ejemplos que
encontré aparecen con los dígitos que indico más arriba, yo los
completo hasta hacerlos de 4 ya que es lo que me pide el C#.

La impresora es una Samsung SRP 350


RFOG ha escrito:

> Se hace así.
>
> Puede que
>
> a) Estés enviando la secuencia incorrecta.
> b) No estés enviando los caracteres ascii correctos (aunque pienses
que
> sí).
> Mira el manual de la impresora. ¿Tiene opción de imprimir los
caracteres
> enviados en forma hexadecimal (algunas lo tienen)? Ponme la cadena que
> quieres enviar y lo que sale impreso.
>
> De todos modos con un FileStream... mmmm... ¿Envías como secuencia de
> bytes
> (o sea, una cadena de Byte) o como un String? Si lo haces como String
el
> problema puede estar ahí: los strings son unicode, por lo que para
cada
> byte
> que tu pones, él envía dos
>
> Visita mi blog: http://rfog.blogsome.com
> Libros, ciencia ficción y programación
> =Luchemos por cosas lo bastante
> grandes para que nos importen, y lo suficiente pequeñas para poder
> ganarlas.
>
> "Brocilla" wrote in message
> news:
>
> Tengo abierto el puerto paralelo mediante CreateFile, ahora debo
enviar
> los caracteres de control. Lo intento mediante un FileStream pero no
me
> abre el cajón, sólo me escribe en la impresora unos caracteres.
>
> Se debe enviar los caracteres de alguna manera especial o debo seguir
> probando de esta forma?
>
>
> RFOG ha escrito:
>
> > Al final tendrás que usar Interop y enviarlo de forma nativa...
> >
> > El puerto paralelo se puede abrir mediante CreateFile, y luego
compones
> > y
> > envías la cadena compuesta a mano.
> > Te lo pongo más o menos en C:
> >
> > char chCmd[5];
> > chCmd[0]=0x27;
> > ...
> >
> > CreateFile("\\.\LPT1",...) //OpenExisting y Shared
> > WriteFile(...)
> > CloseHandle(...)
> >
> > Visita mi blog: http://rfog.blogsome.com
> > Libros, ciencia ficcion y programacion
> > >> > > La ansiedad es un arroyito de temor que corre por la mente. Si se le
> > alimenta puede convertirse en un torrente que arrastrara todos
nuestros
> > pensamientos.
> >
> > "Alberto Poblacion"
> > wrote
> > in message news:
> > > "Brocilla" wrote in message
> > > news:
> > >> Lo que no se es como le indico a la impresora en C# los códigos
de
> > >> control. Se que hay que pasarselos como si fueran una cadena de
texto
> > >> pero indicandole que son caracteres de control.
> > >
> > > Con las impresoras tipo Epson, que son las más corrientes, la
> > > secuencia
> > > que hay que enviar es <esc> p <0> <25> <250>, es decir, el
carácter 27
> > > (escape), que es el que indica que se trata de una secuencia de
> > > control,
> > > seguido de la letra p, seguido de los tres bytes cuyos códigos en
base
> > > 10
> > > son 0, 25 y 250.
> > >
> > >








Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida