 Utilización del generador de código

Los comandos "Verificar" y "Construir aplicación", pertenecientes a las otras ventanas del banco de trabajo ISaGRAF, abren la ventana de generación de código de forma automática. Esta última no se cierra automáticamente cuando finaliza la operación de generación de código solicitada, para que el usuario pueda seguir teniendo acceso a todos los comandos y opciones de generación de código desde el menú de la ventana.

Comandos principales

Opciones del compilador

Producción de código fuente en "C"

Visualización de información

Definición de recursos


Comandos principales

El menú "Fichero" contiene los comandos necesarios para la comprobación de sintaxis de programa y la generación de código.

Construcción del código de la aplicación

Verificación de sintaxis de programa

Simulación de una modificación

Hacer doble click sobre el mensaje de error para abrir el programa y posicionar el cursor sobre el error.


Construcción del código de la aplicación

El comando "Ensamblar" construye todo el código del proyecto. Antes de generar nada, este comando comprueba la sintaxis de las declaraciones y los programas. Cualquier error que no puede detectarse durante la compilación de un programa se detecta durante la generación del código. Esto es aplicable a las tablas de conversión, las conexiones variables de E/S y los enlaces con las librerías. El proceso de generación de código suspende la compilación de un programa cuando se detectan errores. Se tiene que corregir el programa en cuestión antes de poder proseguir con la generación del código. No se vuelven a compilar los programas que ya han sido comprobados (sin que se hayan detectado errores) y que no han sido modificados desde su última operación de "Verificar". Siempre se lleva a cabo la verificación de las declaraciones variables y la comprobación de la coherencia de la aplicación. Para abortar la operación "Ensamblar" una vez iniciado el proceso de comprobación de programas, pulsar el botón ESCAPE.

Nota:	Si se ha modificado la declaración de la variable local de un programa, se comprueba el programa. Si se ha modificado una variable global, se comprueban todos los programas.


Verificación de sintaxis de programa

El comando "Verificar programa" le permite al usuario verificar un único programa. Se compila el programa seleccionado incluso si no ha sido modificado desde su última verificación. El comando "Verificar diccionario" le permite al usuario verificar las declaraciones de todas las variables del proyecto.

El comando "Verificar todos los programas" comprueba la sintaxis de todos los programas pertenecientes al proyecto, incluso si algunos no han sido modificados. Este comando no se para cuando detecta un error en un programa. Se puede utilizar para producir un listado completo de todos los errores que queden en los programas del proyecto. Para abortar este comando, pulsar el botón ESCAPE.


Simulación de una modificación

El comando "Marcar" simula una modificación de todos los programas del proyecto para que todas sean verificadas en la siguiente operación "Ensamblar". Se utiliza el comando "Abrir" para abrir el último programa que haya sido verificado. Este comando es muy útil para lograr acceder directamente a un programa en el que se han detectado errores de sintaxis.


Opciones del compilador

Se utiliza el comando  "Opciones del compilador" para configurar los parámetros principales que usa el Generador de Código ISaGRAF para construir y optimizar el código objeto. La finalidad de este comando es la de seleccionar el tipo de código que se va a generar, de acuerdo con los objetos ISaGRAF correspondientes, y configurar los parámetros del 'optimizador' de acuerdo con el tiempo de compilación previsto y los requisitos de tiempo de proceso de la aplicación.

Selección de objetos

Procesamiento SFC

Opciones del optimizador

El botón de  "Cargar" abre una segunda ventana de diálogo con otras opciones que permiten pasar de código fuente incrustado comprimido a código de descarga, para permitir la característica de "Descarga". Acudir a la documentación de "Descarga" para más información


Selección de objetos

La ventana superior muestra la lista de códigos destino que se puede producir. Se utiliza el signo ">>" para indicar el(los) objeto(s) seleccionado(s). El Generador de Código ISaGRAF puede producir hasta 3 códigos diferentes con la misma operación de compilación. Utilizar los botones "Seleccionar" y "Deseleccionar" para determinar la lista de códigos objeto que se requiera, de acuerdo con el hardware objeto. A continuación se relacionan los objetos ISaGRAF estándares:

SIMULATE:	Este código está dedicado al Simulador del banco de trabajo ISaGRAF. No se puede ejecutar el simulador si previamente no se ha seleccionado este destino para generar el código de aplicación.

