Ir al contenido


Foto

Imprimir en un Epson Rollo TM-U220


  • Por favor identifícate para responder
13 respuestas en este tema

#1 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 14 marzo 2013 - 03:02

Pues eso, llego la hora de evolucionar.

Anteriormente conectaba mis controladores (PLC, Basculas, etc) a impresoras con RS-232, ahora debo de hacerlo con impresores que poseen interfaces Ethernet.

Con RS232 era muy simple pero con ETH no tengo idea. Asi que quiero su orientación sobre ello. Antes de lanzarme a los aparatos quiero hacer un programa con delphi que me permita conectarme con la impresora e imprimir alguna cadena de caracteres.

Uso Delphi XE2. Se que debería de usar algo llamado sockets y que debo definir si es cliente o servidor:

¿Quien sera el cliente: la PC o el impresor?
que debo definir un puerto de conexión (impresor segun manual 9100)
y una direccion IP (impresor 192.168.0.4)

Como siempre les agradezco su ayuda y tiempo en leer este mensaje.
  • 0

#2 poche2012

poche2012

    Newbie

  • Miembros
  • Pip
  • 1 mensajes

Escrito 14 marzo 2013 - 03:34

La impresora sería la servidora y tu pc sería el cliente. El socket es lo mismo que un fichero, en vez de crear un nuevo fichero se crea una conexión a una dirección ip y un puerto(en este caso lo que indica el manual). Una vez creado se puede escribir en él como si fuera un flujo.


  • 0

#3 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 14 marzo 2013 - 05:17

He creado una pequeña aplicación.
Un TCPClient
Un Edit para ingresar la IP de mi PC
Un BitButton para establecer la conexion

Este es el codigo del boton



delphi
  1. procedure TForm1.sbConectarClick(Sender: TObject);
  2. begin
  3.   if tcpclient1.Active  then
  4.     tcpclient1.Active := false
  5.   else
  6.     begin
  7.         tcpclient1.LocalHost := edtComputadora.text;
  8.         tcpclient1.Active := true;
  9.     end;
  10. end;



y obtengo un mensaje de error. Ver imagenes

¿Que estoy haciendo mal?




....todo!!! :)

Archivos adjuntos


  • 0

#4 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 14 marzo 2013 - 07:19

¿Y porque no instalas la impresora en windows?

Una vez instala la impresora, te da igual si es serie, usb o ethernet, de eso se encarga windows. Tu solo le tienes que enviar los comando usando la API de windows:

Aquí tienes como hacerlo: http://delphi.jmrds.com/?q=node/50

Incluso da igual si no tienes los drivers, siempre puedes usar el "Genérico / solo texto" que viene con windows, y durante la instalación decirle que el puerto es del tipo "Standard TCP/IP" e introducir la dirección IP de la impresora.  (y)

Hazme caso y olvídate de manejar los puertos directamente, deja que windows se pelee con puertos serie, paralelo, usb, ethernet, etc ... en sistemas como windows vista, 7 y 8 te simplificara mucho la vida  :)
  • 0

#5 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 15 marzo 2013 - 11:02

Si, de hecho ya lo hice desde windows 7, instalando los drivers y enviando datos desde el procesador de textos y todo funciona OK.

Pero la aplicación final sera imprimir desde un controlador o PLC donde no puedo instalar los drivers de la impresora, entonces me interesa entender como manejar el puerto desde Delphi y de ahí trasladarlo al PLC. ¿Por que primero desde Delphi? porque desde ahi puedo manipular mas fácil y ejecutar varias pruebas mientras que en el PLC debo de cargar el programa continuamente a la memoria del PLC para verificar el funcionamiento.

Se aceptan sugerencias como siempre.

Gracias
  • 0

#6 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 15 marzo 2013 - 03:33

Si, de hecho ya lo hice desde windows 7, instalando los drivers y enviando datos desde el procesador de textos y todo funciona OK.

Pero la aplicación final sera imprimir desde un controlador o PLC donde no puedo instalar los drivers de la impresora, entonces me interesa entender como manejar el puerto desde Delphi y de ahí trasladarlo al PLC. ¿Por que primero desde Delphi? porque desde ahi puedo manipular mas fácil y ejecutar varias pruebas mientras que en el PLC debo de cargar el programa continuamente a la memoria del PLC para verificar el funcionamiento.

