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.
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.