• No se han encontrado resultados

Detalle del objeto « Programa »

In document Manual de referencia del entorno (página 90-103)

Repartición del tiempo de ejecución

Los objetos de IRIS se ejecutan uno a la vez. Esta repartición del tiempo de ejecución es gestionado de manera transparente por el gestionador de objeto. Dos niveles de prioridad son posibles para los objetos « PROG »: si la opción a activar « Ejecución prioritaria » de la pestaña « Programa » está activada, entonces la totalidad del programa se ejecuta cuando el objeto es mano. En caso contrario, sólo una línea se ejecuta antes de que el objeto devuelva la mano. Esta regla tiene excepciones: las funciones de acceso a las variables de automatismo (« READVAR » y « WRITEVAR ») pueden provocar un pasaje de mano. La función « YIELD » fuerza un pasaje de mano. En modo de ejecución prioritario, esta función debe obligatoriamente utilizarse dentro de un bucle para no bloquear la ejecución de los otros objetos.

Visualización

La superficie del objeto puede utilizarse para visualizar información. La función « PRINT » permite visualizar información.

Sintaxis

El carácter « ; » (punto y coma) se utiliza como separador. Es posible escribir comentarios entre las cadenas « (* » y « *) ». No hay diferencia entre las mayúsculas y las minúsculas para las palabras clave y los nombres de funciones; sí se hace la diferenciación en los nombres de variables.

Declaración de las variables

Las variables utilizadas en un programa deben declararse antes del programa entre las palabras clave « BEGINVAR; » y « ENDVAR; ».

Los tipos de variables utilizables son: INT entero 16 bits con signo UINT entero 16 bits sin signo LONG entero 32 bits con signo ULONG entero 32 bits sin signo STRING cadena de caracteres FLOAT flotante

La sintaxis general de una declaración es: <tipo> <nombre de variable>;

La sintaxis general para declarar una tabla de variables es: <tipo> <nombre de variable> [<longitud>];

Por ejemplo: BEGINVAR;

INT contador; (* un entero 16 bits con signo *) STRING cadena; (* una cadena *)

(* una tabla de 100 enteros 32 bits sin signo *) ULONG tabla[100];

ENDVAR;

Escritura del programa

El programa debe escribirse entre las palabras clave « BEGIN; » y « END; ».

Constantes

„ entero 16 bits: un número decimal entre –32768 y 32727 o "$" seguido

de un número hexadecimal entre 0 y FFFF. Ejemplo: 12, -4, $abcd

„ entero 32 bits: un número decimal entre -2147483648 y 214743648 seguido de "L", o "$" seguido de un número hexadecimal entre 0 y FFFFFFFF seguido de "L". Ejemplo: 10000L, -200000L, $12345678L

„ cadena de caracteres: una comilla seguida de los caracteres de la

cadena seguidos de una comilla. Es posible insertar caracteres de control en una cadena. « \ n » reemplaza un carácter LF (código ASCII 10), « \r » un carácter CR (código ASCII 13). Ejemplo: "Abcdef", "" (cadena nula), "Continuación\r\n"

„ flotante: un número decimal seguido del carácter "R". El carácter "."

sirve para separar la parte entera de la parte decimal. Ejemplo: 3.14r, -100.4r

Asignación

La cadena « := » marca una asignación. Ejemplo:

contador:=4; var:="ABCDEF";

Cálculos

Los operadores de cálculos se evalúan de izquierda a derecha. Es posible utilizar paréntesis para especificar una prioridad de cálculo.

Lista de operadores de cálculo:

„ + suma (concatenación para las cadenas de caracteres) „ - resta

„ * multiplicación „ / división

„ << desfase a izquierda „ >> desfase a derecha „ ^ elevación a una potencia „ AND "y" binario

„ OR "o" binario

„ XOR "o exclusivo" binario

Ejemplos :

resultado:=var1*(var2+var3); resultado:=resultado<<2;

Tests Sintaxis:

IF <condición> THEN ... ENDIF; o

IF <condición> THEN ... ELSE ... ENDIF; Ejemplo:

IF (count<100) AND (count>10) THEN count:=count+1; ELSE count:=0; ENDIF; Bucles Sintaxis:

Ejemplo: count:=0; WHILE count<1000 DO table[count]:=table[count+1]; count:=count+1; ENDWHILE;

Dirección de una variable o de una tabla de variables

La sintaxis &nombre de variable o &nombre de tabla de variables devuelve la dirección de una variable o de una tabla de variables. Esta sintaxis es necesaria para ciertas funciones.

Lista de funciones

Para los ejemplos propuestos a continuación se presupone que:

vint es una variable de tipo INT, vlong una variable de tipo LONG, vuint una variable de tipo UINT, vulong una variable de tipo ULONG, vfloat una variable de tipo FLOAT y vstring una variable de tipo STRING.

PRINT

Función de visualización. Los datos a visualizar se escriben a continuación, separados por comas. Ejemplo:

print "El resultado es:",vint/12,"\n";

NOT

Complemento. Esta función puede utilizarse con el test if para complementar un resultado. Ejemplo: if not(1<2) then ... ABS Valor absoluto. Ejemplo:

print abs(0-4); (* visualiza 4 *)

VAL

Devuelve el valor de una cadena de caracteres expresada en forma de número decimal.

Ejemplo:

HVAL

Devuelve el valor de una cadena de caracteres expresada en forma de número hexadecimal.

Ejemplo:

vuint=hval("abcd"); (* vuint contendrá abcd hexa *)

ASC

Devuelve el código ASCII del primer carácter de una cadena. Ejemplo:

vuint :=asc("ABCD"); (* vuint contendrá 65 : código ascii de ‘A’ *)

CHR

Devuelve una cadena compuesta de 1 carácter cuyo código ASCII pasó a parámetro.

Ejemplo:

vstring:=chr(65); (*vstring contendrá la cadena "A" *)

STRING

Devuelve una cadena compuesta de n caracteres. El primer argumento es el número de caracteres, el segundo es el carácter.

Ejemplo:

vstring:=string(100," ");

(* vstring contendrá una cadena compuesta de 100 espacios *)

STR

Convierte un valor numérico entero en una cadena de caracteres que representa ese valor en decimal.

Ejemplo:

vstring:=str(100); (* vstring contendrá la cadena "100" *)

HEX

Convierte un valor numérico entero en una cadena de caracteres que representa ese valor en hexadecimal.

Ejemplo:

vstring:=hex(100); (* vstring contendrá la cadena "64" *)

LEFT

Devuelve la parte izquierda de una cadena de caracteres. El primer argumento es la cadena de caracteres, el segundo es el número de caracteres a extraer.

RIGHT

Devuelve la parte derecha de una cadena de caracteres. El primer argumento es la cadena de caracteres, el segundo es el número de caracteres a extraer.

Ejemplo:

vstring:=right("abcdef",2); (* vstring contendrá "ef" *)

MID

Devuelve una parte de una cadena de caracteres. El primer argumento es la cadena de caracteres, el segundo es la posición donde debe comenzar la extracción, el tercero es el número de caracteres a extraer. Ejemplo:

vstring:=mid("abcdef",1,2); (* vstring contendrá "bc" *)

LEN

Devuelve la longitud de una cadena de caracteres. Ejemplo:

vuint:=len("123"); (* vuint contendrá 3 *)

COS

Devuelve el coseno de un valor real expresado en radianes. Ejemplo:

vfloat:=cos(3.14r); (* vfloat contendrá el coseno de 3.14 *)

SIN

Devuelve el seno de un valor real expresado en radianes. Ejemplo:

vfloat:=sin(3.14r); (* vfloat contendrá el seno de 3.14 *)

TAN

Devuelve la tangente de un valor real expresado en radianes. Ejemplo:

vfloat:=tan(3.14r); (* vfloat contendrá la tangente de 3.14 *)

ATN

Devuelve el arco tangente de un valor real. Ejemplo:

vfloat:=atn(0.5r); (* vfloat contendrá el arco tangente de 0.5 *)

EXP

Devuelve el exponencial de un valor real. Ejemplo:

vfloat:=exp(1r); (* vfloat contendrá el exponencial de 1 *)

LOG

Ejemplo:

vfloat:=log(1r); (* vfloat contendrá el logaritmo de 1 *)

LOG10

Devuelve el logaritmo base 10 de un valor real. Ejemplo:

vfloat:=log10(1r);

(* vfloat contendrá el logaritmo base 10 de 1 *)

SQRT

Devuelve la raíz cuadrada de un valor real. Ejemplo:

vfloat:=sqrt(2); (* vloat contendrá la raíz cuadrada de 2 *)

DATE

Devuelve una cadena de caracteres que representa la fecha. Ejemplo:

print "La fecha es:",date(),"\n";

TIME

Devuelve una cadena de caracteres que representa la hora. Ejemplo:

print "La hora es:",time(),"\n";

RND

Devuelve un número aleatorio. Ejemplo:

print rnd();

OPEN

Abre un archivo. El primer argumento es el nombre del archivo, el segundo es el modo de acceso, que puede ser: « r+b » apertura en lectura / escritura, « w+b » apertura en escritura (si el archivo existe se destruye). La función devuelve un largo que identificará el archivo. Si la apertura fracasa, el valor devuelto es 0.

Ejemplo:

vulong:=open("nuevo","w+b");

CLOSE

Cierra un archivo. El argumento es el identificador de archivo devuelto por la función OPEN.

WRITE

Escribe datos en un archivo. El primer argumento es el identificador de archivo devuelto por la función OPEN. El segundo argumento es la dirección de una variable y el tercero es el número de bytes a escribir. La función devuelve el número de bytes efectivamente escritos.

Ejemplo:

vuint:=write(vulong,&buff,5);

READ