ISA86M:	Este es un código TIC (Target Independent Code), dedicado a los kernels ISaGRAF instalados en procesadores basados en tecnología Intel. El tipo de procesador sólo tiene que ver con el orden de bytes en el código generado.

ISA68M:	Este es un código TIC (Target Independent Code), dedicado a los kernels ISaGRAF instalados en procesadores basados en tecnología Motorola. El tipo de procesador sólo tiene que ver con el orden de bytes en el código generado.

SCC:	Si se selecciona este destino el compilador ISaGRAF produce código fuente en lenguaje "C" estructurado que se compila y se enlaza con las librerías kernel objeto de ISaGRAF para producir un código ejecutable incrustado.

CC86M:	Si se selecciona este destino, el compilador ISaGRAF produce un código fuente en lenguaje "C" no estructurado que se compila y se enlaza con las librerías kernel objeto de ISaGRAF para producir un código ejecutable incrustado. Se proporciona esta selección para compatibilidad con versiones de ISaGRAF anteriores a la V3.23, donde la generación e integración de código "C" estructurado no son soportadas.

Para conocer el tipo de kernel ISaGRAF objeto que está instalado en un PLC determinado, véase el manual de hardware correspondiente. Existe la posibilidad de que se soporten otros tipos de destino (código máquina, código fuente "C", etc.) en versiones futuras del banco de trabajo ISaGRAF.


Procesamiento SFC

Seleccionar la casilla titulada "Usar máquina SFC incrustada" para permitir el uso del motor SFC de ISaGRAF. Este debe ser el modo preferido ya que permite un mayor rendimiento en términos de tiempo de proceso. Sin embargo, puede que no se disponga del motor objeto en determinadas implementaciones del objeto ISaGRAF, como sucede más habitualmente en los objetos personalizados basados en el post-procesamiento de código ISaGRAF. En tal caso, quizás se tenga que deseleccionar esta opción y dejar que el compilador ISaGRAF traduzca los diagramas SFC a instrucciones de bajo nivel. Para mayor información sobre la utilización de esta opción, véase la documentación de hardware.


Opciones del optimizador

Los siguientes parámetros, utilizados por el Generador de Código ISaGRAF para optimizar el código objeto, pueden configurarse desde la ventana de diálogo "Opciones del compilador". Se utiliza el botón "Por defecto" para eliminar todas las opciones de optimización, reduciéndose así el tiempo de compilación.

 Cuando se selecciona la opción "Ejecutar dos pasadas del optimizador", se ejecuta dos veces el Optimizador de Código ISaGRAF. Las optimizaciones realizadas durante la segunda pasada suelen ser menos significantes que las que se realizan en el transcurso de la primera.

 Al seleccionar la opción "Evaluar expresiones constantes", el compilador evalúa las expresiones constantes. Por ejemplo, la expresión numérica "2 + 3" queda reemplazada por "5" en el código destino. Si no se selecciona esta opción, se calculan las expresiones constantes durante el tiempo de proceso.

 Si se selecciona la opción "Suprimir etiquetas sin usar", el Optimizador simplifica el sistema de saltos y etiquetas de los programas mediante la supresión de 'etiquetas de destino' no utilizadas o altos nulos.

 Cuando se selecciona la opción "Optimizar el copiado de variables", se optimiza la utilización de las variables temporales (aquellas que se usan para almacenar resultados intermedios). Se suele emplear esta opción conjuntamente con la opción "Optimizar expresiones". Al seleccionar esta opción, el Optimizador reutiliza el resultado de las expresiones y subexpresiones que se usan en más de una ocasión en el programa.

 Al seleccionar la opción "Suprimir código no usado", el Optimizador suprime el código que no sea significante. Por ejemplo, si se programan las siguientes sentencias: "var := 1; var := X;", el código generado es sólo: "var := X;".

 Si se selecciona la opción "Optimizar operaciones aritméticas", el Optimizador simplifica las operaciones aritméticas de acuerdo con unos operandos especiales. Por ejemplo, la sentencia "A + 0" queda reemplazada por "A". Cuando se selecciona la opción "Optimizar operaciones booleanas", el Optimizador simplifica las operaciones booleanas de acuerdo con unos operandos especiales. Por ejemplo, la sentencia booleana "A & A" queda reemplazada por "A".

 Si se selecciona la opción "Construir diagramas de decisión binaria", el Optimizador sustituye las ecuaciones booleanas (mezclando los operadores AND, OR , XOR y NOT) por una lista reducida de operaciones de saltos condicionales. Sólo se lleva a cabo la traducción si el tiempo de ejecución previsto de la secuencia de salto es inferior al tiempo previsto para la sentencia original.

