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

#1 RFOG
02/06/2008 - 16:19 | Informe spam
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.
Respuesta Responder a este mensaje
#2 alfonso_C#
02/06/2008 - 21:04 | Informe spam
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.
  -- Versos Dorados. Recopilación de sentencias de los discípulos de
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
Respuesta Responder a este mensaje
#3 RFOG
02/06/2008 - 21:50 | Informe spam
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/...-y-ii.aspx).
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.
Respuesta Responder a este mensaje
#4 alfonso_C#
03/06/2008 - 16:06 | Informe spam
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.
  -- Charly Garcia. Cantautor argentino.- Ocultar texto de la cita -

- Mostrar texto de la cita -



Gracias RFOG. Ciertamente has dado en el clavo (^_^) la propiedad se
llama DsrHolding y permite saber si el dispositivo esta "listo"

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

// open the port for communications
port.Open();

MessageBox.Show("hola el puerto esta " +
port.DsrHolding.ToString());

// close the port
port.Close();
Respuesta Responder a este mensaje
#5 alfonso_C#
03/06/2008 - 16:10 | Informe spam
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.
  -- Charly Garcia. Cantautor argentino.- Ocultar texto de la cita -

- 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.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida