# Como manejar puerto paralelo y serie con JAVA?



## julio cesar

basicamente me encarrete con la domotica, y realizo aplicaciones con VISUAL BASIC, pero mi interes ahora se centra en las aplicaciones con java (es mucho poder de lenguaje), quisiera saber si para java se necesitan librerias como las que requiere visual basic, como conseguirlas o que es lo que necesito...

gracias por la colaboracion...


----------



## monorendon

Hola puedes utilizar el portcom de la misma Sun, el único problema que vas a tener en windows es que los puertos están protegidos y debes deshabilitarlos através de un dll o un .sys.


----------



## luipietro

Para manejar serial tenes q usar la libreria javax.comm el unico problema es q esta echa para linux, y es un poco dificil intalarla! aqui te dejo un link de como usarla

http://www.itapizaco.edu.mx/paginas/JavaTut/froufe/parte19/cap19-3.html

Otrò para bajarla

http://java.sun.com/products/javacomm/

Espero q te sea util


----------



## Perromuerto

Siempre se puede recurrir a la interfaz nativa de Java (JNI).
Lo que se hace es declarar una clase cuyos procedimientos
son "native" y no tienen cuerpo. Despues de compilar la clase
se le aplica al archivo .class la aplicación "javah", la cual
genera un archivo del tipo ".h". ¿Para que sirve? Da las 
declaraciones de unos procedimientos en lenguaje C.
Como el C es el lenguaje en el que están escritos los sistemas
operativos modernos, todo los "api" e interfaces a núcleo
son accesibles desde C. La funciones en C con usadas para
crear una librería dinámica (.DLL en Windows o so.so en Linux)
que es importada al progama y se efectúa el enlace de las
rutinas "native" a las de la librería. Problema resuelto.
Por eso, si consiguen como hacerlo en C, ya saben como hacerlo 
en Java. 

Saludos


----------



## willyGG

Tiempo que yo buscava la API de java para controlar el puesto paralelo, pero ahora lo enconter . la pueden bajar desde:

http://intall.org/down_rar/jkavax.rar


y tambien la forma de instalar los archivos. En realidad solo es copiar archivos en los lugares indicados:

Copiar el win32com.dll a la carpeta c:\jdk1.1.6\bin 

Copiar comm.jar a la carpeta c:\jdk1.1.6\jre\lib\ext\

Copiar el  javax.comm.properties a la carpeta \jre\lib\

sigan estos pasos, y podran controlar el puerto paralelo, y funciona para windows XP, pero deben habilitar los puerto LPT1 para WIndows que se encuentran protegidos. La forma es:

pero ya les mando luego otros trucos para que les funcione en XP y la parte interesante de conectar los pines del LPT1 para que funcione normal en WINDOWS XP


----------



## willyGG

Ahora si sigo:

Windows tiene un sistema de proteccion  para el control del puerto paralelo. Esto hace restingido el acceso al puerto desde interrupciones externas.

Existen dos trucos igualmente importantes para controlar el puerto paralelo en Windows XP de forma normal.

1. Existe la restriccion logica. Para habilitar el puerto paralelo para que obedesca interrupciones externas deben ir a:

INICIO->panel de control->sistema->hardware->administrador de dispositivos->(en esta parte abrir puertos(COM&LPT))->en la lista hacer doble clik en *puerto de impresora LPT1*->les saldra una ventana "propiedades de puerto de impresora". Luego vayanse a "configuración de puerto" y por ultimo habiliten el pushbutton _*"usar cualquier interrupcion asignada al puerto"*_.

OJO: Puede ser que este habilitado y aun asi no funcione. Bueno en ese caso habiliten "no utilizar nunca una interrucion" y ACEPTAR. La pantalla parpadeará...luego habiliten de nuevo "_*"usar cualquier interrupcion asignada al puerto"*_ y veran que esta vez si esta habilitado el puerto paralelo.

2. Tambien existe el caso de la restriccion por hardware...En este caso se rompe la restriccion del puerto paralelo solo haciendo:
                    *  LLevar a tierra el PIN11 del puerto paralelo.

haciento los pasos 1 y 2 ya pueden usar en su totalidad el puerto paralelo por medio de una maquina virtual de java....suerte...ya pronto les mostrare los trabajos y utilidades que hice con ella.