La siguiente tabla resume los tiempos previstos de optimización y los tiempos solicitados de compilación correspondientes a cada parámetro:

ganancia (rendimiento)	tiempo de compilación

Ejecutar 2 pasadas	XXXX	(*)

Optimizar expresiones constantes	XXXXXXXXXX	XXXXXX

Suprimir etiquetas no utilizadas	XXXX	XXXXXXXXXX

Optimizar copiado de variables	XXXX	XXXXXXXXXX

Optimizar expresiones	XXXX	XXXXXXXXXX

Suprimir código no utilizado	XXXX	XXXXXXXXXX

Optimizar operaciones aritméticas	XXXXXXXXXX	XXXXXXXXXX

Optimizar operaciones booleanas	XXXXXXXXXX	XXXX

Construir diag. de decisión binarios	XXXXXXXXXXXXXXX	XXXXXXXXXXXXXXX

(*) el tiempo de compilación también se multiplica por 2.


Producción de código fuente en "C"

El banco de trabajo ISaGRAF permite la producción de código fuente en lenguaje "C". En este caso, el contenido completo de la aplicación - incluyendo la descripción de diagramas SFC, la definición de bases de datos y las secuencias de código - está generado en el formato "C" de código fuente. Hay dos posibilidades, propuestas como dos estilos de código generado:

CC86M (Código fuente C- V3.04)	produce código fuente "C" no estructurado. Se debe seleccionar este estilo si su software objeto está basado en versiones de ISaGRAF anteriores a la V3.23.

SCC (Código fuente C estructurado)	produce código fuente "C" estructurado. Este estilo debe ser preferible si el software objeto está basado en versiones de ISaGRAF V3-23 o posteriores.

Se crean los dos ficheros siguientes en el directorio del proyecto:

APPLI.C	código fuente de la aplicación

APPLI.H	definiciones del lenguaje "C"

Estos ficheros tienen que ser compilados y enlazados a las librerías objeto de ISaGRAF para poder producir el código ejecutable final. Para más información sobre las técnicas de implementación recomendadas, véase la "Guía del Usuario de herramientas de desarrollo de E/S ISaGRAF".

Nota: Algunas funciones de depuración, tales como la carga remota de aplicaciones, la modificación en línea y los breakpoints, dejan de estar disponibles cuando se compila la aplicación ISaGRAF en "C".


Visualización de información

El menú "Edición" contiene los comandos necesarios para visualizar los diferentes ficheros de texto que se crean durante las operaciones de generación de código o comprobación de sintaxis en la ventana de generación de código. La ventana de generación de código es un área de texto que contiene mensajes durante las operaciones de generación de código o comprobación de sintaxis. Se almacena toda la información en el disco para su posterior consulta por medio de los comandos del menú "Edición".

Comandos de edición

Se utiliza el comando "Borrar" para limpiar el área de texto de la ventana. Se limpia la ventana automáticamente antes de cada operación de generación de código o comprobación de sintaxis. Se ejecuta el comando "Copiar" para copiar el texto al portapapeles de Windows para su posterior utilización por otras aplicaciones, como por ejemplo los editores de textos ISaGRAF.

Visualización de mensajes de salida del compilador

El comando "Mensajes de ejecución" muestra todos los mensajes que fueron generados durante la anterior operación de "Ensamblar" o "Verificar" en el área de texto de la ventana. Esto es aplicable a todos los mensajes de error.

Existen otras opciones del menú "Edición" que le permiten al usuario supervisar los ficheros auxiliares de texto que se crean durante la verificación de sintaxis y generación de código. Estos ficheros no suelen utilizarse para los proyectos ISaGRAF comunes.


Definición de recursos

El comando "Recursos" del menú "Opciones" le permite al usuario definir recursos. Un recurso es cualquier dato definido por el usuario (configuración de red, configuración de hardware, etc.), en cualquier formato (fichero, lista de valores), que tenga que fusionarse con el código generado para su transmisión al PLC objeto.  El kernel ISaGRAF no actúa directamente sobre este tipo de datos, que generalmente están dedicados a otro software instalado en el PLC objeto. Para mayor información sobre la disponibilidad de recursos, véase el manual del hardware.

El fichero de definición de recursos

Referencia de lenguajes

Ejemplo

Compilación de recursos

Implementación


El fichero de definición de recursos

Los recursos están definidos en un "Fichero de definición de recursos" que se almacena junto con otros ficheros del proyecto ISaGRAF. Se trata de un fichero de texto ASCII puro, procesado por el Compilador de Recursos ISaGRAF. Este compilador se ejecuta automáticamente cuando se elabora el código de aplicación. La presente sección explica la sintaxis de este fichero. El fichero de definición de recursos utiliza las normas léxicas del lenguaje ST. Se pueden insertar comentarios, comenzando por el carácter "(*" y terminado por el carácter "*)", en cualquier punto del texto. Las cadenas están delimitadas por apóstrofes simples. Para más información sobre los formatos léxicos que se utilizan para la introducción de valores numéricos, véase la segunda parte de este manual.


Referencia de lenguajes

Se utilizan las siguientes palabras clave y sentencias en los ficheros de definición de recursos:

ULONGDATA

VARLIST

BINARYFILE

TEXTFILE

TARGET

ANYTARGET

FROM

TO


ULONGDATA

Significado:	Especifica un recurso constituido por una lista de valores enteros. Se almacenan los valores en el código objeto como valores enteros de 32 bits, sin signo. Se almacenan los valores en el orden que esté especificado en el fichero de definición de recursos. Los valores tienen que estar separados por comas. El nombre del recurso no puede superar los 15 caracteres.

Sintaxis:	ULONGDATA '<nombre_recurso>'

BEGIN

...selección_objeto...

...lista de valores...

END

Ejemplo:	ULongData 'MYDATA'

Begin

...

0, -1, 100_000,	(* decimal *)

16#A0B1, 2#1011_0101	(* hexadecimal, binary *)

End


VARLIST

Significado:	Especifica un recurso constituido por una lista de direcciones de variables. Se identifica a las variables por sus nombres en el fichero de definición de recursos. Las direcciones variables se almacenan en el código destino como valores enteros de 16 bits, sin signo. Se almacenan las direcciones en el orden que esté especificado en el fichero de definición de recursos. Las variables tienen que estar separadas por comas. El nombre del recurso no puede superar los 15 caracteres.

Sintaxis:	VARLIST '<nombre_recurso>'

BEGIN

...selección_objeto...

...lista de nombres de variable...

END

Ejemplo:	VarList 'LIST'

Begin

...

Var100, MyParameter, Command, Alarm

End


BINARYFILE

Significado:	Especifica un recurso de Fichero Binario. Se almacenan los datos fuente en un fichero MS-DOS. La definición del recurso objeto se completa con la ruta de acceso. El Compilador de Recursos ISaGRAF no convierte los caracteres de fin de línea. El nombre del recurso no puede superar los 15 caracteres.

Sintaxis:	BINARYFILE '<nombre_recurso>'

BEGIN

...selección objeto...

FROM '<fichero_fuente>'

TO '<fichero_destino>'

END

Ejemplo:	BinaryFile 'MYFILE'

Begin

...

From 'c:\user\config.bin'

To '/dd/user/appl/config.dat'

End


TEXTFILE

Significado:	Especifica un recurso de Fichero de Texto. Se almacenan los datos fuente en un fichero ASCII. La definición del recurso objeto se completa con la ruta de acceso. El Compilador de Recursos ISaGRAF convierte los caracteres de fin de línea, de acuerdo con las convenciones del sistema objeto. El nombre del recurso no puede superar los 15 caracteres.

Sintaxis:	TEXTFILE '<nombre_recurso>'

BEGIN

...selección objeto...

FROM '<fichero_fuente>'

TO '<fichero_destino>'

END

Ejemplo:	TextFile 'MYFILE'

Begin

...

From 'c:\user\config.bin'

To '/dd/user/appl/config.dat'

End


TARGET

Significado:	Especifica el nombre del código objeto que tiene que incluir el recurso. Para más información sobre el tratamiento de objetos, véase la sección anterior (opciones del compilador). La sentencia "Target" puede aparecer en más de una ocasión en el mismo bloque de recursos, con la finalidad de seleccionar varios objetos. No se puede utilizar esta sentencia si se ha especificado la sentencia "AnyTarget".

Sintaxis:	TARGET '<nombre_objeto>'

Ejemplo:	BinaryFile 'MYFILE'

Begin

Target 'ISA86M'

