100% encontró este documento útil (2 votos)
667 vistas

Capítulo 3 - Texto Estructurado

Este documento describe el lenguaje de programación de texto estructurado. Explica que se compone de sentencias separadas por punto y coma, y que incluye asignaciones de valores, expresiones, instrucciones y comentarios. Además, detalla las cinco partes principales del lenguaje: asignaciones, expresiones, operadores, instrucciones y construcciones.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (2 votos)
667 vistas

Capítulo 3 - Texto Estructurado

Este documento describe el lenguaje de programación de texto estructurado. Explica que se compone de sentencias separadas por punto y coma, y que incluye asignaciones de valores, expresiones, instrucciones y comentarios. Además, detalla las cinco partes principales del lenguaje: asignaciones, expresiones, operadores, instrucciones y construcciones.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 38

CAPTULO III:

TEXTO ESTRUCTURADO
(ST)
Introduccin

El texto estructurado es un lenguaje de alto nivel desarrollado puntualmente para aplicaciones de control
industrial, pero con una sintaxis muy similar a los lenguajes tradicionales basados en texto, constituido
por un extenso conjunto de constructores con finalidades particulares.
Un programa en este lenguaje, se compone de un conjunto de sentencias, donde cada una est separada
mediante el delimitador ;, por lo que una sentencia puede ser escrita empleando varias lneas, ya que el
carcter de alimentacin de la lnea ser tratado simplemente como un espacio. Los comentarios se
pueden insertar en cualquier lugar de la sentencia donde se permita la presencia de un espacio.
Las sentencias permiten entre otras labores asignar valores a variables, realizar llamados a funciones y
bloques de funciones, crear expresiones, evaluar sentencias condicionales y crear estructuras de control
de flujo.
Por consiguiente, se hace necesaria la exploracin ms detallada de las partes principales que componen
este tipo de lgica, para as facilitar su interpretacin y desarrollar en el programador las herramientas
que necesita para la creacin de un proyecto.
El principal objetivo de esta seccin, es describir puntualmente las partes principales de este tipo de
lgica apoyndonos con ejemplos que ilustren su funcionamiento apropiado.
PROGRAMACIN EN TEXTO ESTRUCTURADO
El texto estructurado es un lenguaje de programacin textual que usa enunciados para definir lo que se
va a ejecutar, trata indistintamente las maysculas de las minsculas y se puede utilizar la cantidad de
lneas que el programador crea necesarias. El lenguaje se divide en cinco partes principales:

Se utiliza para asignar valores a los tags. Termine la asignacin con un signo de
Asignacin punto y coma ";" Su operador es := para una asignacin retentiva y [:=] para una
asignacin no retentiva.

Es parte de una asignacin completa y evala segn un nmero (expresin


numrica) o segn un estado verdadero o falso (expresin BOOL)

Constantes Designa un valor constante.

Expresin

Operadores Un smbolo que especifica una operacin dentro


de una expresin.

Produce un valor. Usa parntesis para contener el


Funciones operando de una funcin. Se diferencian de las
instrucciones porque pueden utilizarse en
expresiones.
Texto Estructurado
Es un enunciado autnomo. Utiliza parntesis para contener
sus operandos

Pueden existir cero, uno o mltiples operandos

Instruccin
Cuando se ejecuta, se produce uno o ms valores que son parte
de una estructura de datos.

Se debe terminar la expresin con ;

Construccin Un enunciado condicional usado para activar el cdigo de texto


estructurado. Se termina con punto y coma ;

Texto que explica o aclara lo que hace una seccin del texto estructurado. Se
Comentario utiliza para faciliatar la interpretacin del texto estructurado. No tienen
ningn efecto en la ejecucin del texto y pueden aparecer en cualquier lugar
del texto.
ASIGNACIONES

Regular Utilcela para cambiar


el valor almacenado
tag Representa el tag que est obteniendo
un nuevo valor.
Debe ser de tipo BOOL, SINT, INT,
DINT o REAL
dentro de un tag. Tiene := Corresponde al smbolo de asignacin
la sintaxis
tag:=expression;
Representa el nuevo valor que se le va a
expresin asignar al tag

Termina la accin
;

No El tag se establece
como cero, cada vez
tag El tag est obteniendo el nuevo valor. Debe
ser de tipo BOOL, SINT, INT, DINT o REAL

Retentiva que el controlador


entra al modo marcha o
[:=] Smbolo de asignacin no retentiva

deja el paso de un SFC


El nuevo valor que se va a asignar al tag
(ya sea con la expresin
instruccin JSR en
Ladder o con la ; Termina la asignacin
asignacin de paso)
EXPRESIONES.
Una expresin es el nombre de un tag, una ecuacin o una comparacin. Para
escribir una expresin, se tienen que utilizar uno de estos elementos.

Nombre del tag que almacena el valor


Variable
Nmero que el programador introduce directamente a la expresin
Valor inmediato
Funciones
Tales como: ABS, TRUNC
Operadores
Tales como: +,-,<,>, And, Or

Expresin Una expresin que produce ya sea un valor BOOL de

Expresin
1(verdadero) o 0(falso)

Puede ser un tag BOOL sencillo

BOOL Usa tags BOOL, operadores con relaciones y


operadores lgicos para comparar valores o verificar
si las condiciones son verdaderas o falsas

Expresin que calcula un valor entero o de coma

Expresin
flotante (punto flotante)

Numrica Una expresin numrica usa operadores aritmticos,


funciones aritmticas y operadores bit a bit.
OPERADORES
Herramientas que permiten comparar operadores y funciones en expresiones
aritmticas, as como tambin relacionar a travs de comparadores si un resultado
es verdadero o falso.

OPERADORES

Operadores Operadores Operadores Operadores bit


aritmticos relacionales lgicos a bit

Componente de texto
estructurado Operadores Aritmticos

Exponente
Modulo-
Operacin Sumar Restar Multiplicar (x a la Dividir
dividir
potencia y)

Operador + - * ** / MOD
INT,
INT, DINT, DINT, INT, DINT, INT, DINT, INT, DINT, INT, DINT,
Tipo de dato REAL REAL REAL REAL REAL
REAL
Comparan dos valores o cadenas para proporcionar un resultado
verdadero o falso.

Verifica si la Verdadera 1
comparacin
es: Falsa 0

Operadores Se utiliza el Tipo: DINT,


Igual
Relacionales operador = REAL, String
Utiliza el Tipo: DINT,
Menor que
operador < REAL, String

Se utilizan los Menor o igual Utiliza el Tipo: DINT,


siguientes que operador <= REAL, String
operadores Utiliza el Tipo: DINT,
con relaciones Mayor que
operador > REAL, String
Mayor o igual Utiliza el Tipo: DINT,
que operador >= REAL, String
Utiliza el Tipo: DINT,
Diferente
operador <> REAL, String

Permiten verificar si mltiples condiciones son verdaderas o falsas.

Verifica si la Verdadera 1
Operadores

comparacin
Lgicos

es: Falsa 0

Y lgico & Operador: AND Tipo de dato: BOOL

Utiliza los O lgico Operador: OR Tipo de dato: BOOL


siguientes
operadores O lgico exclusivo Operador: XOR Tipo de dato: BOOL

Complemento
Operador: NOT Tipo de dato: BOOL
lgico
Operadores Bit
Permiten manipular los bits dentro un valor basado en dos
otros valores y una funcin que los relaciona.
Tipo de dato:
a Bit

Funcin Y & Operador: AND


DINT
Tipo de dato:
Utiliza los Funcin O Operador: OR
DINT
siguientes
Tipo de dato:
operadores Funcin O Operador: XOR
DINT
Complemento de Tipo de dato:
Operador: NOT
funcin DINT

NOTA: Observar que los operadores bit a bit y los operadores lgicos son los mismos.
La nica diferencia est en el tipo de dato comparado. Los operadores lgicos realizan
operaciones lgicas con dos tags tipo BOOL (1 o 0), mientras que los operadores bit a
bit realizan operaciones lgicas con cada bit de un tag tipo DINT. Recordar que los
tags DINT son nmeros decimales que el programa guarda en formato binario. El
resultado de la comparacin lgica bit a bit es entonces guardado en un nmero
binario y luego convertido a decimal para guardarlo en formato DINT. Por ejemplo:
Se realizar la operacin:

Caso #1: Comparacin con Operadores Lgicos


Para que se d esta operacin lgica, A, B y C deben ser variables tipo BOOL. El
programa verificar si los valores de B y C son verdaderos (1 lgico) y si la condicin
se cumple, almacenar un 1 lgico en A. En caso de que no se cumpla la condicin,
almacenar un 0 lgico en A. Esta misma lgica se realiza con los operadores OR, XOR
y NOT.
Caso #2: Comparacin con operadores bit a bit
Para que se d esta operacin, A, B y C deben ser variables tipo DINT. El programa
verificar los valores decimales de B y C, los convertir a binario, y luego los
comparar bit a bit utilizando el operador lgico AND. El resultado de cada operacin
lgica (1 o 0) lo va almacenando en un nuevo nmero binario. Este nmero binario
entonces es convertido a decimal y ser el nuevo valor de A. Se presenta un ejemplo
sencillo a continuacin:
Datos:
A es una variable tipo DINT
B es una variable tipo DINT, cuyo valor decimal es 5
C es una variable tipo DINT, cuyo valor decimal es 1
Operacin:
El programa comparar bit a bit los nmeros 5 y 1 en formato binario. Luego
almacenar el resultado final en formato decimal en A:

FUNCIONES

Las funciones producen un valor obtenido a partir de la modificacin del operando


dentro de sus parntesis. Su principal diferencia con las instrucciones es que no son
autnomas y solo pueden encontrarse dentro de las expresiones. Las funciones
aritmticas realizan operaciones matemticas sobre constantes, tags no booleanos u
otros operandos. A continuacin se muestra una tabla con las funciones aritmticas
ms utilizadas:
Operacin matemtica: Funcin a utilizar: Tipo de datos ptimo
Valor absoluto ABS (expresin_numrica) DINT, REAL
Seno SIN (expresin_numrica) REAL
Coseno COS (expresin_numrica) REAL
Tangente TAN (expresin_numrica) REAL
Arco seno ASIN (expresin_numrica) REAL
Arco coseno ACOS (expresin_numrica) REAL
Arco tangente ATAN (expresin_numrica) REAL
Radianes a grados DEG (expresin_numrica) DINT, REAL
Grados a radianes RAD (expresin_numrica) DINT, REAL
Raz cuadrada SQRT (expresin_numrica) DINT, REAL
Logaritmo natural LN (expresin_numrica) REAL
Logaritmo base 10 LOG (expresin_numrica) REAL
Truncar TRUNC (expresin_numrica) DINT, REAL

INSTRUCCIN
Las instrucciones se ejecutan cada vez que se escanean y son independientes a menos
que se encuentren dentro de una construccin. Una instruccin dentro de una
construccin se ejecuta cada vez que las condiciones de la construccin sean
verdaderas. Si la construccin es falsa, ninguna instruccin o declaracin dentro de las
mismas se ejecutar. A continuacin se muestra una tabla con las instrucciones ms
comunes. Notar que no se mostrarn todas las instrucciones debido a su enorme
variedad. Una lista de todas las instrucciones disponibles en el programa se puede
encontrar en el Manual de Referencia e Instrucciones Generales de los controladores
Logix5000.

Instruccin Significado
ABS Valor absoluto
ADD Suma
SUB Restar
MUL Multiplicar
DIV Dividir
CLR Borrar
CTUD Conteo progresivo/regresivo
EQU Igual a
JSR Saltar a subrutina
NOT No a nivel de bits
PID Proporcional integral derivativo
RTOR Temporizador retentivo activado con restablecimiento
TONR Temporizador de retardo a la conexin con restablecimiento
CONSTRUCCIN
Las construcciones pueden programarse individualmente o dentro de otras
construcciones. Se debe elegir cuidadosamente qu construccin utilizar en base a lo
que se desea hacer:

Si desea Usar la siguiente construccin


Hacer algo si o cuando se cumple una
IF...THEN
condicin especfica
Seleccionar qu hacer segn el valor
CASE...OF
numrico de una variable
Hacer algo una cantidad especfica de
FOR...DO
veces antes de hacer otra cosa
Continuar haciendo algo siempre que
WHILE...DO
ciertas condiciones sean verdaderas
Seguir haciendo algo hasta que una
REPEAT...UNTIL
condicin sea verdadera

A continuacin se profundizar un poco ms en la utilizacin de cada construccin. En


cada punto se mostrarn ejemplos sencillos de cmo se utilizan las construcciones,
adems de una breve descripcin del funcionamiento del programa mostrado.
1, Construccin IF...THEN
La construccin IF...THEN presenta tres comandos bsicos:

Texto Significado
IF condicin1 THEN Si condicin1 es verdadera, ejecutar la sentencia1
sentencia1
ELSIF condicin2 THEN Alternativamente, si la condicin2 es verdadera, ejecutar la
sentencia2 sentencia2
ELSE Si ninguna de las condiciones anteriores es verdadera,
sentencia3 ejecutar la sentencia3
END_IF; Finaliza la construccin

Se deben notar las siguientes caractersticas:


ELSIF y ELSE no con partes obligatorias de la construccin. El usuario puede
decidir colocar un IF...THEN y luego finalizar con END_IF; inmediatamente
despus. En este caso, el programa solo ejecutar la sentencia si la condicin es
verdadera, y no har nada si la condicin es falsa.
IF y ELSIF tienen la misma jerarqua, es decir, no tiene que cumplirse la
condicin del IF para que pueda ejecutarse el ELSIF. Puede haber infinitos
ELSIF dentro de una construccin IF. Generalmente se utiliza el ELSIF cuando
se desea que el IF y el ELSIF tengan una misma condicin ELSE. Esto se hace
para no tener que escribir otra condicin IF nueva para cada ruta de ejecucin
alternativa. Se hace nfasis en el hecho de que ambos textos tienen la misma
jerarqua, ya que depende del usuario que las condiciones establecidas en cada
texto sean diferentes una de la otra. En el caso de que se cumplan
simultneamente las condiciones de un IF y su correspondiente ELSIF, el
programa entrar en conflicto.
Se pueden tener infinitas construcciones IF dentro de otra construccin IF
inicial. Solo se debe ser cuidadoso ya que al final todos y cada uno de los IF
deben finalizar con un END_IF;. De lo contrario, el programa mandar error.
Seguidamente se presenta un ejemplo sencillo del uso de la construccin IF, donde
tanktemp representa la temperatura del agua en un tanque, pumpfast representa el
modo de alta velocidad de una bomba, pumpslow representa el modo de baja
velocidad de la bombay pumpoff representa el apagado de la bomba.

Si la temperatura del tanque es mayor a 200,


ejecutar el modo de alta velocidad de la
bomba.

Si la temperatura del tanque es mayor a 100,


ejecutar el modo de baja velocidad de la
bomba.

Si la temperatura del tanque no est dentro de


los valores establecidos, apagar la bomba.

Finaliza la construccin.

2, Construccin CASE...OF
Se utiliza la construccin CASE...OF para seleccionar una serie de sentencias
dependiendo del valor numrico de una variable. Su estructura bsica es:

Texto Significado
CASE state OF Se ejecutar una serie de sentencias dependiendo del valor
numrico de la variable state
0: Si state = 0, se ejecutar la sentencia1
sentencia1
1..3: Si 1 state 3, se ejecutar la sentencia2
sentencia2
ELSE Si el valor de state no cumple con ninguno de los valores o
sentencia3 rangos establecidos anteriormente, se ejecutar la sentencia3.
END_CASE; Finaliza la construccin
Se deben tomar en consideracin las siguientes caractersticas:
La construccin CASE...OF permite desarrollar de forma mucho ms sencilla
programas que deben ejecutar diversas sentencias dependiendo del valor de
una sola variable. En vez de escribir varios IF para cada valor de la variable, se
puede utilizar una sola construccin CASE..OF.
Dentro de cada set de sentencias, pueden ir un nmero infinito de
construcciones adicionales, como IF...THEN, otro CASE...OF, etc.
En caso de ser necesario, se puede utilizar la construccin CASE...OF para
ayudar con el desarrollo de programas cuyo funcionamiento debe ser una
secuencia. Esto es factible debido a que CASE...OF es una construccin
selectiva: solo permitir la ejecucin de un set de sentencias siempre y cuando
el valor de la variable analizada no cambie. Aunque se cumplan otras
condiciones en otras sentencias que pertenecen a otro valor numrico de la
variable analizada, stas no se ejecutarn. De esta manera, uno puede utilizar la
variable de anlisis como seal de que un paso en una secuencia ha finalizado o
iniciado, as controlando el orden en el que se ejecuta el programa. Ms detalles
se presentarn en el Ejemplo #2 de este captulo.
Ahora se presenta un ejemplo del uso de esta construccin:

Se analizar la variable recipe_number


Si recipe_number=1, se activar la salida #1
del Ingrediente A y la salida #4 del
Ingrediente B
Si recipe_number=2 o 3, se activar la salida
#4 del Ingrediente A y la salida #2 del
Ingrediente B
Si 4recipe_number7, se activar la salida #4
del Ingrediente A y la salida #2 del
Ingrediente B
Si recipe_number=8 o 11recipe_number13,
se activar la salida #1 del Ingrediente A y la
salida #4 del Ingrediente B
Si recipe_number no adquiere ninguno de los
valores establecidos, se cerrarn todas las
salidas

Finaliza la construccin
3, Construccin FOR...DO
Utilice esta construccin para realizar una serie de acciones una cierta cantidad de
veces antes de pasar a hacer otras acciones en su programa.

Texto Significado
FOR A:=valor_inicial TO Se establece que el valor inicial de A ser valor_inicial. Este FOR
valor_final BY aumento se repetir hasta que A llegu hasta valor_final. Cada vez que el
DO ciclo FOR termine, A tendr un aumento igual a aumento.
Siempre y cuando A no haya llegado hasta valor_final, el FOR se
repetir.
IF condicin1 THEN Esta parte del texto es opcional. Si uno desea salir de la
sentencia1; construccin FOR antes de que A llegue hasta valor_final, es
EXIT; posible lograrlo introduciendo una construccin IF que me
END_IF; establezca una sentencia1 y el comando EXIT. Sentencia1
tambin es opcional, ya que uno puede simplemente introducir
el IF y si se cumple, ejecutar el comando EXIT.
END_FOR; Finaliza la construccin

Se presenta el siguiente ejemplo:

Se analizar el aumento de la variable


subscript. Esta variable iniciar en 0 y cada
vez que se termin el FOR tendr un
aumento de 1. El proceso finaliza cuando
subscript = 31.
Cada vez que subscript adquiera una valor, se
borrar la celda nmero subscript de la
matriz.
Si se presiona el botn P antes de que
subscript=31, entonces se saldr de la
construccin FOR.
Finaliza la construccin IF.
Finaliza la construccin FOR.
4, Construccin WHILE...DO

Un lazo WHILE...DO contina ejecutando una serie de acciones siempre y cuando una
condicin no se cumpla.

Texto Significado
WHILE condicin1 DO Mientras la condicin1 sea verdadera, se seguir ejecutando el
lazo WHILE.
IF condicin2 THEN Esta parte del texto es opcional. Si uno desea salir de la
sentencia2; construccin WHILE cuando se cumple la condicin2, entonces
EXIT; utiliza el comando EXIT dentro del IF. Adicional, se pueden
END_IF; realizar otras sentencias, como lo es sentencia2.
END_WHILE; Finaliza el lazo WHILE.

Se presenta el siguiente ejemplo:

Mientras la variable A sea menor o igual a


100, el lazo WHILE seguir en ejecucin.
Cada vez que se inicie el lazo WHILE, se le
sumar 2 a la variable A.
Si se presiona el botn P antes de que A=100,
entonces se saldr de la construccin WHILE.
Finaliza la construccin IF.

Finaliza la construccin WHILE.


5, Construccin REPEAT...UNTIL

Se utiliza la construccin REPEAT...UNTIL para repetir una serie de sentencias hasta


que se cumpla una condicin.

Texto Significado
REPEAT Se repetir la sentencia1 hasta que se cumpla una condicin
sentencia1; establecida posteriormente.
IF condicin2 THEN Esta parte del texto es opcional. Si uno desea salir de la
sentencia2; construccin REPEAT cuando se cumple la condicin2, entonces
EXIT; utiliza el comando EXIT dentro del IF. Adicional, se pueden
END_IF; realizar otras sentencias, como lo es sentencia2.
UNTIL condicin3 Cuando condicin3 sea cierta, se saldr del lazo REPEAT.
END_REPEAT; Finaliza el lazo REPEAT.

Se presenta el siguiente ejemplo:

Cada vez que se inicie el lazo REPEAT, se le sumar 2 a la


variable A. Se seguir sumando 2 unidades a A hasta que se
cumpla la condicin del UNTIL.
Si se presiona el botn P antes de que A sea mayor o igual a
100, entonces se saldr de la construccin REPEAT.
Finaliza la construccin IF.
Se repetir el lazo REPEAT hasta que A sea mayor o igual a
100.
Finaliza la construccin REPEAT.

Diferencia clave entre el lazo WHILE y el lazo REPEAT: El lazo WHILE verifica las
condiciones antes de ejecutar las sentencias, mientras que el lazo REPEAT ejecuta las
sentencias y luego verifica si se ha cumplido o no las condiciones de salida. Es decir,
las sentencias del lazo WHILE puede que nunca ocurran si desde un inicio su
condicin no se cumple, mientras que las sentencias del lazo REPEAT siempre se
ejecutarn al menos una vez.
COMENTARIOS
Son lneas de texto utilizadas para explicar o aclarar qu hacen distintas partes del
programa o brindar informacin adicional si el programador lo desea. Se introducen
al texto con "//" y pueden colocarse en cualquier parte del programa sin temor a que
afecten la programacin del mismo.
Se presenta un ejemplo a continuacin:

Notar que incluso cuando se utilicen operadores dentro de los comentarios, el


programa simplemente los leer como texto. Se pueden introducir infinitos
comentarios de cualquier longitud a lo largo del programa. Se sugiere utilizarlos
cuando el programa es demasiado largo o cuando se comparte el programa con un
tercero que desea entenderlo.
Notas adicionales sobre la programacin en ST (structured text):
1. Texto estructurado no diferencia entre maysculas y minsculas.

2. Texto estructurado no lee la accin de presionar la tecla ENTER o RETURN


como un cambio de lnea. Los cambios de lnea son dictados por los ";". Por
ende, en una misma lnea se pueden escribir diversas asignaciones o acciones,
sin temor a causar conflictos.

3. Las dos instrucciones ms utilizadas son las de un contador y un temporizador.


Ambas tienen su sintaxis propia, pero comparten formatos similares.
Bsicamente, el programador tiene que decirle al programa cuatro datos clave
sobre su temporizador o contador:

Cmo se llama el contador/temporizador?


Hasta cundo debe contar el contador/temporizador?
Cmo se activa el contador/temporizador?
Cmo se reinicia el contador/temporizador?

Para responder estas cuatro preguntas, se utiliza la siguiente sintaxis:


Temporizador retentivo con reinicio (retentive timer on with reset)

Texto Lo que se le dice al programa


RTOR (T1); Este temporizador retentivo se llamar T1
T1.PRE:=constante1; El Preset del temporizador T1 ser constante1.
T1.TimerEnable:=tag1; T1 se activar con tag1
T1.Reset:=tag2; T1 se reiniciar con tag2

Recordar que las instrucciones son autnomas y no necesitan ninguna


condicin previa para ejecutarse.

Contador progresivo/regresivo (counter up/down)

Texto Lo que se le dice al programa


CTUD (C1); Este contador progresivo/regresivo retentivo se llamar C1
C1.PRE:=constante1; El Preset del contador C1 ser constante1.
C1.CUEnable:=tag1; C1 contar progresivamente 1 cuando tag1 se verdadera
C1.CDEnable:=tag2; C1 contar regresivamente 1 cuando tag2 se verdadera
C1.Reset:=tag3; C1 se reiniciar con tag3
Notar que hay una asignacin para CUEnable y otra para CDEnable. Esto es
porque el contador es progresivo/regresivo y es necesario decirle al
programa con qu variable se quiere que el cuente progresivamente y con
qu variable se quiere que el cuente regresivamente. Si solo se utilizar un
contador progresivo, no es necesario incluir el comando C1.CDEnable
(counter down enable). Lo mismo se aplica para el caso contrario.

No es necesario que sean explcitamente tags los que activen o desactiven


los temporizadores o contadores. Por ejemplo, si se desea utilizar
simplemente el bit de cierta entrada o salida, se puede asignar
Local:2:I.Data.0. Tambin se le pueden asignar operaciones,
comparaciones, etc., es decir, cualquier condicin que el programador
desee.

Al igual que en SFC, todos los temporizadores y contadores en texto


estructurado deben ser formato FBD_TIMER y FBD_COUNTER.

4. La programacin en texto estructurado ejecuta simultneamente e


inmediatamente todas las lneas de texto que no estn condicionadas
apropiadamente. Es decir, se comporta similar al lenguaje de diagrama en
escalera, donde haba que tener cuidado de no tener varias lneas de cdigo
accionadas a la vez, a menos que el usuario as lo deseara.

5. El usuario debe controlar el orden en el que se ejecutan las acciones. Texto


estructurado no sigue una secuencia y no le interesa si una lnea de texto est
por encima o por debajo de la anterior. Para seguir la secuencia que el usuario
desee, debe utilizar las construcciones y condiciones adecuadas.

6. Se debe tener cuidado con las construcciones FOR, WHILE y REPEAT, ya que el
programa no realizar ninguna otra accin hasta haber salido del loop. Esto
puede ser muy til o muy perjudicial, dependiendo de lo que el usuario desee
programar.
EJEMPLO N1
LLENADO DEL TANQUE
Enunciado del problema:
El tanque #1 es llenado a partir de un depsito de suministro y la activacin de 3 bombas, cada bomba
entra en operacin bajo diferentes circunstancias.
Cuando el sensor S1 no detecte que existe bajo suministro de agua, y no exista ninguna proteccin
de sobrecarga activada OL y no se ha presionado el botn de STOP, las bombas pueden entrar en
funcionamiento para llenar el tanque #1.
Si el tanque #1 no est lleno y su nivel de agua, baja de S3, se iniciar el ciclo.
Si es la primera vez que se inicia, se accionar la Pump_1. sta permanecer encendida hasta que
se llegue al nivel alto del tanque, momento en el cual se apagar.
Una vez el nivel del tanque baja de S3 luego de un tiempo, se accionar la Pump_2 hasta que el
tanque se llene nuevamente. En ese instante, se apaga la Pump_2.
La tercera vez que el nivel de agua del tanque baje de S3, se accionar la Pump_3 hasta que el
tanque se llene nuevamente. Cuando se llena el tanque, se apaga Pump_3 y se resetea el contador.
El contador haca posible ir alterando el uso de las bombas a medida que el tanque se llena y vaca
a travs del da.
Si en cualquier momento el tanque de suministro baja de los niveles permitidos, todo el sistema se
apagar y se quedar en espera hasta que se llene el tanque de suministro y el usuario presione
START nuevamente.
STOP o cualquiera de las sobrecargas OL apagan el sistema.
ENTRADAS
S1: Sensor nivel bajo de
suministro
S2: Sensor nivel alto del
tanque.
S3: Sensor nivel bajo del
tanque.

SALIDAS
Pump_1: Activacin de
la bomba 1
Pump_2: Activacin de
la bomba 2
Pump_3: Activacin de
la bomba 3.
Este proceso se ilustra en el siguiente programa realizado en Diagrama de Escalera, el cual se desea
programar en texto estructurado.
Programacin en RSLOGIX5000
1. Ejecutar el software RSLogix5000. Esperar que salga su pantalla de inicio, tal como se muestra a
continuacin:

2. Minimizar la ventana de Quick Start haciendo clic en el botn Start Page en el margen
izquierdo
3. Crear un nuevo Archivo. Para ello, hacer clic al botn File de la barra de men, en el margen
superior y hacer clic sobre New.

4. Entonces, se desplegar una ventana, en el cual se debe editar cada una de las casillas propuestas.
Con el nombre, descripcin del proyecto. Adicional se debe especificar la revisin que se est
trabajando, en este caso la 19.

Nombre del
controlador

Versin a utilizar

Nombre del
Proyecto
Breve descripcin
del proyecto

5. Se crea la nueva rutina en Texto estructurado. Para ello nos dirigimos a Controller Organizer>>
Task>>Main Program>>Clic derecho en Main Program>>New Routine.
6. Se nombra la nueva rutina en texto estructurado como LLENADO_DEL_TANQUE

7. Para este ejemplo, no se desarrollar su creacin en RS Logix5000. Ya que el procedimiento es


idntico al Ejemplo #2 hasta el punto en donde se empieza a escribir la programacin. Por ende,
nos limitaremos a explicar este problema, detallando su funcionamiento por seccin.
Si se desea saber a detalle la construccin en RSLogix5000, favor dirigirse al Ejemplo#2.
Seccin donde se habilita la ejecucin del programa. El resto del texto depende de
PERMISIVO_INICIO. Para que el mismo se habilite, se debe pulsar START y no se tiene que
accionar el botn de parada o alguna de las sobrecargas.

Verifica que el tanque a llenar contenga agua por debajo del sensor de boya S3, y que no
sobrepase el sensor de boya S2.

Se declara el contador a utilizar, a medida que el conteo cambia, la activacin de cada


bomba ser diferente. En esta misma seccin se especifica cmo se reinicia el contador,
esto se aprecia en la ltima lnea de esta seccin.

Empieza a actuar la primera bomba, una vez se haya cumplido las condiciones mostradas
en el recuadro.

Ya se ha llenado y vaciado el tanque #1 una vez. Por lo tanto, el contador ha cambiado de 1


a 2. Entonces, se activa la segunda bomba.

Como se ha llenado nuevamente el tanque, el contador cambia, esta vez de 2 a 3. Y


esperar a que el tanque est vaco. En ese instante, se activar la tercera bomba, hasta que
el sensor S2 detecte agua.
EJEMPLO N2

CONTROL DE POSICIN
Nota previa al ejemplo:
El siguiente ejemplo incluye la programacin del problema en texto estructurado, pero tambin incluye un
pequeo tutorial de cmo utilizar variables anlogas y sus valores sensados dentro del programa. Se
utilizar diagrama en escalera para captar la seal del sensor anlogo y luego una nueva instruccin JSR
para cambiar de una subrutina a otra. Adems, como tema adicional, el mismo problema se programar
con la funcin ALARMA en diagrama de bloque de funciones (function block diagram, FBD).
Enunciado del problema:
Se desea utilizar el sensor ultrasnico 873P-DCAV1-D5 para monitorear la posicin de un objeto a travs
de luces indicadoras. Se cuenta con tres luces que se deben encender dependiendo de la distancia a la
cual se encuentre el objeto. Las luces debern indicar cuando el objeto se encuentre a ms de 1800mm,
1000-1400mm, 500-900mm y 300-400mm. En caso contrario, las luces debern apagarse. Para reiniciar
el programa y apagar todas las luces, se utiliza un botn que se tiene que presionar por 5 segundos para
que el reinicio sea efectivo.
Entradas y Salidas:

Sensor Botn de
Ultrasnico reinicio

Entradas

Led indicador
de una
distancia de
300 a 400
mm

Led indicador Led indicador


de una de una
distancia Salidas distancia de
superior a 500 a 900
1800mm mm

Led indicador
de una
distancia de
1000 a 1400
mm
Programacin en RSLOGIX5000
8. Ejecutar el software RSLogix5000. Esperar que salga su pantalla de inicio, tal como se muestra a
continuacin:

9. Minimizar la ventana de Quick Start haciendo clic en el botn Start Page en el margen
izquierdo

10. Hacer un nuevo Archivo. Para ello, hacer clic al botn File de la barra de men, en el margen
superior y hacer clic sobre New.
11. Se desplegar una ventana, la cual debe ser llenada con los datos correspondientes de la aplicacin
a programar y del controlador a emplear. Adicional, en esta misma seccin se nombra el proyecto
y opcionalmente se puede agregar una breve descripcin del proyecto. Dar clic en OK y el
proyecto se habr guardado en la ubicacin seleccionada.

Nombre del
controlador

Versin a utilizar

Nombre del
Proyecto
Breve descripcin
del proyecto

12. Una vez creado el nuevo controlador, se empieza a desarrollar la rutina. Por defecto, la nica
rutina que aparece es en Diagrama Escalera, pero como deseamos programar en Texto
Estructurado, procedemos a crear una nueva rutina. Tal como lo indica el proceso que
desplegaremos a continuacin:
En el Controller Organizer En Main Program, creamos la
Aparece CONTROL DE POSICIN como el nueva rutina
controlador. Al pulsar clic derecho sobre Main Program

Editamos la Nueva Rutina


Asignndole el nombre, descripcin y el tipo
de programacin que deseamos

En resumen, se puede decir:

Controller
Task Main Task Main Program
Organizer

Colocar el nombre
de la nueva rutina Seleccionar New Clic derecho en
(Texto Routine Main Program
estructurado)

13. Ya creada la nueva rutina en texto estructurado procedemos a ingresar los tags que necesitamos,
asignndoles las direcciones de entradas y salidas mostradas en la tabla inferior. Notar que estos
Alias pueden cambiar dependiendo de la preferencia del programador o del PLC utilizado y no
estn de ninguna manera limitados o restringidos a los mostrados en la siguiente tabla. Adems, se
pueden utilizar los Alias directamente como variables en texto estructurado, por lo cual no es
necesario crear un tag para cada uno.
Tipo de
Descripcin Tag utilizado Alias utilizado
variable
Sensor ultrasnico SENSOR_ANLOGO Local:3.I.Ch0Data
Entradas Botn de reinicio --- Local:2:I.Data.0
Salida del sensor escalada POSICIN_MILMETROS ---
Luz indicadora distancia mayor de
--- Local:2:O.Data.3
1800mm
Luz indicadora distancia entre 1000-
--- Local:2:O.Data.2
1400mm
Salidas Luz indicadora distancia entre 500-
--- Local:2:O.Data.1
900mm
Luz indicadora distancia entre 300-
--- Local:2:O.Data.0
400mm
Temporizador de 5 segundos T1 ---

Prestar especial atencin a los tres puntos siguientes:


Alias del sensor ultrasnico: Este sensor es una entrada anloga, no digital. Por ende, el
formato de Alias mostrado en la tabla significa que el programa leer todos los bits del
mdulo #3 del PLC. Si se busca el manual del sensor, se podr observar que es un sensor de
16 bits. Por ende, se utilizarn los 16 bits disponibles en el mdulo 3 para leer la
informacin enviada por el sensor.
Salida del sensor escalada: El tag POSICIN_MILMETROS es el resultado de utilizar un
bloque en diagrama de escalera llamado Scale with Paramaters (SCP). Se brindarn ms
detalles de este bloque y su utilizacin en la seccin siguiente.

14. Antes de proceder a desarrollar el programa en ST, es necesario lidiar con la seal enviada por el
sensor anlogo. Como se mencion anteriormente, el sensor es de 16 bits y enviar la informacin
que est recopilando en combinaciones de bits desde 0 hasta 216. Esto puede cambiar segn el
sensor y el PLC utilizado. Por ejemplo, para este problema, ste no es el caso. Observando el
manual del PLC y el manual del sensor, se puede concluir que el procesador no utiliza los 16 bits
para guardar informacin numrica sobre la variable fsica leda. El procesador lee la informacin
enviada por el sensor de la siguiente manera:

Bits Informacin Almacenada


0 al 6 No relacionada a la magnitud de la variable real leda.
7 al 14 Magnitud de la variable real leda y escalada digitalmente entre 0 y
32640 (32640 = 27+28+29+210...+214). Un nmero dentro de este rango
es el que llegar al PLC.
15 Signo (+ o -)
Una vez concluido que el PLC recibir valores entre 0 a 32640, es necesario utilizar el bloque SCP
(Scale with Parameters) para traducir estos valores a nmeros que nos tengan sentido. Sabiendo
que el sensor lee hasta una distancia mxima de 2500mm y una distancia mnima de 300mm, se
programar el bloque SCP en diagrama de escalera para convertir un valor de cero enviados por el
sensor a 300 mm y un valor mximo de 32640 enviados por el sensor a 2500 mm. Cualquier valor
intermedio ser obtenido acorde a los lmites programados. Sin embargo, el RSLOGIX5000, no
trae por default esta funcin, se necesita importar el archivo, para que est disponible. Los pasos
para hacer esta importacin se desarrollan a continuacin:

Clic derecho en Add On Instruction, y pulsamos la opcin


Import Add-On Instruction. Elegimos el documento que
contiene la instruccin que deseamos aadir y marcamos
clic en OK.

Aparecer la pantalla para configurar la importacin,


dejamos los valores que nos presenta por defecto y
pulsamos clic en OK.
Una vez los pasos anteriores se hayan ejecutado correctamente, se
procede a la pestaa Add-On, donde aparecer la nueva
instruccin SCP.

Le damos clic y la arrastramos hasta el primer escaln, ntese que


en la lnea 0 en la parte izquierda, aparece un punto color verde,
indicando que la instruccin ser puesta all

Empezamos a editar las lneas de la instruccin.


SENSOR_ANALOGO es el tag que elegimos para que se realice el
escalamiento.
El siguiente punto que llenaremos es la
entrada. Recordar que el mdulo utilizado es el
3, ya que se trata de una seal anloga, la cual
denotaremos como Local:3:I.Ch.0.Data.

Nos dirigimos a la salida, donde se le asigna el


tag POSICION_MILIMETROS, el cual debe ser
una variable tipo INT.

Tambin le asignaremos al JSR, la rutina a la


cual debe hacer el salto, en este caso
CONTROL_DE_POSICION.
Finalmente, se le asigna los valores lmites
tanto los mnimos como los mximos. La rutina
en Ladder, debe finalizar vindose as

Notar el uso de la instruccin JSR: Jump to Subroutine. Se utiliza esta instruccin en diagrama de
escalera para pasar a la subrutina CONTROL_DE_POSICIN en texto estructurado, una vez se haya
finalizado el escalamiento de la informacin enviada por el sensor anlogo. Cada vez que la
informacin del sensor anlogo cambie, as mismo cambiar el valor del tag
POSICION_MILIMETROS y el programa en texto estructurado se ejecutar acorde a dicho valor. Los
tags introducidos al programa por ahora deben ser:

Ya se puede proceder a desarrollar el programa en texto estructurado.

15. La accin que ejecuta cada seccin del programa ser explicada mediante comentarios:

Primera parte:
Segunda parte:

El programa en texto estructurado finaliza aqu.

16. DE ESTE PASO EN ADELANTE ES COMPLETAMENTE OPCIONAL. Una vez finalizado el programa,
se podra proceder a construir este programa con otro lenguaje de programacin: FBD, o Function
Block Diagram (diagrama de bloques de funciones). El lenguaje FBD es sumamente intuitivo y
mucho ms sencillo de utilizar en ciertos casos. Sin embargo, detalles sobre su uso no se
proporcionan en este captulo. Se dirige a MainProgram, New Routine, y seleccionamos Function
Block Diagram.

Nos dirigimos al Main Program, pulsamos


clic derecho y creamos una nueva rutina. La
llamamos Alarma, y en el tipo de rutina
seleccionamos Function Block Diagram.
17. Se procede a programar dentro de la rutina Alarma.

En el Controller Organizer, buscamos la rutina ALARMA y


pulsamos doble clic sobre ella. Empezamos a aadir las
instrucciones que necesitamos (Entradas, salidas y
alarma). Notese que en la pestaa de Process
encontraremos a Input Refrence

En la pestaa de Process tambin encontraremos Output


Reference, arrastramos tanto las entradas como las salidas
y la llevamos al espacio de trabajo que se encuentra en
blanco. Se colocan tantas entradas y salidas que sean
necesarias.

La ltima instruccin que necesitamos es Alarma. sta la


encontramos en la pestaa de Process y seleccionamos
ALM, correspondiente a Alarma. Arrastramos la
instruccin y la colocamos donde querramos.
18. Se crean los siguientes tags en Program Tags:

Bsicamente se le asign un aviso luminoso a cada salida del bloque Alarm. Adems se observar
que el tag ALM_01 fue creado automticamente por el programa al momento de aadir el bloque
Alarma.

Editamos los tags correspondientes a


las entradas y las salidas
respectivamente

Una vez, todas las entradas y salidas se le


asignaron los nombres se unen al bloque llamado Se observa que la entrada se traza con lnea
Alarma. Del lado izquierdo conectamos las continua y la salida con lneas punteadas. Esta
entradas y del lado derecho las salidas. accin la hace el programa por default.

Nota: lneas continuas significan valores no booleanos y lneas punteadas significan valores
booleanos.
19. Ahora es necesario asignarle los lmites sobre los cuales el bloque Alarm se basar para funcionar.
Este bloque particular requiere cuatro lmites establecidos: LowLow, Low, High, HighHigh. Cuando
la variable de entrada est por debajo de Low, se activar la salida asignada a L_Alarm. Cuando la
variable de entrada est por debajo de LowLow, estarn activadas las salidas L_Alarm y LL_Alarm.
Cuando la variable de entrada est por encima de High, se activar la salida H_Alarm. Se repite el
comportamiento de L_Alarm y LL_Alarm con H_Alarm y HH_Alarm. Para asignar estos valores, no
es necesario asignarle un Input_Reference a cada parmetro. Simplemente es necesario hacer lo
siguiente:

Hacer clic izquierdo sobre


View Block Properties.

Dentro de Properties, se va a la pestaa


Parameters y se modifican los HHLimit,
HLimit, LLimit y LLLimit.

Claro est que para que este FBD funcione, es necesario nuevamente crear un programa en
diagrama en escalera con SCP y un JSR que lleve a la subrutina Alarma. Una vez finalizado este
paso y tomado en cuenta lo anterior, el programa funcionar de la siguiente manera:
Si POSICIN_MILMETROS est por debajo de LLLimit, se activarn las salidas L_Alarm y
LL_Alarm
Si POSICIN_MILMETROS est por debajo de LLimit, se activar la salida L_Alarm
Si POSICIN_MILMETROS est por encima de de HLimit, se activar la salida H_Alarm
Si POSICIN_MILMETROS est por encima de HHLimit, se activarn las salidas H_Alarm y
HH_Alarm.
En cualquier otro caso, las salidas permanecern desactivadas.
El nuevo programa en FBD cumple prcticamente el mismo propsito que el programa anterior en
ST, con mucho menos tiempo invertido y mucho menos esfuerzo.

También podría gustarte