----------



## garrizano

Y con esto es posible crear el circuito grabador de microcontroladores desarrollandolo en java y a traves del puerto paralelo?


----------



## jarmos

willyGG

Hola, podrias poner algun ejemplo o la forma de uso de la libreria que mencionas en Java?


----------



## willyGG

garrizano...saludos
en primer lugar, el puerto paralelo en java funciona similar a como funcionaría el puerto paralelo en C++(bueno no tan similar puesto que ahy algunas diferencias en cuanto al delay), pero el caso es que ambos envian datos al puerto paralelo. ahora depende de la aplicacion como debas enviarlos para que tu aplicacion solamente las lea. Em la mayoria de los casos el circuito externo es el que recibe los datos, y en casos muy raros pasa inversamente. Por tanto si quieres crear un grabador con java, yo creo que es posible, puesto que un grabador de uControladores solo debe recibir datos de la PC; el sincronizmo, los datos enviados...etc...ya depende de tu diseño y tu programa.


----------



## willyGG

aquy les envío en programa simple de java para escribir por ejemplo un "57" hexadecimal en el LPT1:
import java.io.*;
import java.net.*;
import javax.comm.*;
public class Send
{   //ret delay;
	//int PUERTO;  
	//String portname; 



	//public boolean Byte(int a)throws Exception
	public static void main (String [] arg)throws Exception
	{	int PUERTO=4000,i,c=0,a,a1;


		String portname="LPT1";
		CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier (portname);
      		CommPort port = portId.open ("Application Name",30000); 
		OutputStream os = port.getOutputStream ();
		DataOutputStream bos = new DataOutputStream (os);
                                bos.writeByte (0x57);
                }

 }


----------



## willyGG

holas tambien jarmos...
tengo como ejemplo dos sistemas que me funcionaron muy bien con java en puerto paralelo.
- Control de puerto paralelo remoto
    Este sistema era parte de mi proyecto final en electronica, utilizaba dos maquinas conectadas por cable de red y sus NICS, de tal manera que desde una maquina podia controlar el puerto LPT1 de la otra. Sus aplicaciones son inmensas, desde el control remoto de estaciones (temperatura, ventilacion)..como ejemplo.
- Control de una camara visora.
    Este sistema la hice por algunos planes que tengo en mente, lo que hacia era controlar dos motores de paso por el puerto paraleo en java y asi controlar la posicion que la camara que ya no era estática, sino era una camara OJO robotica en dos dimensiones.

Bien aunque resultaron de forma excelente, tambien tengo limitaciones...por ejemplo...siempre he usado el concepto de enviar datos, pero nunca se me presentó un problema con recibir datos desde un circuito externo...¿alguien sabe como recibir datos para LPT en java?...  
no se si sirve de mucho enviarte el programa de java para elcontrolador de la camara...puesto que el sistema no es solo en java, tambien esta el uControlador 16F84, su programa, la arquitectura...etc...pero de todas maneras la pongo como ejemplo:

import java.io.*;
import java.net.*;
import javax.comm.*;
public class Send
{   //ret delay;
	//int PUERTO;  
	//String portname; 



	//public boolean Byte(int a)throws Exception
	public static void main (String [] arg)throws Exception
	{	int PUERTO=4000,i,c=0,a,a1;


		String portname="LPT1";
		CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier (portname);
      		CommPort port = portId.open ("Application Name",30000); 
		OutputStream os = port.getOutputStream ();
		DataOutputStream bos = new DataOutputStream (os);

		while(true)
		{	c=0;
			int b[]=new int[30];
			System.out.println ("introdusca valor X:");
			a = LeeInt.dato ();
			System.out.println ("introdusca valor Y:");
			a1 = LeeInt.dato ();

			while(a!=0)
			{	if(a%2==0)
				b[c]=0;
				else
				b[c]=1;
				a=a/2;
				c=c+1;
			}

			while(c<=7)
			{	b[c]=0;
				c=c+1;	
			}
			for(i=7;i>=0;i--)
			{    	if(b_==0)	
		     		{	System.out.println("0");
					bos.writeByte (0x00);
					bos.writeByte (0x01);
					//bos.writeByte (0x02);
				}
				else
				{	System.out.println("1");
					bos.writeByte (0x00);
					bos.writeByte (0x02);
					bos.writeByte (0x03);	
				}
			}
			//OTRO
			c=0;
			while(a1!=0)
			{	if(a1%2==0)
				b[c]=0;
				else
				b[c]=1;
				a1=a1/2;
				c=c+1;
			}

			while(c<=7)
			{	b[c]=0;
				c=c+1;	
			}
			for(i=7;i>=0;i--)
			{    	if(b==0)	
		     		{	System.out.println("0");
					bos.writeByte (0x00);
					bos.writeByte (0x01);
					//bos.writeByte (0x02);
				}
				else
				{	System.out.println("1");
					bos.writeByte (0x00);
					bos.writeByte (0x02);
					bos.writeByte (0x03);	
				}
			}
		}	
	}

 }_