Se aceptan sugerencias como siempre.

Gracias


OK  (y) Pues ahí va un ejemplo:


delphi
  1. uses Winsock;
  2.  
  3. procedure EnviarStr(Str: AnsiString; IP: String; Puerto: Word);
  4. var
  5.   WSADATA: TWSADATA;
  6.   Address: u_long;
  7.   ClientSocket: TSocket;
  8.   Addr: sockaddr_in;
  9. begin
  10.   if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then
  11.   try
  12.     // Compruebo si es una direccion ip
  13.     Address:= inet_addr(PChar(IP));
  14.     // Si tengo una ip valida
  15.     if Address <> INADDR_NONE then
  16.     begin
  17.       // Creo un socket
  18.       ClientSocket:= Socket(AF_INET, SOCK_STREAM, 0);
  19.       if ClientSocket <> INVALID_SOCKET then
  20.       try
  21.         Addr.sin_family:= AF_INET;
  22.         Addr.sin_addr.S_addr:= Address;
  23.         Addr.sin_port:= htons(Puerto);
  24.         // Conecto el socket a la direccion ip
  25.         if Connect(ClientSocket, Addr, Sizeof(Addr)) = SOCKET_ERROR then
  26.         begin
  27.           // No puedo conectar
  28.           Exit;
  29.         end;
  30.         if Send(ClientSocket,PAnsiChar(Str)^,Length(Str),0) = SOCKET_ERROR then
  31.         begin
  32.           // Error al enviar
  33.         end;
  34.       finally
  35.         Closesocket(ClientSocket);
  36.       end;
  37.     end else
  38.     begin
  39.       // La IP no es valida
  40.     end;
  41.   finally
  42.     // Limpiamos todo
  43.     WSACleanup();
  44.   end;
  45. end;
  46.  
  47. // Por ejemplo, mandamos el comando de corte de papel
  48.   EnviarStr(#$1B+'@'+#$0A#$0D#$1B+'i'+#$0A#$0D,'127.0.0.1',9100);



El ejemplo es sencillo, utilizo solo la API de windows para no depender de Indy ( no me gusta  :p ).

Los comandos se envían como si de cualquier otro puerto se tratase, solo hay que conocer la IP y el puerto (9100 habitualmente)

Saludos
  • 0

#7 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 15 marzo 2013 - 04:50


OK  (y) Pues ahí va un ejemplo:


delphi
  1. uses Winsock;
  2.  
  3. procedure EnviarStr(Str: AnsiString; IP: String; Puerto: Word);
  4. var
  5.   WSADATA: TWSADATA;
  6.   Address: u_long;
  7.   ClientSocket: TSocket;
  8.   Addr: sockaddr_in;
  9. begin
  10.   if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then
  11.   try
  12.     // Compruebo si es una direccion ip
  13.     Address:= inet_addr(PChar(IP)); [b] //AQUI HE TENIDO QUE CAMBIAR ASI:  Address:= inet_addr(PAnsiChar(IP)); Delphi XE2 (Unicode) [/b]
  14.     // Si tengo una ip valida
  15.     if Address <> INADDR_NONE then
  16.     begin
  17.       // Creo un socket
  18.       ClientSocket:= Socket(AF_INET, SOCK_STREAM, 0);
  19.       if ClientSocket <> INVALID_SOCKET then
  20.       try
  21.         Addr.sin_family:= AF_INET;
  22.         Addr.sin_addr.S_addr:= Address;
  23.         Addr.sin_port:= htons(Puerto);
  24.         // Conecto el socket a la direccion ip
  25.         if Connect(ClientSocket, Addr, Sizeof(Addr)) = SOCKET_ERROR then
  26.         begin
  27.           // No puedo conectar
  28.           Exit;
  29.         end;
  30.         if Send(ClientSocket,PAnsiChar(Str)^,Length(Str),0) = SOCKET_ERROR then
  31.         begin
  32.           // Error al enviar
  33.         end;
  34.       finally
  35.         Closesocket(ClientSocket);
  36.       end;
  37.     end else
  38.     begin
  39.       // La IP no es valida
  40.     end;
  41.   finally
  42.     // Limpiamos todo
  43.     WSACleanup();
  44.   end;
  45. end;
  46.  
  47. // Por ejemplo, mandamos el comando de corte de papel
  48.   EnviarStr(#$1B+'@'+#$0A#$0D#$1B+'i'+#$0A#$0D,'127.0.0.1',9100); [b] aqui cambie la IP por 192.168.0.4[/b]



El ejemplo es sencillo, utilizo solo la API de windows para no depender de Indy ( no me gusta  :p ).

Los comandos se envían como si de cualquier otro puerto se tratase, solo hay que conocer la IP y el puerto (9100 habitualmente)

Saludos


Sin embargo no puedo conectar. De hecho coloque un ShowMessage en los puntos de Connect, Send, Error e IP y me salta el mensaje de "No puedo conectar"

Debo decir que mi PC tengo dos tarjetas de red cableadas (una es un USB/ETH, esta la uso para tener acceso al Internet) y la otra es con la que me conecto al PLC e impresora.
  • 0

#8 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 15 marzo 2013 - 07:34

:undecided:

¿Puedes hacer ping a la dirección 192.168.0.4?
¿Puedes conectarte al puerto 9100 desde otro programa (telnet, hyperterminal, ncat)?
¿Probaste a instalar la impresora en windows y mandar una pagina de prueba?
  • 0

#9 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 16 marzo 2013 - 12:29

Disculpa la tardanza en responder pero otras actividades "me reclamaban" :)

1. Si, el ping funciona ok.
2. Mencionaste Indy en tu mensaje anterior y probé con IdTCPClient y pude conectarme y enviar impresión sin ningún problema. Sin embargo con WinSock "nanay".
3. Si, ya había hecho eso antes y probado funciona ok.

Me interesa bastante poder resolver esto de la conexión con el WinSock, estoy muy verde en esto así que agradezco el apoyo que me has brindado.


  • 0

#10 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 16 marzo 2013 - 06:05

Prueba a cambiar "IP: string" po "IP: ansistring"
  • 0

#11 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 18 marzo 2013 - 11:27

Domingo, disculpa la tardanza pero me di un tiempo para refrescar las neuronas :)

