Publicado el 12 de Enero del 2019
1.131 visualizaciones desde el 12 de Enero del 2019
1,0 MB
75 paginas
Creado hace 9a (21/09/2015)
PROGRAMACIÓN AVANZADA (2)
Índice
• REPÁSO BÁSICO
- Operaciones de conversión de datos
- Operaciones digitales con palabras
- Funciones matemáticas avanzadas
- Saltos
• FUNCIONES Y BLOQUES
- Funciones FC’s
- Ficheros DB’s (Bloques de datos. Tipos de datos)
- Utilización de LIBRERÍAS
- Bloques de función (FB’s)
• TRATAMIENTO ANALÓGICO
• BLOQUES DE ORGANIZACIÓN (OB’s)
• DIRECCIONAMIENTO INDIRECTO
REPASO BÁSICO
REPASO BÁSICO
Operaciones de conversión de datos
Como se ha visto en la primera parte de estos apuntes, con el autómata pude
trabajarse con cuatro tipos de datos: BCD, INT, DINT y REAL.
Alguno de los formatos anteriores no permiten, por ejemplo,
realizar
operaciones aritméticas, este es el caso del formato BCD. Así, la única opción
posible para realizar operaciones aritméticas sería convertir este tipo de datos
en INT o DINT o REAL, según se defina la operación deseada.
Los códigos AWL para pasar de BCD a INT o DINT son:
BCD a INT → BTI
BCD a DINT→ BTD
Los códigos para pasar de INT o DINT a BCD son:
INT a BCD → ITB
DINT a BCD → DTB
REPASO BÁSICO
Operaciones de conversión de datos
También, con numeros enteros (INT o DINT) se pueden realizar operaciones
definidas en el campo de los números reales. Para ello, habrá que convertir el
número entero en doble entero y, posteriormente, el doble entero a real, es
decir:
INT→ DINT→REAL
En este caso, los códigos para pasar de INT a DINT, y de DINT a REAL serán:
INT a DINT → ITD
DINT a REAL→ DTR
Con las siguientes sentencias se pueden truncar o redondear números reales
con los siguientes códigos AWL:
REAL a DINT → TRUNC
REAL a DINT → RND
REPASO BÁSICO
Operaciones de conversión de datos
Por último indicar otras sentencias de conversión para RND que resultan útiles
en la programación:
RND+
RND-
// redondea al DINT mayor siguiente
// redondea al DINT menor siguiente
Como ejemplo de operación de conversión supóngase que se quiere convertir el
número entero almacenado en la marca MW120 en real, almacenándolo en la
marca MW180. El código de programa sería:
L
ITD
DTR
T
MW
120
MD
240
REPASO BÁSICO
Operaciones digitales con palabras
Las operaciones lógicas con palabras en AWL se ejecutan bit a bit en cada una de
las palabras y obedecen al código:
UW
OW
// AND lógica
// OR lógica
XOW // XOR lógica
Ejemplo de operación lógica con palabras en AWL:
EW
W#16#12ED
0
L
L
UW/OW/XOW
T
MW
10
// carga la palabra de la entrada del byte 0
// carga el número hexadecimal 12ED
// ejecuta la operación logíca bit a bit
// transfiere el valor lógico de la operación
a la dirección de memoria del byte 10
REPASO BÁSICO
Funciones matemáticas avanzadas
Representación de los números reales:
32 bits
1º: signo
1 bit
3º: mantisa
23 bits
desde 2-1 hasta 2-23
2º: exponente binario
8 bits
)127(2).1(.efSrealnumREPASO BÁSICO
Funciones matemáticas avanzadas
Las funciones matemáticas más utilizadas en programación son:
SQR
SQRT
EXP
LN
// cuadrado de un número real
// raíz cuadrada de un número real
// función exponencial de base e (2.718283)
// logaritmo neperiano
Ejemplo de una aplicación de función matemática en AWL:
L
SQRT
T
5.0
MD
30
// carga el número real 5.0 en ACU1
// calcula la raíz cuadrada de ACU1
// transfiere el valor del cálculo a MD 30
REPASO BÁSICO
Funciones matemáticas avanzadas
También se utilizan las funciones trigonométricas utilizando como unidad angular
el radián (SI):
SIN
COS
TAN
// seno de un ángulo en rad
// coseno de un ángulo
// tangente de un ángulo
y sus correspondientes funciones inversas:
ASIN
ACOS
ATAN
// arcoseno de un ángulo en rad
// arcocoseno de un ángulo
// arcotangente de un ángulo
Ejemplo de una aplicación de función trigonométrica en AWL:
L
SIN
T
5.0
MD
30
// carga el ángulo 0.5 en ACU1
// calcula el seno de 0.5
// transfiere el valor del cálculo a MD 30
REPASO BÁSICO
Saltos
Los saltos son muy importantes en programación porque dotan de dependencia a
operaciones concretas.
Por ejemplo, con las líneas de programa AWL:
U
L
E
MW
0.0
100
en ACU1 se cargará el valor de MW 100 independiente mente del valor del bit de
entrada E 0.0.
Utilizando el ejemplo anterior, con un salto se podría condicionar la carga de MW
100:
Instrucción
de salto
Etiqueta con restricciones:
Máx. cuatro caracteres
El primer caráct. no puede
ser un número
-------------------
E
U
INST
ETIQ
-------------------
-------------------
ETIQ:
L MW
--------------------
100
0.0
// código de programa
// RLO
// código de programa
// sentencias condicionadas
REPASO BÁSICO
Saltos
Los saltos son muy importantes en programación porque dotan de dependencia a
operaciones concretas.
Los saltos pueden orientarse según una secuencia de programación de arriba
hacia abajo. La orientación contraria no es deseable ya que en el programa se
podrían generar bucles.
Existe un tipo de salto especial denominado SALTO DE BUCLE. La característica más
importante de este tipo de salto es que en la secuencia de un programa, el salto se
repetirá tantas veces como indique el acumulador ACU1.
ETIQ:
----------------
----------------
LOOP ETIQ
// sentencias condicionadas
Cada vez que se ejecuta LOOP se resta 1 al valor del acumulador ACU1. Después se
compara el valor del acumulador con 0.
FUNCIONES Y BLOQUES
FUNCIONES Y BLOQUES
Funciones FC’s
Puede definirse como un bloque FC como un conjunto de sentencias de programa
que pueden ser llamadas desde OB1 u otro bloque FC de una forma repetitiva.
OB1
FC1
FC2
•Las funciones se invocan a través de una
llamada.
•Las funciones pueden ser invocadas desde
otras funciones.
•Las llamadas se ejecutan a través de sentencias.
FUNCIONES Y BLOQUES
Funciones FC’s
Las tres sentencias que se utilizan a la hora de ejecutar una llamada a función son:
• CALL FC1
• CC
• UC
“FUNCION” (condicional según expresión lógica)
“FUNCION” (incondicional)
(incondicional)
La diferencia entre CALL y UC es que CALL necesita ser introducida con parámetros
y UC no necesita parámetros.
Los PLC’s tienen limitado el número de funciones que pueden ser invocadas a la
hora de ejecutar un programa, si bien, este número es muy elevado.
La ejecución de todas las FC’s invocadas desde OB1 y las distintas funciones ha de
ocupar un tiempo menor que el de vigilancia.
Al igual que en otros tipos de programación, para los PLC’s es importante dotar a
las FC’s de independencia en cuanto al uso de variables.
FUNCIONES Y BLOQUES
Funciones FC’s
En las FC’s se pueden utilizar las mismas zonas de memoria que en el bloque OB1.
OB1
M
E
S
Z
T
FC1
FC2
FUNCIONES Y BLOQUES
Funciones FC’s
Tipos de variables
variables/datos
GLOBALES
variables/daltos
LOCALES
• PAE / PAA
• E / A
• M / T / Z
• Áreas de DB’s
variables
TEMPORALES
variables
ESTÁTICAS
• Se borran después de
la ejecución de un bloque.
• Se mantienen después de
la ejecución de un bloque.
• Se almacenan de forma
• Se almacenan de forma
temporal en la L. STACK.
• Se utilizan en: OB’s, FC’s
permanente en DB’s.
• Se utilizan unicamente en
y FB’s.
FB’s.
FUNCIONES Y BLOQUES
Funciones FC’s
Es importante el concepto de PILA DE DATOS LOCALES (L. STACK)
La L.STACK es una zona de memoria separada de la CPU que contiene las variables
temporales de los bloques. Por lo tanto esta zona de memoria ha de ser
gestionada por el sistema operativo.
El objetivo de la L.STACK es el de reservar una zona de memoria disponible para el
uso de una función (ej.: FC1) de modo que dicha función pueda ser utilizada por
otras OB1 sin que se generen conflictos.
Sistema
operativo
1
OB1
2
5
FC1
3
FC2
4
vbles./datos globales
vbles./datos temp
eventos
1
2
3
4
5
FC1
OB1
OB1
FC2
FC1
OB1
L. STACK
FC1
OB1
OB1
FUNCIONES Y BLOQUES
Funciones FC’s
Para el direccionamiento de las zonas de memoria de una función (FC) se utiliza la
marca L (load):
L
LW
4
nº byte
load
En la L. STACK
¡¡ OJO, aquí no
hay marcas M !!
A las funciones (FC’s) se les pueden pasar parámetros cuando se ejecuta una
llamada:
OB1
parámetros
FC1
FUNCIONES Y BLOQUES
Funciones FC’s
Los parámetros se pasan a través de interfaces. Los interfaces incorporan los
siguientes tipos de parámetros:
interface
(parámetros de entrada)
(parámetros de salida)
IN
OUT
IN.OUT (parámetros de entrada/salida)
TEMP
…
(van a la L. STACK)
Para insertar una función en OB1 se ejecutan los siguientes pasos:
1. Abrir el menú contextual en la carpeta BLOQUES e insertar un
bloque del tipo FUNCIÓN
2. Dar un nombre a la función (ej.: FC10) y elegir el lenguaje en el que
se va a programar.
3. Programar la interface teniendo mucho cuidado con las variables de
entrada, salida y temporales, así como de su tipo (byte, int, etc.).
FUNCIONES Y BLOQUES
Funciones FC’s
Cuando se abre una función (ejem. FC10) el editor para la función es el mismo que
el utilizado en OB1 (no existe cambio alguno),
la diferencia radica en el
desplegable que aparece en la ventana superior en el que aparecen: IN, OUT, …,
es decir en la interface.
Una vez declaradas las variables en la interface, se programa la función y se graba
en disco.
Desde OB1, dependiendo del tipo de llamada (CALL), al insertar el nombre de la
función aparecerán automáticamente las variables declaradas en su interface y a
dichas variables se les asignará un valor o parámetro, o también, el nombre de una
dirección de memoria (esto es frecuente cuando se realizan operaciones y lo que
se quiere obtener es un resultado introduciéndolo en una marca).
Se graba en disco OB1 y se cargan desde la ventana de bloques: primero, la
FUNCIÓN (FC10) y, después el bloque de organización OB1. También, se pueden
seleccionar juntos y se cargan a la vez.
A partir de este momento ya se puede ejecutar el programa desde OB1.
FUNCIONES Y BLOQUES
Funciones FC’s
EJEMPLO: Elaborar un programa en AWL en el que una función realice la
suma de tres números enteros.
Primero, se crea la función con el menú contextual
Comentarios de: Programación Avanzada (2) (0)
No hay comentarios