----------



## alepic

hola les queria pedir ayuda, estoy empezando a estudiar java y queria ver la posibilidad que me recomendaran un IDE para usar ya que veo hay bastantes, ECLIPSE, NETBEANS y otros de microsoft, desde ya les agradesco

un saludo

Alejandro Garrido


----------



## Jahmi_Ras

pe y de esta forma alguien sabe como manjear un motoor paso a paso?alguientiene el codigo en java?


----------



## betamic

Hola... gracias por la gran ayuda...

me gustaria saber si tienes algun ejemplo basico de como leer y escribir datos en el puerto paralelo a traves de jsp...

de antemano muchas gracias.


----------



## Dr. Zoidberg

betamic dijo:
			
		

> me gustaria saber si tienes algun ejemplo basico de como leer y escribir datos en el puerto paralelo a traves de jsp...



Para hacerlo desde JSP es lo mismo que hacerlo en codigo JAVA convencional. Dependiendo de lo que tengas que lograr, quizás sea mejor escribir un servlet que cargue y acceda al paquete javax.comm para las comunicaciones, y derivar el procesamiento JSP al servlet cuando se lo requiera. Hay que ver que quieres hacer...

Saludos!


----------



## betamic

Es que ese es el problema ... soy super novato en java y jsp, y no entiendo mucho, ya lo he hecho para vb6 y para c++, pero en java es un fastidio... ademas no se ocupar ningun ide de java solo lo hago con notepad y javac...

si alguien tuviera un ejemplo en jsp se lo agradeceria infinitamente...

gracias nuevamente...

Atte. BetaMic


----------



## lastmait

hola foreros tengo un problema....
bueno e realizado una comunicacion rs232 con netbeans java con un micro 16f877a todo funciona de pelos, e creado el ejecutable por medio de f11 pero cuando lo abro no me abre el programa no s epor que estoy usando puerto serie virtual por un cable trednet..... al guien me  podria informaciónrmar por que pasa ycomo lo puedo arreglar


----------



## Dr. Zoidberg

lastmait dijo:
			
		

> bueno e realizado una comunicacion rs232 con netbeans java con un micro 16f877a todo *funciona de pelos,* e creado el ejecutable por medio de f11 *pero cuando lo abro no me abre el programa* no s epor que estoy usando puerto serie virtual por un cable trednet..... al guien me  podria informaciónrmar por que pasa ycomo lo puedo arreglar



Va a ser mejor que aclares lo que estás pidiendo, POR QUE NO SE ENTIENDE NADA! y así no vas a conseguir respuestas...

Saludos!


----------



## lastmait

ok tengo un programa que me controla un robot por puerto serie, estoy trabajando desde un pc portatil por lo cual tuve que comprar un cable trednet de usb a serie, todo funciona muy bien. Pero me toca abrir netbeans para poder usar el robot, e creado un ejecutable .jar con la tecla f11 per al momento de abrir el ejecutable no abre.


----------



## Dr. Zoidberg

lastmait dijo:
			
		

> ok tengo un programa que me controla un robot por puerto serie, estoy trabajando desde un pc portatil por lo cual tuve que comprar un cable trednet de usb a serie, todo funciona muy bien. Pero me toca abrir netbeans para poder usar el robot, e creado un ejecutable .jar con la tecla f11 per al momento de abrir el ejecutable no abre.



