SEMÁFORO

 

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 principal 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 [Semaforo ] 120 42 200 150 []
creaboton "Principal "Manual "MODO_MANUAL 50 34 80 10 [Activar 8 Modo_Manual control]
creaboton "Principal "Automatico "MODO_AUTOMATICO 50 54 80 10 [Activar 16 Modo_Automatico control]
creaboton "Principal "Salir "Salir 70 94 40 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 segundo procedimiento que cargará otra ventana gráfica, este procedimiento que servirá para activar el funcionamiento manual del semáforo una vez se pulse en la ventana gráfica principal el botón de modo manual.

para Modo_Manual
borraventana "Principal
creaventana " "Mod_man [Semaforo - Modo Manual] 120 42 200 150 []
creaboton "Mod_man "Rojo "Rojo 75 14 24 10 [Activar 1+8 control]
creaboton "Mod_man "Ambar "Ambar 75 34 24 10 [Activar 2+8 control]
creaboton "Mod_man "Verde "Verde 75 54 24 10 [Activar 4+8 control]
creaboton "Mod_man "Apagar "Apagar 50 100 30 10 [Activar 0 control]
creaboton "Mod_man "Volver "VOLVER 100 94 40 20 [Activar 0 graficos control]

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 Activar :led
salida :led
fin

En la programación de los botones, se pondrá directamente las salidas digitales que tendrá que activar.

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 Y (O (:entradas=6) (:entradas=1)) NO(:foto=1) [cargadib("verde.bmp) haz "foto "1]
si Y (O (:entradas=5) (:entradas=2)) NO(:foto=2) [cargadib("amarillo.bmp) haz "foto "2]
si Y (O (:entradas=3) (:entradas=4)) NO(:foto=3) [cargadib("rojo.bmp) haz "foto "3]
si Y (O (:entradas=7) (:entradas=0)) NO(:foto=4) [cargadib("semaforo.bmp) haz "foto "4]
]

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á “Activar”.

Public Sub Activar (led)
PortOut &H37A, &H7
PortOut &H378, Dato
End Sub

Se declararán 3 variables globales (rojo, amarillo y verde), las cualescontienen en valor decimal, el valor que hay que poner en las salidas digitales. Estas variables se inicializan con unos valores para las salidas digitales, a las cuales se las sumará el valor de la salida digital que activará el funcionamiento automático del semáforo.

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án 2 botones, uno para cada modo de funcionamiento del semáforo, cada botón cargará distintas imágenes en el formulario.

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. Por ejemplo, si el dato leído en las entradas digitales es la que activa el color verde (1) del semáforo, entonces se cargará una imagen del semáforo en verde.

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 3,4
               Picture1.Picture = LoadPicture (App.Path & “\verde.jpg”)
           Case 5,2
               Picture1.Picture = LoadPicture (App.Path & “\amarillo.jpg”)
          Case 6,1
               Picture1.Picture = LoadPicture (App.Path & “\rojo.jpg”)
          Case 0,7
               Picture1.Picture = LoadPicture (App.Path & “\semaforo.gif”)

End Select
End Sub

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 > Semáforo