entornos de trabajo en mswlogo para las …recursostic.educacion.es/.../entorno_mswlogo.pdf ·...

88
Instituto de Tecnologías Educativas 1 Anexos Entorno de programación del compilador MSWLogo versión 6.5a ENTORNOS DE TRABAJO EN MSWLOGO PARA LAS CONTROLADORAS ENCONOR Y CNICE

Upload: others

Post on 06-Jan-2020

13 views

Category:

Documents


0 download

TRANSCRIPT

Instituto de Tecnologías Educativas

1 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

ENTORNOS DE TRABAJO EN MSWLOGO PARA LAS CONTROLADORAS

ENCONOR Y CNICE

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

2 El ordenador como elemento de control

ÍNDICE

1 INTRODUCCIÓN 4

2 ¿CÓMO SE EJECUTA UN PROGRAMA? 6

3 ENTORNO DE TRABAJO PARA LA CONTROLADORA ENCONOR 9

3.1 Procedimientos para establecer el canal de comunicación: 13

3.2 Primitivas de control: 14 3.2.1 Conjunto de primitivas de control diseñadas para trabajar con los actuadotes conectados a las salidas digitales: 14 3.2.2 Conjunto de primitivas de control diseñadas para trabajar con las entradas digitales: 17 3.2.3 Conjunto de primitivas de control diseñadas para trabajar con las entradas analógicas: 18 3.2.4 Conjunto de primitivas de control diseñadas para trabajar con las salidas analógicas: 20

3.3 Procedimientos para crear el entorno gráfico: 21

4 ENTORNO DE TRABAJO PARA LA CONTROLADORA CNICE 22

4.1 Primitivas de control 25 4.1.1 Conjunto de primitivas de control diseñadas para trabajar con los actuadores conectados a las salidas digitales: 25 4.1.2 Conjunto de primitivas de control diseñadas para trabajar con las entradas digitales: 29 4.1.3 Conjunto de primitivas de control diseñadas para trabajar con las entradas analógicas: 30

4.2 Procedimientos para crear el entorno gráfico: 32

5 IMPLEMENTACIÓN 34

5.1 Pantallas de elección de entorno 34 5.1.1 Archivo: Primitivas.LGO 34 5.1.2 Archivo: Elecc_EntornoENCONOR.LGO 35 5.1.3 Archivo: Elecc_EntornoCNICE.LGO 35

5.2 Anexo 1 37 5.2.1 Archivo: EntornoENCONOR.LGO 37

Instituto de Tecnologías Educativas

3 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

5.3 Anexo 2 66

5.3.1 Archivo: EntornoCNICE.LGO 66

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

4 El ordenador como elemento de control

1 INTRODUCCIÓN

Esta versión de MSWLogo permite la carga, al abrirse, de un entorno para manejar las controladoras ENCONOR y CNICE. Para

conseguirlo se han hecho unas pequeñas modificaciones en los proyectos de Borland C++ del compilador de MSWLogo (ambos proyectos son similares, la diferencia entre ambos reside en que uno se utiliza para la depuración). Estos proyectos están en el archivo LOGO32.IDE o en el archivo LOGO32D.IDE. En el archivo MAIN.CPP es donde se deben realizar las modificaciones que consisten en introducir una línea que permita la carga del archivo que contiene el entorno para las controladoras (Primitivas.LGO).

void TMyApp::InitInstance()

{ TApplication::InitInstance(); HAccTable = LoadAccelerators("LOGOACC"); fileload("ENTORNO/Primitivas.LGO"); }

El archivo Primitivas.LGO debe guardarse en una carpeta llamada ENTORNO (dentro de la carpeta MSWLogo/bc5) junto con el resto de

archivos necesarios para crear el entorno de trabajo para las controladoras. La carpeta ENTORNO se creará y se dejará donde se tenga el proyecto del MSWLogo.

Una vez hecho esto se deben compilar los proyectos, creando así los nuevos ejecutables (logo32.exe para el proyecto LOGO32.IDE –este

es el ejecutable que se utilizará- y logo32d.exe para el proyecto LOGO32D.IDE).

Instituto de Tecnologías Educativas

5 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

Si se abre el compilador de MSWLogo aparecerá la siguiente ventana:

En ella se puede elegir entre tres opciones distintas: 1. Usar una controladora: permite trabajar en un entorno de trabajo para una controladora determinada. 2. Simuladores: permite trabajar en un entorno de trabajo para simuladores. 3. Programar: permite utilizar el compilador de MSWLogo sin haber cargado ningún entorno de trabajo especial.

Centrémonos en la primera opción, que es la que nos interesa en estos momentos. Al elegir la opción de Usar una controladora se mostrará la ventana para elegir el tipo de controladora a manejar.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

6 El ordenador como elemento de control

Como ya se ha visto hasta ahora, se ha creado un entorno de trabajo para poder trabajar con las controladoras ENCONOR y CNICE. Este entorno proporciona una serie de procedimientos que permiten controlar las entradas y salidas, tanto digitales como analógicas. Se ha tratado, en la medida de lo posible, de que dichos procedimientos tengan los mismos nombres para ambas controladoras, para facilitar así su utilización. Además también se proporciona un entorno gráfico para poder manejar las controladoras. En el momento en el que se elige el tipo de controladora con la que se desea trabajar los procedimientos de control son cargados y se puede empezar a trabajar con la controladora.

2 ¿CÓMO SE EJECUTA UN PROGRAMA?

Si lo que se desea es ver cómo funciona un programa en la controladora habrá que utilizar el compilador de MSWLogo y seguir unos

sencillos pasos. Los pasos explicados son para el uso de la controladora CNICE. Para ejecutar un programa en la controladora ENCONOR los pasos son similares.

No hay que olvidar que debe conectar la controladora al PC y realizar las conexiones apropiadas en la controladora para poder comprobar los resultados. Los pasos a seguir son los siguientes:

1.- Ejecutar el compilador de MSWLogo proporcionado por el CNICE.

2.- Elegir la opción de “Usar una controladora“.

Instituto de Tecnologías Educativas

7 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

3.- Luego hay que seleccionar la controladora “CNICE”

4.- Elegir el entorno de trabajo, en este caso “PROGRAMACIÓN MANUAL”.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

8 El ordenador como elemento de control

5.- Y, por último, cargar el programa en el compilador. Para ello habrá que elegir la opción Cargar… del menú Archivo. En la mayor parte de los casos, una vez que se ha cargado el programa no hace falta hacer nada mas puesto que los programas se autoejecutan al incluirse en los mismo una llamada al procedimiento principal. Sino es el caso, se deberá escribir en la línea de comandos del compilador el nombre del procedimiento principal del programa cargado.

Instituto de Tecnologías Educativas

9 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

3 ENTORNO DE TRABAJO PARA LA CONTROLADORA ENCONOR

A continuación se va a explicar el entorno de trabajo creado para trabajar con la controladora ENCONOR. El entorno de trabajo creado

permite manejar la controladora a través de un interfaz gráfico o a través de una serie de procedimientos o primitivas que actuarán directamente sobre las entradas y salidas analógicas y digitales de la controladora. La ventana que permite seleccionar el tipo de entorno con el que se desea trabajar es la que se muestra a continuación:

Tanto si se ha elegido trabajar con el entorno gráfico o la programación manual, lo siguiente es establecer el canal o puerto de comunicación. La ventana que permite al usuario elegir el puerto serie por el que establecer la comunicación entre el ordenador y la controladora ENCONOR es la siguiente:

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

10 El ordenador como elemento de control

El significado de cada una de las opciones del menú es:

1.- Detección automática del canal de comunicaciones: El programa intenta determinar de forma autónoma el canal serie operativo para comunicarse con la tarjeta controladora. En la mayor parte de los casos esta opción es la más adecuada, y por tanto la primera a elegir. Sin embargo, puede haber algún ordenador que muestre alguna anomalía con esta opción; como por ejemplo que deje de funcionar el ratón o se bloquee el programa. En estos casos puntuales, hay que salir del programa, reiniciar el ordenador, entrar de nuevo y utilizar las otras dos opciones.

2.- Canal de comunicaciones COM 1: El programa intenta ponerse en comunicación con la tarjeta controladora a través del puerto COM

1. Si no consigue establecer la comunicación, aparecerá el correspondiente mensaje de aviso. Se pulsará el botón INTENTAR DE NUEVO y se probará con la opción 3 (Selección del Puerto de comunicaciones COM 2) en la ventana anterior.

Si, por el contrario, consigue establecer la comunicación mostrará un mensaje de aviso "Comunicación establecida por el canal 1". Ese

será el canal a utilizar en el futuro con ese ordenador en concreto.

Instituto de Tecnologías Educativas

11 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

3.- Canal de comunicaciones COM 2: El programa intenta ponerse en comunicación con la tarjeta controladora a través del puerto COM 2. Si lo consigue mostrará un mensaje de aviso "Comunicación establecida por el canal 2". Ese será el canal a utilizar en el futuro con ese ordenador en concreto. Si no consigue establecer la comunicación, aparecerá el correspondiente mensaje de aviso.

En este caso, si no funciona ninguna de las tres opciones, puede que haya algún problema en la tarjeta controladora, cable de conexión o ambos. Comprobar que la placa tenga el diodo led amarillo parpadeando, las soldaduras sean correctas, los componentes estén bien colocados y el cable correctamente conectado. Después de asegurarse y tener en cuenta los apartados anteriores repetir el proceso de inicialización.

Si se optó por trabajar con el entorno gráfico y se ha conseguido establecer la comunicación entre la controladora y el ordenador, se debe

pulsar el botón COMENZAR A TRABAJAR. Aparecerá un entorno gráfico que nos permitirá manipular las salidas digitales una a una o en bloque a golpe de ratón. Además en todo momento podremos ordenar que se visualice el estado de las entradas tanto analógicas como digitales. El valor de tensión de las salidas analógicas también se puede modificar.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

12 El ordenador como elemento de control

Si, por el contrario, se optó por trabajar en el entorno de Programación manual no aparecerá el interfaz gráfico. La pantalla de MSWLogo se divide en dos ventanas. La superior será la ventana de mensajes y la inferior la de trabajo, es decir, donde escribiremos las órdenes o primitivas.

Instituto de Tecnologías Educativas

13 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

Destacar que se puede pasar de un entorno de trabajo a otro, es decir, si estamos en Programación Manual podemos pasar al Entorno gráfico (con la primitiva graficos) y viceversa (escribiendo las primitivas que se deseen en la ventana de trabajo del MSWLogo).

Los procedimientos que se cargan en memoria para poder trabajar en uno de los dos entornos de trabajo para esta controladora se

clasifican en tres tipos: los procedimientos necesarios para establecer el puerto de comunicación entre el ordenador y la controladora, las primitivas de control que son los procedimientos que servirán para manejar la controladora y los procedimientos necesarios para crear el entorno gráfico para manejar la controladora. El código de dichos procedimientos se encuentra en el ANEXO 1 de esta documentación.