Target 'ISA68M'

...

End


ANYTARGET

Significado:	Especifica que el recurso tiene que estar integrado en todos los códigos objeto que produzca el Generador de Código. El Generador de Código ISaGRAF puede producir varios códigos objeto durante el mismo comando "Ensamblar". No se puede utilizar esta sentencia si se han especificado una o más sentencias "Target".

Sintaxis:	ANYTARGET

Ejemplo:	ULongData 'MYDATA'

Begin

AnyTarget

...

End


FROM

Significado:	Especifica la ruta de acceso fuente (en el PC en el cual está instalado el banco de trabajo ISaGRAF) de un recurso BinaryFile o TextFile. Los caracteres que se utilicen para aislar a los componentes de la ruta de acceso (unidad, directorio, prefijo, sufijo) deben cumplir con las normas del sistema MS-DOS.

Sintaxis:	FROM '<ruta/nombre de objeto>'

Ejemplo:	BinaryFile 'MYFILE'

Begin

...

From 'c:\user\config.dat'

To '/dd/user/appl/config.dat'

End


TO

Significado:	Especifica la ruta de acceso destino (en el sistema objeto) de un recurso BinaryFile o TextFile. Los caracteres que se utilicen para aislar a los componentes de la ruta de acceso (unidad, directorio, prefijo, sufijo) deben cumplir con las normas del sistema anfitrión de destino.

Sintaxis:	TO '<ruta/nombre de objeto>'

Ejemplo:	TextFile 'MYFILE'

Begin

...

From 'c:\user\config.dat'

To '/dd/user/appl/config.dat'

End


Ejemplo

A continuación se muestra un ejemplo completo de un fichero de definición de recursos:

(* fichero de definición de recursos *)

ULongData 'DATA1'	(* lista de valores *)

Begin

   Target 'ISA86M'	(* sólo para este objeto *)

   1, 0, 16#1A2B3C4D, +1, -1	(* valores numéricos *)

End

VarList 'VLIST1'	(* lista de variables *)

Begin

   Target 'ISA86M'	(* sólo para este objeto *)

   Valve1, StateX, Command, Alrm1	(* nombres de variables *)

End

BinaryFile 'FILE1'	(* recurso fichero binario *)

Begin

   AnyTarget	(* dedicado a todos los objetos *)

   From 'c:\user\updatef.bin'	(* fichero fuente en PC *)

   To 'updatef.cfg'	(* fichero fuente en PLC *)

End

TextFile 'FILE2'	(* recurso fichero texto *)

Begin

   Target 'ISA68M'

   From 'c:\nw\nwbd.txt'	(* fichero fuente en PC *)

   To '/nw/dat/nwbd'	(* fichero fuente en PLC *)

End


Compilación de recursos

Si se introdujeron recursos en el fichero de definición de recursos, aparece una ventana de diálogo al término de la generación de código ISaGRAF. Pulsar el botón "Iniciar compilación" para ejecutar el compilador de recursos. Se mostrarán los mensajes de salida y los errores en el control principal. Pulsar "Salir" para evitar la compilación de recursos. En este caso, no se añadirán los recursos al código ISaGRAF.


Implementación

ISaGRAF no limita el número de recursos ni el tamaño de las columnas y filas de datos. Se guardan los recursos al final del código generado, junto con un directorio de recursos. El directorio de recursos tiene el siguiente formato (utilizando notaciones de "C"):

__RESOURCE:

{

  long nbres;	/* número de recursos definidos */

  {

    char name[16];	/* nombre de recurso */

    long type;	/* tipo de datos de recurso */

    long size;	/* tamaño exacto de bloque de datos */

    uint32 data;	/* puntero a datos */

    uint32 path_offset;	/* puntero a string */

  } /*nb de registros */

}

Los posibles valores del campo "type" son:

1 = fichero binario

2 = fichero de texto

3 = datos 'ulong' (no se utiliza el campo 'path_offset field' en este caso)

4 = lista de variables (no se utiliza el campo 'path_offset field' en este caso)

En el caso de los ficheros de texto, el compilador de recursos traduce los caracteres de final de línea de acuerdo con las convenciones del sistema objeto. Todos los punteros son offsets de 32 bits de la dirección de la estructura correspondiente. Todos los nombres de recursos y rutas de acceso son cadenas con terminaciones NULAS. Tras el directorio de recursos se encuentran los nombres de rutas de acceso y los datos.