Beruflich Dokumente
Kultur Dokumente
Registro de estado
Lineas de datos
Tierras
www.detodoprogramacion.com
INSTITUTO POLITCNICO NACIONAL UNIDAD PROFESIONAL INTERDISCIPLINARIA DE INGENIERA Y CIENCIAS SOCIALES Y ADMINISTRATIVAS INGENIERA EN INFORMTICA
Para conocer la direccin del puerto paralelo de tu computadora ve a : Panel de control>Sistema>Hardware>Administradir de dispositivos>Puertos(COM & LPT1>Puerto de impresora>Recursos
Generalmente la direccin es 378 hexadecimal y 888 decimal, aunque puede variar de computadora a computadora, quizas sea 273 o 3BC.
www.detodoprogramacion.com
INSTITUTO POLITCNICO NACIONAL UNIDAD PROFESIONAL INTERDISCIPLINARIA DE INGENIERA Y CIENCIAS SOCIALES Y ADMINISTRATIVAS INGENIERA EN INFORMTICA
Ahora que ya conocemos el puerto paralelo podemos pasar a las instrucciones en lenguaje C para el control del puerto. Para establecer el valor se utiliza outportb(Direccin, valor); Para leer el valor del puerto se utiliza inportb(Direccin); Estas funciones estan definidas en la librera dos.h /* Ejemplo de E/S digital mediante el puerto paralelo, en mi computadora la direccin es 0x378 pero esto puede variar */ #include <stdio.h> /* Funciones de E/S directa por puertos */ #include <dos.h> void main () { /* Aqu se guardar el valor de las lineas de estado */ int byte; /* Enciende el LED al activar la primera lnea de datos (pin n 2) */ outportb(0x378, 1); /* Bucle que lee un byte de las lneas de estado */ do { byte = inportb(0x379); printf ("El valor ledo es %i\n", byte); } /* Repite hasta que se pulsa una tecla */ while( !kbhit() ); /* Apaga el LED */ outportb(0x378, 0); } En Win 2000, NT, y XP no se permite acceder al puerto paralelo, por lo cual se requiere de despreteger el puerto antes de probar este programa, esto se puede hacer con algunos programas como AllowIO que se pueden encontrar libremente en internet. Ahora es el momento de utilizar estas funciones de C en VB. Ahora bien, nos evitamos todo el rollo para crear DLLs, lo que haremos sera utilizar las funciones de una de las librerias incluidas en esta descarga, la IO.DLL, hay otras, pero esta es la que ms prestaciones tiene. Lo que haremos sera declarar la librera en un modulo de VB, y despues ya podremos utilizarla en algun formulario, siempre hay que tratar de meter todo el cdigo dentro de un modulo, ya que un programa con el codigo directamente en el formulario es mucho ms lento que un programa con el codigo en uno o varios modulos, sobre todo cuando se trata de vectores, matrices y grficos. Aqu menciono la descripcin de cada una de las funciones de esta librera, aunque en realidad no no ser necesario utilizar todas.
PortOut PortWordOut PortDWordOut PortIn PortWordIn PortDWordIn SetPortBit ClrPortBit NotPortBit GetPortBit IsDriverInstalled Envia un byte por el puerto indicado Envia una palabra de 16 bits al puerto indicado Envia una palabra de 32 bits al puerto indicado Lee un byte del puerto indicado Lee una palabra de 16 bits del puerto indicado Lee una palabra de 32 bits del puerto indicado Envia un 1 lgico por el bit del puerto indicado Envia un 0 lgico por el bit del puerto indicado Invierte el estado del bit del puerto indicado Regresa el estado del bit del puerto indicado Regresa un 0 si la librera IO.DLL esta instalada y funcionando.
www.detodoprogramacion.com
INSTITUTO POLITCNICO NACIONAL UNIDAD PROFESIONAL INTERDISCIPLINARIA DE INGENIERA Y CIENCIAS SOCIALES Y ADMINISTRATIVAS INGENIERA EN INFORMTICA
Aqu muestro como se declaran estas funciones para ser accesibles desde VB:
Option Explicit
Public Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte) Public Declare Sub PortWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Integer) Public Declare Sub PortDWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Long) Public Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte Public Declare Function PortDWordIn Lib "IO.DLL" (ByVal Port As Integer) As Long Public Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) Public Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) Public Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) Public Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) As Boolean Public Declare Function IsDriverInstalled Lib "IO.DLL" () As Boolean ' La siguientes 2 variables pueden tomar cualquier nombre, no son parte de la DLL. Public Dir_Lectura As Integer ' En esta variable se almacena la direccin de lectura del puerto Public Dir_Escritura As Integer ' En esta varibale se almacena la direccion de escritura del puerto
Esto debe ir en un modulo, el nombre del modulo no importa, ya que pudes mandar a llamar las funciones directamente por su nombre, sin embargo la primera vez sera conveniente que las mandaras a llamar haciendo referencia al modulo de esta forma Module1. asi VB te mostrar todas las funciones de esta librera, adems de los parametros que requiere.
Hasta aqu de esta DLL, para entender como funciona por completo solo hace falta ver el ejemplo que se anexa junto con la DLL, pero con esto ya no tendran problemas, solo recuerden tener la IO.DLL en el mismo directorio donde esta el ejecutable de VB. Comentaba que la forma ms sencilla de controlar el puerto paralelo es con un control ActiveX, un control ActiveX es un pedazo de software reutilizable, algo as como una version primitiva de una clase, ya que se puede instanciar y utilizar sus propiedades y mtodos en un formulario e incluso en paginas web. Para que quede ms claro un ejemplo de un control ActiveX es el TEXTBOX, o un LABEL, un PICTUREBOX de VB. Es decir, son componentes que podemos agregar a un formulario y ya podremos utilizarlos sin preocuparnos de todo el cdigo que hay adentro del control. En realidad estoy seguro de que el control por puerto paralelo es un medio y no un fin, creo que les seria util un control ActiveX que nos permitiera enviar datos por el puerto y realizar lecturas de los bits de estado incluso a una velocidad de 50 milisegundos por lectura, esto me parece ms sencillo, porque es un control que podemos insertar en cualquier formulario, no importando de que proyecto se trate, no hace falta hacer declaraciones de funciones, unicamente lo insertamos y comenzamos a utilizarlo, aunque obviamente si se requiere de la DLL instalada en el equipo. Me di a la tarea de construir un ActiveX para el control del puerto paralelo, y me parece que logre simplificar la tarea, veamos un ejemplo. Si aun no lo has hecho, bajate el archivo SWF (zip) que acompaa a esta descarga, en el encontraras una carpeta llamada ActiveX, entra y vers un archivo llamado PuertoParalelo.ocx, y un archivo llamado UPIICSA_VB.DLL, el OCX es nuestro control del puerto paralelo y la DLL es la librera con funciones en C, copia la DLL a la raiz de tu unidad C, la ruta del archivo debe ser C:\UPIICSA_VB.dll. Copia el archivo PuertoParalelo.OCX a tu directorio de sistema, generalmente System32. Ahora ya puedes utilizar el control del paralelo desde cualquier proyecto de visual basic, esto de copiar los archivos obviamente solo es necesario hacerse una vez por mquina.
www.detodoprogramacion.com
INSTITUTO POLITCNICO NACIONAL UNIDAD PROFESIONAL INTERDISCIPLINARIA DE INGENIERA Y CIENCIAS SOCIALES Y ADMINISTRATIVAS INGENIERA EN INFORMTICA
Abrimos el Visual Basic y escogemos un EXE estandar. Cuando ya se muestre el formulario entonces vamos al menu PROYECTO y escogemos la opcin COMPONENTES, se nos mostrara un dialogo, da clic en el boton EXAMINAR y busca el archivo PuertoParalelo.ocx , si me has hecho caso debe estar en tu directorio de sistema, localizalo, abrelo y acepta, ahora el control UPIICSAPP se encuentra al final de tu barra de controles.
www.detodoprogramacion.com
INSTITUTO POLITCNICO NACIONAL UNIDAD PROFESIONAL INTERDISCIPLINARIA DE INGENIERA Y CIENCIAS SOCIALES Y ADMINISTRATIVAS INGENIERA EN INFORMTICA
Agrega al formulario un par de botones, un label y un UPIICSAPP, no importa donde los coloques, esto solo es una demostracin.
El Boton 1 (command1) es el que manipulara el bit 2 del paralelo, el boton2 (command2) lo que hara es realizar una lectura del bit 2 del registro de estado. Por ahora copia el siguiente texto, es lo que hace funcionar nuestro control, como veras es muy sencillo.
Option Explicit 'Cuando presionamos el boton se envia un 1 al bit 2 del puerto paralelo Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) UPIICSAPP1.Encender_Bit (2) End Sub 'Cuando liberamos el boton se envia un 0 al bit 2 del puerto paralelo Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) UPIICSAPP1.Apagar_Bit (2) End Sub ' Cuando hacemos clic sobre el boton 2 se hace una lectura y se muestra en el label el valor del bit 1 del registro de estado Private Sub Command2_Click() UPIICSAPP1.Realizar_lectura Label1.Caption = UPIICSAPP1.Leer_Estado_Bit1 End Sub ' Cuando se carga el formulario se establece que la direccin de nuestro puerto paralelo es la 378 Private Sub Form_Load() UPIICSAPP1.Establecer_Direccin_0x378 End Sub
Debes conectar un led al puerto al que vayas a enviar el 1 lgico para poder ver que realmente funciona, o de lo contrario usa un multimetro. Si no pasa nada quizas en tu mquina la direccin sea otra, no te preocupes ya me he encargado de eso, solo debes cambiar esta instruccin :
UPIICSAPP1.Establecer_Direccin_0x378 por alguna de estas dos : UPIICSAPP1.Establecer_Direccin_0x278 UPIICSAPP1.Establecer_Direccin_0x3BC
Para ver todas la funciones que trae el control recuerda el punto, osea UPIICSAPP1. y VB te mostrara todo lo que te ofrece este control, por supuesto si detestas la UPIICSA o a tu servidor, puedes poner la propiedad visible del control a false. Sientete libre de usar este control y redistribuirlo, ojal que te haya servido, si tienes alguna duda o comentario este es mi mail alberto_ocotitla@hotmail.com
www.detodoprogramacion.com