Lee datos en un archivo. El primer argumento es el identificador de archivo devuelto por la función OPEN. El segundo argumento es la dirección de una variable y el tercero es el número de bytes a leer. La función devuelve el número de bytes efectivamente leídos.

Ejemplo:

vuint:=read(vulong,&buff,5);

SEEK

Desplaza un puntero de archivo. El primer argumento es el identificador de archivo devuelto por la función OPEN, el segundo es la posición. Ejemplo:

seek(vulong,0l);

GOTO

Efectúa un salto al label pasado a argumento. El argumento es una cadena de caracteres. Ejemplo: goto "fin" ... fin:; CALL

Efectúa un salto a un subprograma. El argumento es una cadena de caracteres que contiene el label del subprograma.

Ejemplo: BEGIN; (* programa principal *) call "sp" END; BEGIN; (* subprograma *) sp:

return; END;

RETURN

Marca el fin de un subprograma.

READVAR

Lee una o varias variables de la aplicación de automatismo. El primer argumento es el nombre de la variable de automatismo (nombre de variable o de símbolo). El segundo argumento es la dirección de una variable o de una tabla de variables 32 bits (largos o flotantes). El tercer argumento es el número de variables a leer. Si la función se ejecuta sin errores, el valor devuelto es 0.

Ejemplo:

readvar("i0",&buff,16); (* lectura de 16 entradas a partir de i0 *)

WRITEVAR

Escribe una o varias variables de la aplicación de automatismo. El primer argumento es el nombre de la variable de automatismo (nombre de variable o de símbolo). El segundo argumento es la dirección de una variable o de una tabla de variables 32 bits (largos o flotantes). El tercer argumento es el número de variables a escribir. Si la función se ejecuta sin errores, el valor devuelto es 0.

Ejemplo:

writevar("o0",&buff,16);

(* escritura de 16 salidas a partir de o0 *)

CMD

Ejecuta un comando. El argumento es una cadena que especifica el comando a ejecutar. Esta función permite utilizar los comandos predefinidos de IRIS. Para más detalles consulte el capítulo

. El valor devuelto es 0 si el comando se ha ejecutado sin errores.

Órdenes especiales

Ejemplo: cmd("run");

YIELD

Pasa la mano. Esta función permite no monopolizar la ejecución cuando el objeto se ejecuta en modo prioritario.

Ejemplo: WHILE 1 DO ... yield(); ENDWHILE; DLL

Llama una DLL. El primer argumento es el nombre del archivo DLL. El segundo es el nombre de la función. El tercero es un puntero sobre una variable 32 bits que recibirá el código de retorno de la función. Los otros argumentos pasan a la función.

Ejemplo:

dll "user","messagebeep",&vulong,-1;

Mensajes de error

« separador ‘;’ faltante » falta un punto y coma

« error de sintaxis » se ha detectado un error de sintaxis « variable definida varias veces » una variable está definida varias veces « memoria insuficiente » la ejecución del programa ha saturado

la memoria disponible

« variable no definida » una variable utilizada en el programa no está definida

« constante muy grande » una constante es demasiado grande

« programa muy complejo » una expresión es demasiado

compleja, hay que descomponerla « tipo de variable o de constante

incompatible » una variable o una constante no es del

tipo esperado

« ’)’ faltante » falta un paréntesis de cierre

« ’ENDWHILE’ faltante » falta la palabra clave ENDWHILE

« label inhallable » un label de salto o de subprograma no

se encuentra

« ’]’ faltante » falta un corchete de cierre

« número de elemento fuera

de límite » se ha utilizado un elemento de tabla

fuera de límite

« muchos ‘CALL’ imbricados » se han utilizado demasiados subprogramas imbricados

« ‘RETURN’ sin ‘CALL’ » RETURN encontrado fuera de un

subprograma « tamaño de variable muy

pequeño » el tamaño de una variable es

insuficiente

« archivo DLL inhallable » el archivo DLL no se encuentra

« función inhallable en DLL » la función no se encuentra en el

archivo DLL

« división por cero » se produjo una división por 0

« error matemático » una función matemática ha provocado

un error Pestaña « Aspecto »

Colores

Permite elegir el color del fondo y de los caracteres del objeto.

Tamaño del objeto

Texto

Permite especificar un globo de texto que aparece cuando el cursor se coloca sobre el objeto.

Pestaña « Programa »

Programa

Esta zona de edición contiene el programa.

Ejecutar

Si se activa esta opción, el programa se ejecuta.

Ejecución prioritaria

Si se activa esta opción, el programa se ejecuta más rápidamente.

Ejecución al inicio

Si se activa esta opción, el programa se ejecuta al abrirse el objeto. Esta opción permite guardar un objeto con la opción « Ejecutar » no activada solicitando una ejecución del objeto en el momento de la carga.

Ir al error

Si durante la ejecución del programa se detecta un error, este botón pulsador permite colocar el cursor en el sitio que ha provocado el error.

In document Manual de referencia del entorno (página 90-103)

Documento similar