Imprimir en un Epson Rollo TM-U220
#1
Escrito 14 marzo 2013 - 03:02
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.
#2
Escrito 14 marzo 2013 - 03:34
#3
Escrito 14 marzo 2013 - 05:17
Un TCPClient
Un Edit para ingresar la IP de mi PC
Un BitButton para establecer la conexion
Este es el codigo del boton
procedure TForm1.sbConectarClick(Sender: TObject); begin if tcpclient1.Active then tcpclient1.Active := false else begin tcpclient1.LocalHost := edtComputadora.text; tcpclient1.Active := true; end; end;
y obtengo un mensaje de error. Ver imagenes
¿Que estoy haciendo mal?
....todo!!!
Archivos adjuntos
#4
Escrito 14 marzo 2013 - 07:19
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.
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
#5
Escrito 15 marzo 2013 - 11:02
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
#6
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 Pues ahí va un ejemplo:
uses Winsock; procedure EnviarStr(Str: AnsiString; IP: String; Puerto: Word); var WSADATA: TWSADATA; Address: u_long; ClientSocket: TSocket; Addr: sockaddr_in; begin if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then try // Compruebo si es una direccion ip Address:= inet_addr(PChar(IP)); // Si tengo una ip valida if Address <> INADDR_NONE then begin // Creo un socket ClientSocket:= Socket(AF_INET, SOCK_STREAM, 0); if ClientSocket <> INVALID_SOCKET then try Addr.sin_family:= AF_INET; Addr.sin_addr.S_addr:= Address; Addr.sin_port:= htons(Puerto); // Conecto el socket a la direccion ip if Connect(ClientSocket, Addr, Sizeof(Addr)) = SOCKET_ERROR then begin // No puedo conectar Exit; end; if Send(ClientSocket,PAnsiChar(Str)^,Length(Str),0) = SOCKET_ERROR then begin // Error al enviar end; finally Closesocket(ClientSocket); end; end else begin // La IP no es valida end; finally // Limpiamos todo WSACleanup(); end; end; // Por ejemplo, mandamos el comando de corte de papel 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 ).
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
#7
Escrito 15 marzo 2013 - 04:50
OK Pues ahí va un ejemplo:
delphi
uses Winsock; procedure EnviarStr(Str: AnsiString; IP: String; Puerto: Word); var WSADATA: TWSADATA; Address: u_long; ClientSocket: TSocket; Addr: sockaddr_in; begin if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then try // Compruebo si es una direccion ip Address:= inet_addr(PChar(IP)); [b] //AQUI HE TENIDO QUE CAMBIAR ASI: Address:= inet_addr(PAnsiChar(IP)); Delphi XE2 (Unicode) [/b] // Si tengo una ip valida if Address <> INADDR_NONE then begin // Creo un socket ClientSocket:= Socket(AF_INET, SOCK_STREAM, 0); if ClientSocket <> INVALID_SOCKET then try Addr.sin_family:= AF_INET; Addr.sin_addr.S_addr:= Address; Addr.sin_port:= htons(Puerto); // Conecto el socket a la direccion ip if Connect(ClientSocket, Addr, Sizeof(Addr)) = SOCKET_ERROR then begin // No puedo conectar Exit; end; if Send(ClientSocket,PAnsiChar(Str)^,Length(Str),0) = SOCKET_ERROR then begin // Error al enviar end; finally Closesocket(ClientSocket); end; end else begin // La IP no es valida end; finally // Limpiamos todo WSACleanup(); end; end; // Por ejemplo, mandamos el comando de corte de papel 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 ).
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.
#8
Escrito 15 marzo 2013 - 07:34
¿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?
#9
Escrito 16 marzo 2013 - 12:29
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.
#10
Escrito 16 marzo 2013 - 06:05
#11
Escrito 18 marzo 2013 - 11:27
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!!
#12
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
#13
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
#14
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