OK. Entonces ejecutá el .jar a mano:

1) - Inicio->Ejecutar-> CMD <Enter>
2) - Cambiar al directorio donde está el .jar (comado cd nombre_del_path_hasta_el_directorio
3) - Ejecutar: *java -jar nombre_del_jar_que_hiciste*
4) -  Copiá los errores de ejecución que muestra en la consola.
5) - Posteá acá los errores.

Saludos!


----------



## lastmait

ok gracias me sale este error:
unable to access jarfile rs232


----------



## Dr. Zoidberg

lastmait dijo:
			
		

> ok gracias me sale este error:
> unable to access jarfile rs232



Y donde está ese archivo jar? Tenes que buscarlo y ponerlo en el directorio desde donde estas ejecutando el comando.
Y cuando lo ejecutes a mano, tenes que hacer *java -jar el_nombre_de_tu_jar.jar* o darle doble click al jar desde el explorador de windows (si es que usas windows).
No te debe aparecer ningún error,....para empezar...

Saludos!


----------



## ulyses

Hola, disculpa no tendrás algún código para manipuar aparatos electrodomésticos en java por medio del puerto paralelo? estoy trabajando en un proyecto de electrónica y tengo que manipular estos aparatos mediante este puerto.
Atte. ulises112000arrobayahoo.com.mx


----------



## dEREK

link descarga :
http://microcomsolutions.mforos.com/1703360/8132583-interfaz-serial-con-java/

funciona al 100%

espero que te sirva...tiene interfaz visual , puedes enviar n comandos ..y visulaizar los resultados.


----------



## ALEX_ELECTRO

Hola compañeros...........necesito hacer la una conexión serial usando un programa llamado Eclipse el cual utiliza java para esto........el problema es que he conseguido muchos tutoriales de eclipse, pero ninguno me explica como hacer la comunicación serial........si alguien ha trabajado con este software y pude colaborarme se lo agradecería.


----------



## edgarciiito27

que tal quisiera crear una dll que encienda y apague leds por el puerto serie en visual pero con lenguaje asm para que funcione en java
es decir quiero que el visual solo genere la dll y hacer en ensamblador el manejo de el puerto serie, pero me dijeron que había un error con la intruccion in y out en visual y que no se reconocia, y que para eso debía poner unos macros que me autoricen la manipulacion del puerto ayudenme xfa lo mas pronto posible xfa saludos 
edgar


----------



## pcdlalo

hola foreros:: tengo un proyecto y quisiera solo una manito, mi proyecto de la universidad es enviar señales de codigo binario a una placa con 4 leds la cual va conectada al puerto lpt y usando el lenguaje de JAVA ya he aplicado algunas informaciones que rescate de este foro pero mi principal problema es como lo programo en java:xd.
Gracias y espero su ayuda...


----------



## clay

hola pcdlalo, yo estuve haciendo algo de eso mediante el JNI, puse el codigo fuente de java y C y los dlls necesarios pa correrlos, y pues si te sirve puedes bajarlo de aqui: puerto paralelo java


----------



## anderson torres

Hola¡¡
Busco desesperadamente el API para comunicacion serial para neat beans pero no la encuentro por la red.
Algunos de uds sabran donde esta. Seria de mucha ayuda.
SAlu2¡¡ Y muchas gracias al que me pueda ayudar.


----------



## ivansnek

hola alguien sabe como leer datos del puerto paralelo en java, actualmente estoy intentando hacerlo con la libreria javax.comm pero no e encontrado algun metodo apropiado para hacerlo

agradesco su pronta respuesta 

à l'avance je vous remercie beaucoup


----------



## gonzac.top

Existen dos librerias externas vastantes utiles para esto.
La primera que corre bien en windows, es el proyecto Giovynet que es la que utilizo,
permite controlar elpuerto serial, y transmitir inclusive por bluetooth.
La pueden descargar directamente de la pagina del autor, inclusive encontraran la documentacion y apis para facilitar su uso.

La segunda corre en windows, pero fue desarrollada mas que todo para entornos linux.
La rxtx comm, que permite manejar los dos, el puerto paralelo y el serial, la documentacion y la libreria se puede descargar tanbien desde la pagina del autor.

