Tarjeta CNICE - Programación en Visual Basic |
 |
La programación de este caso se estructura en los siguientes pasos.
Se crea un nuevo proyecto EXE Estándar.
Agregar un Modulo nuevo.
En el modulo añadido, se tendrán que poner las siguientes declaraciones de llamadas a las funciones de la biblioteca “IO.DLL”. También se incluirá la función que permite activar las salidas digitales de la controladora.
Public Declare Sub PortOut Lib "IO.DLL"
(ByVal nPort As Integer, ByVal nData As Integer)
Public Declare Function PortIn Lib "IO.DLL"
(ByVal Port As Integer) As Integer
También se incluirá la función que permite activar las salidas digitales de la controladora. Esta función o procedimiento se denominará “Motor”.
Public Sub Motor (Dato)
PortOut &H37A, &H7
PortOut &H378, Dato
End Sub
Se declararán 2 variables globales (motor1 y motor2), las cualescontienen en valor decimal, el valor que hay que poner en las salidas digitales para activar los motores en un sentido o en otro. El motor1 corresponde al giro horizontal de la plataforma, y el motor2 corresponde al giro vertical de la plataforma, éstas son variables globales que pondrán ser modificadas en cualquier punto del programa.
También en el módulo se creará una función o procedimiento para leer las entradas digitales de la controladora, a este función se la denominará “LeeDigital”. Este procedimiento comprueba si hay algún dato en las entradas digitales, si lo encuentra, lo transforma a base decimal.
Public Sub LeeDigital (ENTERO: BitsBajos, BitsAltos, TotalBits)
PortOut &H37A, 3
b = PortIn(&H379)
PortOut &H37A, 1
a = PortIn(&H379)
b = (b And &H78) / 8
b = Not b
b = b And 15
a = (a And &H78) / 8
a = Not a
a = a And 15
d = (a * 16) Or b
End Sub
En el formulario se creará un procedimiento de control, el cual interpreta el dato leído en las entradas digitales para a continuación realizar la acción que corresponda a ese dato, activando las adecuadas salidas digitales. Por ejemplo, si el dato leído en las entradas digitales indica que la plataforma ha llegado al tope izquierdo, entonces se activarán las salidas digitales adecuadas para que la torre gire en el sentido contrario.
Teniendo en cuenta como se han realizado las conexiones entre la tarjeta controladora y los conectores de la plataforma, se muestra en la siguiente tabla las acciones a realizar dependiendo del valor (en base decimal) de los datos recibidos en las entradas digitales.
Entrada Digital |
Motor 1 |
Motor 2 |
Salida Digital (Motor 1 + Motor 2) |
Interpretación |
1 |
4 |
X |
4 + X |
La torre ha llegado a su tope izquierdo, y empezara a girar a la derecha. El motor 2 (plataforma vertical) conserva el valor anterior "X" (sigue con su movimiento). |
2 |
2 |
X |
2 + X |
La torre ha llegado a su tope derecho, y empezara a girar a la izquierda. El motor 2 (plataforma vertical) conserva el valor anterior "X" (sigue con su movimiento). |
4 |
X |
16 |
16 + X |
La plataforma vertical ha llegado al tope superior y empezara a bajar. El motor 1 (giro de la torre) conserva el valor anterior "X". |
8 |
X |
8 |
8 + X |
La plataforma vertical ha llegado al tope inferior y empezara a subir. El motor 1 (giro de la torre) conserva el valor anterior "X". |
5 |
4 |
8 |
12 |
La torre ha llegado a su tope izquierdo y la plataforma ha su tope inferior al mismo tiempo, por lo que la torre girara a la derecha y la plataforma subirá. |
9 |
4 |
16 |
20 |
La torre ha llegado a su tope izquierdo y la plataforma ha su tope superior al mismo tiempo, por lo que la torre girara a la derecha y la plataforma bajara. |
6 |
2 |
8 |
10 |
La torre ha llegado a su tope derecho y la plataforma ha su tope inferior al mismo tiempo, por lo que la torre girara a la izquierdo y la plataforma subirá. |
10 |
2 |
16 |
18 |
La torre ha llegado a su tope izquierdo y la plataforma ha su tope superior al mismo tiempo, por lo que la torre girara a la derecha y la plataforma bajara. |
Cualquier otro dato |
0 |
0 |
0 |
Si se recibe cualquier otro dato diferenta a los anteriores, es que es un dato no valido, y ambos motores se pararán. |
El procedimiento de control quedaría dela siguiente forma, para lo cual se pone un Timer para que vaya leyendo el valor de las entradas digitales continuamente.
Private Sub Timer1_Timer ( )
Call LeeDigital (BitsBajos, BitsAltos, TotalBits)
Select Case BitsBajos
Case 1
Motor1 = 4
Case 2
Motor1 = 2
Case 4
Motor2 = 16
Case 8
Motor2 = 8
Case 5
Motor1 = 4
Motor2 = 8
Case 9
Motor1 = 4
Motor2 = 16
Case 6
Motor1 = 2
Motor2 = 8
Case10
Motor1 = 1
Motor2 = 16
Otros Case
Motor1 = 0
Motor2 = 0
End Select
Call Motor (Motor1 + Motor2)
End Sub
También se utilizará el Timer para cargar diferentes imágenes dependiendo del valor de las salidas digitales.
Una vez terminado el proyecto, éste se guarda y pulsa F5 o el botón Iniciar para ejecutar la aplicación.
Una vez comprobada que la aplicación funciona, se creará un archivo ejecutable del proyecto creado.
Puede descargarse desde este enlace que viene a continuación los diferentes archivos que forman todo el proyecto.
|