Hice el ultimo cambio que me dijiste y resulta que compila y ejecuta bien pero al enviar datos a la impresora algunas veces conecta bien e imprime. En otras no hace nada, no imprime y no manda ningún mensaje de error, si presiono varias veces el botón de enviar llega un momento en que aparece el mensaje de error "No puedo conectar" que puse para monitor.

Por otro lado ya logre imprimir correctamente desde el PLC solo me queda ajustar los espacios y campos de impresión.

Te agradezco la ayuda que me has prestado.

Saludos!!
  • 0

#12 Jose1407

Jose1407

    Member

  • Miembros
  • PipPip
  • 12 mensajes

Escrito 30 abril 2022 - 09:19

Hola  tengo una duda sobre la comunicacion rs 232 entre un plc s7 1200 dc/dc/dc v4.4 con una impresora epson tm u220 para comunicarlo solo  tengo que confirurar los dipswhich de configuracion que tiene fisicamente la impresora solo eso se configura de la impresora muy aparte claro de la configuracion de la comunicacion en el tia portal y sobre la programacion en ti portal si porfavor me podrian explicar la programacion de antemano muchas gracias


  • 0

#13 Jose1407

Jose1407

    Member

  • Miembros
  • PipPip
  • 12 mensajes

Escrito 30 abril 2022 - 09:22

Hola  me podrian apoyar a como configurar una impresora epson  tm u220 para comunicarlo por rs 232 con un plc s7 1200 dc/dc/dc y poder imprimir porfavor


  • 0

#14 Jose1407

Jose1407

    Member

  • Miembros
  • PipPip
  • 12 mensajes

Escrito 30 abril 2022 - 09:28

Hola me podrian apoyar como como comunicar por rs 232 una impresora epson tm u220 con un plc s7 1200 1214 dc/dc/dc porfavor tengo dudas en la impresora solo se configura fisicamente los dipswitch para la comunicaion y en tia portal como realizo la programacion para realizr una impresion de antemano muchas gracias 


  • 0




IP.Board spam blocked by CleanTalk.