Destacar que tiene especial importancia para la mayor parte de los procedimientos la variable :canal que almacena el puerto por el que se establece la comunicación entre el ordenador y la controladora (COM1 o COM2). Inicialmente no hay establecido ningún canal de comunicaciones, por ello se inicializa la variable al valor –1 (HAZ "canal -1).

También es importante el procedimiento EntornoENCONOR que es el cuerpo principal del programa y donde se inicializan las variables necesarias para los procedimientos.

3.1 Procedimientos para establecer el canal de comunicación:

La controladora ENCONOR se comunica con el ordenador a través del puerto RS232 (COM1 o COM2). El entorno de trabajo creado

permite elegir el canal de comunicación. Para ello se han definido los procedimientos BuscaPuerto, Arranca, Arrancar?, Arrancar1, Arrancar2 y BuscaPuerto1.

PROCEDIMIENTO DESCRIPCIÓN Buscapuerto Crea una ventana para que el usuario elija el canal de

comunicación. Se puede elegir directamente el puerto serie por el que se quiere establecer la comunicación (COM1 o COM2) o dejar que dicha elección se haga de forma automática.

Arranca Intenta comunicarse con la placa tres veces antes de decidir que no hay posibilidad de comunicación con la tarjeta controladora.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

14 El ordenador como elemento de control

Procedimiento Descripción ACTIVA_SALIDA :numerosalida Activa la salida digital que se

le indique en :numerosalida, dejando el resto de salidas

Arrancar? Detecta de forma automática si el canal de comunicaciones es el COM1 o el COM2.

Arrancar1 Abre y configura el puerto de comunicaciones COM1. Arrancar2 Abre y configura el puerto de comunicaciones COM2. BuscaPuerto1 Comunica al usuario con una ventana si se ha podido

o no establecer la comunicación entre el ordenador y la controladora. Si ésta no ha sido posible, permite volver a intentarlo de nuevo.

3.2 Primitivas de control:

A continuación se presentan las distintas primitivas de control disponibles para manejar la controladora ENCONOR, separadas según el uso que tengan, junto con los procedimientos auxiliares necesarios para las mismas:

3.2.1 Conjunto de primitivas de control diseñadas para trabajar con los actuadotes conectados a las salidas digitales:

PRIMITIVA DESCRIPCIÓN PROCEDIMIENTOS AUXILIARES M1 “D Hace girar en un determinado sentido un motor

conectado a las salidas digitales S1-S5 (para conseguirlo se activan las dos salidas). Si el actuador es una bombilla, relé o electroimán, simplemente lo activa.

Instituto Superior de Formación y Recursos en Red para el Profesorado

15 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

como estén.

DESACTIVA_SALIDA :numerosalida Desactiva la salida digital que se le indique en :numerosalida, dejando el resto de salidas como estén.

M1 “I Hace girar en sentido contrario a la primitiva anterior un motor conectado a las salidas digitales S1-S5 (para conseguirlo se activa la salida S1 y se desactiva la salida S5). No se diferencia de la primitiva anterior si están conectados otros actuadotes (bombilla, relé, etc.)

M1 “P Desactiva el actuador que esté conectado a S1-S5 (para conseguirlo se desactivan ambas salidas).

M2 “D, M2 “I, M2 “P M3 “D, M3 “I, M3 “P M4 “D, M4 “I, M2 “P

Lo mismo que las primitivas anteriores, aunque los actuadotes se conectan a los restantes pares de salidas digitales (S2-S6, S3-S7 y S4-S8).

M? Devuelve una lista con el estado de los cuatro motores. Ej.: MUESTRA M?

[P D D I]

M :L Permite activar/desactivar todos los motores simultáneamente. El parámetro :L tiene que ser una lista. Ej.: M [P P I D]Æ Se desactivan los motores M1 y M2, M3 se hace girar a la Izquierda y M4 se hace girar a la derecha.

CONECTADO? Devuelve una lista de 4 elementos (uno por cada motor) cuyos valores son 0 ó 1 según estén activos o no.

SALIDA :NUM Controla individualmente o en conjunto cada una de las ocho salidas digitales. Envía a las salidas digitales el número binario equivalente al decimal que pongamos en :NUM. Para activar, por ejemplo, las salidas 1 y 8 se escribirá el comando:

Procedimiento Descripción SALIDA1 :dato Se encarga de escribir en el

puerto los datos necesarios para poder controlar las salidas digitales.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

16 El ordenador como elemento de control

SALIDA 129 Si alguna otra salida digital distinta a las salidas 1 y 8 estaba activada, se desactivará.

EnviaOcteto :dato Procedimiento para la compatibilidad con las primitivas proporcionadas por ENCONOR (tiene la misma función que la primitiva SALIDA). Controla individualmente o en conjunto cada una de las ocho salidas digitales. Envía a las salidas digitales el número binario equivalente al decimal que pongamos en :dato.

APAGA :n Procedimiento para la compatibilidad con las primitivas proporcionadas por ENCONOR (tiene la misma función que el procedimiento DESACTIVA_SALIDA). Desconecta la salida digital que se le indique en :n (1, 2, ... u 8), dejando el resto de salidas digitales como estén.

SALIDA? Devuelve una lista de ocho elementos con el estado de las ocho salidas digitales (1 si la salida está activada o 0 si está desactivada).

CONECTA :NUM Activa la salida digital indicada en :NUM, siendo :NUM 1, 2, 3, 4, 5, 6, 7 u 8. El resto de salidas digitales se quedan como estén

DESCONECTA :NUM Desactiva la salida digital indicada en :NUM siendo :NUM 1, 2, 3, 4, 5, 6, 7 u 8. El resto de salidas digitales se quedan como estén.

CONECTAR Conecta las 8 salidas digitales (si no lo están ya). DESCONECTAR Desconecta las 8 salidas digitales (si es que están

Procedimiento Descripción DESACTIVA_SALIDA :numerosalida Desactiva la salida digital que

se le indique en :numerosalida, dejando el resto de salidas como estén.

Instituto de Tecnologías Educativas

17 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

Procedimiento Descripción Recibir Intenta leer del puerto por 3 veces los

datos que proporcionan las entradas digitales, utilizando para ello el procedimiento Recibir1.

conectadas). VS? Devuelve un número decimal que indica qué

salidas digitales están activadas. Por ejemplo, si devuelve 3 indica que las salidas digitales 1 y 3 están activadas.

segundos :tiempo Produce un retardo o espera de tantos segundos como le indiquemos en :tiempo. Se pueden utilizar fracciones de segundo (Ej.: 0.2).

Destacar que en una variable llamada salidas es donde se almacena el valor/estado de las ocho salidas digitales, mediante un número

decimal que indica el valor en binario de dichas salidas. Por ejemplo, si salidas toma el valor 255 quiere decir que todas las salidas digitales están activadas.

3.2.2 Conjunto de primitivas de control diseñadas para trabajar con las entradas digitales:

PRIMITIVA DESCRIPCIÓN PROCEDIMIENTOS AUXILIARES entrada :n Procedimiento para la compatibilidad con las

primitivas proporcionadas por ENCONOR. Devuelve VERDADERO si la entrada digital indicada en :n (1, 2, ... u 8) está conectado o FALSO en caso contrario.

VE? Devuelve un número decimal que indica qué entradas digitales están activadas. Por ejemplo, si ejecutamos la primitiva y esta devuelve 129, las entradas digitales 1 y 8 tienen valor 1.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

18 El ordenador como elemento de control

SD :entrada Devuelve el valor del sensor digital expresado en :entrada (1, 2, 3, ... u 8), 1 si la entrada está activa o 0 en caso contrario.

SD? Devuelve el estado de los ocho sensores digitales en forma de lista (0s ó 1s).

EsperaOn :entrada Deja el programa parado a la espera de que se active la entrada digital indicada en :entrada.

EsperaOff :entrada Deja el programa parado a la espera de que se desactive la entrada digital indicada en :entrada.

Recibir1 Se encarga de escribir y leer del puerto los datos necesarios para obtener el valor de las entradas digitales.

Destacar que en una variable llamada entradas es donde se almacena el valor/estado de las ocho entradas digitales, mediante un número

decimal que indica el valor en binario de dichas entradas. Por ejemplo, si entradas toma el valor 255 quiere decir que todas las entradas digitales están activadas.

3.2.3 Conjunto de primitivas de control diseñadas para trabajar con las entradas analógicas:

PRIMITIVA DESCRIPCIÓN PROCEDIMIENTOS AUXILIARES Procedimiento Descripción leeanalogica :dato Procedimiento para la compatibilidad con las

primitivas proporcionadas por ENCONOR. Intenta leer del puerto por 3 veces los datos que proporcionan la entrada analógica indicada en :dato (que puede ser 1, 2, 3, 4 ó 5). Si consigue leerlas, devuelve su valor. Para obtener el valor en voltios correspondiente al valor decimal devuelto por la primitiva se debe aplicar la siguiente fórmula: Nº decimal= (Voltaje Entrada mV) / (19´5 mV)

Instituto de Tecnologías Educativas

19 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

SAV Devuelve directamente el valor en voltios del sensor analógico conectado a la entrada analógica 1.

SAW Devuelve directamente el valor en voltios del sensor analógico conectado a la entrada analógica 2.

SAX Devuelve directamente el valor en voltios del sensor analógico conectado a la entrada analógica 3.

SAY Devuelve directamente el valor en voltios del sensor analógico conectado a la entrada analógica 4.

SAZ Devuelve directamente el valor en voltios del sensor analógico conectado a la entrada analógica 5.

leeanalogico1 :dato Se encarga de escribir y leer del puerto los datos necesarios para obtener el valor de la entrada analógica indicada en :dato.

SA? Devuelve una lista con el valor en voltios de los cinco

sensores analógicos.

Destacar que las entradas analógicas que queden al aire deben conectarse a MASA para no obtener valores de lectura erróneos, es decir,

las entradas analógicas de las que no se quieran recibir o leer datos deben conectarse a MASA. También es importante saber que en una variable llamada analogico es donde se almacena el valor de la entrada analógica que se esté

leyendo en cada momento. El valor que puede tomar es un número entre 0 y 255 que corresponde al valor en tensión existente en la entrada analógica leída.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

20 El ordenador como elemento de control

3.2.4 Conjunto de primitivas de control diseñadas para trabajar con las salidas analógicas:

PRIMITIVA DESCRIPCIÓN salidaanalogica :NUM :VALOR Intenta escribir en el puerto por 3 veces los

datos necesarios para poner en la salida analógica que se le indica en :NUM (que puede ser 1, 2, 3 ó 4) el valor en tensión indicado en :VALOR (varía entre 0 y 255). Para conocer el valor en tensión en la salida se utiliza la siguiente fórmula: Voltaje Salida (Voltios) = :VALOR / 23.8

VOLTAJE :NUM :VALOR Fija en la salida analógica indicada en :NUM el

valor en tensión especificado en :VALOR (varía entre 0 y 10.5).

VOLTAJE? Devuelve una lista con el valor en voltios de todas las salidas analógicas.

PROCEDIMIENTOS AUXILIARES Procedimiento Descripción

potenciometro1 :num :valor Se encarga de escribir en el puerto los datos necesarios para poner en la salida analógica indicada en :num el valor en voltios indicado en :valor.

Destacar que en se utilizan unas variables llamadas salanalogica1, salanalogica2, salanalogica3 y salanalogica4 para almacenar el valor

que presentan las distintas salidas analógicas. Para conocer, por ejemplo, el valor en tensión en la salida digital 1 utiliza la siguiente fórmula: Voltaje Salida1 (Voltios) = :salanalogica1 / 23.8

Instituto de Tecnologías Educativas

21 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

3.3 Procedimientos para crear el entorno gráfico:

A continuación se presentan las distintas primitivas disponibles para crear el entorno gráfico para manejar la controladora ENCONOR con los procedimientos auxiliares necesarios para las mismas:

PRIMITIVA DESCRIPCIÓN graficos Crea las ventanas necesarias para manejar las

entradas y salidas analógicas (primitiva graficosan) y digitales y la ventana para informar del estado de la comunicación entre el ordenador y la controladora (primitiva informa).

PROCEDIMIENTOS AUXILIARES Procedimiento Descripción

pintasalidas Actualiza el valor de los indicadores de las salidas digitales del entorno gráfico.

pintaentradas Actualiza el valor de los indicadores de las entradas digitales del entorno gráfico.

graficosan Crea una ventana para controlar las entradas y

salidas analógicas. informa Crea una ventana para informar de si se ha

podido establecer la comunicación por el puerto serie (en este caso indica por qué puerto) o no.

Recibir Intenta leer del puerto por 3 veces los datos que proporcionan las entradas digitales, utilizando para ello el procedimiento Recibir1.

Recibir1 Se encarga de escribir y leer del puerto los datos necesarios para obtener el valor de las entradas digitales.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

22 El ordenador como elemento de control

4 ENTORNO DE TRABAJO PARA LA CONTROLADORA CNICE

A continuación se va a explicar el entorno de trabajo creado para trabajar con la controladora CNICE. Hay que destacar que este

entorno de trabajo permite trabajar tanto con la controladora CNICE como con la controladora Investrónica. El entorno de trabajo creado permite manejar la controladora a través de un interfaz gráfico o a través de una serie de procedimientos o

primitivas que actuarán directamente sobre las entradas y salidas analógicas y digitales de la controladora. La ventana que permite seleccionar el tipo de entorno con el que se desea trabajar es la que se muestra a continuación:

Tanto si se opta por uno u otro entorno de trabajo, se carga la librería io.dll para que a través de sus funciones “PortOut” y “PortIn”, se pueda tener acceso a los puertos del PC cuando el sistema operativo es Windows 2000 o XP. Pero antes de nada hay que asegurarse de que esta librería, se encuentre en el sistema, y mas concretamente, en el directorio C:\WINNT\System.

Si se opta por trabajar con el entorno gráfico se debe pulsar el botón ENTORNO GRÁFICO. Aparecerá un entorno gráfico que nos permitirá manipular las salidas digitales una a una o en bloque a golpe de ratón. Además en todo momento podremos ordenar que se visualice el estado de las entradas tanto analógicas como digitales.

Instituto de Tecnologías Educativas

23 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

Si, por el contrario, se optó por trabajar en el entorno de Programación manual no aparecerá el interfaz gráfico. La pantalla de MSWLogo se divide en dos ventanas. La superior será la ventana de mensajes y la inferior la de trabajo, es decir, donde escribiremos las órdenes o primitivas.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

24 El ordenador como elemento de control

Destacar que se puede pasar de un entorno de trabajo a otro, es decir, si estamos en Programación Manual podemos pasar al Entorno gráfico (con la primitiva graficos) y viceversa (escribiendo las primitivas que se deseen en la ventana de trabajo del MSWLogo).

Instituto de Tecnologías Educativas

25 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

Los procedimientos que se han implementado permiten establecer la comunicación entre la controladora y el PC a través del puerto paralelo LPT1.

Los procedimientos que se cargan en memoria para poder trabajar en uno de los dos entornos de trabajo para esta controladora se clasifican en dos tipos: las primitivas de control que son los procedimientos que servirán para manejar la controladora y los procedimientos necesarios para crear el entorno gráfico para manejar la controladora. El código de dichos procedimientos se encuentra en el ANEXO 2 de esta documentación.

Destacar que tiene especial importancia el procedimiento EntornoCNICE que es el cuerpo principal del programa y donde se inicializan las variables necesarias para los procedimientos.

4.1 Primitivas de control

A continuación se presentan las distintas primitivas de control disponibles para manejar la controladora CNICE, separadas según el uso que tengan, junto con los procedimientos auxiliares necesarios para las mismas:

4.1.1 Conjunto de primitivas de control diseñadas para trabajar con los actuadores conectados a las salidas digitales:

PRIMITIVA DESCRIPCIÓN PROCEDIMIENTOS AUXILIARES M1 “D Hace girar en un determinado sentido un motor

conectado a las salidas digitales S0-S1 (para conseguirlo se activa la salida S1 y se desactiva S0). Si el actuador es una bombilla, relé o electroimán, simplemente lo activa.

Procedimiento Descripción ACTIVAR_SALIDA_X (*)

X indica el número de salida que se

Activa la salida digital que se le indique en X, dejando el resto de salidas como estén.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

26 El ordenador como elemento de control

M1 “I Hace girar en sentido contrario a la primitiva

anterior un motor conectado a las salidas digitales S0-S1 (para conseguirlo se activa la salida S0 y se desactiva la salida S1). No se diferencia de la primitiva anterior si están conectados otros actuadores (bombilla, relé, etc.)

quiere activar (1, 2, ..., 8). DESACTIVAR_SALIDA_X (*) X indica el número de salida que se quiere desactivar (1, 2, ..., 8).

Desactiva la salida digital que se le indique en X, dejando el resto de salidas como estén.

M1 “P Desactiva el actuador que esté conectado a S0-S1 (para conseguirlo se desactivan ambas salidas).

SALIDA_DIGITAL :VALOR Pone en el puerto de control la palabra necesaria para activar/desactivar las

M2 “D, M2 “I, M2 “P M3 “D, M3 “I, M3 “P M4 “D, M4 “I, M2 “P

Lo mismo que las primitivas anteriores, aunque los actuadotes se conectan a los restantes pares de salidas digitales (S2-S3, S4-S5 y S6-S7).

salidas digitales. (*) Nota: en el nombre del procedimiento se debe sustituir la X por el número de salida correspondiente, por ejemplo, si se quiere hacer girar a la izquierda el motor 1 (conectado a las salidas digitales S0-S1) se usará la primitiva M1 “I, la cual llamará a los procedimientos:

ACTIVAR_SALIDA_1 DESACTIVAR_SALIDA_2

M? Devuelve una lista con el estado de los cuatro motores. Ej.: MUESTRA M?

[P D D I] M :L Permite activar/desactivar todos los motores

simultáneamente. El parámetro :L tiene que ser una lista. Ej.: M [P P I D]Æ Se desactivan los motores M1 y M2, M3 se hace girar a la izquierda y M4 se hace girar a la derecha.

CONECTADO? Devuelve una lista de 4 elementos (uno por cada motor) cuyos valores son 0 ó 1 según estén activos o no.

Instituto de Tecnologías Educativas

27 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

SALIDA :NUM Controla individualmente o en conjunto cada una de las ocho salidas digitales. Envía a las salidas

Procedimiento Descripción

digitales el número binario equivalente al decimal que pongamos en :NUM. Para activar, por ejemplo, las salidas 1 y 8 se escribirá el comando: SALIDA 129 Si alguna otra salida digital distinta a las salidas 1 y 8 estaba activada, se desactivará.

ACTIVAR_SALIDA_X X indica el número de salida que se quiere activar (1, 2, ..., 8). DESACTIVAR_SALIDA_X X indica el número de salida que se quiere desactivar (1, 2, ..., 8).

Activa la salida digital que se le indique en :numerosalida, dejando el resto de salidas como estén. Desactiva la salida digital que se le indique en X, dejando el resto de salidas como estén.

EnviaOcteto :dato Procedimiento para la compatibilidad con las

primitivas proporcionadas por ENCONOR (tiene la misma función que la primitiva SALIDA). Controla individualmente o en conjunto cada una de las ocho salidas digitales. Envía a las salidas digitales el número binario equivalente al decimal que pongamos en :dato.

APAGA :n Procedimiento para la compatibilidad con las primitivas proporcionadas por ENCONOR (tiene

SALIDA_DIGITAL :VALOR Pone en el puerto de control la palabra necesaria para activar/desactivar las salidas digitales.

Procedimiento Descripción

la misma función que el procedimiento DESACTIVAR_SALIDA_X). Desconecta la salida digital que se le indique en :n (1, 2, ... u 8), dejando el resto de salidas digitales como estén.

DESACTIVAR_SALIDA_X X indica el número de salida que se quiere desactivar (1, 2, ..., 8).

Desactiva la salida digital que se le indique en X, dejando el resto de salidas como estén.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

28 El ordenador como elemento de control

SALIDA? Devuelve una lista de ocho elementos con el

estado de las ocho salidas digitales (1 si la salida está activada o 0 si está desactivada).

CONECTA :NUM Activa la salida digital indicada en :NUM, siendo :NUM 1, 2, 3, 4, 5, 6, 7 u 8. El resto de salidas digitales se quedan como estén

DESCONECTA :NUM Desactiva la salida digital indicada en :NUM siendo :NUM 1, 2, 3, 4, 5, 6, 7 u 8. El resto de salidas digitales se quedan como estén.

CONECTAR Conecta las 8 salidas digitales (si no lo están ya). DESCONECTAR Desconecta las 8 salidas digitales (si es que están

conectadas). VS? Devuelve un número decimal que indica qué

salidas digitales están activadas. Por ejemplo, si devuelve 3 indica que las salidas digitales 1 y 3 están activadas.

segundos :tiempo Produce un retardo o espera de tantos segundos como le indiquemos en :tiempo. Se pueden utilizar fracciones de segundo (Ej.: 0.2).

SALIDA_DIGITAL :VALOR Pone en el puerto de control la palabra necesaria para activar/desactivar las salidas digitales (valor entre 0 y 255).

Destacar que en una variable llamada ESTADO_SALIDAS es donde se almacena el valor/estado de las ocho salidas digitales, mediante

un número decimal que indica el valor en binario de dichas salidas. Por ejemplo, si ESTADO_SALIDAS toma el valor 255 quiere decir que todas las salidas digitales están activadas.

Instituto de Tecnología Educativas

29 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

También hay una variable por cada salida llamada ESTADO_SALIDA_X, donde X indica el número de salida (1, 2, ..., 8). Estas variables tomarán valor 1 ó 0 dependiendo si la salida correspondiente está activada o no.

4.1.2 Conjunto de primitivas de control diseñadas para trabajar con las entradas digitales:

PRIMITIVA DESCRIPCIÓN entrada :n Procedimiento para la compatibilidad con las

primitivas proporcionadas por ENCONOR. Devuelve VERDADERO si la entrada digital indicada en :n está conectado o FALSO en caso contrario.

VE? Devuelve un número decimal que indica qué entradas digitales están activadas. Por ejemplo, si ejecutamos la primitiva y esta devuelve 129, las entradas digitales 1 y 8 tienen valor 1.

SD :entrada Devuelve el valor del sensor digital expresado en :entrada (1, 2, 3, ... , 8), 1 si la entrada está activa ó 0 en caso contrario.

SD? Devuelve el estado de los ocho sensores digitales en forma de lista (0s ó 1s).

EsperaOn :entrada Deja el programa parado a la espera de que se

PROCEDIMIENTOS AUXILIARES Procedimiento Descripción

LEER_ENTRADA_DIGITAL_BAJA Lee y escribe en el puerto los datos necesarios para obtener el valor en decimal de las entradas digitales bajas (1, 2, 3 y 4).

LEER_ENTRADA_DIGITAL_ALTA Lee y escribe en el puerto los datos necesarios para obtener el valor en decimal de las entradas digitales altas (5, 6, 7 y 8).

Procedimiento Descripción SDB? Devuelve una lista con el estado de

la parte baja de las entradas digitales.

SDA? Devuelve una lista con el estado de la parte alta de las entradas digitales.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

30 El ordenador como elemento de control

Procedimiento Descripción TENSION_DE_ENTRADA_ANALOGICA :CANAL

Convierte el valor decimal leído en la entrada analógica indicada en :CANAL en un valor de tensión.

active la entrada digital indicada en :entrada. EsperaOff :entrada Deja el programa parado a la espera de que se

desactive la entrada digital indicada en :entrada.

Hay que recordar que en esta controladora se utiliza lógica negativa para las entradas digitales, es decir, cuando las entradas están al aire o

se les mete un 1, en ellas se lee un 0, por el contrario, si se le mete un 0 en la entrada se leerá un 1. También debemos saber que la lectura de las entradas, tanto las analógicas como las digitales, se realizan en dos partes, primero leyendo

la parte alta y después la parte baja del dato de entrada.

4.1.3 Conjunto de primitivas de control diseñadas para trabajar con las entradas analógicas:

PRIMITIVA DESCRIPCIÓN PROCEDIMIENTOS AUXILIARES leeanalogica :dato Procedimiento para la compatibilidad con las

primitivas proporcionadas por ENCONOR. Lee y escribe en el puerto los datos necesarios para obtener el valor decimal (valor entre 0 y 255) que proporciona la entrada analógica indicada en :dato (que puede ser 1, 2, 3 ó 4. Si consigue leerlas, devuelve su valor. Para obtener el valor en voltios correspondiente al valor decimal devuelto por la primitiva se debe aplicar la siguiente fórmula: Voltaje Entrada (V)= (Nº decimal * 5) / 256

SAW Devuelve directamente el valor en voltios del sensor analógico conectado a la entrada analógica IN0.

Instituto de Tecnologías Educativas

31 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

SAX Devuelve directamente el valor en voltios del

sensor analógico conectado a la entrada analógica IN1.

SAY Devuelve directamente el valor en voltios del sensor analógico conectado a la entrada analógica IN2.

SAZ Devuelve directamente el valor en voltios del sensor analógico conectado a la entrada analógica IN3.

LEER_ENTRADA_ANALOGICA_num :SELECC

Se encarga de escribir y leer del puerto los datos necesarios para obtener el valor de la entrada analógica indicada en :SELECC.

SA? Devuelve una lista con el valor en voltios de

los cinco sensores analógicos.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

32 El ordenador como elemento de control

4.2 Procedimientos para crear el entorno gráfico:

A continuación se presentan las distintas primitivas disponibles para crear el entorno gráfico para manejar la controladora CNICE con los procedimientos auxiliares necesarios para las mismas:

PRIMITIVA DESCRIPCIÓN graficos Crea las ventanas necesarias para manejar las

entradas y salidas analógicas (primitiva graficosan) y digitales y la ventana para informar de que se debe controlar el estado de la comunicación entre el ordenador y la controladora (primitiva informa) si no se obtienen los resultados esperados.

PROCEDIMIENTOS AUXILIARES Procedimiento Descripción

pintasalidas Actualiza el valor de los indicadores de las salidas digitales del entorno gráfico.

pintaentradas Actualiza el valor de los indicadores de las entradas digitales del entorno gráfico.

ACTIVAR_SALIDA_X (*)

X indica el número de salida que se quiere activar (1, 2, ..., 8).

DESACTIVAR_SALIDA_X (*)

X indica el número de salida que se quiere desactivar (1, 2, ..., 8).

Activa la salida digital que se le indique en X, dejando el resto de salidas como estén. Desactiva la salida digital que se le indique en X, dejando el resto de salidas como estén.

graficosan Crea una ventana para controlar las entradas

SALIDA_DIGITAL :VALOR Pone en el puerto de control la palabra necesaria para activar/desactivar las salidas digitales.

Instituto de Tecnologías Educativas

33 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

analógicas. informa Crea una ventana para informar de que se debe

controlar el estado de la comunicación entre el ordenador y la controladora (primitiva informa) si no se obtienen los resultados esperados.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

34 El ordenador como elemento de control

5 IMPLEMENTACIÓN

5.1 Pantallas de elección de entorno

5.1.1 Archivo: Primitivas.LGO

para EleccionControladora ;******** VENTANA DE ELECCION DEL TIPO DE CONTROLADORA ******** BT ;borra pantalla de texto BP ;borra pantalla de gráficos ocultatortuga creaventana "principal "TIPOCONTROL [Elección de controladora] 120 150 287 100 [] creagroupbox "TIPOCONTROL "E_Ventana 5 0 274 85 creagroupbox "TIPOCONTROL "E_CNICE 20 2 120 50 creaboton "TIPOCONTROL "CNICE [ CNICE] 25 10 110 35 [BorrarVentana carga

"ENTORNO/PRIMITIVAS/CNICE/Elecc_EntornoCNICE.LGO] creaestatico "TIPOCONTROL "investronica [(compatible con Investrónica)] 32 31 100 10 creagroupbox "TIPOCONTROL "E_ENCONOR 145 2 120 50 creaboton "TIPOCONTROL "ENCONOR [ENCONOR PLUS] 150 10 110 35 [BorrarVentana carga

"ENTORNO/PRIMITIVAS/ENCONOR/Elecc_EntornoENCONOR.LGO] creaboton "TIPOCONTROL "Cancelar [CANCELAR] 105 60 75 20 [BT BP muestratortuga borraventana "TIPOCONTROL]

fin para Empezar ;************* VENTANA INICIAL ************ sisino sinobox [Elección del entorno de trabajo] [¿Desea trabajar con una controladora?.] [EleccionControladora] [BT BP]

tapa [EleccionControladora Empezar BorrarVentana]

fin para BorrarVentana borraventana "TIPOCONTROL

fin Haz "arranque [Empezar]

Instituto de Tecnologías Educativas

35 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

5.1.2 Archivo: Elecc_EntornoENCONOR.LGO para EleccionEntornoENCONOR ;******** VENTANA DE ELECCION DEL TIPO DE ENTORNO PARA LA CONTROLADORA ENCONOR ******** BT ;borra pantalla de texto BP ;borra pantalla de gráficos ocultatortuga creaventana "principal "TIPOCONTROL [Elección del entorno de trabajo de la controladora ENCONOR] 120 150 287 100 [] creagroupbox "TIPOCONTROL "E_Ventana 5 0 274 85 creagroupbox "TIPOCONTROL "E_GRAFICO 20 2 120 50 ;la variable :graficos controla si queremos establecer un entorno gráfico o manual para controlar la controladora creaboton "TIPOCONTROL "ENCONOR_GRAFICO [ENTORNO GRÁFICO] 25 10 110 35 [BorrarVentana HAZ "graficos "VERDADERO

carga "ENTORNO/PRIMITIVAS/ENCONOR/EntornoENCONOR.LGO EntornoENCONOR] creagroupbox "TIPOCONTROL "E_MANUAL 145 2 120 50 creaboton "TIPOCONTROL "ENCONOR_MAN [PROGRAMACIÓN MANUAL] 150 10 110 35 [BorrarVentana HAZ "graficos "FALSO carga

"ENTORNO/PRIMITIVAS/ENCONOR/EntornoENCONOR.LGO EntornoENCONOR] creaboton "TIPOCONTROL "Cancelar [CANCELAR] 105 60 75 20 [BT BP muestratortuga borraventana "TIPOCONTROL]

tapa [EleccionEntornoENCONOR BorrarVentana]

fin para BorrarVentana borraventana "TIPOCONTROL

fin Haz "arranque [EleccionEntornoENCONOR]

5.1.3 Archivo: Elecc_EntornoCNICE.LGO

para EleccionEntornoCNICE ;******** VENTANA DE ELECCION DEL TIPO DE ENTORNO PARA LA CONTROLADORA CNICE ******** BT ;borra pantalla de texto BP ;borra pantalla de gráficos ocultatortuga

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

36 El ordenador como elemento de control

creaventana "principal "TIPOCONTROL [Elección del entorno de trabajo de la controladora CNICE] 120 150 287 100 [] creagroupbox "TIPOCONTROL "E_Ventana 5 0 274 85 creagroupbox "TIPOCONTROL "E_GRAFICO 20 2 120 50 ;cargamos la librería io.dll necesaria para la controladora CNICE. Esta librería proporciona una serie ;de funciones para tener acceso a los puertos del PC. Esta librería debe estar en el directorio C:\WINNT\System ;la variable :graficos controla si queremos establecer un entorno gráfico o manual para controlar la controladora creaboton "TIPOCONTROL "ENCONOR_GRAFICO [ENTORNO GRÁFICO] 25 10 110 35 [BorrarVentana cargadll "io.dll HAZ

"graficos "VERDADERO carga "ENTORNO/PRIMITIVAS/CNICE/EntornoCNICE.LGO EntornoCNICE] creagroupbox "TIPOCONTROL "E_MANUAL 145 2 120 50 creaboton "TIPOCONTROL "ENCONOR_MAN [PROGRAMACIÓN MANUAL] 150 10 110 35 [BorrarVentana cargadll "io.dll HAZ

"graficos "FALSO carga "ENTORNO/PRIMITIVAS/CNICE/EntornoCNICE.LGO EntornoCNICE] creaboton "TIPOCONTROL "Cancelar [CANCELAR] 105 60 75 20 [BT BP muestratortuga borraventana "TIPOCONTROL]

tapa [EleccionEntornoCNICE BorrarVentana]

fin para BorrarVentana borraventana "TIPOCONTROL

fin Haz "arranque [EleccionEntornoCNICE]

Instituto de Tecnologías Educativas

37 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

Haz "S8 0 Haz "S7 0 Haz "S6 0 Haz "S5 0 Haz "S4 0 Haz "S3 0 Haz "S2 0 Haz "S1 0 Haz "ST 0

5.2 Anexo 1 5.2.1 Archivo: EntornoENCONOR.LGO

;MICROMUNDO DE CONTROL de la tarjeta controladora ; ENCONOR ;Estos procedimientos están preparados para trabajar ;con el programa MS WINLOGO en su versión española. para EntornoENCONOR ;************* RUTINA PRINCIPAL (CUERPO DEL PROGRAMA) ************ ; Se inicializan las variables Haz "error -1 ;Controla el estado de la comunicación con la placa (entorno gráfico) Haz "Primera 0 ; verifica que es la primera ejecución (Testeo) ;Ponemos las salidas digitales a 0 ;La variable :salidas almacena el estado de las 8 salidas digitales (activada/desactivada) mediante un número

decimal Haz "salidas 0 Haz "SalidaTemporal 0 ;Ponemos las Salidas analógicas a 0 Haz "salanalogica1 0 ; valor inicial del potenciómetro digital Haz "salanalogica2 0 ; valor inicial del potenciómetro digital Haz "salanalogica3 0 ; valor inicial del potenciometro digital Haz "salanalogica4 0 ; valor inicial del potenciometro digital ;Variables para las salidas digitales para el entorno gráfico

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

38 El ordenador como elemento de control

tapa [EntornoENCONOR] tapa [BuscaPuerto Buscapuerto1 Arranca Arrancar? Arrancar1 Arrancar2] ;Funciones auxiliares y primitivas para las salidas digitales tapa [SALIDA1 ACTIVA_SALIDA DESACTIVA_SALIDA ACTIVAR_SALIDAS DESACTIVAR_SALIDAS] tapa [[M1 M2 M3 M4 M? M CONECTADO? SALIDA SALIDA? CONECTA DESCONECTA CONECTAR DESCONECTAR VS?] [] []] ;Funciones auxiliares y primitivas para las entradas digitales tapa [recibir recibir1] tapa [SD SD? EsperaOn EsperaOff] ;Funciones auxiliares y primitivas para las entradas analógicas tapa [leeanalogica leeanalogico1] tapa [SAV SAW SAX SAY SAZ SA?] ;Funciones auxiliares y primitivas para las salidas analógicas tapa [potenciometro1 salidaanalogica] tapa [VOLTAJE VOLTAJE?] ;Primitivas para compatibilidad con las primitivas proporcionadas por ENCONOR tapa [apaga entrada enviaocteto segundos] ;Entorno gráfico tapa [graficos informa graficosan pintasalidas pintaentradas] BuscaPuerto BP Haz "Primera 1

fin ;************************* COMUNICACIÓN CON EL PUERTO SERIE ******************************* ;Procedimientos para establecer el canal de comunicación (puerto COM1 o COM2) para BuscaPuerto ; ****** Ventana de selección del puerto de comunicaciones ****** borraventana "BUSCAPUERTO creaventana "BUSCAPUERTO "ENCONOR [Controladora Educativa ENCONOR PLUS] 120 150 300 85 [] creagroupbox "ENCONOR "buscap 1 1 295 68 creaboton "ENCONOR "OP1 [Seleccion Automática del Puerto de comunicaciones] 25 10 250 10 [Haz "opcion 1 Arranca

Buscapuerto1] creaboton "ENCONOR "OP2 [Seleccion del puerto de comunicaciones COM 1] 25 23 250 10 [Haz "opcion 2 Arranca

Buscapuerto1]

Instituto de Tecnologías Educativas

39 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

creaboton "ENCONOR "OP3 [Seleccion del Puerto de comunicaciones COM 2] 25 36 250 10 [Haz "opcion 3 Arranca

Buscapuerto1] creaboton "ENCONOR "Cancelar [CANCELAR] 110 50 75 15 [borraventana "ENCONOR BT BP muestratortuga]

fin para BuscaPuerto1 ;Procedimiento que comunica al usuario con una ventana si se ha podido o no establecer la comunicación entre el ordenador ;y la controladora. Si ésta no ha sido posible, permite volver a intentarlo de nuevo. prueba (:canal)=-1 Sicierto [borraboton "OP1

borraboton "OP2 borraboton "OP3 borraboton "Cancelar creaestatico "ENCONOR "ES1 [NO CONSIGO LA COMUNICACION CON LA TARJETA ENCONOR PLUS] 45 15 250 15 creaboton "ENCONOR "OP1 [INTENTAR DE NUEVO] 50 35 85 20 [BORRABOTON "OP1 BORRABOTON "Cancelar

borraestatico "ES1 BUSCAPUERTO] creaboton "ENCONOR "Cancelar [CANCELAR] 160 35 85 20 [borraventana "ENCONORBT BP muestratortuga] ]

Sifalso [borraboton "OP1 borraboton "OP2 borraboton "OP3 borraboton "Cancelar creaestatico "ENCONOR "ES1 [COMUNICACIÓN ESTABLECIDA POR EL CANAL COM] 55 15 200 15 si (:canal)=1 [creaestatico "ENCONOR "ES2 [1] 225 15 30 15] si (:canal)=2 [creaestatico "ENCONOR "ES2 [2] 225 15 30 15] ;la variable :graficos controla si queremos establecer un entorno gráfico o manual para manejar la

controladora SISINO :graficos [creaboton "ENCONOR "OP2 [COMENZAR A TRABAJAR] 50 35 100 20 [borraventana "ENCONOR

GRAFICOS SALIDA 0] creaboton "ENCONOR "Cancelar [CANCELAR] 165 35 75 20 [borraventana "ENCONOR BT BP muestratortuga]

] [creaboton "ENCONOR "OP2 [COMENZAR A TRABAJAR] 50 35 100 20 [borraventana "ENCONOR

SALIDA 0] creaboton "ENCONOR "Cancelar [CANCELAR] 165 35 75 20 [borraventana "ENCONOR BT BP muestratortuga]

] ]

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

40 El ordenador como elemento de control

BT fin para Arranca ;Procedimiento que intenta comunicarse con la placa tres veces antes de decidir que no hay posibilidad de ;comunicación con la tarjeta controladora. repite 3 [

si :canal=-1 [ si :opcion=1 [(Haz "canal Arrancar?) ] si :opcion=2 [(Haz "canal Arrancar1) ] si :opcion=3 [(haz "canal Arrancar2) ]

] ]

fin para Arrancar? ;Procedimiento que detecta de forma automática si el puerto de comunicaciones es el COM1 o el COM2 Si ( Arrancar1 = 1 ) [Devuelve 1 Alto] Si ( Arrancar2 = 2 ) [Devuelve 2 Alto] Devuelve -1

fin para Arrancar1 ;Procedimiento para abrir y configurar el Puerto de comunicaciones COM1 Si O (:canal=1) (:canal=2)[cierrapuerto] abrepuerto "com1 modopuerto "com1:9600,n,8,1 limpiapuerto 1 ESPERA 1 limpiapuerto 0 ESPERA 1 Local "control Haz "control escribecaracterpuerto 255 ESPERA 1 Haz "contador 0 Haz "control leecaracterpuerto ESPERA 1

Instituto Superior de Formación y Recursos en Red para el Profesorado

41 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

Mientras [(:control=-1)] [ Haz "contador :contador + 1 Haz "control leecaracterpuerto ESPERA 1 Si ( :contador = 50 ) [Haz "canal -1 cierrapuerto Devuelve :canal Alto]

] Si (:control<0) [Haz "control :control+256] Si ( :control = 240 ) [Haz "canal 1 Devuelve :canal Alto] Haz "canal -1 cierrapuerto Devuelve :canal

fin para Arrancar2 ;Procedimiento para abrir y configurar el Puerto de comunicaciones COM2 Si O (:canal=1) (:canal=2)[cierrapuerto] abrepuerto "com2 modopuerto "com2:9600,n,8,1 limpiapuerto 1 ESPERA 1 limpiapuerto 0 ESPERA 1 Local "control Haz "control escribecaracterpuerto 255 ESPERA 1 Haz "contador 0 Haz "control leecaracterpuerto ESPERA 1 Mientras [(:control=-1)] [

Haz "contador :contador + 1 Haz "control leecaracterpuerto ESPERA 1 Si ( :contador = 50 ) [Haz "canal -1 cierrapuerto Devuelve :canal Alto]

] Si (:control<0) [Haz "control :control+256] Si ( :control = 240 ) [Haz "canal 2 Devuelve :canal Alto] Haz "canal -1 cierrapuerto Devuelve :canal

fin

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

42 El ordenador como elemento de control

;************************************************************************************

;************************************************************************************ ;********************************** PRIMITIVAS ************************************** ;************************************************************************************ para segundos :tiempo ;Procedimiento que produce un retardo o espera tantos segundos como le indiquemos en :tiempo. ;Se pueden utilizar fracciones de segundo (ej.: 0.2) ESPERA :tiempo * 100

fin ;************************ Primitivas para las SALIDAS DIGITALES *************************** ;********************************* Procedimientos auxiliares ******************************** para SALIDA1 :dato ;Procedimiento auxiliar de la primitiva SALIDA ;Se encarga de escribir en el puerto los datos necesarios para poder controlar las salidas digitales. ;Limpiamos el Buffer del Puerto limpiapuerto 0 limpiapuerto 1 ;Definimos variables Locales local "control local "control1 local "contador ;Enviamos el Comando SALIDA (170) haz "control escribecaracterpuerto 170 Haz "contador 0 Mientras [:control =0] [

Haz "contador :contador+1 Haz "control escribecaracterpuerto 170 Si (:contador)=500 [Devuelve "FALSO ALTO]

] Haz "contador 0 Haz "control leecaracterpuerto

Instituto de Tecnologías Educativas

43 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

Mientras [:control =-1] [ Haz "contador :contador+1 Haz "control leecaracterpuerto

Si (:contador)=500 [Devuelve "FALSO ALTO] ]

Si (:control<0)[Haz "control :control+256] Si O ( :control < 240 ) ( :control>240 ) [ Devuelve "FALSO ALTO] ;escribimos el dato de las salidas haz "control1 escribecaracterpuerto :dato Haz "contador 0 Mientras [:control1 =0] [

Haz "contador :contador+1 Haz "control1 escribecaracterpuerto :dato

Si (:contador)=500 [Devuelve "FALSO ALTO] ]

repite 100 [Haz "contador 0] Haz "control leecaracterpuerto Mientras [:control =-1] [

Haz "contador :contador+1 Haz "control leecaracterpuerto

Si (:contador)=500 [Devuelve "FALSO ALTO] ]

Si (:control<0)[Haz "control :control+256] Si (:control=240) [

Devuelve "FALSO fin

ALTO

Haz "salidas :dato Devuelve "CIERTO

]

para ACTIVA_SALIDA :numerosalida ;Procedimiento auxiliar de las primitivas M1, M2, M3 y M4 ;Procedimiento que conecta la salida digital que se le indique en :numerosalida, dejando el resto de salidas digitales ;como estén. Si (:numerosalida>8) [Alto] Si (:numerosalida<0) [Alto]

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

44 El ordenador como elemento de control

Local "Numero Haz "SalidaTemporal :salidas Haz "Numero :numerosalida-1 Haz "SalidaTemporal (Bito (:SalidaTemporal) (Entero(potencia 2 :Numero))) SALIDA :SalidaTemporal

fin para DESACTIVA_SALIDA :numerosalida ;Procedimiento auxiliar de las primitivas M1, M2, M3 y M4 ;Procedimiento que desconecta la salida digital que se le indique en :numerosalida, dejando el resto de salidas digitales ;como estén. Si (:numerosalida>8) [Alto] Si (:numerosalida<0) [Alto] Local "Numero Haz "SalidaTemporal :salidas Haz "Numero :numerosalida-1 Haz "SalidaTemporal (Bity (:SalidaTemporal) (255-Entero(potencia 2 :Numero))) SALIDA :SalidaTemporal

fin para ACTIVAR_SALIDAS ;Procedimiento para activar todas las salidas digitales SALIDA 255

fin para DESACTIVAR_SALIDAS ;Procedimiento para desactivar todas las salidas digitales SALIDA 0

fin ;************************* Primitivas ************************* para M1 :VALOR ;Procedimiento que hace girar en un determinado sentido un motor conectado a S1-S5. Si el actuador es una bombilla, relé ;o electroimán, simplemente lo activa.

Instituto de Tecnologías Educativas

45 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

;Para que el motor pueda girar tanto a derecha como hacia la izquierda, la S1 SIEMPRE debe estar encendida. ;ENTRADA: "I arrancar girando a la izquierda

; "D arrancar girando a la derecha ; "P parar el actuador

Si :VALOR = "I [ACTIVA_SALIDA 1 DESACTIVA_SALIDA 5] Si :VALOR = "D [ACTIVA_SALIDA 1 ACTIVA_SALIDA 5] Si :VALOR = "P [DESACTIVA_SALIDA 1 DESACTIVA_SALIDA 5]

;SALIDA: no tiene fin para M2 :VALOR ;Procedimiento que hace girar en un determinado sentido un motor conectado a S2-S6. Si el actuador es una bombilla, relé ;o electroimán, simplemente lo activa. ;Para que el motor pueda girar tanto a derecha como hacia la izquierda, la S2 SIEMPRE debe estar encendida. ;ENTRADA: "I arrancar girando a la izquierda

; "D arrancar girando a la derecha ; "P parar el actuador

Si :VALOR = "I [ACTIVA_SALIDA 2 DESACTIVA_SALIDA 6] Si :VALOR = "D [ACTIVA_SALIDA 2 ACTIVA_SALIDA 6] Si :VALOR = "P [DESACTIVA_SALIDA 2 DESACTIVA_SALIDA 6]

;SALIDA: no tiene fin para M3 :VALOR ;Procedimiento que hace girar en un determinado sentido un motor conectado a S3-S7. Si el actuador es una bombilla, relé ;o electroimán, simplemente lo activa. ;Para que el motor pueda girar tanto a derecha como hacia la izquierda, la S3 SIEMPRE debe estar encendida. ;ENTRADA: "I arrancar girando a la izquierda

; "D arrancar girando a la derecha ; "P parar el actuador

Si :VALOR = "I [ACTIVA_SALIDA 3 DESACTIVA_SALIDA 7] Si :VALOR = "D [ACTIVA_SALIDA 3 ACTIVA_SALIDA 7] Si :VALOR = "P [DESACTIVA_SALIDA 3 DESACTIVA_SALIDA 7]

;SALIDA: no tiene fin

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

46 El ordenador como elemento de control

para M4 :VALOR ;Procedimiento que hace girar en un determinado sentido un motor conectado a S4-S8. Si el actuador es una bombilla, relé ;o electroimán, simplemente lo activa. ;Para que el motor pueda girar tanto a derecha como hacia la izquierda, la S4 SIEMPRE debe estar encendida. ;ENTRADA: "I arrancar girando a la izquierda

; "D arrancar girando a la derecha ; "P parar el actuador

Si :VALOR = "I [ACTIVA_SALIDA 4 DESACTIVA_SALIDA 8] Si :VALOR = "D [ACTIVA_SALIDA 4 ACTIVA_SALIDA 8] Si :VALOR = "P [DESACTIVA_SALIDA 4 DESACTIVA_SALIDA 8]

;SALIDA: no tiene fin para M? ;Procedimiento que devuelve una lista con el estado de las cuatro actuadores (I, D o P) ;ENTRADA: no tiene HAZ "dato :salidas ;estado del motor 1 (M1) SISINO ((bity :dato 1) =1) [HAZ "dato1 1] [HAZ "dato1 0] SISINO ((bity :dato 16) =16) [HAZ "dato5 1] [HAZ "dato5 0] Si Y ( :dato1 = 0 ) ( :dato5 = 0 ) [HAZ "motor1 "P] Si Y ( :dato1 = 1 ) ( :dato5 = 0 ) [HAZ "motor1 "I] Si Y ( :dato1 = 1 ) ( :dato5 = 1 ) [HAZ "motor1 "D] ;estado del motor 2 (M2) SISINO ((bity :dato 2) = 2) [HAZ "dato2 1] [ HAZ "dato2 0] SISINO ((bity :dato 32) = 32) [HAZ "dato6 1] [HAZ "dato6 0] Si Y ( :dato2 = 0 ) ( :dato6 = 0 ) [HAZ "motor2 "P] Si Y ( :dato2 = 1 ) ( :dato6 = 0 ) [HAZ "motor2 "I] Si Y ( :dato2 = 1 ) ( :dato6 = 1 ) [HAZ "motor2 "D] ;estado del motor 3 (M3) SISINO ((bity :dato 4) = 4) [HAZ "dato3 1] [HAZ "dato3 0] SISINO ((bity :dato 64) = 64) [HAZ "dato7 1] [HAZ "dato7 0] Si Y ( :dato3 = 0 ) ( :dato7 = 0 ) [HAZ "motor3 "P] Si Y ( :dato3 = 1 ) ( :dato7 = 0 ) [HAZ "motor3 "I] Si Y ( :dato3 = 1 ) ( :dato7 = 1 ) [HAZ "motor3 "D]

Instituto de Tecnologías Educativas

47 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

;estado del motor 4 (M4) SISINO ((bity :dato 8) = 8) [HAZ "dato4 1] [ HAZ "dato4 0] SISINO ((bity :dato 128) =128) [HAZ "dato8 1] [HAZ "dato8 0] Si Y ( :dato4 = 0 ) ( :dato8 = 0 ) [HAZ "motor4 "P] Si Y ( :dato4 = 1 ) ( :dato8 = 0 ) [HAZ "motor4 "I] Si Y ( :dato4 = 1 ) ( :dato8 = 1 ) [HAZ "motor4 "D] Dev ( Lista :motor1 :motor2 :motor3 :motor4)

;SALIDA: lista con el estado de los actuadores (I, D, o P) fin para M :L ;Procedimiento que permite activar/desactivar todos los actuadores simultáneamente. ;Para ello pone el valor decimal que correponde con el valor binario formado a partir de los bits de las salidas ;(1--> salida activada; 0--> salida desactivada). ;ENTRADA: lista con cuatro elementos en la que se indica el estado que se quiere en cada uno de los cuatro motores: I, D o P SI ( Y ( Lista? :L ) ( 4 = Cuenta :L ) ) [M1 ELEMENTO 1 :L M2 ELEMENTO 2 :L M3 ELEMENTO 3 :L M4 ELEMENTO 4 :L]

;SALIDA: no tiene fin para CONECTADO? ;Procedimiento que devuelve una lista con el estado de los 4 actuadores (salidas digitales S1, S2, S3 y S4) ;La lista de 4 elementos (uno por cada motor) tendrá los valores 0 ó 1 según estén activos o no. ;ENTRADA: no tiene HAZ "dato :salidas SISINO ((bity :dato 8) = 8) [HAZ "dato4 1] [ HAZ "dato4 0] SISINO ((bity :dato 4) = 4) [HAZ "dato3 1] [HAZ "dato3 0] SISINO ((bity :dato 2) = 2) [HAZ "dato2 1] [ HAZ "dato2 0] SISINO ((bity :dato 1) =1) [HAZ "dato1 1] [HAZ "dato1 0] Dev ( Lista :dato1 :dato2 :dato3 :dato4)

;SALIDA: lista con el estado de los actuadores (1--> actuador activado; 0-->actuador desactivado) fin para SALIDA :NUM ;Procedimiento que controla individualmente o en conjunto cada una de las ocho salidas digitales. ;Este procedimiento envia a las salidas el número binario equivalente al decimal que pongamos en ; :NUM.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

48 El ordenador como elemento de control

Si (:NUM>255) [Alto] Si (:NUM<0) [Alto] Repite 5 [Si ((SALIDA1 :NUM)="CIERTO) [

;Si estamos en el entorno gráfico y (:error = 1), actualizamos el indicador ;del estado de la comunicación entre la controladora y el puerto serie Si (Y (:graficos) (:error=1)) ; se había producido error en la comunicación

[

hasta la placa.

]

ALTO

Haz "error -1 ; borrar indicador de error actualizaestatico "ERROR [Comunicación establecida]

] Haz "salidas :NUM ; El dato ha llegado correctamente

]

;Si estamos en el entorno gráfico, actualizamos el indicador del estado de la comunicación ;entre la controladora y el puerto serie SI :graficos [

Haz "error 1 ; activar indicador de error de comunicación si :primera=1 [actualizaestatico "ERROR [ERROR de Comunicación]]

] fin

para SALIDA? ;Procedimiento que devuelve una lista con el estado de las ocho salidas digitales (1--> salida activada; 0-->salida desactivada). HAZ "dato :salidas SISINO ((bity :dato 128) =128) [HAZ "dato8 1] [HAZ "dato8 0] SISINO ((bity :dato 64) = 64) [HAZ "dato7 1] [HAZ "dato7 0] SISINO ((bity :dato 32) = 32) [HAZ "dato6 1] [HAZ "dato6 0] SISINO ((bity :dato 16) =16) [HAZ "dato5 1] [HAZ "dato5 0] SISINO ((bity :dato 8) = 8) [HAZ "dato4 1] [ HAZ "dato4 0] SISINO ((bity :dato 4) = 4) [HAZ "dato3 1] [HAZ "dato3 0] SISINO ((bity :dato 2) = 2) [HAZ "dato2 1] [ HAZ "dato2 0] SISINO ((bity :dato 1) =1) [HAZ "dato1 1] [HAZ "dato1 0] Dev ( Lista :dato1 :dato2 :dato3 :dato4 :dato5 :dato6 :dato7 :dato8)

fin

Instituto de Tecnologías Educativas

49 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

para CONECTA :NUM ;Procedimiento que activa la salida digital que se le indique en :NUM dejando las demás como estén. ;ENTRADA: salida digital a activar: 1, 2, 3, 4, 5, 6, 7 u 8. SI (:NUM > 8) [Alto] SI (:NUM < 0) [Alto] Local "Numero HAZ "SalidaTemporal :salidas HAZ "Numero :NUM - 1 HAZ "SalidaTemporal (Bito (:SalidaTemporal) (Entero(potencia 2 :Numero))) TAPA [[] [SalidaTemporal] []] SALIDA :SalidaTemporal

;SALIDA: no tiene fin para DESCONECTA :NUM ;Procedimiento que desactiva la salida digital que se le indique en :NUM dejando las demás como estén. ;ENTRADA: salida digital a activar: 1, 2, 3, 4, 5, 6, 7 u 8. APAGA :NUM

;SALIDA: no tiene fin para CONECTAR ;Procedimiento que conecta TODAS las salidas digitales ;ENTRADA: no tiene SALIDA 255

;SALIDA: no tiene fin para DESCONECTAR ;Procedimiento que desconecta TODAS las salidas digitales ;ENTRADA: no tiene SALIDA 0

;SALIDA: no tiene fin para VS?

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

50 El ordenador como elemento de control

;Procedimiento que devuelve el estado de las ocho salidas digitales mediante un número ;decimal. DEVUELVE :salidas

fin ;************************** Primitivas para las ENTRADAS DIGITALES ************************* ;********************************* Procedimientos auxiliares ******************************* para Recibir ;Procedimiento auxiliar de las primitivas SD y SD? ;Intenta leer del puerto por 3 veces los datos que proporcionan las entradas digitales, utilizando para ello el procedimiento Recibir1. Si :canal = -1 [ESCRIBE [NO SE HA ESTABLECIDO COMUNICACIÓN CON LA CONTROLADORA]] Repite 3 [Si Recibir1 = "CIERTO [

;Si estamos en el entorno gráfico y (:error = 1), actualizamos el indicador del estado ;de la comunicación entre la controladora y el puerto serie Si (Y (:graficos) (:error=1)) [

Haz "error -1 ; borrar indicador de error actualizaestatico "ERROR [Comunicación establecida]

] Alto

] ]

;Si estamos en el entorno gráfico, actualizamos el indicador del estado de la comunicación ;entre la controladora y el puerto serie SI :graficos [

Haz "error 1 ;indicador de error puesto a 1 actualizaestatico "ERROR [ERROR de Comunicación]

] fin

para Recibir1 ;Procedimientoque se encarga de leer del puerto los datos necesarios para poder obtener el valor de las entradas digitales. ;Limpiamos el Buffer del Puerto limpiapuerto 0 limpiapuerto 1

Instituto de Tecnologías Educativas

51 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

;Definimos variables Locales local "control local "control1 local "contador ;Enviamos el Comando Recibir (204) Haz "control escribecaracterpuerto 204 ESPERA 1 Haz "contador 0 Mientras [:control =0] [

ESPERA 1

Haz "contador :contador+1 Haz "control escribecaracterpuerto 204

Si (:contador)=200 [Devuelve "FALSO ALTO] ]

;Esperamos un Valor Haz "contador 0 Haz "control1 leecaracterpuerto ESPERA 1 Mientras [:control1 =-1] [

ESPERA 1

Haz "contador :contador+1 Haz "control1 leecaracterpuerto

;Leemos el dato recibido

Si (:contador)=50 [Haz "control1 255] ]

Si (:control1<0)[Haz "control1 :control1+256] ;Enviamos el Dato recibido Haz "control escribecaracterpuerto :control1 ESPERA 1 Haz "contador 0 Mientras [:control =0] [

ESPERA 1

Haz "contador :contador+1 Haz "control escribecaracterpuerto :control1

Si (:contador)=200 [Devuelve "FALSO ALTO] ]

;Esperamos un OK

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

52 El ordenador como elemento de control

Haz "contador 0 Haz "control leecaracterpuerto ESPERA 1 Mientras [:control =-1] [

ESPERA 1

Haz "contador :contador+1 Haz "control leecaracterpuerto

Si (:contador)=200 [Devuelve "FALSO ALTO] ]

Si (:control<0) [Haz "control :control+256] Si ( :control = 240 ) [Haz "entradas :control1 Devuelve "CIERTO ALTO] Devuelve "FALSO

fin ;************************* Primitivas ************************* para SD :entrada ;Procedimiento que devuelve 1 si la entrada digital indicada en :entrada está conectada ;ó 0 en caso contrario Recibir Si :entrada = 1 [SISINO ((Bito :entradas 254) = 255) [Devuelve 1] [Devuelve 0]] Si :entrada = 2 [SISINO ((Bito :entradas 253) = 255) [Devuelve 1] [Devuelve 0]] Si :entrada = 3 [SISINO ((Bito :entradas 251) = 255) [Devuelve 1] [Devuelve 0]] Si :entrada = 4 [SISINO ((Bito :entradas 247) = 255) [Devuelve 1] [Devuelve 0]] Si :entrada = 5 [SISINO ((Bito :entradas 239) = 255) [Devuelve 1] [Devuelve 0]] Si :entrada = 6 [SISINO ((Bito :entradas 223) = 255) [Devuelve 1] [Devuelve 0]] Si :entrada = 7 [SISINO ((Bito :entradas 191) = 255) [Devuelve 1] [Devuelve 0]] Si :entrada = 8 [SISINO ((Bito :entradas 127) = 255) [Devuelve 1] [Devuelve 0]] ESCRIBE [NO ES UN VALOR ADECUADO DE ENTRADA] Alto

fin para SD? ;Procedimiento que devuelve una lista con el estado de las ocho entradas digitales (1--> salida activada; 0-->salida desactivada). Recibir Haz "dato :entradas

Instituto de Tecnologías Educativas

53 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

; se actualizan los indicadores de las entradas SISINO ((bity :dato 128) =128) [HAZ "dato8 1] [HAZ "dato8 0] SISINO ((bity :dato 64) = 64) [HAZ "dato7 1] [HAZ "dato7 0] SISINO ((bity :dato 32) = 32) [HAZ "dato6 1] [HAZ "dato6 0] SISINO ((bity :dato 16) =16) [HAZ "dato5 1] [HAZ "dato5 0] SISINO ((bity :dato 8) = 8) [HAZ "dato4 1] [ HAZ "dato4 0] SISINO ((bity :dato 4) = 4) [HAZ "dato3 1] [HAZ "dato3 0] SISINO ((bity :dato 2) = 2) [HAZ "dato2 1] [ HAZ "dato2 0] SISINO ((bity :dato 1) =1) [HAZ "dato1 1] [HAZ "dato1 0] Dev ( Lista :dato1 :dato2 :dato3 :dato4 :dato5 :dato6 :dato7 :dato8)

fin para EsperaOn :entrada ;Procedimiento que deja parado el programa esperando a que se active la entrada digital especificada ;en el parámetro :entrada, el cual puede ser un número entre 1 y 8. ;Si :entrada está activada o se activa, el programa sigue su curso. Local "dato Haz "dato (SD :entrada) Si (:dato = 0) [EsperaOn :entrada]

fin para EsperaOff :entrada ;Procedimiento que deja parado el programa esperando a que se desactive la entrada digital especificada ;en el parámetro :entrada, el cual puede ser un número entre 1 y 8. ;Si :entrada está desactivada o se desactiva, el programa sigue su curso. Si ((SD :entrada) = 1) [esperaoff :entrada]

fin ;************************** Primitivas para las ENTRADAS ANALÓGICAS ************************ ;********************************* Procedimientos auxiliares ************************************ para leeanalogico1 :dato ;Se encarga de leer del puerto los datos necesarios para obtener el valor de las entradas analógicas. limpiapuerto 0 limpiapuerto 1 ;Definimos variables locales

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

54 El ordenador como elemento de control

local "control local "control1 local "contador ;Enviamos el Comando leeanalogica (195) Haz "control escribecaracterpuerto 195 ESPERA 1 Haz "contador 0 Mientras [:control =0] [

Haz "contador :contador+1 Haz "control escribecaracterpuerto 195 ESPERA 1 Si (:contador)=200 [Devuelve "FALSO Alto]

] Haz "contador 0 Haz "control leecaracterpuerto Mientras [:control =-1] [

Haz "contador :contador+1 Haz "control leecaracterpuerto

Si (:contador)=200 [Devuelve "FALSO Alto]] Si (:control<0)[Haz "control :control+256] Si O ( :control < 240 ) ( :control > 240 ) [Devuelve "FALSO Alto] ;Enviamos el Canal analogico a leer Haz "control escribecaracterpuerto :dato ESPERA 1 Haz "contador 0 Mientras [:control =0] [

Haz "contador :contador+1 Haz "control escribecaracterpuerto :dato ESPERA 1 Si (:contador)=200 [Devuelve "FALSO Alto]

] ;Esperamos un Valor Haz "contador 0 Haz "control1 leecaracterpuerto Mientras [:control1 =-1] [

Haz "contador :contador+1

Instituto de Tecnologías Educativas

55 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

Haz "control1 leecaracterpuerto Si (:contador)=50 [Haz "control1 255]

] ;Leemos el dato recibido Si (:control1<0)[Haz "control1 :control1+256] Haz "analogico :control1 Devuelve "CIERTO

fin ;************************* Primitivas ************************* ;Las entradas analógicas que queden al aire deben conectarse a MASA. ;********************************************************** para leeanalogica :dato ;Primitiva y procedimiento auxiliar de las primitivas SAV, SAW, SAX, SAY y SAZ ;Devuelve el valor de 8 bits de la entrada analógica especificada en el número :n (valor entre 0 y 255) ;Intenta leer del puerto por 3 veces los datos que proporcionan las entradas analógicas, utilizando para ello el procedimiento leeanalogico1. Si :canal = -1 [Alto] Si :dato > 5 [Alto] Si :dato < 1 [Alto] Repite 3 [Si ((leeanalogico1 :dato) = "CIERTO ) [

;Si estamos en el entorno gráfico y (:error = 1), actualizamos el indicador del estado ;de la comunicación entre la controladora y el puerto serie Si (Y (:graficos) (:error=1)) ; se había producido error en la comunicación

[ Haz "error -1 ; borrar indicador de error actualizaestatico "ERROR [Comunicación establecida]

] devuelve :analogico ; El dato ha llegado correctamente.

] ]

;Si estamos en el entorno gráfico, actualizamos el indicador del estado de la comunicación ;entre la controladora y el puerto serie SI :graficos [

Haz "error 1 ; activar indicador de error de comunicación si :primera=1 [actualizaestatico "ERROR [ERROR de Comunicación]]

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

56 El ordenador como elemento de control

fin

devuelve "Error ]

para SAV ;Procedimiento que lee la entrada analógica 1 y presenta su valor en voltios Haz "resultado leeanalogica 1 Devuelve ((:resultado *5) / 256)

fin para SAW ;Procedimiento que lee la entrada analógica 2 y presenta su valor en voltios Haz "resultado leeanalogica 2 Devuelve ((:resultado *5) / 256)

fin para SAX ;Procedimiento que lee la entrada analógica 3 y presenta su valor en voltios Haz "resultado leeanalogica 3 Devuelve ((:resultado *5) / 256)

fin para SAY ;Procedimiento que lee la entrada analógica 4 y presenta su valor en voltios Haz "resultado leeanalogica 4 Devuelve ((:resultado *5) / 256)

fin para SAZ ;Procedimiento que lee la entrada analógica 5 y presenta su valor en voltios Haz "resultado leeanalogica 5 Devuelve ((:resultado *5) / 256)

fin para SA? ;Procedimiento que devuelve una lista con el valor (voltios) de los 5 sensores analógicos ;Lee todas las entradas analógicas y presenta su valor en Voltios Dev ( Lista SAV SAW SAX SAY SAZ )

Instituto de Tecnologías Educativas

57 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

fin ;************************** Primitivas para las SALIDAS ANALÓGICAS ************************ ;********************************* Procedimientos auxiliares ********************************* para potenciometro1 :num :valor ;Se encarga de escribir en el puerto los datos necesarios para poner en la ;salida analógica indicada en :num el valor en voltios indicado en :valor. limpiapuerto 0 limpiapuerto 1 ;Definimos variables Locales local "control local "control1 local "contador ;Enviamos el Comando potenciometro (60) Haz "control escribecaracterpuerto 60

;ESPERA 1 Haz "contador 0 Mientras [:control =0] [

Haz "contador :contador+1 Haz "control escribecaracterpuerto 60

;ESPERA 1 Si (:contador)=200 [Devuelve "FALSO Alto]

] Haz "contador 0 Haz "control leecaracterpuerto Mientras [:control =-1] [

Haz "contador :contador+1 Haz "control leecaracterpuerto Si (:contador)=200 [Devuelve "FALSO Alto]

] Si (:control<0)[Haz "control :control+256] Si O ( :control < 240 ) ( :control > 240 ) [Devuelve "FALSO Alto] ;Enviamos el potenciometro a escribir Haz "control escribecaracterpuerto :num

;ESPERA 1

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

58 El ordenador como elemento de control

Haz "contador 0 Mientras [:control =0] [

Haz "contador :contador+1 Haz "control escribecaracterpuerto :num

;ESPERA 1 Si (:contador)=200 [Devuelve "FALSO Alto]

] Haz "contador 0 Haz "control leecaracterpuerto Mientras [:control =-1] [

Haz "contador :contador+1 Haz "control leecaracterpuerto Si (:contador)=200 [Devuelve "FALSO Alto]

] Si (:control<0)[Haz "control :control+256] Si O ( :control < 240 ) ( :control > 240 ) [Devuelve "FALSO Alto] ;Enviamos el valor a escribir Haz "control escribecaracterpuerto :valor

;ESPERA 1 Haz "contador 0 Mientras [:control =0] [

Haz "contador :contador+1 Haz "control escribecaracterpuerto :valor

;ESPERA 1 Si (:contador)=200 [Devuelve "FALSO Alto]

] Haz "contador 0 Haz "control leecaracterpuerto Mientras [:control =-1] [

Haz "contador :contador+1 Haz "control leecaracterpuerto Si (:contador)=200 [Devuelve "FALSO Alto]

] Si (:control<0)[Haz "control :control+256] Si O ( :control < 240 ) ( :control > 240 ) [Devuelve "FALSO Alto] Devuelve "CIERTO

fin

Instituto de Tecnologías Educativas

59 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

para salidaanalogica :num :valor ;Procedimiento auxiliar de la primitiva VOLTAJE ;Intenta escribir en el puerto por 3 veces los datos necesarios para poner ; en la salida analógica que se le indica en :num (que puede ser 1, 2, 3 ó 4) ;el valor en tensión indicado en :valor (que puede variar entre 0 y 255), ;utilizando para ello el procedimiento potenciometro1. Si :canal = -1 [Alto] Si :num < 1 [Alto] Si :num > 4 [Alto] Si :valor < 0 [Alto] Si :valor > 255 [Alto] Repite 3 [Si (potenciometro1 :num :valor) = "CIERTO [

;Si estamos en el entorno gráfico y (:error = 1), actualizamos el indicador ;del estado de la comunicación entre la controladora y el puerto serie Si (Y (:graficos) (:error=1)) ;se había producido error en la comunicación

[ de error

Haz "error -1 ; borrar indicador actualizaestatico "ERROR [Comunicación establecida]

]

ESPERA 1 ]

Si (:num = 1) [Haz "salanalogica1 :valor] Si (:num = 2) [Haz "salanalogica2 :valor] Si (:num = 3) [Haz "salanalogica3 :valor] Si (:num = 4) [Haz "salanalogica4 :valor] Alto

]

;Si estamos en el entorno gráfico, actualizamos el indicador del estado de la comunicación ;entre la controladora y el puerto serie SI :graficos [

Haz "error 1 ; activar indicador de error de comunicación si :primera=1 [actualizaestatico "ERROR [ERROR de Comunicación]]

] fin

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

60 El ordenador como elemento de control

;************************* Primitivas ************************* para VOLTAJE :num :valor ;Fija en la salida analógica especificada en :num el valor en voltios especificado en :valor. ;El parámetro :num puede tomar un valor entero entre 1 y 4. ;El parámetro :valor puede tomar un cualquier valor entre 0 y 10.5. ;Si se quiere leer el valor de existente en cada una de las salidas analógicas se utilizarán las variables ; :salanalogica1 :salanalogica2 :salanalogica3 :salanalogica4 Si :canal = -1 [Alto] Si :num < 1 [Alto] Si :num > 4 [Alto] Si :valor < 0 [Alto] Si :valor > 10.5 [Alto] salidaanalogica :num entero (:valor * 23.8)

fin para VOLTAJE? ;Procedimiento que devuelve una lista con el valor (voltios) de las 4 salidas analógicas ;Lee todas las salidas analógicas y presenta su valor en Voltios Dev (Lista :salanalogica1/23.8 :salanalogica2/23.8 :salanalogica3/23.8 :salanalogica4/23.8)

fin ;********************************************************************* ;**************PROCEDIMIENTOS PARA LA COMPATIBILIDAD ************ ; ******* CON LAS PRIMITIVAS PROPORCIONADAS POR ENCONOR ******** ;********************************************************************** para Apaga :n ;***** Procedimiento para la compatibilidad con las primitivas proporcionadas por ENCONOR ***** ;Procedimiento que desconecta la salida digital que se le indique en :n, dejando el resto de salidas digitales ;como estén. ;Tiene la misma función que el procedimiento auxiliar DESACTIVA_SALIDA DESACTIVA_SALIDA :n

fin para EnviaOcteto :dato ;***** Procedimiento para la compatibilidad con las primitivas proporcionadas por ENCONOR *****

Instituto de Tecnologías Educativas

61 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

creaestatico "enconor "SAL8 [8] 10 12 10 10 creaestatico "enconor "SAL7 [7] 19 12 10 10 creaestatico "enconor "SAL6 [6] 28 12 10 10 creaestatico "enconor "SAL5 [5] 37 12 10 10 creaestatico "enconor "SAL4 [4] 46 12 10 10

;Procedimiento que envia a las salidas digitales el número binario equivalente al decimal que pongamos ;Tiene la misma función que la primitiva SALIDA ;en :dato Si (:dato>255) [Alto] Si (:dato<0) [Alto] SALIDA :dato

fin para entrada :n ;***** Procedimiento para la compatibilidad con las primitivas proporcionadas por ENCONOR ***** ;Procedimiento que devuelve "VERDADERO" si la entrada indicada en :n está conectada ;o "FALSO" en caso contrario Haz "enc SD :n SISINO :enc = 1 [Devuelve "VERDADERO] [Devuelve "FALSO]

fin ;****************************************************************** ;******************* ENTORNO GRÁFICO *************************** ;Procedimientos para manejar la controladora ENCONOR utilizando un entorno gráfico ;****************************************************************** para graficos ;Procedimiento que crea las ventanas para manejar utilizando un entorno gráfico las entradas ;y salidas analógicas y digitales de la controladora y la ventana que informa de la comunicación ;con el puerto serie borraventana "enconor ;se crea la ventana para las entradas y salidas digitales creaventana "trabajo "enconor [Entradas y salidas digitales] 230 75 90 120 [] ;Salidas digitales creagroupbox "enconor "salidas 5 2 78 43 creaestatico "enconor "ES1 [SALIDAS] 28 4 28 10

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

62 El ordenador como elemento de control

creaestatico "enconor "EN8 [] 10 80 10 10 creaestatico "enconor "EN7 [] 19 80 10 10 creaestatico "enconor "EN6 [] 28 80 10 10 creaestatico "enconor "EN5 [] 37 80 10 10 creaestatico "enconor "EN4 [] 46 80 10 10 creaestatico "enconor "EN3 [] 55 80 10 10 creaestatico "enconor "EN2 [] 64 80 10 10 creaestatico "enconor "EN1 [] 73 80 8 10

creaestatico "enconor "SAL3 [3] 55 12 10 10 creaestatico "enconor "SAL2 [2] 64 12 10 10 creaestatico "enconor "SAL1 [1] 73 12 8 10 ;Botones para controlar las salidas digitales de forma individual creaboton "enconor "S8 "0 8 20 8 10 [sisino :S8=0 [ACTIVA_SALIDA 8][DESACTIVA_SALIDA 8] pintasalidas] creaboton "enconor "S7 "0 17 20 8 10 [sisino :S7=0 [ACTIVA_SALIDA 7][DESACTIVA_SALIDA 7] pintasalidas] creaboton "enconor "S6 "0 26 20 8 10 [sisino :S6=0 [ACTIVA_SALIDA 6][DESACTIVA_SALIDA 6] pintasalidas] creaboton "enconor "S5 "0 35 20 8 10 [sisino :S5=0 [ACTIVA_SALIDA 5][DESACTIVA_SALIDA 5] pintasalidas] creaboton "enconor "S4 "0 44 20 8 10 [sisino :S4=0 [ACTIVA_SALIDA 4][DESACTIVA_SALIDA 4] pintasalidas] creaboton "enconor "S3 "0 53 20 8 10 [sisino :S3=0 [ACTIVA_SALIDA 3][DESACTIVA_SALIDA 3] pintasalidas] creaboton "enconor "S2 "0 62 20 8 10 [sisino :S2=0 [ACTIVA_SALIDA 2][DESACTIVA_SALIDA 2] pintasalidas] creaboton "enconor "S1 "0 71 20 8 10 [sisino :S1=0 [ACTIVA_SALIDA 1][DESACTIVA_SALIDA 1] pintasalidas] ;Botón para controlar de forma conjunta todas las salidas digitales creaboton "enconor "SAT [Todas] 8 31 71 11 [sisino :ST=0 [enviaocteto 255 haz "ST 1][enviaocteto 0 haz "ST 0]

pintasalidas] ;Botón para cerrar la ventana de las entradas y salidas digitales creaboton "enconor "CERR [Cerrar ventana] 8 49 71 11 [borraventana "enconor] ;Entradas digitales creagroupbox "enconor "entradas 5 61 78 43 creaestatico "enconor "ES2 [ENTRADAS] 24 63 37 10 creaestatico "enconor "ENT8 [8] 10 73 10 10 creaestatico "enconor "ENT7 [7] 19 73 10 10 creaestatico "enconor "ENT6 [6] 28 73 10 10 creaestatico "enconor "ENT5 [5] 37 73 10 10 creaestatico "enconor "ENT4 [4] 46 73 10 10 creaestatico "enconor "ENT3 [3] 55 73 10 10 creaestatico "enconor "ENT2 [2] 64 73 10 10 creaestatico "enconor "ENT1 [1] 73 73 8 10 ;Valor de cada una de las entradas digitales

Instituto de Tecnologías Educativas

63 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

;Botón para leer de forma simultánea todas las entradas digitales creaboton "enconor "ENT [Leer Entradas] 8 90 71 11 [pintaentradas] ;Se crea la ventana de informacion sobre la comunicación con el puerto serie informa ;Se crea la ventana para controlar las salidas y entradas analógicas graficosan

fin para informa ;Procedimiento que crea una ventana para informar de si se ha establecido ;la comunicación por el puerto (en este caso indica por que puerto) o no. creaventana "trabajo "informa [Comunicación Serie] 230 197 90 50 [] creaestatico "informa "IN1 [PUERTO: ] 15 2 35 10 creaestatico "informa "ERROR [Comunicación establecida] 1 12 90 10 si :canal=1 [creaestatico "informa "COMx [COM 1] 48 2 30 10] si :canal=2 [creaestatico "informa "COMx [COM 2] 48 2 30 10] ;Botón para cerrar esta ventana creaboton "informa "cerrarv [Cerrar ventana] 8 23 71 11 [borraventana "informa]

fin para graficosan ;Procedimiento que crea una ventana para controlar las entradas y salidas analógicas ;se crea la ventana para las entradas y salidas analógicas creaventana "trabajoan "anenconor [Entradas y salidas analógicas] 130 75 90 172 [] creagroupbox "anenconor "anentradas 5 2 78 37 creaestatico "anenconor "ANENTR [ENTRADAS] 25 4 36 12 creaestatico "anenconor "VAN [] 37 27 25 8 ;Entradas analógicas creaboton "anenconor "EA5 "5 11 15 12 10 [actualizaestatico "VAN (leeanalogica 5)] creaboton "anenconor "EA4 "4 24 15 12 10 [actualizaestatico "VAN (leeanalogica 4)] creaboton "anenconor "EA3 "3 37 15 12 10 [actualizaestatico "VAN (leeanalogica 3)] creaboton "anenconor "EA2 "2 50 15 12 10 [actualizaestatico "VAN (leeanalogica 2)] creaboton "anenconor "EA1 "1 63 15 12 10 [actualizaestatico "VAN (leeanalogica 1)] ;Potenciómetros digitales (salidas digitales) creagroupbox "anenconor "ansalidas 5 40 78 97 creaestatico "anenconor "ANSALI [SALIDAS] 29 42 28 12 creaestatico "anenconor "POTEN1 [- Salida Analog. 1 +] 11 50 65 10

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

64 El ordenador como elemento de control

creabarradesplazamiento "anenconor "pot1 9 60 70 10 [salidaanalogica 1 leebarradesplazamiento "pot1] ponbarradesplazamiento "pot1 0 255 0 creaestatico "anenconor "POTEN2 [- Salida Analog. 2 +] 11 70 65 10 creabarradesplazamiento "anenconor "pot2 9 80 70 10 [salidaanalogica 2 leebarradesplazamiento "pot2] ponbarradesplazamiento "pot2 0 255 0 creaestatico "anenconor "POTEN3 [- Salida Analog. 3 +] 11 90 65 10 creabarradesplazamiento "anenconor "pot3 9 100 70 10 [salidaanalogica 3 leebarradesplazamiento "pot3] ponbarradesplazamiento "pot3 0 255 0 creaestatico "anenconor "POTEN4 [- Salida Analog. 4 +] 11 110 65 10 creabarradesplazamiento "anenconor "pot4 9 120 70 10 [salidaanalogica 4 leebarradesplazamiento "pot4] ponbarradesplazamiento "pot4 0 255 0 ;Botón para cerrar la ventana de las entradas y salidas digitales creaboton "anenconor "cerrar [Cerrar ventana] 8 144 71 11 [borraventana "anenconor]

fin para pintasalidas ;Procedimiento que actualiza el valor de los indicadores de las salidas digitales del ;entorno gráfico ;se actualizan los indicadores de las salidas digitales haz "dato :salidas sisino ((bity :dato 128) =128) [actualizaboton "S8 [1] haz "S8 1][actualizaboton "S8 [Ø] haz "S8 0] sisino ((bity :dato 64) =64) [actualizaboton "S7 [1] haz "S7 1][actualizaboton "S7 [Ø] haz "S7 0] sisino ((bity :dato 32) =32) [actualizaboton "S6 [1] haz "S6 1][actualizaboton "S6 [Ø] haz "S6 0] sisino ((bity :dato 16) =16) [actualizaboton "S5 [1] haz "S5 1][actualizaboton "S5 [Ø] haz "S5 0] sisino ((bity :dato 8) =8) [actualizaboton "S4 [1] haz "S4 1][actualizaboton "S4 [Ø] haz "S4 0] sisino ((bity :dato 4) =4) [actualizaboton "S3 [1] haz "S3 1][actualizaboton "S3 [Ø] haz "S3 0] sisino ((bity :dato 2) =2) [actualizaboton "S2 [1] haz "S2 1][actualizaboton "S2 [Ø] haz "S2 0] sisino ((bity :dato 1) =1) [actualizaboton "S1 [1] haz "S1 1][actualizaboton "S1 [Ø] haz "S1 0]

fin para pintaentradas ;Procedimiento que actualiza el valor de los indicadores de las entradas digitales del ;entorno gráfico recibir haz "dato :entradas ;se actualizan los indicadores de las entradas digitales sisino ((bity :dato 128) =128) [actualizaestatico "EN8 [1]][actualizaestatico "EN8 [Ø]]

Instituto de Tecnologías Educativas

65 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

sisino ((bity :dato 64) =64) [actualizaestatico "EN7 [1]][actualizaestatico "EN7 [Ø]] sisino ((bity :dato 32) =32) [actualizaestatico "EN6 [1]][actualizaestatico "EN6 [Ø]] sisino ((bity :dato 16) =16) [actualizaestatico "EN5 [1]][actualizaestatico "EN5 [Ø]] sisino ((bity :dato 8) =8) [actualizaestatico "EN4 [1]][actualizaestatico "EN4 [Ø]] sisino ((bity :dato 4) =4) [actualizaestatico "EN3 [1]][actualizaestatico "EN3 [Ø]] sisino ((bity :dato 2) =2) [actualizaestatico "EN2 [1]][actualizaestatico "EN2 [Ø]] sisino ((bity :dato 1) =1) [actualizaestatico "EN1 [1]][actualizaestatico "EN1 [Ø]]

fin ;****************************************************** ;****************************************************** ; La variable :canal almacena el puerto por el que se establece la comunicación ; entre el ordenador y la controladora (COM1 o COM2). ; Inicialmente no hay establecido ningún canal de comunicaciones HAZ "canal -1

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

66 El ordenador como elemento de control

5.3 Anexo 2

5.3.1 Archivo: EntornoCNICE.LGO

;MICROMUNDO DE CONTROL de la tarjeta controladora ; CNICE ;Estos procedimientos están preparados para trabajar ;con el programa MS WINLOGO en su versión española. para EntornoCNICE ;************* RUTINA PRINCIPAL (CUERPO DEL PROGRAMA) ************ ; Se inicializan las variables Haz "error -1 ;controla el estado de la comunicación con la placa (entorno gráfico) Haz "Primera 1 ;verifica que es la primera ejecución (Testeo) ;Variables para las salidas digitales del entorno gráfico Haz "S8 0 Haz "S7 0 Haz "S6 0 Haz "S5 0 Haz "S4 0 Haz "S3 0 Haz "S2 0 Haz "S1 0 Haz "ST 0 ;Apagamos las salidas digitales si es que están encendidas DESACTIVAR_SALIDAS tapa [EntornoCNICE] ;Funciones auxiliares y primitivas para las salidas digitales tapa [SALIDA_DIGITAL DESACTIVAR_SALIDAS DESACTIVAR_SALIDA_1 DESACTIVAR_SALIDA_2 DESACTIVAR_SALIDA_3] tapa [DESACTIVAR_SALIDA_4 DESACTIVAR_SALIDA_5 DESACTIVAR_SALIDA_6 DESACTIVAR_SALIDA_7 DESACTIVAR_SALIDA_8] tapa [ACTIVAR_SALIDAS ACTIVAR_SALIDA_1 ACTIVAR_SALIDA_2 ACTIVAR_SALIDA_3 ACTIVAR_SALIDA_4] tapa [ACTIVAR_SALIDA_5 ACTIVAR_SALIDA_6 ACTIVAR_SALIDA_7 ACTIVAR_SALIDA_8] tapa [[M1 M2 M3 M4 M? M CONECTADO? SALIDA SALIDA? CONECTA DESCONECTA CONECTAR DESCONECTAR VS?] [] [] ;Funciones auxiliares y primitivas para las entradas digitales

Instituto de Tecnologías Educativas

67 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

HAZ "ESTADO_SALIDA_1 0 HAZ "ESTADO_SALIDA_2 0 HAZ "ESTADO_SALIDA_3 0 HAZ "ESTADO_SALIDA_4 0

tapa [LEER_ENTRADA_DIGITAL_BAJA LEER_ENTRADA_DIGITAL_ALTA SDB? SDA?] tapa [SD SD? EsperaOn EsperaOff] ;Funciones auxiliares y primitivas para las entradas analógicas tapa [TENSION_DE_ENTRADA_ANALOGICA LEER_ENTRADA_ANALOGICA_num] tapa [SAW SAX SAY SAZ SA?] ;Primitivas para compatibilidad con las primitivas proporcionadas por ENCONOR tapa [apaga entrada enviaocteto segundos] ;Entorno gráfico tapa [graficos graficosan informa pintasalidas pintaentradas] ;si se viene de elegir la opción del entorno gráfico se llama a la función graficos SI :graficos [graficos]

fin ;********************************************************************** para SALIDA_DIGITAL :VALOR ;Procedimiento auxiliar de las primitivas ;Procedimiento para poner en el puerto de control la palabra para seleccionar las salidas digitales ;ENTRADA: el valor en decimal del estado que queremos dar a las salidas digitales LLAMADLL [v PortOut w 7 w 890] HAZ "x (LISTA "v "PortOut "w :VALOR "w 888) LLAMADLL :x

;SALIDA: no tiene fin ; ******************* Desactivación de las SALIDAS DIGITALES *********************** para DESACTIVAR_SALIDAS ;Procedimiento auxiliar de las primitivas ;Procedimiento para desactivar todas las salidas digitales ;ENTRADA: no tiene SALIDA_DIGITAL 0 ;Se desactivan todas las salidas digitales ;Existe una variable por cada salida llamada ESTADO_SALIDA_X, donde X indica el número ;de salida (1, 2, ..., 8). Estas variables tomarán valor 1 ó 0 dependiendo si la salida está activada o no.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

68 El ordenador como elemento de control

HAZ "ESTADO_SALIDA_5 0 HAZ "ESTADO_SALIDA_6 0 HAZ "ESTADO_SALIDA_7 0 HAZ "ESTADO_SALIDA_8 0 ;en la variable ESTADO_SALIDAS se almacena el valor/estado de las ocho salidas ;digitales, mediante un número decimal que indica el valor en binario de dichas salidas. HAZ "ESTADO_SALIDAS 0

;SALIDA: no tiene fin para DESACTIVAR_SALIDA_1 ;Procedimiento auxiliar de las primitivas ;Procedimiento para desactivar la salida digital 1 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( Bity :ESTADO_SALIDAS 254 ) HAZ "ESTADO_SALIDA_1 0 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin para DESACTIVAR_SALIDA_2 ;Procedimiento auxiliar de las primitivas ;Procedimiento para desactivar la salida digital 2 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( Bity :ESTADO_SALIDAS 253 ) HAZ "ESTADO_SALIDA_2 0 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin para DESACTIVAR_SALIDA_3 ;Procedimiento auxiliar de las primitivas ;Procedimiento para desactivar la salida digital 3 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( Bity :ESTADO_SALIDAS 251 ) HAZ "ESTADO_SALIDA_3 0 SALIDA_DIGITAL :ESTADO_SALIDAS

Instituto de Tecnologías Educativas

69 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

;SALIDA: no tiene fin para DESACTIVAR_SALIDA_4 ;Procedimiento auxiliar de las primitivas ;Procedimiento para desactivar la salida digital 4 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( Bity :ESTADO_SALIDAS 247 ) HAZ "ESTADO_SALIDA_4 0 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin para DESACTIVAR_SALIDA_5 ;Procedimiento auxiliar de las primitivas ;Procedimiento para desactivar la salida digital 5 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( bity :ESTADO_SALIDAS 239 ) HAZ "ESTADO_SALIDA_5 0 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin para DESACTIVAR_SALIDA_6 ;Procedimiento auxiliar de las primitivas ;Procedimiento para desactivar la salida digital 6 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( bity :ESTADO_SALIDAS 223 ) HAZ "ESTADO_SALIDA_6 0 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin para DESACTIVAR_SALIDA_7 ;Procedimiento auxiliar de las primitivas ;Procedimiento para desactivar la salida digital 7 ;ENTRADA: no tiene

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

70 El ordenador como elemento de control

HAZ "ESTADO_SALIDAS ( bity :ESTADO_SALIDAS 191 ) HAZ "ESTADO_SALIDA_7 0 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin para DESACTIVAR_SALIDA_8 ;Procedimiento auxiliar de las primitivas ;Procedimiento para desactivar la salida digital 8 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( bity :ESTADO_SALIDAS 127 ) HAZ "ESTADO_SALIDA_8 0 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin ;******************************************************************** ; ******************* Activación de las SALIDAS DIGITALES *********************** para ACTIVAR_SALIDAS ;Procedimiento auxiliar de las primitivas ;Procedimiento para activar todas las salidas digitales ;ENTRADA: no tiene ACTIVAR_SALIDA_1 ACTIVAR_SALIDA_2 ACTIVAR_SALIDA_3 ACTIVAR_SALIDA_4 ACTIVAR_SALIDA_5 ACTIVAR_SALIDA_6 ACTIVAR_SALIDA_7 ACTIVAR_SALIDA_8

;SALIDA: no tiene fin para ACTIVAR_SALIDA_1 ;Procedimiento auxiliar de las primitivas ;Procedimiento para activar la salida digital 1

Instituto de Tecnologías Educativas

71 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( bito :ESTADO_SALIDAS 1 ) HAZ "ESTADO_SALIDA_1 1 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin para ACTIVAR_SALIDA_2 ;Procedimiento auxiliar de las primitivas ;Procedimiento para activar la salida digital 2 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( bito :ESTADO_SALIDAS 2 ) HAZ "ESTADO_SALIDA_2 1 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin para ACTIVAR_SALIDA_3 ;Procedimiento auxiliar de las primitivas ;Procedimiento para activar la salida digital 3 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( bito :ESTADO_SALIDAS 4 ) HAZ "ESTADO_SALIDA_3 1 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin para ACTIVAR_SALIDA_4 ;Procedimiento auxiliar de las primitivas ;Procedimiento para activar la salida digital 4 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( bito :ESTADO_SALIDAS 8 ) HAZ "ESTADO_SALIDA_4 1 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

72 El ordenador como elemento de control

para ACTIVAR_SALIDA_5 ;Procedimiento auxiliar de las primitivas ;Procedimiento para activar la salida digital 5 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( bito :ESTADO_SALIDAS 16 ) HAZ "ESTADO_SALIDA_5 1 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin para ACTIVAR_SALIDA_6 ;Procedimiento auxiliar de las primitivas ;Procedimiento para activar la salida digital 6 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( bito :ESTADO_SALIDAS 32 ) HAZ "ESTADO_SALIDA_6 1 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin para ACTIVAR_SALIDA_7 ;Procedimiento auxiliar de las primitivas ;Procedimiento para activar la salida digital 7 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( bito :ESTADO_SALIDAS 64 ) HAZ "ESTADO_SALIDA_7 1 SALIDA_DIGITAL :ESTADO_SALIDAS

;SALIDA: no tiene fin para ACTIVAR_SALIDA_8 ;Procedimiento auxiliar de las primitivas ;Procedimiento para activar la salida digital 8 ;ENTRADA: no tiene HAZ "ESTADO_SALIDAS ( bito :ESTADO_SALIDAS 128 ) HAZ "ESTADO_SALIDA_8 1 SALIDA_DIGITAL :ESTADO_SALIDAS

Instituto de Tecnologías Educativas

73 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

;SALIDA: no tiene fin ;******************************************************** ;******************************************************** ;******************** PRIMITIVAS ************************ ;******************************************************** para segundos :tiempo ;Procedimiento que produce un retardo o espera tantos segundos como le ;indiquemos en :tiempo. Se pueden utilizar fracciones de segundo (ej.: 0.2) ESPERA :tiempo * 100

fin ;********** Primitivas para las SALIDAS DIGITALES ************ para M1 :VALOR ;Procedimiento que hace girar en un determinado sentido un motor conectado a S0-S1. Si el actuador es una bombilla, relé ;o electroimán, simplemente lo activa. ;Para ello pone en S0/S1 un valor decimal que correponde con el valor binario formado a partir de los bits de las salidas ;(1--> salida activada; 0--> salida desactivada). ;ENTRADA: "I arrancar girando a la izquierda

; "D arrancar girando a la derecha ; "P parar el actuador

Si :VALOR = "I [DESACTIVAR_SALIDA_2 ACTIVAR_SALIDA_1] Si :VALOR = "D [DESACTIVAR_SALIDA_1 ACTIVAR_SALIDA_2] Si :VALOR = "P [DESACTIVAR_SALIDA_1 DESACTIVAR_SALIDA_2]

;SALIDA: no tiene fin para M2 :VALOR ;Procedimiento que hace girar en un determinado sentido un motor conectado a S2-S3. Si el actuador es una bombilla, relé ;o electroimán, simplemente lo activa.

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

74 El ordenador como elemento de control

;Para ello pone en S2/S3 un valor decimal que correponde con el valor binario formado a partir de los bits de las salidas ;(1--> salida activada; 0--> salida desactivada). ;ENTRADA: "I arrancar girando a la izquierda

; "D arrancar girando a la derecha ; "P parar el actuador

Si :VALOR = "I [DESACTIVAR_SALIDA_4 ACTIVAR_SALIDA_3] Si :VALOR = "D [DESACTIVAR_SALIDA_3 ACTIVAR_SALIDA_4] Si :VALOR = "P [DESACTIVAR_SALIDA_3 DESACTIVAR_SALIDA_4]

;SALIDA: no tiene fin para M3 :VALOR ;Procedimiento que hace girar en un determinado sentido un motor conectado a S4-S5. Si el actuador es una bombilla, relé ;o electroimán, simplemente lo activa. ;Para ello pone en S4/S5 un valor decimal que correponde con el valor binario formado a partir de los bits de las salidas ;(1--> salida activada; 0--> salida desactivada). ;ENTRADA: "I arrancar girando a la izquierda

; "D arrancar girando a la derecha ; "P parar el actuador

Si :VALOR = "I [DESACTIVAR_SALIDA_6 ACTIVAR_SALIDA_5] Si :VALOR = "D [DESACTIVAR_SALIDA_5 ACTIVAR_SALIDA_6] Si :VALOR = "P [DESACTIVAR_SALIDA_5 DESACTIVAR_SALIDA_6]

;SALIDA: no tiene fin para M4 :VALOR ;Procedimiento que hace girar en un determinado sentido un motor conectado a S6-S7. Si el actuador es una bombilla, relé ;o electroimán, simplemente lo activa. ;Para ello pone en S6/S7 un valor decimal que correponde con el valor binario formado a partir de los bits de las salidas ;(1--> salida activada; 0--> salida desactivada). ;ENTRADA: "I arrancar girando a la izquierda

; "D arrancar girando a la derecha

Instituto de Tecnologías Educativas

75 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

; "P parar el actuador Si :VALOR = "I [DESACTIVAR_SALIDA_8 ACTIVAR_SALIDA_7] Si :VALOR = "D [DESACTIVAR_SALIDA_7 ACTIVAR_SALIDA_8] Si :VALOR = "P [DESACTIVAR_SALIDA_7 DESACTIVAR_SALIDA_8]

;SALIDA: no tiene fin para M? ;Procedimiento que devuelve una lista con el estado de las cuatro actuadores (I, D o P) ;ENTRADA: no tiene Si Y ( :ESTADO_SALIDA_1 = 0 ) ( :ESTADO_SALIDA_2 = 0 ) [HAZ "DATO1 "P] Si Y ( :ESTADO_SALIDA_1 = 1 ) ( :ESTADO_SALIDA_2 = 0 ) [HAZ "DATO1 "I] Si Y ( :ESTADO_SALIDA_1 = 0 ) ( :ESTADO_SALIDA_2 = 1 ) [HAZ "DATO1 "D] Si Y ( :ESTADO_SALIDA_3 = 0 ) ( :ESTADO_SALIDA_4 = 0 ) [HAZ "DATO2 "P] Si Y ( :ESTADO_SALIDA_3 = 1 ) ( :ESTADO_SALIDA_4 = 0 ) [HAZ "DATO2 "I] Si Y ( :ESTADO_SALIDA_3 = 0 ) ( :ESTADO_SALIDA_4 = 1 ) [HAZ "DATO2 "D] Si Y ( :ESTADO_SALIDA_5 = 0 ) ( :ESTADO_SALIDA_6 = 0 ) [HAZ "DATO3 "P] Si Y ( :ESTADO_SALIDA_5 = 1 ) ( :ESTADO_SALIDA_6 = 0 ) [HAZ "DATO3 "I] Si Y ( :ESTADO_SALIDA_5 = 0 ) ( :ESTADO_SALIDA_6 = 1 ) [HAZ "DATO3 "D] Si Y ( :ESTADO_SALIDA_7 = 0 ) ( :ESTADO_SALIDA_8 = 0 ) [HAZ "DATO4 "P] Si Y ( :ESTADO_SALIDA_7 = 1 ) ( :ESTADO_SALIDA_8 = 0 ) [HAZ "DATO4 "I] Si Y ( :ESTADO_SALIDA_7 = 0 ) ( :ESTADO_SALIDA_8 = 1 ) [HAZ "DATO4 "D] Dev ( Lista :DATO1 :DATO2 :DATO3 :DATO4 )

;SALIDA: lista con el estado de los actuadores (I, D, o P) fin para M :L ;Procedimiento que permite activar/desactivar todos los actuadores simultáneamente. ;Para ello pone en un valor decimal que correponde con el valor binario formado a partir de los bits de las salidas ;(1--> salida activada; 0--> salida desactivada). ;ENTRADA: lista con cuatro elementos en la que se indica el estado que se quiere en cada uno de los cuatro motores: I, D o P SI ( Y ( Lista? :L ) ( 4 = Cuenta :L ) ) [M1 ELEMENTO 1 :L M2 ELEMENTO 2 :L M3 ELEMENTO 3 :L M4 ELEMENTO 4 :L]

;SALIDA: no tiene fin

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

76 El ordenador como elemento de control

para CONECTADO? ;Procedimiento que devuelve una lista con el estado de los 4 actuadores (0 ó 1) ;ENTRADA: no tiene SISINO O ( :ESTADO_SALIDA_1 = 1 ) ( :ESTADO_SALIDA_2 = 1 ) [HAZ "DATO1 1] [HAZ "DATO1 0] SISINO O ( :ESTADO_SALIDA_3 = 1 ) ( :ESTADO_SALIDA_4 = 1 ) [HAZ "DATO2 1] [HAZ "DATO2 0] SISINO O ( :ESTADO_SALIDA_5 = 1 ) ( :ESTADO_SALIDA_6 = 1 ) [HAZ "DATO3 1] [HAZ "DATO3 0] SISINO O ( :ESTADO_SALIDA_7 = 1 ) ( :ESTADO_SALIDA_8 = 1 ) [HAZ "DATO4 1] [HAZ "DATO4 0] Dev ( Lista :DATO1 :DATO2 :DATO3 :DATO4 )

;SALIDA: lista con el estado de los actuadores (1--> actuador activado; 0-->actuador desactivado) fin para SALIDA :VALOR ;Procedimiento que controla individualmente o en conjunto cada una de las ocho salidas digitales ;ENTRADA: número de la/s salida/s (en binario) que se quiere controlar HAZ "DATO ( bity :VALOR 1 ) SISINO :DATO = 1 [ACTIVAR_SALIDA_1] [DESACTIVAR_SALIDA_1] HAZ "DATO ( bity :VALOR 2 ) SISINO :DATO = 2 [ACTIVAR_SALIDA_2] [DESACTIVAR_SALIDA_2] HAZ "DATO ( bity :VALOR 4 ) SISINO :DATO = 4 [ACTIVAR_SALIDA_3] [DESACTIVAR_SALIDA_3] HAZ "DATO ( bity :VALOR 8 ) SISINO :DATO = 8 [ACTIVAR_SALIDA_4] [DESACTIVAR_SALIDA_4] HAZ "DATO ( bity :VALOR 16 ) SISINO :DATO = 16 [ACTIVAR_SALIDA_5] [DESACTIVAR_SALIDA_5] HAZ "DATO ( bity :VALOR 32 ) SISINO :DATO = 32 [ACTIVAR_SALIDA_6] [DESACTIVAR_SALIDA_6] HAZ "DATO ( bity :VALOR 64 ) SISINO :DATO = 64 [ACTIVAR_SALIDA_7] [DESACTIVAR_SALIDA_7] HAZ "DATO ( bity :VALOR 128 ) SISINO :DATO = 128 [ACTIVAR_SALIDA_8] [DESACTIVAR_SALIDA_8]

;SALIDA: no tiene fin para SALIDA? ;Procedimiento que devuelve una lista con el estado de las ocho salidas digitales. ;ENTRADA: no tiene SISINO ( :ESTADO_SALIDA_1 = 1 ) [HAZ "DATO1 1] [HAZ "DATO1 0]

Instituto de Tecnologías Educativas

77 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

SISINO ( :ESTADO_SALIDA_2 = 1 ) [HAZ "DATO2 1] [HAZ "DATO2 0] SISINO ( :ESTADO_SALIDA_3 = 1 ) [HAZ "DATO3 1] [HAZ "DATO3 0] SISINO ( :ESTADO_SALIDA_4 = 1 ) [HAZ "DATO4 1] [HAZ "DATO4 0] SISINO ( :ESTADO_SALIDA_5 = 1 ) [HAZ "DATO5 1] [HAZ "DATO5 0] SISINO ( :ESTADO_SALIDA_6 = 1 ) [HAZ "DATO6 1] [HAZ "DATO6 0] SISINO ( :ESTADO_SALIDA_7 = 1 ) [HAZ "DATO7 1] [HAZ "DATO7 0] SISINO ( :ESTADO_SALIDA_8 = 1 ) [HAZ "DATO8 1] [HAZ "DATO8 0] Dev ( Lista :DATO1 :DATO2 :DATO3 :DATO4 :DATO5 :DATO6 :DATO7 :DATO8)

;SALIDA: lista con el estado de cada una de las ocho salidas digitales (1--> salida activada; 0-->salida desactivada) fin para CONECTA :NUM ;Procedimiento que conecta la salida digital indicada en el número :NUM y deja las demás como estén. ;ENTRADA: número de la salida digital a activar: 1, 2, 3, 4, 5, 6, 7 u 8. SI (:NUM > 8) [Alto] SI (:NUM < 0) [Alto] Local "Numero HAZ "SalidaTemporal :ESTADO_SALIDAS HAZ "Numero :NUM - 1 HAZ "SalidaTemporal (Bito (:SalidaTemporal) (Entero(potencia 2 :Numero))) tapa [[] [SalidaTemporal] []] SALIDA :SalidaTemporal

fin para DESCONECTA :NUM ;Desactiva la salida digital que se le indique en el parámetro :NUM y deja las demás como estén. ;ENTRADA: número de la salida digital a desactivar: 1, 2, 3, 4, 5, 6, 7 u 8. Apaga :NUM

;SALIDA: no tiene fin para CONECTAR ;Procedimiento que conecta TODAS las salidas digitales ;ENTRADA: no tiene SALIDA 255

;SALIDA: no tiene

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

78 El ordenador como elemento de control

fin para DESCONECTAR ;Procedimiento que desconecta TODAS las salidas digitales ;ENTRADA: no tiene SALIDA 0

;SALIDA: no tiene fin para VS? ;Procedimiento que devuelve el estado de las ocho salidas digitales mediante un número ;decimal. ;ENTRADA: no tiene DEVUELVE :ESTADO_SALIDAS

;SALIDA: número decimal que indica qué salidas digitales están activadas fin ;************ Primitivas para las ENTRADAS DIGITALES *********** ;****************** Procedimientos auxiliares ********************* para LEER_ENTRADA_DIGITAL_BAJA ;Procedimiento auxiliar de las primitivas ;ENTRADA: no tiene LLAMADLL [v PortOut w 3 w 890] HAZ "BAJO PRIMERO LLAMADLL [w PortIn w 889] HAZ "MASCARA 120 HAZ "BAJO bity :BAJO :MASCARA HAZ "BAJO :BAJO / 8 HAZ "BAJO BITINVERSO :BAJO HAZ "MASCARA 15 HAZ "BAJO bity :BAJO :MASCARA Dev :BAJO

;SALIDA: valor decimal de las entradas digitales bajas (1, 2, 3 y 4) fin para LEER_ENTRADA_DIGITAL_ALTA ;Procedimiento auxiliar de las primitivas

Instituto de Tecnologías Educativas

79 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

;ENTRADA: no tiene LLAMADLL [v PortOut w 1 w 890] HAZ "ALTO PRIMERO LLAMADLL [w PortIn w 889] HAZ "MASCARA 120 HAZ "ALTO bity :ALTO :MASCARA HAZ "ALTO :ALTO / 8 HAZ "ALTO BITINVERSO :ALTO HAZ "MASCARA 15 HAZ "ALTO bity :ALTO :MASCARA Dev :ALTO

;SALIDA: valor decimal entradas digitales altas (5, 6, 7 y 8) fin para SDB? ;Procedimiento auxiliar de SD? ;Hay que tener en cuenta que se utiliza LÓGICA NEGATIVA ;ENTRADA: no tiene HAZ "DATO LEER_ENTRADA_DIGITAL_BAJA Dev ( Lista ( bity :DATO 1 ) (( bity :DATO 2 ) / 2) (( bity :DATO 4 ) / 4) (( bity :DATO 8 ) / 8) )

;SALIDA: lista con el estado de la parte baja de las entradas digitales externas fin para SDA? ;Procedimiento auxiliar de SD? ;Hay que tener en cuenta que se utiliza LÓGICA NEGATIVA ;ENTRADA: no tiene HAZ "DATO LEER_ENTRADA_DIGITAL_ALTA Dev ( ( Lista ( bity :DATO 1) ( bity :DATO 2 ) / 2 ( bity :DATO 4 ) / 4 ( bity :DATO 8 ) / 8 ) )

;SALIDA: lista con el estado de la parte alta de las entradas digitales externas fin ;************************* Primitivas ************************* para SD :entrada ;Devuelve el valor (0 ó 1) del sensor digital expresado en :entrada (1, 2, ... 8) ;Hay que tener en cuenta que se utiliza LÓGICA NEGATIVA ;ENTRADA: número de la entrada digital

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

80 El ordenador como elemento de control

HAZ "DATO LEER_ENTRADA_DIGITAL_BAJA Si :entrada = 1 [Dev (bity :DATO 1)] Si :entrada = 2 [Dev ( ( bity :DATO 2 ) / 2 )] Si :entrada = 3 [Dev ( ( bity :DATO 4 ) / 4 ) )] Si :entrada = 4 [Dev ( ( bity :DATO 8 ) / 8 )] HAZ "DATO_ALTO LEER_ENTRADA_DIGITAL_ALTA Si :entrada = 5 [Dev ( bity :DATO_ALTO 1 )] Si :entrada = 6 [Dev ( ( bity :DATO_ALTO 2 ) / 2 )] Si :entrada = 7 [Dev ( ( bity :DATO_ALTO 4 ) / 4 ) )] Si :entrada = 8 [Dev ( ( bity :DATO_ALTO 8 ) / 8 )]

;SALIDA: 0--> si la entrada digital está activada; 1--> si la entrada digital está desactivada (LÓGICA NEGATIVA) fin para SD? ;Devuelve el estado de los ocho sensores digitales en forma de lista (0 ó 1) ;Hay que tener en cuenta que se utiliza LÓGICA NEGATIVA ;ENTRADA: no tiene Dev Frase SDB? SDA?

;SALIDA: lista con el estado de las ocho entradas digitales (LÓGICA NEGATIVA) fin para EsperaOn :entrada ;Procedimiento que deja parado el programa esperando a que se active la entrada digital especificada ;en el parámetro :entrada, el cual puede ser un número entre 1 y 8. ;Si :entrada está activada o se activa, el programa sigue su curso. Local "dato Haz "dato (SD :entrada) Si (:dato = 0) [EsperaOn :entrada]

fin para EsperaOff :entrada ;Procedimiento que deja parado el programa esperando a que se desactive la entrada digital especificada ;en el parámetro :entrada, el cual puede ser un número entre 1 y 8. ;Si :entrada está desactivada o se desactiva, el programa sigue su curso. Si ((SD :entrada) = 1) [esperaoff :entrada]

fin

Instituto de Tecnologías Educativas

81 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

;********* Primitivas para las ENTRADAS ANALÓGICAS************ ;****************** Procedimientos auxiliares ********************* para TENSION_DE_ENTRADA_ANALOGICA :CANAL ;Procedimiento auxiliar de las primitivas ;Procedimiento para convertir el valor decimal leido en una entrada analógica en un valor de tensión ;ENTRADA: CANAL que indica el canal a leer ;CANAL = 1 ==> CANAL 1 ;CANAL = 2 ==> CANAL 2 ;CANAL = 4 ==> CANAL 3 ;CANAL = 8 ==> CANAL 4 HAZ "DATO LEER_ENTRADA_ANALOGICA_num :CANAL HAZ "DATO :DATO * 5 HAZ "DATO :DATO / 256 Dev :DATO

;SALIDA: valor de la tensión de la entrada analógica fin para LEER_ENTRADA_ANALOGICA_num :SELECC ;Procedimiento auxiliar de las primitivas ;Procedimiento que lee el valor decimal de la entrada analógica que indica :SELECC ;ENTRADA: SELECC indica el canal a leer ;SELECC = 1 ==> CANAL 1 ;SELECC = 2 ==> CANAL 2 ;SELECC = 4 ==> CANAL 3 ;SELECC = 8 ==> CANAL 4

;Lectura del nibble bajo de la entrada analógica LLAMADLL [v PortOut w 5 w 890] HAZ "x (LISTA "v "PortOut "w :SELECC "w 888) LLAMADLL :x LLAMADLL [v PortOut w 2 w 890] HAZ "BAJO PRIMERO LLAMADLL [w PortIn w 889] ESPERA 1 HAZ "MASCARA 120 HAZ "BAJO ( bity :BAJO :MASCARA )

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

82 El ordenador como elemento de control

HAZ "BAJO :BAJO / 8 HAZ "MASCARA 15 HAZ "BAJO ( bity :BAJO :MASCARA )

;Lectura del nibble alto de la entrada analógica LLAMADLL [v PortOut w 0 w 890] HAZ "ALTO PRIMERO LLAMADLL [w PortIn w 889] ESPERA 1 HAZ "MASCARA 120 HAZ "ALTO ( bity :ALTO :MASCARA ) HAZ "ALTO :ALTO / 8 HAZ "MASCARA 15 HAZ "ALTO ( bity :ALTO :MASCARA ) HAZ "ALTO :ALTO * 16 HAZ "DATO_DIGITAL ( bito :ALTO :BAJO ) Dev :DATO_DIGITAL

;SALIDA: no tiene fin ;************************* Primitivas ************************* para SAW ;ENTRADA: no tiene ;Procedimiento que lee la entrada analógica 1 y presenta su valor en voltios Dev TENSION_DE_ENTRADA_ANALOGICA 1

;SALIDA: Devuelve el valor del sensor analógico conectado a IN0. fin para SAX ;ENTRADA: no tiene ;Procedimiento que lee la entrada analógica 2 y presenta su valor en voltios Dev TENSION_DE_ENTRADA_ANALOGICA 2

;SALIDA: Devuelve el valor del sensor analógico conectado a IN1. fin para SAY ;ENTRADA: no tiene ;Procedimiento que lee la entrada analógica 3 y presenta su valor en voltios

Instituto de Tecnologías Educativas

83 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

Dev TENSION_DE_ENTRADA_ANALOGICA 4 ;SALIDA: Devuelve el valor del sensor analógico conectado a IN2. fin para SAZ ;ENTRADA: no tiene ;Procedimiento que lee la entrada analógica 4 y presenta su valor en voltios Dev TENSION_DE_ENTRADA_ANALOGICA 8

;SALIDA: Devuelve el valor del sensor analógico conectado a IN3. fin para SA? ;Procedimiento que devuelve una lista con el valor (voltios) de los 4 sensores analógicos ;ENTRADA: no tiene ;Lee todas las entradas analógicas y presenta su valor en Voltios Dev ( Lista SAW SAX SAY SAZ )

;SALIDA: lista con el valor de los 4 sensores analógicos fin ;******************************************************************** ;**************PROCEDIMIENTOS PARA LA COMPATIBILIDAD *********** ; ******* CON LAS PRIMITIVAS PROPORCIONADAS POR ENCONOR ******* ;********************************************************************* para Apaga :n ;***** Procedimiento para la compatibilidad con las primitivas proporcionadas por ENCONOR ***** ;Procedimiento que desconecta la salida digital que se le indique en :n, dejando el resto de salidas digitales ;como estén. Si (:n>8) [Alto] Si (:n<0) [Alto] Si (:n = 1) [DESACTIVAR_SALIDA_1 ALTO] Si (:n = 2) [DESACTIVAR_SALIDA_2 ALTO] Si (:n = 3) [DESACTIVAR_SALIDA_3 ALTO] Si (:n = 4) [DESACTIVAR_SALIDA_4 ALTO] Si (:n = 5) [DESACTIVAR_SALIDA_5 ALTO] Si (:n = 6) [DESACTIVAR_SALIDA_6 ALTO] Si (:n = 7) [DESACTIVAR_SALIDA_7 ALTO]

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

84 El ordenador como elemento de control

Si (:n = 8) [DESACTIVAR_SALIDA_8 ALTO] fin para EnviaOcteto :dato ;***** Procedimiento para la compatibilidad con las primitivas proporcionadas por ENCONOR ***** ;Procedimiento que envia a las salidas digitales el número binario equivalente al decimal que pongamos ;en :dato Si (:dato>255) [Alto] Si (:dato<0) [Alto] SALIDA :dato

fin para entrada :n ;***** Procedimiento para la compatibilidad con las primitivas proporcionadas por ENCONOR ***** ;Procedimiento que devuelve "VERDADERO" si la entrada indicada en :n está conectada ;o "FALSO" en caso contrario Haz "enc SD :n SISINO :enc = 1 [Devuelve "VERDADERO] [Devuelve "FALSO]

fin para leeanalogica :dato ;***** Procedimiento para la compatibilidad con las primitivas proporcionadas por ENCONOR ***** ;Devuelve el valor de 8 bits de la entrada analógica especificada en el número :n (valor entre 0 y 255) Si :dato > 5 [Alto] Si :dato < 1 [Alto] Haz "result LEER_ENTRADA_ANALOGICA_num :dato Devuelve :result

fin ;****************************************************************** ;******************* ENTORNO GRÁFICO *************************** ;Procedimientos para manejar la controladora CNICE utilizando un entorno gráfico ;****************************************************************** para graficos ;Procedimiento que crea la ventana para manejar las entradas y salidas digitales de la

Instituto de Tecnologías Educativas

85 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

creaestatico "cnice "ENT8 [8] 10 73 10 10 creaestatico "cnice "ENT7 [7] 19 73 10 10 creaestatico "cnice "ENT6 [6] 28 73 10 10 creaestatico "cnice "ENT5 [5] 37 73 10 10 creaestatico "cnice "ENT4 [4] 46 73 10 10 creaestatico "cnice "ENT3 [3] 55 73 10 10 creaestatico "cnice "ENT2 [2] 64 73 10 10

;controladora utilizando un entorno gráfico ;se crea la ventana para las entradas y salidas digitales creaventana "trabajo "cnice [Entradas y salidas digitales] 230 75 90 120 [] ;Salidas digitales creagroupbox "cnice "salidas 5 2 78 43 creaestatico "cnice "ES1 [SALIDAS] 28 4 28 10 creaestatico "cnice "SAL8 [8] 10 12 10 10 creaestatico "cnice "SAL7 [7] 19 12 10 10 creaestatico "cnice "SAL6 [6] 28 12 10 10 creaestatico "cnice "SAL5 [5] 37 12 10 10 creaestatico "cnice "SAL4 [4] 46 12 10 10 creaestatico "cnice "SAL3 [3] 55 12 10 10 creaestatico "cnice "SAL2 [2] 64 12 10 10 creaestatico "cnice "SAL1 [1] 73 12 8 10 ;Botones para controlar las salidas digitales de forma individual creaboton "cnice "S8 "0 8 20 8 10 [sisino :S8=0 [ACTIVAR_SALIDA_8][DESACTIVAR_SALIDA_8] pintasalidas] creaboton "cnice "S7 "0 17 20 8 10 [sisino :S7=0 [ACTIVAR_SALIDA_7][DESACTIVAR_SALIDA_7] pintasalidas] creaboton "cnice "S6 "0 26 20 8 10 [sisino :S6=0 [ACTIVAR_SALIDA_6][DESACTIVAR_SALIDA_6] pintasalidas] creaboton "cnice "S5 "0 35 20 8 10 [sisino :S5=0 [ACTIVAR_SALIDA_5][DESACTIVAR_SALIDA_5] pintasalidas] creaboton "cnice "S4 "0 44 20 8 10 [sisino :S4=0 [ACTIVAR_SALIDA_4][DESACTIVAR_SALIDA_4] pintasalidas] creaboton "cnice "S3 "0 53 20 8 10 [sisino :S3=0 [ACTIVAR_SALIDA_3][DESACTIVAR_SALIDA_3] pintasalidas] creaboton "cnice "S2 "0 62 20 8 10 [sisino :S2=0 [ACTIVAR_SALIDA_2][DESACTIVAR_SALIDA_2] pintasalidas] creaboton "cnice "S1 "0 71 20 8 10 [sisino :S1=0 [ACTIVAR_SALIDA_1][DESACTIVAR_SALIDA_1] pintasalidas] ;Botón para controlar de forma conjunta todas las salidas digitales creaboton "cnice "SAT [Todas] 8 31 71 11 [sisino :ST=0 [SALIDA 255 haz "ST 1][SALIDA 0 haz "ST 0] pintasalidas] ;Botón para cerrar la ventana de las entradas y salidas digitales creaboton "cnice "CERR [Cerrar ventana] 8 49 71 11 [borraventana "cnice] ;Entradas digitales creagroupbox "cnice "entradas 5 61 78 43 creaestatico "cnice "ES2 [ENTRADAS] 24 63 37 10

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

86 El ordenador como elemento de control

creaestatico "cnice "ENT1 [1] 73 73 8 10 ;Valor de cada una de las entradas digitales creaestatico "cnice "EN8 [] 10 80 10 10 creaestatico "cnice "EN7 [] 19 80 10 10 creaestatico "cnice "EN6 [] 28 80 10 10 creaestatico "cnice "EN5 [] 37 80 10 10 creaestatico "cnice "EN4 [] 46 80 10 10 creaestatico "cnice "EN3 [] 55 80 10 10 creaestatico "cnice "EN2 [] 64 80 10 10 creaestatico "cnice "EN1 [] 73 80 8 10 ;Botón para leer de forma simultánea todas las entradas digitales creaboton "cnice "ENT [Leer Entradas] 8 90 71 11 [pintaentradas] ;Se crea la ventana de informacion sobre la comunicación con el puerto paralelo informa ;Se crea la ventana para controlar las salidas y entradas analógicas graficosan

fin para informa ;Procedimiento que Crea una ventana para informar de que se debe controlar ;el estado de la comunicación entre el ordenador y la controladora (primitiva informa) ;si no se obtienen los resultados esperados. creaventana "trabajo "informa [Comunicación puerto paralelo] 130 146 90 49 [] creaestatico "informa "Conexion [Compruebe la conexión] 4 1 90 10 creaestatico "informa "PuertoP [con el Puerto Paralelo] 6 12 80 10 ;Botón para cerrar la ventana creaboton "informa "cerrarV [Cerrar ventana] 8 23 71 11 [borraventana "informa] fin

para graficosan ;Procedimiento que crea una ventana para controlar las entradas analógicas ;se crea la ventana para las entradas analógicas creaventana "trabajoan "ancnice [Entradas analógicas] 130 75 90 70 [] creagroupbox "ancnice "anentradas 5 2 78 34 creaestatico "ancnice "ANENTR [ENTRADAS] 25 4 36 12 ;estático donde se presenta el valor de la entrada analógica creaestatico "ancnice "VAN [] 42 27 25 8

Instituto de Tecnologías Educativas

87 Anexos Entorno de programación del compilador MSWLogo versión 6.5a

;Entradas analógicas creaboton "ancnice "EA4 "4 18 15 12 10 [actualizaestatico "VAN (SAZ)] creaboton "ancnice "EA3 "3 31 15 12 10 [actualizaestatico "VAN (SAY)] creaboton "ancnice "EA2 "2 44 15 12 10 [actualizaestatico "VAN (SAX)] creaboton "ancnice "EA1 "1 57 15 12 10 [actualizaestatico "VAN (SAW)] ;Botón para cerrar la ventana de las entradas y salidas analógicas creaboton "ancnice "cerrar [Cerrar ventana] 8 40 71 11 [borraventana "ancnice]

fin para pintasalidas ;Procedimiento que actualiza el valor de los indicadores de las salidas digitales del ;entorno gráfico ;se actualizan los indicadores de las salidas digitales haz "dato :ESTADO_SALIDAS sisino ((bity :dato 128) =128) [actualizaboton "S8 [1] haz "S8 1][actualizaboton "S8 [Ø] haz "S8 0] sisino ((bity :dato 64) =64) [actualizaboton "S7 [1] haz "S7 1][actualizaboton "S7 [Ø] haz "S7 0] sisino ((bity :dato 32) =32) [actualizaboton "S6 [1] haz "S6 1][actualizaboton "S6 [Ø] haz "S6 0] sisino ((bity :dato 16) =16) [actualizaboton "S5 [1] haz "S5 1][actualizaboton "S5 [Ø] haz "S5 0] sisino ((bity :dato 8) =8) [actualizaboton "S4 [1] haz "S4 1][actualizaboton "S4 [Ø] haz "S4 0] sisino ((bity :dato 4) =4) [actualizaboton "S3 [1] haz "S3 1][actualizaboton "S3 [Ø] haz "S3 0] sisino ((bity :dato 2) =2) [actualizaboton "S2 [1] haz "S2 1][actualizaboton "S2 [Ø] haz "S2 0] sisino ((bity :dato 1) =1) [actualizaboton "S1 [1] haz "S1 1][actualizaboton "S1 [Ø] haz "S1 0]

fin para pintaentradas ;Procedimiento que actualiza el valor de los indicadores de las entradas digitales del ;entorno gráfico ;Hay que recordar que en esta controladora se utiliza LÓGICA NEGATIVA para las entradas digitales ;se actualizan los indicadores de las entradas digitales sisino ((SD 8) = 1) [actualizaestatico "EN8 [1]][actualizaestatico "EN8 [Ø]] sisino ((SD 7) = 1) [actualizaestatico "EN7 [1]][actualizaestatico "EN7 [Ø]] sisino ((SD 6) = 1) [actualizaestatico "EN6 [1]][actualizaestatico "EN6 [Ø]] sisino ((SD 5) = 1) [actualizaestatico "EN5 [1]][actualizaestatico "EN5 [Ø]] sisino ((SD 4) = 1) [actualizaestatico "EN4 [1]][actualizaestatico "EN4 [Ø]] sisino ((SD 3) = 1) [actualizaestatico "EN3 [1]][actualizaestatico "EN3 [Ø]] sisino ((SD 2) = 1) [actualizaestatico "EN2 [1]][actualizaestatico "EN2 [Ø]] sisino ((SD 1) = 1) [actualizaestatico "EN1 [1]][actualizaestatico "EN1 [Ø]]

Interfaz de control de dispositivos externos por ordenador a través de puerto paralelo

88 El ordenador como elemento de control

fin ;****************************************************** ;******************************************************