Impresion en puerto serial COM

02/06/2008 - 15:55 por alfonso_C# | Informe spam
Hola amigos buscando en la web encontre un codigo muy simple pero
efectivo para mandar datos a una impresora por el puerto serial, el
codigo es el que sigue :

using System.IO.Ports;

class prueba_impresion_serial
{
static void Main (string[] args)
{

// Instantiate the communications
// port with some basic settings

SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8,
StopBits.One);

// Open the port for communications

port.Open();

// Write a string

port.Write("Hello World");

// Write a set of bytes

port.Write(new byte[] { 0x0A, 0xE2, 0xFF }, 0, 3);

// Close the port

port.Close();

}
}

Funciona muy bien pero me gustaria saber porque no imprime cuando
quito la linea siguiente :

port.Write(new byte[] { 0x0A, 0xE2, 0xFF }, 0, 3);

y coloca una especie de caracter grafico. Hay alguna manera de que
imprima sin esto ? que significa ? Muchas gracias (^_^)

Preguntas similare

Leer las respuestas

#6 RFOG
03/06/2008 - 17:58 | Informe spam
Bufff, pues no lo sé. Para el .NET no hay componente directo, pero puedes
abrirlo como un fichero normal y corriente mediante la cadena @"\.\\LPT1", o
parecido, lo pongo de memoria.

El puerto LPT tiene una señal física para ello, PaperOut, pin 12, y está en
el bit5 del Status Register. Yo la última vez que usé algo así fue en
tiempos de maricastaña, cuando el DOS, y lo hacía con inp() y la dirección
del puerto paralelo... Eso ya no se puede hacer desde Windows, quizás con
DeviceIOControl y mucha paciencia... No sabría decirte.



