PLATAFORMA MÓVIL

 

PROGRAMACIÓN TARJETA CNICE


Tarjeta CNICE - Programación en MSWlogo

La programación de este caso se estructura en los siguientes pasos.

Se crea un procedimiento para crear la ventana gráfica del programa. Para crear la ventana utilizamos la función creaventana, dentro de la ventana se crean los botones con la función creaboton. Dentro de cada botón se establecerán entre los corchetes las funciones que se han de ejecutar una vez presionado el botón. Uno de los botones creados será el que se utiliza para salir de la aplicación, para lo cual se utiliza la orden adios.

Ej:

creaventana " "Principal [Plataforma Movil ] 120 42 200 150 []
creaboton "Principal "Arriba "Arriba 80 34 50 10 [proc_arriba control]
creaboton "Principal "Salir "SALIR 90 94 30 20 [proc_salir adios]

En este procedimiento se crea y se inicializa a 0 una variable que llamaremos bucle, y que nos servirá para poder leer las entradas digitales.

Se crea un procedimiento para activar las salidas digitales mediante la función salida la cual activará la salida digital adecuada expresada en un nº binario. Éste nº binario se va a guardar en variable creada a la que llamaremos led.

para Motor :led
salida :led
fin

Se crean varios procedimientos para que activen los 2 motores en un sentido de giro u otro, uno de los procedimientos creados se utiliza para desactivar todos los motores. Estos procedimientos van a llamar al procedimiento Motor que es el que permite activar las salidas digitales, a su vez dependiendo del motor que se quiera activar, se crean 2 variables (motor1 y motor2) las cuales activarán las salidas digitales pertenecientes a un motor u otro.

Como contenido adicional se actualiza el texto de los botones según los motores giren en un sentido u otro, para ello se utiliza la orden actualizaboton .

Ej:

para proc_abajo
(:motor2 = 8)
Motor :motor1 + :motor2
fin
para proc_parar
haz "motor1 0
haz "motor2 0
ACTUALIZABOTON "Izquierda "Izquierda
ACTUALIZABOTON "Derecha "Derecha
ACTUALIZABOTON "Abajo "Abajo
ACTUALIZABOTON "Arriba "Arriba
Motor 0
fin

Para poder leer las entradas digitales se necesita crear un bucle, para que este continuamente leyendo el valor de las entradas digitales. Para crear un bucle utilizamos la orden mientras y asignamos a una variable un valor, el cual se cambiará al dar al botón salir, para poder salir del bucle y poder salir así de la ejecución del programa.

Para leer las entradas digitales se utiliza la función ve? la cual nos devuelve el valor que hay en ese momento en las entradas, este valor lo guardaremos en una variable a la que llamamos entrada. Luego, según el valor que tengan las entradas, activará unos motor u otro en un sentido o en el otro, para lo cual se utilizarán condicionales.

para control
mientras [:bucle=0] [
haz "entradas ve?
si (:entradas = 1) [
haz "motor1 1
ACTUALIZABOTON "Derecha "Parar_Derecha
ACTUALIZABOTON "Izquierda "Izquierda
]
si (:entradas = 2) [
.
.
.
]

Se llama al procedimiento que crea la ventana gráfica fuera de cualquier procedimiento, para que se cargue la aplicación gráfica nada más cargar el fichero de logo.

Puede descargarse desde este enlace que viene a continuación el archivo programado en mswlogo.

 

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.

6. PROYECTOS > Plataforma móvil