Anda di halaman 1dari 14

UNIDAD 4.

GENERALIDADES DE LA PROGRAMACION DE PLC CON

TIA PORTAL VERSION 13

4.1. PROGRAMACION ESTRUCTURADA (SCL).

Texto estructurado (SCL) es un lenguaje de alto nivel que permite la programación


estructurada, lo que significa que muchas tareas complejas pueden ser divididas en unidades
más pequeñas. El lenguaje SCL se parece mucho a los lenguajes de computadoras BASIC o
PASCAL, que usa subrutinas para llevar a cabo diferentes partes de las funciones de control y
paso de parámetros y valores entre las diferentes secciones del programa.

El lenguaje de texto estructurado utiliza la definición de variables para identificar entradas y


salidas de dispositivos de campo y cualquier otra variable creada internamente.

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.

La programación en Texto Estructurado es apropiada para aplicaciones que involucran


manipulación de datos, ordenamiento computacional y aplicaciones matemáticas que utilizan
valores de punto flotante. ST es el mejor lenguaje para la implementación de aplicaciones de
inteligencia artificial, lógica difusa, toma de decisiones, etc.

Ejemplo:

IF “BOTON START” THEN


“Q1”:= 1;
“Q2”:=1;
ELSE
“Q1”:= 0;
“Q2”:=1;
END_IF;

Con SIMATIC STEP S7 se pueden programarlos siguientes tipos de bloques.

 OB: Bloques de sistema


 FC: Funciones
 FB: Bloques de función
 DB: Bloques de datos
 UDT: Tipo de datos.
OB: Se denominan así a los bloques de organización. Existen diferentes bloques OB, cada uno de
ellos realiza una determinada función. El OB1 es el único bloque de ejecución cíclica y es ejecutado
por la CPU sin que nadie le invoque. Los demás OB tienen una función determinada y se ejecutan
cuando les corresponda, sin que nadie les llame desde ningún sitio del programa. Así, existen
bloques OB asociados a diferentes errores de la CPU, a alarmas, etc.

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:

Pulsador START: I 1.0 (variable tipo BOOL)


Pulsador STOP: I 1.1 (variable tipo BOOL)
Pulsador RESET: I 1.3 (variable tipo BOOL)

SALIDAS:

Luz Q1: Q 1.2 (variable tipo BOOL)


Luz Q2: Q 1.3 (variable tipo BOOL)
4.2. OPERACIONES DE ASIGNACION.

EJEMPLO No. 1
+24V 1

Pulsador START
4

Luz Q1
0V

“Luz Q1”:= “Pulsador START”; (FUNCION YES)

EJEMPLO No. 2
+24V 2

Pulsador STOP
2

Luz Q1
0V

“Luz Q1”:= “Pulsador STOP”; (FUNCION NOT)

“Luz Q1”:= NOT “Pulsador START”; (FUNCION NOT)

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

“Luz Q1”:= “Pulsador START” AND “Pulsador STOP”; (FUNCION AND)

EJEMPLO No. 4

+24V 4 5

3 3

Pulsador START Pulsador RESET


4 4

Luz Q1
0V

“Luz Q1”:= “Pulsador START” OR “Pulsador RESET”; (FUNCION OR)


EJERCICIO No. 5

+24V 6 7

3
3
Pulsador START K
4
4

Pulsador STOP
2
A1
K Luz Q1
A2
0V

“Luz Q1”:= (“Pulsador START” OR “Luz Q1”) AND “Pulsador STOP”;

(BLOQUE DE MEMORIA)

4.3. OPERACIONES CON BITS (INSTRUCCIONES BINARIAS).

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

IF "Pulsador START" THEN


"Luz Q1":=1;
ELSE
"Luz Q1":=0;
END_IF;
Para este sencillo programa se ha utilizado la sentencia de control: IF-ELSE-END_IF. Obviamente es
mucho más fácil resolver este problema con una simple instrucción de asignación. Pero veremos que
esta instrucción IF-ELSE-END_IF y algunas de sus variantes pueden ser útiles para resolver otros
problemas.

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

IF "Pulsador START" THEN


"Luz Q1":=1;
END_IF;
IF NOT "Pulsador STOP" THEN
"Luz Q1":=0;
END_IF;

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:

IF "Pulsador START" THEN


"Memoria":=1;
END_IF;
IF "Memoria" THEN
"Luz Q1":=1;
END_IF;
IF "Pulsador RESET" THEN
"Luz Q1":=0;
"Memoria":=0;
END_IF;

Donde la etiqueta “Memoria” está asociada a una determinada a la marca (por ejemplo):

Memoria Bool %M0.0

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.

4.4. OPERACIONES ARITMETICAS.

Al ser el lenguaje SCL un lenguaje de alto nivel, la programación de operaciones aritméticas es


realmente sencilla.

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";

Con la asignación de variables:

Sumando1 Real %MW0


Sumando2 Real %MW2
Resultado Real %MW4

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:

Parámetro Declaración Tipo de datos Descripción


CU Input BOOL Entrada de contaje
ascendente
CD Input BOOL Entrada de contaje
descendente
R Input BOOL Entrada de reset
PV Input Enteros Valor con el que se
activa la salida Q.
QU Output BOOL Estado del
contador
ascendente
QD Output BOOL Estado del
contador
descendente
CV Output Enteros Valor actual de
contaje

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.

"Contador". CTU (CU:="Pulsador START",


R:="Pulsador RESET",
PV:=5,
Q=> “Luz Q2”,
CV=>"conteo_actual");
4.6. TEMPORIZADORES.

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

“Temporizador_KT1”. TON (IN:= “Pulsador START”,


PT: = T#5s,
Q=> “Luz Q1”);

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.

Ahora para el temporizador al reposo.

EJEMPLO No. 10

+24V 11 12

3 3
Pulsador START KT
4 4
A1
KT 5
Luz Q1
A2
0V

12
16

“Temporizador_KT2”. TOF (IN: = “Pulsador START”,


PT: = T#5s,
Q=> “Luz Q1”);
Este temporizador funciona así: Al energizar la bobina del temporizador al reposo, se conmutan los
contactos asociados al temporizador en forma inmediata sin contar el tiempo. Al desenergizar la
bobina del temporizador se empieza a contar el tiempo (manteniendo los contactos activados) y
cuando se cumple el tiempo los contactos temporizados vuelven a su estado de reposo.

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

IF "Pulsador START" THEN


"Memoria":=1;
END_IF;

“TemporizadorT1”. TON (IN: = “Memoria”,


PT: = T#5s,
Q=> “Luz Q1”);

IF NOT "Pulsador STOP" THEN


"Memoria":=0;
END_IF;

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.

4.7. INSTRUCCION CASE.

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:

CASE “valor de prueba” OF

“Valor1”: Instrucciones1;
“Valor2”: Instrucciones2;
.
.
.
“ValorN”: InstruccionesN;

ELSE

Instrucciones;

END_CASE

El “valor de prueba” es indispensable y siempre será un valor numérico ENTERO.

“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 instrucción ELSE es opcional y únicamente se ejecutará si “valor de prueba” no coincide con


ninguno de los valores principales.

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

0: IF “Pulsador START” THEN


“Luz Q1:= 1;
“PASOS”:= 5;
END_IF;

5: “Tiempo1”. TP (IN: = TRUE,


PT: = T#5s);
“PASOS”:= 10;

10: IF NOT “Tiempo1”.Q THEN


“Tiempo1”.TP (IN: = FALSE,
PT: = T#5s);
“Luz Q1”:= 0;
“PASOS”:= 0;
END_IF;

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

CILINDRO DOBLE EFECTO A CILINDRO SIN VASTAGO B ACTUADOR DE GIRO C

SAR SAE SBI SBD SCD


SCI

4 2 4 2 4 2

A+ B+ B- C+ C-
5 3 5 3 5 3
1 1 1
Las condiciones iniciales son:

- El cilindro de doble efecto A está retraído.


- El cilindro sin vástago B está a la izquierda.
- El actuador de giro C está a la izquierda.

Convenciones:

- Solenoide A+: Genera la salida del vástago del cilindro A.


- Solenoide B+: Mueve el carro del cilindro B hacia la derecha.
- Solenoide B- : Mueve el carro del cilindro B hacia la izquierda.
- Solenoide C+: Mueve el actuador de giro C hacia la derecha.
- Solenoide C- : Mueve el actuador de giro C hacia la izquierda.
- Sensor SAR: Sensor que indica que el vástago del cilindro A está retraído.
- Sensor SAE: Sensor que indica que el vástago del cilindro A está extendido.
- Sensor SBI: Sensor que indica que el carro del cilindro B está a la izquierda.
- Sensor SBD: Sensor que indica que el carro del cilindro B está a la derecha.
- Sensor SCI: Sensor que indica que el eje del actuador de giro C está a la izquierda.
- Sensor SCD: Sensor que indica que el eje del actuador de giro C está a la derecha.

La secuencia que debe realizar este sistema es:

- Al accionar el pulsador START se da inicio a la secuencia.


- El carro del cilindro B se mueve hacia la derecha.
- Al llegar el carro del cilindro B a la derecha se extiende el vástago del cilindro A.
- Al llegar el vástago del cilindro A a su posición extendida, el eje del actuador de giro C se
mueve hacia la derecha.
- Al llegar el eje del actuador de giro C a la posición derecha debe esperar 5 segundos y
luego debe retraerse el vástago del cilindro A.
- Al retraerse el vástago del cilindro A, el carro del cilindro B debe regresar a su posición de
izquierda.
- Al llegar el carro del cilindro B a su posición izquierda, el eje del actuador de giro C debe
girar hacia la izquierda y allí termina la secuencia.

La secuencia en forma resumida es:

- 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

0: IF “Pulsador START” THEN


“B+”:= 1;
“PASOS”:= 10;
END_IF;

10: IF “SBD” THEN


“A+”:= 1;
“PASOS”:= 20;
END_IF;

20: IF “SAE” THEN


“C+”:= 1;
“PASOS”:= 30;
END_IF;

30: “Tiempo”. TON (IN: = TRUE,


PT: = T#5s);
“PASOS”:= 40;

40: IF “Tiempo”.Q THEN


“Tiempo”.TON (IN: = FALSE,
PT: = T#5s);
“A+”:= 0;
“PASOS”:= 50;
END_IF;

50: IF “SAR” THEN


“B+”:= 0;
“B-“:= 1;
“PASOS”:= 60;
END_IF;

60: IF “SBI” THEN


“C+”:= 0;
“C-“:= 1;
“PASOS”:= 70;
END_IF;

70: IF “SCI” THEN


“B-”:= 0;
“C-“:= 0;
“PASOS”:= 0;
END_IF;

END_CASE;

Anda mungkin juga menyukai