"alfonso_C#" wrote in message
news:
On 2 jun, 15:50, "RFOG" wrote:
Volvemos a lo mismo. Si usas el driver de windows (y éste está bien hecho,
que no siempre ocurre), hay unas estructuras que te permiten obtenerlo
pero
mediante Interop
(http://geeks.ms/blogs/rfog/archive/...er-el-e...).
En ese caso no podrás escribir directamente en ella, sino que tendrás que
imprimir como con cualquier otra impresora de windows.

Si lo haces "a pelo" como hasta ahora, el fabricante de la impresora te
debe
decir qué enviar para obtener el estado, aunque si la impresora usa la
línea
DSR (creo, lo digo de memoria) lo puedes saber mirando si el valor DSR
está
a ON o a OFF (lo que no sé es si el componente del .NET permite mirar eso
o
no).

"alfonso_C#" wrote in message

news:
On 2 jun, 10:19, "RFOG" wrote:





> Si sólo te interesa imprimir texto sin más, olvídate de enviar códigos
> raros, pero si quieres controlar cosas como el tamaño de la letra,
> negrita,
> cursiva, etc, en general ese tipo de impresoras soportan algún tipo de
> lenguaje de códigos, es decir, reaccionan ante ciertos valores binarios
> cambiando el tamaño de letra, etc. En "lenguaje" más común es el de
> "códigos
> de escape" (http://es.wikipedia.org/wiki/C%C3%B...scape_ANSI) aunque
> no
> necesariamente ha de ser éste.

> El que no imprima hasta recibir los códigos binarios de abajo creo que
> no
> tiene nada que ver: simplemente hasta que la impresora no tiene el
> buffer
> lleno no lo vuelca al papel, o quizás sea el 0x0a el que fuerce la
> escritura. 0x0a es "salto de línea"
> (http://es.wikipedia.org/wiki/ASCII),
> 0xe2 y 0xff no tienen mucho sentido para mi, quizás sea un comando de
> "vaciar e imprimir". Todo esto tiene que ver con cada modelo de
> impresora,
> y
> en general el fabricante del modelo en cuestión ha de tener por algún
> lado
> un manual que indique todo eso, incluso si existe un driver para
> Windows,
> que en general suele ser así.

> "alfonso_C#" wrote in message

>news:

> > Hola amigos buscando en la web encontre un codigo muy simple pero
> > efectivo para mandar datos a una impresora por el puerto serial, el
> > codigo es el que sigue :

> > using System.IO.Ports;

> > class prueba_impresion_serial
> > {
> > static void Main (string[] args)
> > {

> > // Instantiate the communications
> > // port with some basic settings

> > SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8,
> > StopBits.One);

> > // Open the port for communications

> > port.Open();

> > // Write a string

> > port.Write("Hello World");

> > // Write a set of bytes

> > port.Write(new byte[] { 0x0A, 0xE2, 0xFF }, 0, 3);

> > // Close the port

> > port.Close();

> > }
> > }

> > Funciona muy bien pero me gustaria saber porque no imprime cuando
> > quito la linea siguiente :

> > port.Write(new byte[] { 0x0A, 0xE2, 0xFF }, 0, 3);

> > y coloca una especie de caracter grafico. Hay alguna manera de que
> > imprima sin esto ? que significa ? Muchas gracias (^_^)

> Microsoft Visual C++ MVP
> ==> > Mi blog sobre programación:http://geeks.ms/blogs/rfog
> Momentos Leves:http://momentosleves.blogspot.com/
> Cosas mías:http://rfog.blogsome.com/
> Libros, ciencia ficción y programación
> > > Sé amable con tus palabras y útil con tus obras.
> Pitágoras.

Mil Gracias, hay alguna forma de obtener del COM1 o cualquier puerto
serial un estatus que indique si la impresora esta encendida o "en
linea" ? Gracias por anticipado a todos :D

Microsoft Visual C++ MVP
==> Mi blog sobre programación:http://geeks.ms/blogs/rfog
Momentos Leves:http://momentosleves.blogspot.com/
Cosas mías:http://rfog.blogsome.com/
Libros, ciencia ficción y programación
> No pienses que estoy loco, es solo una manera de actuar.

- Mostrar texto de la cita -



Una ultima curiosidad. Existe algo similar pero para el puerto
paralelo ?. Solo he podido conseguirlo usando unas DLLs externas, me
gustaria saber el status de dicho puerto desde el propio .NET .
Gracias.

Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas mías: http://rfog.blogsome.com/
Libros, ciencia ficción y programación
Los aparatos complicados no funcionan.
Respuesta Responder a este mensaje
#7 RFOG
03/06/2008 - 17:59 | Informe spam
Si quieres, aquí tienes una página que recoge muchas cosas del puerto
parlelo, pero seguro que antiguas.

http://www.lvr.com/parport.htm


"alfonso_C#" wrote in message
news:
On 2 jun, 15:50, "RFOG" wrote:
Volvemos a lo mismo. Si usas el driver de windows (y éste está bien hecho,
que no siempre ocurre), hay unas estructuras que te permiten obtenerlo
pero
mediante Interop
(http://geeks.ms/blogs/rfog/archive/...er-el-e...).
En ese caso no podrás escribir directamente en ella, sino que tendrás que
imprimir como con cualquier otra impresora de windows.

Si lo haces "a pelo" como hasta ahora, el fabricante de la impresora te
debe
decir qué enviar para obtener el estado, aunque si la impresora usa la
línea
DSR (creo, lo digo de memoria) lo puedes saber mirando si el valor DSR
está
a ON o a OFF (lo que no sé es si el componente del .NET permite mirar eso
o
no).

"alfonso_C#" wrote in message

news:
On 2 jun, 10:19, "RFOG" wrote:





> Si sólo te interesa imprimir texto sin más, olvídate de enviar códigos
> raros, pero si quieres controlar cosas como el tamaño de la letra,
> negrita,
> cursiva, etc, en general ese tipo de impresoras soportan algún tipo de
> lenguaje de códigos, es decir, reaccionan ante ciertos valores binarios
> cambiando el tamaño de letra, etc. En "lenguaje" más común es el de
> "códigos
> de escape" (http://es.wikipedia.org/wiki/C%C3%B...scape_ANSI) aunque
> no
> necesariamente ha de ser éste.

> El que no imprima hasta recibir los códigos binarios de abajo creo que
> no
> tiene nada que ver: simplemente hasta que la impresora no tiene el
> buffer
> lleno no lo vuelca al papel, o quizás sea el 0x0a el que fuerce la
> escritura. 0x0a es "salto de línea"
> (http://es.wikipedia.org/wiki/ASCII),
> 0xe2 y 0xff no tienen mucho sentido para mi, quizás sea un comando de
> "vaciar e imprimir". Todo esto tiene que ver con cada modelo de
> impresora,
> y
> en general el fabricante del modelo en cuestión ha de tener por algún
> lado
> un manual que indique todo eso, incluso si existe un driver para
> Windows,
> que en general suele ser así.

> "alfonso_C#" wrote in message

>news:

> > Hola amigos buscando en la web encontre un codigo muy simple pero
> > efectivo para mandar datos a una impresora por el puerto serial, el
> > codigo es el que sigue :

> > using System.IO.Ports;

> > class prueba_impresion_serial
> > {
> > static void Main (string[] args)
> > {

> > // Instantiate the communications
> > // port with some basic settings

> > SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8,
> > StopBits.One);

> > // Open the port for communications

> > port.Open();

> > // Write a string

> > port.Write("Hello World");

> > // Write a set of bytes

> > port.Write(new byte[] { 0x0A, 0xE2, 0xFF }, 0, 3);

> > // Close the port

> > port.Close();

> > }
> > }

> > Funciona muy bien pero me gustaria saber porque no imprime cuando
> > quito la linea siguiente :

> > port.Write(new byte[] { 0x0A, 0xE2, 0xFF }, 0, 3);

> > y coloca una especie de caracter grafico. Hay alguna manera de que
> > imprima sin esto ? que significa ? Muchas gracias (^_^)

> Microsoft Visual C++ MVP
> ==> > Mi blog sobre programación:http://geeks.ms/blogs/rfog
> Momentos Leves:http://momentosleves.blogspot.com/
> Cosas mías:http://rfog.blogsome.com/
> Libros, ciencia ficción y programación
> > > Sé amable con tus palabras y útil con tus obras.
> Pitágoras.

Mil Gracias, hay alguna forma de obtener del COM1 o cualquier puerto
serial un estatus que indique si la impresora esta encendida o "en
linea" ? Gracias por anticipado a todos :D

Microsoft Visual C++ MVP
==> Mi blog sobre programación:http://geeks.ms/blogs/rfog
Momentos Leves:http://momentosleves.blogspot.com/
Cosas mías:http://rfog.blogsome.com/
Libros, ciencia ficción y programación
> No pienses que estoy loco, es solo una manera de actuar.

- Mostrar texto de la cita -



Una ultima curiosidad. Existe algo similar pero para el puerto
paralelo ?. Solo he podido conseguirlo usando unas DLLs externas, me
gustaria saber el status de dicho puerto desde el propio .NET .
Gracias.

Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas mías: http://rfog.blogsome.com/
Libros, ciencia ficción y programación
Los aparatos complicados no funcionan.
Respuesta Responder a este mensaje
#8 alfonso_C#
04/06/2008 - 02:47 | Informe spam
On 3 jun, 11:59, "RFOG" wrote:
Si quieres, aquí tienes una página que recoge muchas cosas del puerto
parlelo, pero seguro que antiguas.

http://www.lvr.com/parport.htm

"alfonso_C#" wrote in message

news:
On 2 jun, 15:50, "RFOG" wrote:





> Volvemos a lo mismo. Si usas el driver de windows (y éste está bien hecho,
> que no siempre ocurre), hay unas estructuras que te permiten obtenerlo
> pero
> mediante Interop
> (http://geeks.ms/blogs/rfog/archive/...er-el-e...).
> En ese caso no podrás escribir directamente en ella, sino que tendrás que
> imprimir como con cualquier otra impresora de windows.

> Si lo haces "a pelo" como hasta ahora, el fabricante de la impresora te
> debe
> decir qué enviar para obtener el estado, aunque si la impresora usa la
> línea
> DSR (creo, lo digo de memoria) lo puedes saber mirando si el valor DSR
> está
> a ON o a OFF (lo que no sé es si el componente del .NET permite mirar eso
> o
> no).

> "alfonso_C#" wrote in message

>news:
> On 2 jun, 10:19, "RFOG" wrote:

> > Si sólo te interesa imprimir texto sin más, olvídate de enviar códigos
> > raros, pero si quieres controlar cosas como el tamaño de la letra,
> > negrita,
> > cursiva, etc, en general ese tipo de impresoras soportan algún tipo de
> > lenguaje de códigos, es decir, reaccionan ante ciertos valores binarios
> > cambiando el tamaño de letra, etc. En "lenguaje" más común es el de
> > "códigos
> > de escape" (http://es.wikipedia.org/wiki/C%C3%B...scape_ANSI) aunque
> > no
> > necesariamente ha de ser éste.

> > El que no imprima hasta recibir los códigos binarios de abajo creo que
> > no
> > tiene nada que ver: simplemente hasta que la impresora no tiene el
> > buffer
> > lleno no lo vuelca al papel, o quizás sea el 0x0a el que fuerce la
> > escritura. 0x0a es "salto de línea"
> > (http://es.wikipedia.org/wiki/ASCII),
> > 0xe2 y 0xff no tienen mucho sentido para mi, quizás sea un comando de
> > "vaciar e imprimir". Todo esto tiene que ver con cada modelo de
> > impresora,
> > y
> > en general el fabricante del modelo en cuestión ha de tener por algún
> > lado
> > un manual que indique todo eso, incluso si existe un driver para
> > Windows,
> > que en general suele ser así.

> > "alfonso_C#" wrote in message

> >news:

> > > Hola amigos buscando en la web encontre un codigo muy simple pero
> > > efectivo para mandar datos a una impresora por el puerto serial, el
> > > codigo es el que sigue :

> > > using System.IO.Ports;

> > > class prueba_impresion_serial
> > > {
> > > static void Main (string[] args)
> > > {

> > > // Instantiate the communications
> > > // port with some basic settings

> > > SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8,
> > > StopBits.One);

> > > // Open the port for communications

> > > port.Open();

> > > // Write a string

> > > port.Write("Hello World");

> > > // Write a set of bytes

> > > port.Write(new byte[] { 0x0A, 0xE2, 0xFF }, 0, 3);

> > > // Close the port

> > > port.Close();

> > > }
> > > }

> > > Funciona muy bien pero me gustaria saber porque no imprime cuando
> > > quito la linea siguiente :

> > > port.Write(new byte[] { 0x0A, 0xE2, 0xFF }, 0, 3);

> > > y coloca una especie de caracter grafico. Hay alguna manera de que
> > > imprima sin esto ? que significa ? Muchas gracias (^_^)

> > Microsoft Visual C++ MVP
> > ==> > > Mi blog sobre programación:http://geeks.ms/blogs/rfog
> > Momentos Leves:http://momentosleves.blogspot.com/
> > Cosas mías:http://rfog.blogsome.com/
> > Libros, ciencia ficción y programación
> > > > > Sé amable con tus palabras y útil con tus obras.
> > Pitágoras.

> Mil Gracias, hay alguna forma de obtener del COM1 o cualquier puerto
> serial un estatus que indique si la impresora esta encendida o "en
> linea" ? Gracias por anticipado a todos :D

> Microsoft Visual C++ MVP
> ==> > Mi blog sobre programación:http://geeks.ms/blogs/rfog
> Momentos Leves:http://momentosleves.blogspot.com/
> Cosas mías:http://rfog.blogsome.com/
> Libros, ciencia ficción y programación
> > > No pienses que estoy loco, es solo una manera de actuar.

> - Mostrar texto de la cita -

Una ultima curiosidad. Existe algo similar pero para el puerto
paralelo ?. Solo he podido conseguirlo usando unas DLLs externas, me
gustaria saber el status de dicho puerto desde el propio .NET .
Gracias.

Microsoft Visual C++ MVP
==> Mi blog sobre programación:http://geeks.ms/blogs/rfog
Momentos Leves:http://momentosleves.blogspot.com/
Cosas mías:http://rfog.blogsome.com/
Libros, ciencia ficción y  programación
> Los aparatos complicados no funcionan.
  -- Segunda Ley de Jardinería.- Ocultar texto de la cita -

- Mostrar texto de la cita -



Agradecido de tu tiempo, espero sea de utilidad para muchos (esa es la
idea ) :-))
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida