Incluye estructuras de cálculo repetitivo y condicional, tales como: FOR... TO; REPEAT..... UNTIL
X; WHILE X...; IF... THEN...ELSE. Además soporta operaciones Booleanas (AND, OR, etc.) y una
variedad de datos específicos, tales como fecha, hora.
Ejemplo:
FC: Las FC son funciones. Son subprogramas (creadas por el programador o por otros
programadores en librerías) que realizan una función determinada dentro del proyecto. Se ejecutan
cuando son invocadas desde algún punto del programa (tienen la misma labor que las funciones en
lenguaje C). Pueden ser parametrizables o no. Las FC de librería (creadas por otros programadores)
no pueden ser leídas ni editadas.
FB: Se denominan así a los bloques de función. De forma general, puede decirse que estos bloques
desempeñan trabajan igual que las FC, con la diferencia de que en las FB se guarda la tabla de
parámetros en un módulo de datos. Esto tiene dos ventajas: una es que se posibilita el acceso a los
parámetros desde cualquier punto del programa; y la otra es que cada vez que se llame a la FB no
es necesario que se le den todos los parámetros. Los parámetros que no se introduzcan, tomarán los
valores por defecto de la última vez que se introdujeron.
DB: Se denominan así a los módulos de datos. En este tipo de bloques no se desarrollan programas.
Únicamente son tablas de datos en las que se puede leer y escribir (editar).
UDT: Son bloques en los que se definen el tipo de datos para poder utilizarlos en los bloques DB.
OJO: Para programar en SCL se requiere ante todo crear la tabla con las variables de entrada y
salida que se van a utilizar en la programación.
Vamos siempre a crear funciones (FC) en lenguaje SCL y estas funciones se van a ubicar dentro del
bloque main (OB1) y desde allí van a ejecutarse.
Vamos a ir combinando los elementos propios del automatismo eléctrico, junto con las instrucciones
correspondientes a la programación KOP y la programación SCL integrándolos con las aplicaciones
en electroneumática.
Recuerde: Para trabajar esta primera parte necesitamos definir en la tabla de variables del proyecto
las siguientes entradas y salidas que son comunes a todas las estaciones de trabajo.
ENTRADAS:
SALIDAS:
EJEMPLO No. 1
+24V 1
Pulsador START
4
Luz Q1
0V
EJEMPLO No. 2
+24V 2
Pulsador STOP
2
Luz Q1
0V
Como se observa, se puede utilizar una entrada que esté normalmente activada o negar una entrada
que esté normalmente abierta. Se consigue el mismo resultado por cualquiera de los dos caminos.
EJEMPLO No. 3
+24V 3
Pulsador START
4
3
Pulsador RESET
4
Luz Q1
0V
EJEMPLO No. 4
+24V 4 5
3 3
Luz Q1
0V
+24V 6 7
3
3
Pulsador START K
4
4
Pulsador STOP
2
A1
K Luz Q1
A2
0V
(BLOQUE DE MEMORIA)
La operación más sencilla con bits es la de utilizar un contacto (entrada E) para activar, por ejemplo,
un relé (salida A).
EJEMPLO No. 6
+24V 1
Pulsador START
4
Luz Q1
0V
EJEMPLO No. 7
El bloque de memoria del ejemplo No. 5 se puede resolver fácilmente utilizando dos instrucciones IF
(sin utilizar ELSE).
+24V 6 7
3
3
Pulsador START K
4
4
Pulsador STOP
2
A1
K Luz Q1
A2
0V
Cuando la sentencia IF THEN no está acompañada del ELSE se convierte en una función SET. Esto
significa que se activa la salida y esta permanecerá así hasta que en otro punto del programa exista
“algo” (RESET) que se desactive lo que anteriormente fue activado.
En SCL a las marcas (memorias) se les puede asociar el estado de una variable utilizando también
la sentencia de control IF-THEN resolviendo nuevamente el ejemplo No. 7:
Donde la etiqueta “Memoria” está asociada a una determinada a la marca (por ejemplo):
Fíjense en algo muy importante en la tercera instrucción IF, se apagó la “Luz Q2” y también se llevó
a 0 el valor de la variable “memoria”. Si esto último no se hace, esa posición de memoria
permanecerá en el valor de 1 y esto puede causarnos problemas la siguiente vez que necesitemos
utilizarla.
Una memoria es una “salida” que no es física. Se puede utilizar dentro de la lógica del programa
para hacer asignaciones temporales o crear bloques de memoria.
Por ejemplo: imaginemos que queremos sumar 8 al valor de la suma de dos números reales desde
las áreas de memoria MW0 y MW2 y el resultado total pasarlo a la posición de memoria MW4:
"Resultado":= 8 + "Sumando1"+"Sumando2";
4.5. CONTADORES.
Los contadores son funciones que nos permiten contar eventos (cosas que ocurren). Por ejemplo, si
se requiere contar diez cajas o veinte ciclos de subida/bajada, etc. se utilizan contadores.
En programación mediante SCL, al igual que en los otros lenguajes de programación, se pueden
implementar tres tipos de funciones para contadores:
•S_CU (ascendente)
•S_CD (descendente)
•S_CUD (ascendente-descendente)
Los tipos de datos para los parámetros de los contadores ASCENDENTES-DESCENDENTES son:
En lenguaje SCL los contadores son muy sencillos de implementar. Con el siguiente ejemplo se
pretende programar un contador ascendente (S_CU), y que también se pueda inicializar a cero cada
vez que así se desee. En el ejemplo consideraremos un bloque contador CTU.
EJEMPLO No. 8
+24V 4 5 7 8
3
3 3
KC
Pulsador START Pulsador RESET 4
4 4
A1 R1
KC 5 Luz Q1
A2 R2
0V
Nos aparece una variable nueva “conteo_actual” y debemos definirla en la tabla de variables como
tipo entero (int) antes de utilizarla en el programa.
Los temporizadores son elementos de programación que nos permiten contar tiempos. Por ejemplo,
se requiere poner a funcionar un ventilador durante 60 segundos o se requiere encender una
bombilla cuando se active un sensor y que esta permanezca encendida 1 hora.
Existen muchos tipos de temporizadores pero lo más empleados son el temporizador al trabajo
(TON) y el temporizador al reposo (TOF). Sobre todo el primero es de amplia aplicación. A
continuación un ejemplo.
EJEMPLO No. 9
+24V 13 14
3 3
Pulsador START KT
4 4
A1
KT 5
Luz Q1
A2
0V
14
Este temporizador funciona así: Al energizar la bobina del temporizador al trabajo, se empieza a
contar el tiempo. Al terminar de contar el tiempo conmuta los contactos temporizados asociados al
temporizador. Si durante el conteo se desenergiza la bobina el temporizador se inhabilita y no hace
nada.
EJEMPLO No. 10
+24V 11 12
3 3
Pulsador START KT
4 4
A1
KT 5
Luz Q1
A2
0V
12
16
Es común activar temporizadores dentro de un bloque de memoria. Para ello se muestra el siguiente
circuito eléctrico y su equivalente en programación SCL.
EJEMPLO No. 11
+24V 17 18 19
3 3
3
Pulsador START K
KT
4 4
4
Pulsador STOP
2
A1 A1
K KT 5 Luz Q1
A2 A2
0V
14 12
18 16
19
Al accionar el Pulsador START se active la bobina del temporizador y al completar los 5 segundos,
se encenderá la Luz Q1. Al accionar el Pulsador STOP se desactiva todo.
Con la instrucción CASE se ejecuta uno de los varios grupos de instrucciones en función del valor de
una expresión.
La forma general de esta instrucción es la siguiente:
“Valor1”: Instrucciones1;
“Valor2”: Instrucciones2;
.
.
.
“ValorN”: InstruccionesN;
ELSE
Instrucciones;
END_CASE
“Valor1”,….. “ValorN” son indispensables y corresponde a los diferentes valores que puede tomar
“valor de prueba”. Si este valor corresponde con el de “valor de prueba” se ejecutarán únicamente
las instrucciones correspondientes a ese valor.
La funcionalidad más grande que nos permite el uso de la instrucción CASE es la posibilidad de
construir secuencias con facilidad utilizando una estructura muy sencilla.
EJEMPLO No. 12
+24V 17 18
3
3
Pulsador START K
4
4
KT
2
A1 A1
K KT 5 Luz Q1
A2 A2
0V
14 17 12
18 16
21 22
CASE “PASOS” OF
END_CASE;
Esta última instrucción va a ser de muchísima utilidad para desarrollar el automatismo que requieren
para poner en funcionamiento cada una de sus estaciones.
Ahora vamos a desarrollar la secuencia ejemplo de un sistema electroneumático con tres actuadores
y que deben desarrollar una secuencia determinada.
EJEMPLO No. 13
4 2 4 2 4 2
A+ B+ B- C+ C-
5 3 5 3 5 3
1 1 1
Las condiciones iniciales son:
Convenciones:
- Pulsador START
- B+
- A+
- C+, espera de 5 segundos.
- A-
- B-
- C-
Ahora se verá la solución de este automatismo utilizando una instrucción CASE además de las otras
herramientas que hemos utilizado hasta ahora. Observen que siempre se pregunta por el estado de
una ENTRADA con el fin de accionar una SALIDA.
CASE “PASOS_1” OF
END_CASE;