En eclipse hacen click derecho en su proyecto y ponen Add External Jar. La buscan y la agregan, luego solo hacen un import en su codigo.

Saludos!


----------



## Meta

Hola:

Estoy por mi cuenta investigando sobre Java y el puerto serie con una interfaz. Haré un buen manual al estilo que hice en el pasado con Visual C# y funciona de maravilla.

Ver manual en Visual C#:
http://electronica-pic.blogspot.com/2008/11/electrnica-pic.html

Ver manual en Visual C++ y Visual Basic .net:
http://electronica-pic.blogspot.com/2009/03/manual-interfaz-vc-y-visual-basic.html

Si es posibel hasta puerto paralelo:
http://electronica-pic.blogspot.com/2010/07/interfaz-puerto-paralelo-lpt.html

Con el primer manual te dará ideas, ya que C# y Java se parecen.






Saludo.


----------



## COARITES

Hola k tal. Donde citas descargar de la pagina del autor, existe una aplicacion para descargar y la descarge pero me pide una contraseña para descomprimir si la la tubieras me podrias decir cual es.


----------



## Meta

Si te refieres a mi, la contraseña es:

D.P.E.

Es más, te viene en un documento del .txt.

Saludo.


----------



## ANNERIS

Hola... estuve viendo mi Pc y encontre un programa q maneja el puerto paraleo y que me sirvio mucho en la facultad para presentar en una materia llamada Fundamentos de Informatica.... No me acuerdo bien de que pagina lo descargue, pero que te sirve te va a servir...Lo puedes modificar con Visual Basic 6.0 o posterior si quieres... Saludos


----------



## COSMICO

Como estan hablando de puerto serie.
Alguien me puede sugerir un circuito para sacar +12 y - 12 voltios del puerto com
Nececito alimentar un circuito desde este puerto para multiplexar unas señales..


----------



## Chico3001

No se puede... el puerto serial nunca fue planeado para usarse como fuente de alimentacion


----------



## COSMICO

Existen circuitos para pc, que se alimentan con el mismo puerto
como programadores de pic y data switch.
Necesito saber como sacara estos voltajes, pues el consumo de corriente es minimo
de 5 a 8 miliamperiios, lo cual el puerto lo puede soportar bastante bien..


----------



## oscarintintin

hola a todos, tengo problemas usando RXTX, me sale arroja error en esta parte del codigo 
" CommPort  puerto= myCPI.open("puerto serial", 2000); "
y arroja este error: 
" Have no file for C:\Program Files (x86)\Java\jdk1.6.0_23\jre\lib\modules\jdk.boot.jar
Exception in thread "main" gnu.io.PortInUseException: Unknown Application
        at gnu.io.CommPortIdentifier.open(CommPortIdentifier.java:467)
        at ejem1serial.Main.main(Main.java:28)
Error 0x5 at ..\rxtx\src\termios.c(892): Acceso denegado."


		Código:
	

package ejem1serial;

import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.UnsupportedCommOperationException;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Enumeration;
import java.util.Scanner;

public class Main {

    
    public static void main(String[] args) throws PortInUseException, IOException, UnsupportedCommOperationException {
        Enumeration comport= CommPortIdentifier.getPortIdentifiers();
        CommPortIdentifier myCPI = null;
        Scanner mySC;
        PrintStream myPS;
        while(comport.hasMoreElements())
        {
            myCPI = (CommPortIdentifier) comport.nextElement();
            if(myCPI.getName().equals("COM3"))
                break;
        }
        CommPort  puerto= myCPI.open("puerto serial", 2000);
        SerialPort mySP= (SerialPort)puerto;
        mySP.setSerialPortParams(9600, SerialPort.DATABITS_8,SerialPort.STOPBITS_1 ,SerialPort.PARITY_NONE );
        mySC= new Scanner(mySP.getInputStream());
        myPS = new PrintStream (mySP.getOutputStream());

        while(!mySC.hasNextInt())
        {
            mySC.close();
            mySC= null;
            mySC= new Scanner(mySP.getInputStream());
    }
        int valor = mySC.nextInt();

        myPS.println("hola");

    }
}



Alguien puede brindarme su ayuda por favor. gracias


----------

