Está en la página 1de 102

Libro de texto

CoDeSys
Introducción al sistema de
programación IEC 61131-3

Festo Didactic

© Festo Didactic Ar-Festo


Versión: 1.01
Autor: Gabriel Vento
Edición: Meissinger, Sergio Luciano

© 2013 Festo Didactic GmbH & Co. KG

Todos los derechos reservados. Ninguna parte de esta publicación puede ser reproducida, almacenada en
sistemas de recuperación o transmitida en cualquier forma o por cualquier medio, ya sea electrónica,
mecánica, fotocopia, grabación o cualquier otro, sin el permiso previo por escrito de la editorial.

© Festo Didactic Ar-Festo


Contenidos

1 Introducción al estándar IEC 61131 -3 _________________________________________________________ 4

2 CoDeSys – Caracteristicas básicas, instalación y sistemas target __________________________________ 6

3 Estructura de proyectos y unidades de organización de programas _______________________________ 28

4 Tipos de datos ___________________________________________________________________________ 39

5 Operandos en CoDeSys ____________________________________________________________________ 46

6 Lenguajes de programación IEC 61131-3 _____________________________________________________ 53

7 Operadores IEC 61131-3 ___________________________________________________________________ 64

8 Librerias: La librería estándar _______________________________________________________________ 91

9 Apendice A: Atajos de teclado _____________________________________________________________ 100

10 Bibliografia ____________________________________________________________________________ 101

© Festo Didactic Ar-Festo 3


1 Introducción al estándar IEC 61131 -3

IEC – Comisión Electrotécnica Internacional

La Comisión Electrotécnica Internacional (IEC) es la organización líder a nivel mundial en la preparación y


publicación de normas internacionales para todas las tecnologías eléctricas, electrónicas y afines.
Numerosas normas son desarrolladas conjuntamente entre IEC e ISO (normas ISO/IEC).
A la IEC se le debe el desarrollo y difusión de los estándares de algunas unidades de medida,
particularmente el gauss, el hercio y el weber. También fue responsable de la primera propuesta de un
sistema de unidades estándar, el sistema Giorgi, que con el tiempo se convertiría en el sistema
internacional de unidades (SI).

IEC 61131-3 – Estándar de programación en automatización industrial

En la actualidad aún siguen persistiendo sistemas de programación de dispositivos de control específicos


del fabricante, con programación dependiente y conexión compleja entre diferentes sistemas de control.
Esto significa para el usuario costos elevados, escasa flexibilidad y falta de normalización en las
implementaciones de control industrial.
El estándar IEC 61131-3 pretende ser la base en la estandarización de los lenguajes de programación en
automatización industrial. Fue publicado por primera vez en el año 1993 y actualmente se encuentra en
vigencia la segunda revisión (año 2003). El uso de IEC 61131-3 proporciona numerosos beneficios para los
programadores, algunos de los cuales se enumeran a continuación:

 Construcción de un marco normativo para la programación de una gran variedad de sistemas de


control.

 Integración de los bien conocidos y modernos lenguajes de programación, dando especificaciones de


sintaxis y semántica, y evitando particularidades distintivas entre empresas (dialectos).

 Independencia de la plataforma de hardware, haciendo el trabajo independiente de cualquier


compañía.

 Incremento de la reutilización de código, minimizando los gastos en recursos humanos


(entrenamiento, depuración, mantenimiento y consultoría entre otras).

 Integración armoniosa de componentes de diferentes empresas en el sistema de control.

4 © Festo Didactic Ar-Festo


Los elementos definidos en el estándar pueden ser claramente divididos en dos partes, a saber:

Elementos comunes:
o Tipos de datos.
o Variables y declaraciones de datos.
o Configuración (tareas y recursos).
o Unidades de organización de programas (POU).

Lenguajes de programación:
Textuales:
o Listado de instrucciones (IL).
o Texto estructurado (ST).
Gráficos:
o Diagrama de contactos (LD).
o Diagrama de bloques de funciones (FBD).
o Gráfico secuencial funcional (SFC).

En la actualidad existen numerosos entornos de programación IEC que ofrecen diferentes herramientas
tales como sintaxis coloreada, ayuda en línea y verificación en tiempo de diseño entre otras. Estas
características asociadas a la programación no están especificadas en la norma, por lo que los proveedores
de los entornos de programación las utilizan para tratar de diferenciar sus productos. No obstante, no existe
diferencia alguna en lo que respecta a los lenguajes de programación y las características asociadas a ellos.

Las implicaciones técnicas de la norma IEC 61131-3 son altas, dejando bastante espacio para el crecimiento
y la diferenciación. La norma IEC 61131-3 está teniendo un gran impacto en el mundo del control industrial y
éste no se restringe al mercado convencional de los PLC´s. Ahora mismo, se la puede ver adoptada en
aplicaciones para control de movimiento, sistemas distribuidos y sistemas de control basados en PC
(SoftPLC), incluyendo los paquetes SCADA. Y sus áreas de utilización siguen creciendo.

© Festo Didactic Ar-Festo 5


2 CoDeSys – Caracteristicas básicas, instalación y sistemas target
CoDeSys

CoDeSys es un entorno de desarrollo completo (IDE –Integrated development system-) para PLC, compatible
con el estándar de programación IEC 61131-3. Su nombre es un acrónimo para Sistema de Desarrollo de
Controladores (Controller Develop System). Permite utilizar funciones de edición y depuración similares a
las ofrecidas por los más avanzados lenguajes de programación de la actualidad.

CoDeSys es desarrollado y distribuido por la empresa alemana de software 3S. La primera versión (1.0) fue
liberada en el año 1994. Actualmente se encuentra disponible la versión 3.0, aunque la más difundida y la
analizada en este documento es la versión 2.3.

Fig. 2.1: Estructura completa del sistema de desarrollo CoDeSys.

6 © Festo Didactic Ar-Festo


CoDeSys puede ser básicamente dividido en dos partes:

o Desarrollo: Consiste en los editores, compiladores y depuradores para proyectos según IEC 61131-3.
Soporta los 5 lenguajes de programación y genera código objeto nativo para múltiples plataformas.

o Sistema en tiempo de ejecución (Runtime): Realiza El ciclo del control, actualiza las I/O, controla la
comunicación con el sistema de desarrollo y es responsable por la generación de proyectos
autoarrancables (Boot project).

CoDeSys SoftPLC (CoDeSys SP)

Un SoftPLC es un paquete de software diseñado para convertir cualquier sistema embebido o basado en PC
en un PLC. Los sistemas basados en SoftPLC se distinguen de los sistemas de desarrollos clásicos por la
utilización de lenguajes de programación propios del mundo del automatismo.

CoDeSys SP Runtime debe ser implementado para convertir cualquier dispositivo embebido o basado en PC
en un controlador compatible con IEC 61131-3 programable con CoDeSys. La implementación es realizada
por el fabricante del dispositivo en colaboración con 3S, y es totalmente transparente para el usuario final.

Fig. 2.2: Implementación de CoDeSys SP runtime.

© Festo Didactic Ar-Festo 7


Entre las funciones principales de CoDeSys SP runtime se pueden mencionar las siguientes:

o Carga y ejecución de aplicaciones según IEC 61131-3.


o Monitor de depuración para aplicaciones IEC.
o Sistema de entradas/salidas.
o Comunicación de la plataforma con el sistema de desarrollo.

CoDeSys SP runtime es escalable, modular, y adaptable a múltiples plataformas de hardware tales como
ARM, PowerPC e Intel 80x86/Pentium entre otras. Se encuentra disponible para sistemas de 8, 16 y 32 bits,
simple o multitarea y para los sistemas operativos VxWorks, Windows CE, QNX y Linux entre otros. Soporta
también estándares tales como OPC y DDE, lo cual le provee una extensa capacidad de integración para
cualquier tipo de aplicación.

CoDeSys Provided by Festo

CoDeSys es la nueva plataforma de programación adoptada por festo para sus controladores, tales como
CECX, FED-CEC y CPX-CEC entre otros. La elección de este IDE como nueva plataforma de desarrollo tiene
relación con que 3S es uno de los fabricantes de software más importantes en la industria europea de la
automatización, su producto CoDeSys es líder en sistemas de programación independientes del hardware y
es compatible con IEC 61131-3.

CoDeSys provided by Festo se basa en la versión 2.3 de CoDeSys, y le agrega además algunas
funcionalidades específicas tales como:

Fig. 2.3: Splash Screen de CoDeSys provided by Festo.

8 © Festo Didactic Ar-Festo


o Splash Screen de Festo.
o Ayuda online específica.
o Targets y librerías de Festo preinstaladas.

Tanto la instalación de CoDeSys de 3S como la instalación de CoDeSys provided by festo pueden coexistir
en una misma PC. A lo largo de este documento se utilizará el término CoDeSys para referirse
indistintamente a la versión original de 3S o a la versión de CoDeSys provided by festo.

Instalación de CoDeSys y sistemas targets

Instalando CoDeSys

La instalación de CoDeSys es similar a la instalación de cualquier otra aplicación para el sistema operativo
Windows. Al hacer doble clic sobre el instalador se abrirá un asistente que nos guiará a lo largo de todo el
proceso.

La figura 2.4 muestra la pantalla de selección de componentes del asistente de instalación. Es importante
mencionar que la opción CoDeSys Gateway Server quedará seleccionada por defecto, ya que es la
herramienta de comunicación que se utiliza no solo para la obtención de datos desde el controlador sino
también para la comunicación entre CoDeSys y los dispositivos de hardware o sistemas targets.

Fig. 2.4: Pantalla de selección de componentes del asistente de instalación de CoDeSys.

© Festo Didactic Ar-Festo 9


Se presentan también algunas herramientas opcionales, entre las cuales se pueden destacar SoftMotion,
CoDeSys OPC Server y CoDeSys SP PLCWinNT. La última será analizada en capítulos posteriores, mientras
que las dos primeras serán analizadas en niveles avanzados.

Instalando sistemas targets

La plataforma de desarrollo CoDeSys puede ser utilizada para programar una gran variedad de
controladores. Pero para que CoDeSys soporte un determinado hardware, el mismo debe ser previamente
instalado. Esto se logra instalando un paquete de software llamado paquete de soporte de target (TSP o
simplemente target). Los TSP describen en detalles las configuraciones necesarias para controlar una
plataforma de hardware específica con un programa desarrollado en CoDeSys. Las características que se
definen en un TSP incluyen el generador de código (cross-compilador), el mapa de memoria y los módulos
de I/0 entre otros.

Si quiere instalarse un nuevo controlador, debe realizarse mediante su TSP, el cuál es siempre provisto por
el fabricante del hardware, utilizando el programa InstallTarget, el cual es parte integral de la suite de
desarrollo CoDeSys.
La extensión por defecto de un TSP es *.TRG. En caso de que ninguna TSP se encuentre disponible, solo se
dispondrá de la opción ‘None’, y se pasará automáticamente a modo simulación.

Fig. 2.5: Programa InstallTarget, incluido en la suite de desarrollo CoDeSys.

10 © Festo Didactic Ar-Festo


Si se quiere agregar soporte para un nuevo controlador, simplemente se deben seguir los siguientes pasos:

o Inicia el programa InstallTarget el cuál se encuentra en la carpeta de instalación de CoDeSys.


o Presionar el botón Open y seleccionar el directorio conteniendo el archivo *.tnf, el cuál contiene
información sobre el archivo target (*.trg).
o En el panel de la izquierda seleccionar el sistema a instalar y presionar la tecla instalar.
o Cerrar el programa InstallTarget y reiniciar CoDeSys.

De esta manera, el nuevo dispositivo instalado puede ser utilizado tanto para nuevos proyectos como para
modificar la plataforma de hardware en un proyecto ya existente, sin necesidad de modificar la
programación.

Primer inicio con CoDeSys

Al iniciar CoDeSys por primera vez se presentará la ventana principal, la cual se encuentra dividida en
varias secciones, a saber:

o Barras de menú y herramientas: Similar a cualquier otra aplicación, contienen todas las herramientas
disponibles y los menús de configuración, tanto de la aplicación que se está programando como del
entorno de programación.

o Espacio de trabajo (Editor): Espacio principal de trabajo. Su contenido cambiará en función de la


tarea que se esté realizando. Cuando se está programando este espacio se convierte en el editor de
código; en ese caso se encontrará dividido en dos sub-secciones; en la parte superior la
declaración de variables y en la parte inferior el editor de código propiamente dicho.

o Organizador de objetos: Permite recorrer las diferentes secciones y objetos de un proyecto. Desde
este organizador se puede ir a los programas para su edición, pasar al modo de visualización,
definir tipos de variables y configurar los recursos.

o Ventana de mensajes: En esta ventana se muestran los mensajes de salida del compilador.

o Barra de estado: Permite ver en forma rápida el estado del sistema. Es de gran utilidad cuando se
trabaja en modo online.

© Festo Didactic Ar-Festo 11


Barra de menú y estados

Espacio de trabajo

Organizador de objetos

Ventana de mensajes

Barra de estado

Fig. 2.6: Ventana principal del entorno de desarrollo CoDeSys

Características básicas de CoDeSys

Autodeclaración de variables

De acuerdo con el estándar de programación IEC 61131-3, cada variable utilizada en una aplicación de PLC
debe ser declarada. La declaración en CoDeSys debe realizarse manualmente en la parte superior de la
ventada del editor de código, ya sea ingresando la declaración en modo texto o con la ayuda de una tabla.

Fig. 2.7: Ventana de autodeclaración de variables.

Sin embargo, es también posible ingresar la variable en el editor de código sin declaración previa alguna. Al
realizar esto, se abrirá una ventana de diálogo (ver figura2.7) la cual permitirá al programador ingresar el
tipo de variable, la dirección IEC y comentarios asociados entre otros datos. Las variables ingresadas de
esta manera serán auto-declaradas y aparecerán automáticamente en la lista de declaración de variables,
en la parte superior del editor.

12 © Festo Didactic Ar-Festo


Sintaxis coloreada

La sintaxis coloreada es una herramienta muy utilizada en los entornos de programación ya que simplifica
notablemente la lectura del código y la detección de errores de sintaxis. CoDeSys soporta sintaxis coloreada
tanto en el editor de código como en las declaraciones de variables, y los colores utilizados son los
siguientes:

Azul: Palabras claves (Keywords).


Rojo: Palabras escritas incorrectamente.
Verde: Comentarios.
Magenta: Constantes de tiempo, direcciones y expresiones booleanas fijas.

Fig. 2.8: Sintaxis coloreada.

© Festo Didactic Ar-Festo 13


Asistente de entrada

El asistente de entrada puede ser considerado como una de las características más destacadas de la suite
de desarrollo CoDeSys. Al presionar F2 en cualquier situación en la cual se debe ingresar una variable o un
llamado a una función este asistente se abrirá automáticamente y dará acceso a una lista con todas las
posibles entradas, desde variables locales hasta bloque de funciones definidos por el usuario, pasando por
posibilidades tales como bloques de función estándar y variables globales. El árbol de posibilidades puede
ser presentado en forma plana o estar jerárquicamente estructurado.

Fig. 2.9: Ventana del asistente de entrada.

14 © Festo Didactic Ar-Festo


Ayuda sensible al contexto

La ayuda sensible al contexto permite obtener asistencia en forma rápida acerca del objeto específico que
está siendo utilizado, ya sean un operador, una librería o incluso keywords.

Fig. 2.10: Ayuda sensible al contexto.

Seleccionando la expresión sobre la cual se desea obtener ayuda y presionando la tecla F1 se iniciará
automáticamente el asistente mostrando la ayuda específica de la expresión y, generalmente, brindando
ejemplos acerca de su uso. Presionando la tecla F1 sin haber seleccionado expresión alguna permitirá
acceder directamente a la ayuda global.

© Festo Didactic Ar-Festo 15


Configurador de tareas

CoDeSys permite la generación y ejecución de múltiples tareas. Dependiendo del sistema operativo
ejecutado por el controlador, estas tareas pueden ser prioritarias o no-prioritarias. Debe notarse que las
tareas prioritarias solo pueden ser utilizadas en controladores que ejecutan sistemas operativos multitarea.

Fig. 2.11: Configurador de tareas.

El inicio de las tareas también puede ser configurado para que sean realizadas en forma cíclica o disparadas
por eventos.

El configurador de tareas se encuentra en la pestaña de recursos del organizador de objetos. Esta


característica en particular es muy utilizada y será analizada en profundidad en módulos avanzados de
CoDeSys.

16 © Festo Didactic Ar-Festo


Configuración del controlador (PLC)

Para poder acceder a las entradas/salidas físicas del controlador es necesario configurar los módulos
disponibles en él. Para esta tarea, CoDeSys integra una herramienta de configuración la cual puede
encontrarse en la pestaña de recursos del organizador de tareas.
El resultado que se obtiene de la configuración es una imagen de proceso transparente al usuario, en la que
se encontrará disponible la información de las direcciones de las entradas y salidas, ya sea en formato
numérico o simbólico.
Como función adicional, si el PLC es un master CANopen o Profibus DP, puede configurarse el bus de campo
con los archivos EDS (CANopen) o GSD (Profibus). La configuración con AS-interface también es posible.

Fig. 2.12: Configurador del controlador.

© Festo Didactic Ar-Festo 17


Características de funcionamiento en modo online

Cuando se trabaja en modo online la ventana de declaración de variables del editor de código muestra los
valores actuales de las variables del programa que está siendo ejecutado en el controlador y permite
modificarlos. En el caso de variables booleanas el valor es modificado inmediatamente al hacer doble clic
sobre ellas. Para el caso de variables analógicas se abrirá un cuadro de diálogo que permitirá ingresar el
nuevo valor. Sin embargo, con el fin de permitir modificar múltiples variables simultáneamente, los valores
ingresados no serán inmediatamente descargados al controlador hasta que sea ejecutada la orden ‚Escribir
valores‛ del menú online, o la combinación de teclas Ctrl+F7.

CoDeSys también dispone de numerosas opciones de depuración. Una de ellas es el forzado de variables.
Ejecutando el comando ‚Forzar valores‛ (F7) del menú Online, las variables serán reescritas con los valores a
los que sean forzadas en cada nuevo ciclo del PLC. Para liberar las variables debe utilizarse el comando
‚liberar forzado‛ (Shift+F7). Otras herramientas para la depuración del programa es la utilización de
breakpoints y modos de ejecución por pasos o ciclos, los que permiten interrumpir la ejecución del
programa en un punto determinado y ejecutarlo paso por paso, para de esta manera analizar su
funcionamiento.

Fig. 2.13: Opciones de escritura y forzado de variables en modo online.

18 © Festo Didactic Ar-Festo


Si la opción ‚Display flow control‛ del menú online se encuentra activada las líneas de comando o redes
(dependiendo si se programó en modo texto o gráfico) ejecutadas en el último ciclo del PLC serán
coloreadas. Esto ayuda a detectar si determinada porción del código fue ejecutada o no y seguir el flujo del
programa. Además, los valores intermedios de los editores de FBD y CFC y el contenido del acumulador
también serán mostrados.

Para permitir que la aplicación se inicie automáticamente luego de haber iniciado el controlador, debe
utilizarse la opción ‚Crear proyecto de booteo‛ del menú online. Esto generará dos archivos binarios, con
extensión *.PRG y *.CHK respectivamente que serán descargados al controlador. Dichos archivos serán
también almacenados en el directorio del proyecto. CoDeSys no admite el desensamble de los proyectos
descargados, por lo que si se desea tener acceso al código fuente desde el controlador, el mismo debe ser
descargado explícitamente. Al descargar el código fuente se incluyen todos los comentarios y la información
gráfica, la cual se encontrará disponible desde el propio controlador en cualquier momento.

Otra característica importante es la posibilidad de descargar al controlador solo los cambios realizados en el
programa, sin necesidad de detener el controlador o perder el valor de las variables. Debe notarse que la
modificación de cambios no es posible cuando hubo modificación en las tareas, en la configuración de
entrada/salida, o si se incluyeron nuevas librerías en el proyecto.

Fig. 2.14: Modificación online del programa

© Festo Didactic Ar-Festo 19


Simulación integrada

El modo de simulación permite depurar la aplicación sin necesidad de conectarse físicamente al


controlador. Dicho modo puede ser habilitado mediante la opción ‚Modo simulación‛ del menú online. Una
e mostraran automáticamente los valores de las
variables y se podrá trabajar tal y como si se tuviera el dispositivo target conectado. Las entradas y salidas
físicas del controlador también podrán ser simuladas mediante la herramienta de configuración del PLC (Ver
sección 2.4.6).

Graficar variables online

CoDeSys ofrece la posibilidad de graficar el progreso de las variables. Mediante esta funcionalidad pueden
ser capturados eventos de corta duración y luego visualizados como si se tratara de un osciloscopio con
memoria, permitiendo de esta manera una mejor observación y seguimiento de las variables.

Hasta 20 señales pueden ser muestreadas simultáneamente. Los datos muestreados serán luego
almacenados en el controlador hasta que la alimentación sea interrumpida, y pueden ser también
almacenados en la carpeta del proyecto. Esta funcionalidad puede ser utilizada desde la pestaña de
recursos del organizador de objetos.

Fig. 2.15: Pantalla del graficador de variables (Sampling trace).

20 © Festo Didactic Ar-Festo


Seguridad de proyectos

CoDeSys ofrece dos posibilidades para proteger el proyecto contra acceso no autorizado. Seleccionando
‚opciones‛ del menú proyectos pueden definirse contraseñas que serán chequeadas antes de abrir o
guardar el proyecto.

Sin embargo, para tener una protección más específica, es posible definir grupos de usuario con permisos
específicos para tener acceso a determinadas partes del proyecto. De esta manera, puede por ejemplo
darse autorización a un usuario para hacer uso de la visualización pero no autorizarlo para alterar la
programación.

La ventana de configuración de contraseñas puede ser hallada con el nombre‚ contraseñas para grupos de
usuarios en el menú proyecto. Aquí se pueden determinar contraseñas para ocho diferentes niveles de
grupos de usuarios.

Fig. 2.16: Definiendo contraseñas para diferentes grupos de usuarios.

Luego de haber definido las contraseñas para cada uno de los grupos de usuarios, se debe determinar que
objetos pueden ser utilizados por cada uno de ellos, y definir si el acceso concedido será de solo lectura o
lectura/escritura. Ingresando en el menú proyecto Objeto Propiedades, se podrán definir los accesos
del objeto que se encuentre en primer plano, o de todos los objetos del proyecto.

© Festo Didactic Ar-Festo 21


Fig. 2.17: Aplicando niveles de acceso.

Estableciendo comunicación con el controlador

Fundamentos de comunicación

Para poder comprender como se realiza la comunicación entre CoDeSys y un dispositivo target se debe
analizar el esquema de la figura 2.18, en el cuál se realiza una analogía entre el esquema de
comunicaciones de la suite de desarrollo CoDeSys y la ventana de configuración de los parámetros de
comunicación.

Fig. 2.18: Esquema del sistema de comunicación de CoDeSys Ventana de configuración de parámetros de
comunicación.

22 © Festo Didactic Ar-Festo


En la figura se puede ver que el sistema target no se comunica en forma directa con el sistema de desarrollo
sino que se utiliza un Gateway para tal fin. Se deberán tener entonces dos comunicaciones configuradas,
una entre el sistema target y el Gateway, y otra entre dicho Gateway y el sistema de desarrollo.
Análogamente, se puede ver en la ventana de configuración de parámetros de comunicación que ambas
comunicaciones deben estar debidamente configuradas para conseguir el acceso al dispositivo target.

Configuración de la comunicación

Todos los parámetros de configuración pueden ser accedidos y modificados desde la opción Parámetros de
comunicación del menú Online. Esta ventana nos mostrará en el lado izquierdo el Gateway y los canales o
dispositivos configurados. En la parte media de la ventana se podrán modificar las opciones de
comunicación específicas de cada dispositivo o canal, mientras que en la parte derecha se podrán editar las
configuraciones ya existentes, eliminarlas o agregar nuevas.

Fig. 2.19: Ventana de configuración de parámetros de comunicación.

Configurando una conexión TCP/IP.

Para configurar la comunicación entre el sistema de desarrollo y el Gateway debe presionarse la tecla
Gateway en el lado derecho de la ventana. Aquí podrá seleccionarse el tipo de conexión que se utilizará para
acceder al Gateway, la dirección y el puerto correspondiente. Para una comunicación básica entre una PC y
un dispositivo target, debe seleccionarse conexión TCP/IP y la dirección localhost (o 127.0.0.1, dirección de
loop interno de la placa Ethernet) en el puerto TCP 1210 (puerto de escucha por defecto del Gateway
server). Existen muchas otras posibilidades de configuración para esta comunicación, pero las mismas
exceden ampliamente el objetivo de este trabajo y por lo tanto no serán tratadas.

La comunicación entre el Gateway y el sistema target es llamada Canal. Para cada dispositivo target que se
utilice se deberá configurar un nuevo canal de comunicación. Para esto se deberá presionar la tecla Nuevo.
Se abrirá un cuadro de diálogo en el cuál es posible seleccionar el nombre que se le asignará al canal y el
dispositivo que se utilizará, pudiendo el mismo ser RS232, TCP/IP, cliente OPC, etc.

© Festo Didactic Ar-Festo 23


Una vez creado el canal, los parámetros de comunicación del mismo podrán ser configurados directamente
desde la parte central de la ventana principal de parámetros de configuración, y serán diferentes en
función del dispositivo utilizado. La figura 2.19 muestra la configuración de un canal de comunicación
TCP/IP, mientras que en la figura 2.20 puede verse la configuración de una canal RS232.

Fig. 2.20: Ventana de configuración de parámetros de comunicación.

24 © Festo Didactic Ar-Festo


Configurando una conexión RS232.

Una vez configurada la comunicación y seleccionado el canal adecuado, deberá desmarcarse la opción
Modo Simulación del menú Online para poder comunicarse con el dispositivo target. La comunicación se
hará efectiva al seleccionar la opción login del mismo menú o mediante la combinación de teclas Alt+F8.

Descarga y recuperación de proyectos

Modo Online y modificación en línea

La primera vez que se realiza la conexión con el dispositivo target mediante la opción online del menú
online, pueden darse dos situaciones. Una de ellas es que el controlador no se encuentre ejecutando ningún
programa o se encuentre ejecutando un programa diferente, en cuyo caso CoDeSys dará un aviso y
solicitará autorización explícita para realizar la descarga del nuevo programa.

La otra posibilidad es que el controlador se encuentre ejecutando el mismo proyecto que se está tratando
de descargar, en cuyo caso la situación dependerá de si hay diferencias o no entre el proyecto visualizado
en la PC y el controlador.

Si no hay diferencias, el sistema pasara a modo Online sin más, pero en caso de haber diferencias lo
indicará y solicitará una descarga de los cambios, permitiendo de esta manera actualizar el programa que
está siendo ejecutado sin detener la ejecución del ciclo de control. Es importante remarcar que esta opción
no estará habilitada en los casos en los cuales hubo modificación en las tareas, en la configuración de los
módulos de entrada/salida, o si se incluyeron nuevas librerías en el proyecto. En estos casos, se deberá
descargar nuevamente el proyecto completo al controlador.

Otra manera de descargar los cambios realizados es mediante la opción ‚Download‛ del menú online,
la cual solo estará habilitada cuando el sistema se encuentre en modo online y haya modificaciones
disponibles.

Es importante remarcar que al descargar el proyecto de esta manera se está trabajando en la memoria RAM
del dispositivo target, por lo cual si se interrumpe la alimentación del controlador, el programa se borra. Por
otro lado, al descargar el programa mediante la opción Online se está descargando el código compilado, por
lo que no podrá recuperarse el código fuente del programa desde el controlador. La figura
2.23 (1) refleja esta situación.

© Festo Didactic Ar-Festo 25


Creando proyectos autoarrancables

Como ya se menciono anteriormente el conectarse online con el controlador no garantiza que el proyecto
arranque automáticamente luego de alimentado el controlador. Para lograr esto, la opción ‚Crear proyecto
de booteo‛ del menú online debe ser utilizada en el modo online. Esto generará dos archivos binarios, con
extensión *.PRG y *.CHK respectivamente, los cuáles serán descargados al controlador y almacenados en
memoria EEPROM o Flash.

Fig. 2.21: Ventana de configuración de parámetros de comunicación.

Configurando una conexión RS232.

Al descargar el proyecto de esta manera, el mismo se iniciará automáticamente luego de una interrupción
en la alimentación. Sin embargo, al igual que lo que ocurría con la descarga en modo online, solo está
siendo descargado el código compilado, por lo que el código fuente aún no podrá ser recuperado desde el
controlador. La figura 2.23 (2) refleja esta situación.

Puede darse el caso que el dispositivo target soporte la creación automática de proyectos autoarrancables.
En este caso, cada vez que se realice una conexión online con el controlador, el código compilado se
descargará automáticamente a la memoria EEPROM o Flash del mismo.

Recuperación de proyectos

Como se pudo apreciar en los dos apartados anteriores, el código fuente no será en ningún caso descargado
automáticamente al descargar el programa, por lo que para poder recuperar el mismo desde el dispositivo
target, se lo debe descargar en forma explícita.
Para recuperar el código fuente desde un controlador en el cuál la descarga del mismo fue explícitamente
realizada, bastará con seleccionar la opción ‚abrir‛ del menú file y seleccionar la opción ‚Abrir proyecto
desde el PLC‛.

26 © Festo Didactic Ar-Festo


Fig. 2.22: Cuadro de diálogo Abrir. En la parte inferior izquierda puede verse la opción de recuperación de
código fuente desde el controlador.

Seleccionada esta opción, se debe seleccionar el dispositivo target a utilizar y configurar las opciones de
comunicación. Si estos pasos son realizados correctamente, el código fuente será recuperado, junto con los
comentarios y todas las visualizaciones que formaban parte de proyecto original. En la figura 2.23 (3 y 4)
puede verse reflejada esta situación.

Fig. 2.23: Descarga/Recuperación del proyecto fuente y compilado.

© Festo Didactic Ar-Festo 27


3 Estructura de proyectos y unidades de organización de programas

Estructura y características de un proyecto

Fig. 3.1: Estructura de un proyecto en CoDeSys.

Un proyecto CoDeSys contiene todos los objetos del programa del PLC. El proyecto completo es guardado
en un único archivo con extensión *.PRO y los objetos que contiene son las unidades de organización de
programas (POU), los tipos de datos, las visualizaciones y los recursos. Dentro de estas cuatro categorías se
pueden encontrar las variables (locales o globales), las librerías y el código fuente de los programas.

Fig. 3.2: Ventana principal de CoDeSys - Estructura de un proyecto.

28 © Festo Didactic Ar-Festo


Tipos de datos

Los tipos de datos son una de las características definidas por el estándar IEC 61131-3. Además de los tipos
de datos estándar, el usuario tiene la posibilidad de definir sus propios tipos de datos. Este tema será
abordado en profundidad en el capítulo 4.

Visualizaciones

La visualización es una representación gráfica de las variables del proyecto que permite no solo ver la
evolución y estado de variables sino también enviar entradas al PLC en modo online utilizando el teclado o
el mouse de una PC. CoDeSys integra todas las herramientas necesarias para poder crear visualizaciones y
utilizarlas para ver y operar las variables del proyecto.

Fig. 3.3: Editor de visualizaciones en tiempo de desarrollo.

© Festo Didactic Ar-Festo 29


Esta integración ofrece grandes ventajas para la generación de interfaces HMI (Hombre-Máquina). La
visualización integrada de CoDeSys no necesita una lista de tag’s y puede acceder directamente al
controlador. Tampoco se requiere ninguna capa extra de comunicación ya que utiliza el mismo
mecanismo utilizado por el sistema de programación (Ver apartado 2.5). De esta manera, la tarea de
generar la interfaz gráfica para la visualización se puede ver notablemente reducida y simplificada.

La visualización creada en el sistema de desarrollo es en muchos casos utilizada como la única interfaz de
usuario disponible para controlar y observar el programa de PLC asociado en modo online. Sin embargo, la
máscara de visualización creada puede ser ejecutada en cuatro modos diferentes sin sufrir modificación
alguna. Los posibles modos de visualización son los siguientes:

1 – Directamente en el sistema de programación: Para testear la máscara de visualización creada, pero


también por propósitos de servicio y diagnóstico en conexión directa con el controlador.

2 – CoDeSys HMI: CoDeSys HMI es un programa utilizado para mostrar visualizaciones de proyectos en
una PC sin utilizar el sistema de desarrollo completo, y sin necesidad de ninguna capa de comunicación
adicional. Este sistema permite al usuario crear una interfaz de software de bajo costo para la operación
del sistema utilizando las visualizaciones generadas en tiempo de desarrollo.
CoDeSys HMI es ejecutado desde la línea de comando. Por defecto mostrará la visualización llamada
PLC_VISU (Si existiera) en modo pantalla completa. El resto de los elementos de CoDeSys como menús,
organizador de objetos, etc. No se encontrarán disponibles.

Fig. 3.4: CoDeSys HMI siendo ejecutado.

30 © Festo Didactic Ar-Festo


3 – Visualización Web: La visualización web permite operar el sistema a través de un navegador Web,
ya sea en la red local o a través de internet. CoDeSys puede generar una descripción en formato XML a partir
de las visualizaciones, la cual se cargará en el controlador junto con un applet Java que puede ser
visualizado en un navegador.
Para que las visualizaciones creadas en tiempo de desarrollo se encuentren disponibles como visualización
Web, el sistema target debe soportar esta funcionalidad y se deberá iniciar y configurar un servidor web en
el mismo. Esta función no se encuentra disponible en la actual línea de controladores programables con
CoDeSys de festo.

Fig. 3.5: Estructura del sistema de visualización Web.

4 – Visualización en sistema target: Si el sistema target tiene incorporado una interfaz de visualización,
algún periférico de entrada y soporta la funcionalidad ‚Target visualization‛, los datos de visualización
pueden ser descargados desde el sistema de programación junto con la aplicación al sistema target. La
visualización será presentada entonces directamente desde el sistema target.
Para implementar esta función de visualización debe incluirse en el proyecto la librería SysLibTargetVisu.lib.
Además, el sistema target debe ejecutar un sistema operativo Windows® (NT/2000/CE).

© Festo Didactic Ar-Festo 31


Recursos

En la pestaña de recursos pueden encontrarse todos los objetos necesarios para configurar y organizar el
proyecto. A lo largo de este documento se presentan y detallan la gran mayoría de estos objetos, por lo que
solo se presentará aquí una breve descripción de los principales. Adicionalmente, otros recursos pueden
encontrarse disponibles dependiendo de la plataforma de hardware utilizada, tal como CNC Program list o
CamEditor entre otros.
Algunas de los objetos principales son los siguientes:

Fig. 3.6: Vista del administrador de recursos.

o Variables globales: Configuración de aquellas variables que pueden ser utilizadas a lo largo de todo
el proyecto.
o Configuración de alarmas: Para la configuración y el manejo de las alarmas en el proyecto.
o Administrador de librerías: Permite administrar las librerías que se incluyen en el proyecto.
o Log: Registra las actividades durante las sesiones online.
o Explorador de PLC: Terminal basada en texto para la comunicación con el sistema target a través de
comandos.
o Configuración del PLC: Para la configuración del dispositivo target.
o Graficar variables online: Para presentar la evolución de las variables en forma gráfica.
o Configuración de target: Para la selección y configuración de la plataforma de hardware.
o Configuración de tareas: Para controlar el programa a través de múltiples tareas.

o Administrador de recetas: Para indicar y pre-configurar los valores de las variables, dependiendo del
sistema target y de la configuración realizada.
o Espacio de trabajo: Permite acceder y modificar las opciones generales de configuración del
proyecto.

32 © Festo Didactic Ar-Festo


POU - Unidades de organización de programas

Un programa CoDeSys según IEC 61131-3 se encontrará dividido en múltiples unidades denominadas POU.
Una POU es una unidad de organización de programa; cada una de ellas consistirá de una declaración de
variables locales y un cuerpo escrito en uno de los lenguajes de programación definidos por la norma IEC
61131-3.
El estándar especifica tres tipos de POU: funciones, bloques de funciones y programas. Una POU puede
llamar a otra POU, pero la recursión no está permitida.
La ejecución del proyecto se inicia con una POU especial llamada PLC_PRG (programa principal, similar al P0
de los controladores de la línea FEC de festo) y es ejecutado cíclicamente. Cada proyecto debe contener este
programa a menos que se configuren tareas que especifiquen un funcionamiento diferente.

Fig. 3.7: Programa principal PLC_PRG – Ciclo de ejecución.

Funciones

Una función es una POU que permite múltiples entradas y produce exactamente un elemento de salida al
ser procesada. Es importante notar que las funciones tienen un tipo, por lo cual debe especificarse el mismo
en la declaración. Además, el resultado debe ser asignado a la función, lo que implica que el nombre de la
misma es utilizado como variable de salida. La declaración de una función comienza siempre con la palabra
clave FUNCTION.

Fig. 3.8: Declaración y cuerpo de una función simple en IL(1).

© Festo Didactic Ar-Festo 33


Las funciones no almacenan valores de la última llamada, y sus variables locales serán inicializadas en cada
llamado. Se utilizan en general para expresiones de cálculo complejas y repetitivas. Debe notarse que el uso
de variables globales en las funciones no cumple con el estándar IEC 61131-3 a pesar de que CoDeSys lo
permita.

o IL:

o ST:

o FBD:

Fig. 3.9: Ejemplos de llamado a una función en diferentes lenguajes.

34 © Festo Didactic Ar-Festo


El llamado a la función en ST(2) puede aparecer como un operando en una expresión, mientras que en
SFC(3) la función solo puede tomar parte dentro de un STEP o en una transición.

Bloques de funciones

Un bloque de función es una POU que puede tener varios valores de entradas y que entrega uno o más
valores de salida. A diferencia de una función, un bloque de funciones retiene los valores hasta que se la
procesa nuevamente. La declaración de un bloque de funciones comienza con la palabra clave
FUNCTION_BLOCK.

Fig. 3.10: Declaración y cuerpo de un bloque de funciones simple en IL.

© Festo Didactic Ar-Festo 35


Múltiples instancias o copias de bloques de funciones pueden ser creadas; cada instancia tendrá su propio
nombre y estructura de datos, conteniendo sus entradas, salidas y variables internas. Cada copia debe ser
declarada como una variable del tipo
‚Bloque de función‛. Por ejemplo, para declarar una copia llamada ‚copia1‛ del bloque de funciones
‚bloque1‛:
VAR
Copia1:bloque1;
END_VAR

(1) IL: Listado de instrucciones, lenguaje basado en texto definido por IEC 61131-3.
(2) ST: Texto estructurado, lenguaje basado en texto definido por IEC 61131-3.
(3) SFC: Gráfico de flujo secuencial, lenguaje gráfico definido por IEC 61131-3.

Solo los parámetros de entrada y salida pueden accederse desde fuera del bloque de funciones y el acceso
se restringe a la POU en la cual se declaro la instancia, a menos que sea declarada como variable global.
Para utilizar una variable de una copia específica del bloque de funciones se debe utilizar el operador punto
(.) de la siguiente manera:

Nombre_de_la_copia.Nombre_de_la_variable

36 © Festo Didactic Ar-Festo


IL:

ST:

FBD:

Fig. 3.11: Ejemplos en varios lenguajes de llamados a una instancia de un bloque de funciones.

Cabe destacar también que si alguna variable del bloque de funciones es declarada como retentiva, la
instancia completa será luego almacenada en el área retentiva de la memoria del controlador.
Por último, analizando las llamadas a los bloques de funciones, se puede ver que difieren de los llamados a
funciones simples en que se puede obtener más de una variable de salida y que las mismas son retenidas
hasta un nuevo llamado, no siendo necesaria una asignación inmediata. La figura 3.11 muestra llamados al
bloque de funciones creado en la figura 3.10 en IL, ST y FBD4.

© Festo Didactic Ar-Festo 37


Programas

Un programa es una POU que devuelve múltiples valores durante su ejecución. Los programas son
reconocidos globalmente a lo largo del proyecto y todos los valores son retenidos desde la última ejecución
hasta la siguiente.

No puede haber múltiples instancias de un programa y los programas no pueden ser llamados desde
funciones. Por otra parte, si un programa es llamado y se modifican sus valores, estos permanecerán de
esta manera hasta que el programa sea llamado nuevamente, incluso si se lo llama desde una POU
diferente. Esta es la diferencia con un bloque de funciones, en la cual los valores solo son modificados en la
instancia dada y solo son válidos cuando la misma instancia es llamada nuevamente. La declaración de un
programa comienza con la palabra clave PROGRAM.

Fig. 3.12: Declaración y cuerpo de un programa en IL.

Si se desea llamar al programa con parámetros de entrada/Salida, se lo puede hacer de la misma forma que
se haría en un bloque de funciones. Además, todas las variables de un programa pueden ser accedidas
desde la POU que lo ejecutó.

(4) FBD: Diagrama de bloque de funciones, lenguaje gráfico definido por IEC 61131-3.

38 © Festo Didactic Ar-Festo


4 Tipos de datos

En CoDeSys pueden utilizarse tipos de datos estándar o definidos por el usuario. Cada nombre de variable o
identificador debe ser asignado a un tipo de dato, indicando de esta manera la cantidad de memoria que
será reservada y el tipo de valores que se podrá almacenar en dicha posición de memoria.

Tipos de datos estándar


Datos Booleanos

Las variables de tipo BOOL pueden tomar dos posibles valores: Verdadero o
Falso. Se reservan 8 bits de memoria para cada variable de este tipo.

Datos Enteros

En la tabla 4.1 se enumeran los posibles tipos de datos enteros, los rangos de valores que cubren y la
cantidad de memoria que es reservada para cada uno de ellos.

Tipo Límite inferior Límite superior Espacio de Memoria

BYTE 0 255 8 bit


WORD 0 65535 16 bit
DWORD 0 4294967295 32 bit
SINT -128 127 8 bit
USINT 0 255 8 bit
INT -32768 32767 16 bit
UINT 0 65535 16 bit
DINT -2147483648 2147483647 32 bit
UDINT 0 4294967295 32 bit

Tabla 4.1: Tipos de datos enteros.

© Festo Didactic Ar-Festo 39


Datos Reales

También conocidos como variables de punto flotante, son utilizadas para la representación de números
racionales.

Tipo Límite inferior Límite superior Espacio de Memoria


1.175494351 3.402823466
REAL x10-38 x1038 32 bit
2.22507385850 1.797693134862
LREAL 64 bit
72014x10-308 3158x10308

La tabla 4.2 resume los dos tipos de variables que pueden encontrarse dentro de esta clasificación.

Cadena de caracteres (strings)

Una variable de tipo STRING puede contener cualquier cadena de caracteres. Su tamaño se define en la
declaración, entre paréntesis y a continuación del tipo, y determina la cantidad de memoria a reservar. Sin
embargo, si no es definido al momento de la declaración, el tamaño por defecto que se utilizará será de
80 caracteres. La longitud máxima del string no está limitada en CoDeSys, pero es importante saber que las
funciones para tratamiento de cadenas solo pueden manejar hasta 255 caracteres.

Sintaxis de declaración:

<Identificador>: STRING (<Longitud_del_string>);

Tipos de datos de tiempo (Temporales)

Estos tipos de datos serán internamente tratados como variables del tipo DWORD (32 bits). Los posibles
tipos de datos temporales que pueden presentarse son mostrados en la tabla 4.3.

Tipo Límite Límite superior Espacio de


inferior Memoria
TIME 49d17h2m47s295ms 32 bit
TIME_OF_DAY 12:00:00 AM 23:59:59.999 PM 32 bit
(TOD)
DATE 01/01/1970 06/02/2016 aprox. 32 bit

DATE_AND_TIME 01/01/1970, 06/02/2016, 32 bit


(DT) 12:00:00 AM 06:28:15 AM aprox.

Tabla 4.3: Tipos de datos temporales.

40 © Festo Didactic Ar-Festo


Tipos de datos definidos por el usuario

Arreglos

CoDeSys soporta arreglos de una, dos y hasta tres dimensiones, los cuales pueden ser declarados tanto en
la declaración de la POU como en la lista de variables globales.

Tiempo de desarrollo:

Tiempo de ejecución:

Fig. 4.1: Declaración de arreglos en tiempo de desarrollo y ejecución respectivamente.

© Festo Didactic Ar-Festo 41


Sintaxis de declaración:

<Identificador>: ARRAY [<LI1>..<LS1>, <LI2>..<LS2>] OF <TIPO_DE_DATO>

Donde LI1, LI2 son los límites inferiores del rango del campo y LS1, LS2 serán los límites superiores. Estos
límites deben ser valores enteros y deben estar dentro del rango de valores de las variables de tipo DINT.
Cuando se trabaja con arreglos puede definirse una función llamada CheckBounds (Provista por la librería
Check.lib) que permitirá chequear y corregir errores de fuera de rango en los arreglos.

Punteros

Las variables de tipo puntero contienen las direcciones de otras variables o bloques de funciones. Un
puntero puede apuntar a cualquier tipo de datos o bloque de funciones, incluso tipos definidos por el
usuario. Para cargar una dirección al puntero se debe utilizar el operador ADR, mientras que para leer el
contenido de la variable apuntada por el puntero se debe agregar el operador ^ a continuación del nombre.

Sintaxis de declaración:

<Identificador>: POINTER TO <TIPO_DE_DATO/BLOQUE_DE_FUNCIONES>;

Fig. 4.2: Variable de tipo puntero en tiempo de ejecución.

42 © Festo Didactic Ar-Festo


Enumeración

Se trata de un tipo de variable definida por el usuario, formada por una cantidad de constantes del tipo
strings. Dichas constantes son referenciadas luego como valores de una enumeración. Los valores de una
enumeración son reconocidos en todas las áreas del proyecto, incluso si fueron declaradas dentro de una
POU.

Fig. 4.3: Declaración de un tipo de variable enumeración definida por el usuario.

© Festo Didactic Ar-Festo 43


Fig. 4.4: Ejemplo de uso en tiempo de ejecución de una variable de tipo enumeración.
Sintaxis de declaración:

TYPE <Identificador> : (<Enum_0>,<Enum_1>,…,<Enum_2>); END_TYPE

La forma correcta de crear enumeraciones es en el organizador de objetos, bajo la pestaña ‚Tipos de Datos‛.
Luego de ser declarada, las variables del tipo <Identificador> pueden tomar cualquiera de los valores de la
enumeración.

Estructuras

Las estructuras permiten declarar un tipo de variable definido por el usuario que contiene a la vez una
determinada cantidad de otras variables, cada una con su respectivo tipo. Son creadas en el organizador de
objetos bajo la pestaña ‚Tipos De Datos‛, y son reconocidas en todas las áreas del proyecto. Para acceder a
un elemento o variable específica dentro de una variable del tipo estructura se debe utilizar el operador
punto (.).

Fig. 4.5: Ejemplo de declaración de una estructura definida por el usuario.

Sintaxis de declaración:

TYPE <Nombre_de_la_estructura>: STRUCT


<Declaración_de_variable_1>
<Declaración_de_variable_2>

<Declaración_de_variable_2>
END_STRUCT
END_TYPE

44 © Festo Didactic Ar-Festo


Fig. 4.6: Ejemplo de uso de una estructura de datos.

© Festo Didactic Ar-Festo 45


5 Operandos en CoDeSys
Declaración de variables
Generalidades

Como ya se pudo observar en capítulos anteriores, todas las variables deben ser declaradas antes de poder
ser utilizadas. El editor de declaración es utilizado para declarar variables en cada POU, o un apartado
especial en la pestaña de recursos del organizador de objetos para declarar variables de uso global. Las
variables a ser declaradas pueden ser de entrada, salida, entrada/salida, locales, globales, retentivas o
remanentes. En general, la declaración de una variable presenta la siguiente sintaxis:

<Identificador> {AT <dirección>}:<tipo>{:=<valor_inicial>}; (Las partes entre llaves son opcionales)

El nombre de la variable no puede contener espacios, no puede estar duplicado en un mismo ámbito y no
puede ser igual a ninguna palabra clave. Por otra parte, mayúsculas/minúsculas son ignoradas y la longitud
del nombre no tiene limitaciones.
Todas las declaraciones de datos pueden ser inicializadas agregándole al final la cadena ‚:=‛ seguida del
valor inicial. Si las variables no son inicializadas, el valor inicial por defecto será siempre cero.

Fig. 5.1: Opciones de ayuda del editor de declaraciones, a través del menú insertar.

Por otro lado, para brindar mayor soporte al programador y simplificar la tarea de declaración de variables,
CoDeSys permite ver el listado completo de los tipos de datos soportados. Para esto, se debe ir al menú
‚insertar‛ y seleccionar la opción ‚tipo‛.
La declaración de variables puede también ser realizada en forma rápida con la ayuda de la función de auto-
declaración de variables, ya analizada en la sección anterior.

46 © Festo Didactic Ar-Festo


Keywords

Las palabras claves o Keywords deben ser escritas en letras mayúsculas en todos los editores. Aparecerán
en color azul y no podrán ser utilizadas como variables. Mediante la opción ‚Palabras claves de declaración‛
del ‚menú insertar‛ puede obtenerse un completo listado de las palabras claves que pueden ser utilizadas
en la declaración de variables.

Fig. 5.2: Opciones de ayuda del editor de declaraciones, a través del menú insertar.

Sintaxis de direcciones

El acceso a ubicaciones de memoria individuales es realizado a través del uso de secuencias de caracteres
especiales. Estas secuencias consisten de una concatenación del signo porcentual (%), un prefijo de rango,
un prefijo de tamaño y uno o más números naturales separados por puntos. Las tablas 5.1 y 5.2 muestran
los posibles valores que pueden tomar ambos prefijos y su significado.
De esta manera, si se quiere hacer referencia a la entrada digital Y.Z del controlador se debería utilizar la
secuencia %IXY.Z.

Prefijo Significado
I Entrada
Q Salida
M Ubicación de memoria
Tabla 5.1: Prefijos de rango.

© Festo Didactic Ar-Festo 47


Prefijo Significado
X Bit
none Bit
B Byte (8 bits)
W Word (16 bits)
D Double Word (32 bits)
Tabla 5.2: Prefijos de tamaño.

Para vincular una variable a una dirección, se debe utilizar en la declaración la palabra clave AT, asignando
de esta forma una etiqueta a la dirección. Luego, ante cualquier modificación en la dirección de las señales
de entrada o salida, solo deberá modificarse la línea de la declaración y no el programa completo.

Figura 5.3: Ejemplos de direcciones.

Tipos de variables

Variable de Entrada, Salida, Entrada/Salida

o Variables de Entrada: Son declaradas entre las palabras claves VAR_INPUT y END_VAR. Son
utilizadas como valores de entrada a la POU. Pueden ser accedidas desde fuera de la POU mediante
el operador punto (.).

o Variables de Salida: Son declaradas entre las palabras claves VAR_OUTPUT y END_VAR. Son
utilizadas como valores de salida de la POU. Pueden ser accedidas desde fuera de la POU mediante
el operador punto (.).

o Variables de Entrada/Salida: Son declaradas entre las palabras claves VAR_IN_OUT y END_VAR. Son
utilizadas como valores de entrada y salida de la POU. Pueden ser accedidas desde fuera de la POU
mediante el operador punto (.).

48 © Festo Didactic Ar-Festo


Variables remanentes

Las variables remanentes son aquellas variables que pueden retener sus valores ante situaciones
anormales de la ejecución del programa. Las variables remanentes se pueden dividir en dos tipos:

o Variables Retentivas: Se identifican con la palabra clave RETAIN, y mantienen su valor incluso luego
de la desconexión del controlador. Sin embargo, estas variables son reinicializadas cuando se
realiza una nueva descarga del programa.

o Variables persistentes: Se las identifica con la palabra clave PERSISTENT. A diferencia de las
variables retentivas, las variables persistentes mantienen su valor solamente luego de una nueva
descarga del programa, pero no lo hacen ante una desconexión del controlador, ya que no son
almacenadas en el área retentiva de la memoria del controlador.

Fig. 5.4: Ejemplo de declaración de los diferentes tipos de variables remanentes.

Si es necesario que una variable sea conservada tanto ante una desconexión como ante una nueva
descarga del programa, se deberían utilizar ambas palabras claves en la declaración (RETAIN PERSISTENT).
Las variables de tipo retentivas son, como es de esperarse, almacenadas en el área retentiva de la memoria
del controlador. Debido a esto es importante destacar los siguientes puntos:

o Si una variable local en un programa es declarada como retentiva, dicha variable será almacenada en
el área retentiva de la memoria. Lo mismo ocurre con las variables globales.
o Si una variable local en un bloque de funciones es declarado como retentiva, la copia completa del
bloque de funciones será almacenado en el área retentiva de la memoria del controlador.
o Si una variable local en una función es declarada como retentiva, no tendrá efecto alguno. La variable
no será almacenada en el área retentiva de memoria. Lo mismo ocurre si es declarada como
persistente.

© Festo Didactic Ar-Festo 49


Variables Locales y Globales

Las variables locales son declaradas entre las palabras claves VAR y END_VAR en el editor de declaración de
la POU a la cual pertenecen, y son solo válidas en el ámbito de dicha POU. Las variables locales no tienen
conexión externa, por lo que no podrán ser escritas desde fuera de la POU.
Por su parte, las variables globales son declaradas en un apartado especial en la pestaña de recursos del
organizador de objetos, entre las palabras VAR_GLOBAL y END_VAR. Este tipo de variables son reconocidas
a lo largo de todo el proyecto.

Fig. 5.5: Variables locales y globales.

Debe notarse que dos variables pueden ser nombradas con igual identificador en caso de tratarse de
diferentes ámbitos. En este caso, dentro de la POU en la cual se repitió el identificador, si no se detalla
mediante el operador punto (.), la variable local es la que tendrá validez por encima de cualquier otra. Esto
se explica gráficamente en la figura 5.5. Incluso en el caso de variables locales y globales, puede utilizarse
el mismo identificador. Sin embargo, dentro de la POU específica, la variable con validez será la local por
encima de la global, por lo que debe tenerse especial cuidado al repetir identificadores de variables.

Constantes

Constantes Binarias

Las constantes binarias son directamente los valores lógicos VERDADERO y FALSO.

50 © Festo Didactic Ar-Festo


Constantes Temporales

Las constantes temporales son generalmente utilizadas para operar los temporizadores de la librería
estándar. Para utilizar una constante de tiempo se debe respetar el siguiente formato:

<Identificador>:= T#<xx>d<xx>h<xx>m<xx>s<xx>ms

Como puede notarse, en la declaración pueden ser incluidos días, horas, minutos, segundos y milésimas de
segundos. Las entradas temporales deben colocarse en orden de acuerdo con la longitud temporal de cada
uno de los campos (por ejemplo días debe ir antes de horas, a la vez que horas deben ir antes de minutos y
minutos antes de segundos). Sin embargo, no es necesario utilizar todos los campos. Por otra parte, deben
respetarse los rangos máximos permitidos de cada uno de los campos, los cuales pueden ser observados en
la tabla 5.3. Debe notarse que estos rangos no serán válidos para el primer campo utilizado en la constante
temporal. Esto se puede ver claramente en la figura 5.6, en la cual se muestran algunos ejemplos de
utilización de constantes temporales.

Campo Rango
Días (d) Ilimitado
Horas (h) 0 – 23
Minutos (m) 0 – 59
Segundos (s) 0 – 59
Milisegundos (ms) 0 – 999
Tabla 5.3: Rango de campos para constantes temporales.

Fig. 5.6: Ejemplo de utilización de constantes temporales.

© Festo Didactic Ar-Festo 51


Constantes Numéricas enteras

Las constantes numéricas pueden ser expresadas en diferentes sistemas de representación, tales como
binario, octal, decimal y hexadecimal.

Fig. 5.7: Ejemplo de utilización de constantes numéricas enteras.

En el caso de valores enteros decimales, pueden ser utilizados directamente. En caso de enteros
expresados en una base diferente, debe precederse el valor por la base y el signo numeral, tal como puede
observarse a continuación:

o Número Decimal: 62
o Número Binario: 2#1001_0011 (El guión bajo puede ser utilizado o no)
o Número Octal: 8#67
o Número hexadecimal: 16#A46F

En la figura 5.7 pueden apreciarse ejemplos de constantes numéricas enteras expresados en diferentes
sistemas de representación.

Constantes Reales

Las constantes numéricas reales pueden ser expresadas en formato fraccionario decimal o exponencial.
Independientemente de esto, el símbolo decimal a utilizar sigue los lineamientos del estándar americano,
por lo que se utiliza el punto en lugar de la coma decimal. La figura 5.8 muestra algunos ejemplos de uso.

Fig. 5.8: Ejemplo de utilización de constantes Reales.

52 © Festo Didactic Ar-Festo


6 Lenguajes de programación IEC 61131-3
CoDeSys soporta la totalidad de los lenguajes que se describen en el estándar IEC 61131-3, los cuáles
pueden ser divididos en dos grupos:

Textuales:
o Listado de instrucciones (IL).
o Texto estructurado (ST).
Gráficos:
o Diagrama de contactos (LD).
o Diagrama de bloques de funciones (FBD).
o Esquema secuencial de funciones (SFC).

Adicionalmente se encuentra disponible la posibilidad de programar en lenguaje gráfico secuencial


continuo (CFC), el cual no es tratado como un lenguaje independiente por ser básicamente una
representación gráfica diferente del lenguaje de diagrama de bloque de funciones (FBD).

Lenguajes de programación textuales


IL – Listado de instrucciones

La programación en listado de instrucciones consiste en una serie de instrucciones, cada una de las cuáles
comienza en una nueva línea y contiene un operador y uno o más operandos separados por comas. Este
lenguaje permite una programación rápida y simple cuando el programa es pequeño. Cada operación se
basa en el uso de un registro especial llamado acumulador, de forma similar al lenguaje assembler. Antes
de realizar alguna operación se debe cargar el valor o la variable con la que se quiere operar en el
acumulador. Luego de realizada la operación, el resultado quedará disponible nuevamente en el
acumulador. Antes de la instrucción puede colocarse una etiqueta seguida por dos puntos (:). Los
comentarios se deben encerrar entre asteriscos y paréntesis (Ver figura 6.2) y pueden ocupar una línea
completa o encontrarse al final de una línea de programa. Todos los operadores IEC 61131-3 son
soportados (este tema se profundizará en el módulo 7).
Debe notarse que el lenguaje de listado de instrucciones no soporta la programación estructurada.

Fig. 6.1: Uso del acumulador para operar en IL.

© Festo Didactic Ar-Festo 53


Fig. 6.2: Ejemplo de programación en listado de instrucciones (IL).

También pueden utilizarse modificadores, los cuales modificarán la manera en que un determinado
operador es ejecutado. Los siguientes modificadores pueden ser utilizados en listado de instrucciones:

o C (Con JMP, CAL, RET): La instrucción es solamente ejecutada si el resultado de la expresión


anterior es VERDADERO.
o N (Con los operadores JMPC, CALC, RETC): La instrucción será solamente ejecutada si el resultado de
la expresión anterior es FALSO.
o N (En cualquier otro caso): Negación del operando (no del acumulador).

En la tabla 6.1 pueden verse los operadores que pueden ser afectados por modificadores en IL, y los
posibles modificadores. En el capítulo 7 se dará una explicación detallada de la función de cada uno de los
operadores.

Operador Modificadores
LD N
ST N
AND N
OR N
XOR N
JMP CN
CAL CN
RET CN

Tabla 6.1: Operadores afectados de modificadores en IL.

54 © Festo Didactic Ar-Festo


Fig. 6.3: Ejemplo de programa en listado de instrucciones utilizando algunos modificadores.

ST – Texto Estructurado

La programación en texto estructurado es un lenguaje de alto nivel que permite la utilización de


condicionales y bucles (Conocidos generalmente por su nombre en inglés, loops). Este lenguaje es el ideal
para aquellos programadores con experiencia en lenguajes como C o Pascal, ya que pueden familiarizarse
con él casi de inmediato.

La programación en texto estructurado se basa en expresiones. Una expresión es una construcción que
retorna un valor luego de su evaluación, y se compone de operadores y operandos. Un operando puede ser
una constante, una variable, un llamado a una función u otra expresión. La evaluación de expresiones se
realiza a través del procesamiento de operadores de acuerdo a ciertas reglas de prioridad. El operador con
la mayor prioridad es procesado primero, luego el operador con el siguiente nivel de prioridad, y así
sucesivamente hasta que todos los operadores hayan sido procesados. Operadores con igual nivel de
prioridad son procesados de izquierda a derecha. La tabla 6.2 muestra la prioridad de los operadores en ST.

Operación Operador Nivel de Prioridad


Paréntesis (expresió Máxima prioridad
Llamado a una función Nombre den)función (parámetros) .
Potenciación EXPT .
Negación NOT .
Multiplicación * .
División / .
Módulo MOD .
suma + .
Resta - .
Comparación <, >, <=, >= .
Igual = .
Distinto <> .
AND booleana AND .
XOR booleana XOR .
OR booleana OR Mínima prioridad

Tabla 6.2: Prioridad de operadores en ST.

© Festo Didactic Ar-Festo 55


A continuación se enumeran los bucles condicionales y de control con lo que se puede trabajar en lenguaje
de texto estructurado:

o Condicional IF: Permite verificar una condición booleana y dependiendo de la misma ejecutar
instrucciones.

Sintaxis:
IF <Expresión_Booleana_1> THEN
<Instrucciones_1>
{ELSEIF <Expresión_Booleana_2> THEN
<Instrucciones_2>
.
.
ELSIF <Expresión_Booleana_n> THEN
<Instrucciones_n>
ELSE
<Instrucciones>}
END_IF;
(La parte entre llaves es opcional).

Si la expresión booleana de la condición IF es verdadera, se ejecutan el conjunto de instrucciones


correspondientes y se sale del lazo. Si la condición de IF es falsa, se evalúan las condiciones de ELSEIF en
orden hasta encontrar una verdadera, en cuyo caso se ejecuta el conjunto de instrucciones
correspondientes y se finaliza el lazo. Si ninguna de las expresiones ELSEIF son verdaderas, se ejecutan las
instrucciones correspondientes a la expresión ELSE.

o Instrucción CASE: Esta instrucción permite combinar múltiples instrucciones condicionales en función
de la misma variable y en una única construcción.

Sintaxis:
CASE <Variable> OF
<Valor_1>: <Instrucciones_ 1>
<Valor_2>: <Instrucciones_ 2>
<Valor_3,Valor_4,Valor_5>: <Instrucciones_ 3>
<Valor_6 .. Valor_10>: <Instrucciones_ 4>
...
<Valor_n>: <Instrucciones_n>
ELSE <Instrucciones_else>
END_CASE;

56 © Festo Didactic Ar-Festo


La instrucción CASE es procesada de acuerdo al siguiente modelo: Si la variable de la condición tiene el
valor indicado en alguna de las líneas, las instrucciones correspondientes serán ejecutadas. Si la variable no
toma ninguno de los valores indicados, las instrucciones ELSE serán luego ejecutadas.

o Lazo FOR: Este bucle permite programar procesos repetitivos.

Sintaxis:
Variable :INT;
FOR <Variable> := <V_Inicial> TO <V_Final> {BY <Paso>} DO
<Instrucciones>
END_FOR;
(La parte entre llaves es opcional).

Las instrucciones serán ejecutadas hasta tanto el valor de variable sea mayor al valor V_Final. Esta
condición es verificada antes de ejecutar las instrucciones, por lo que las instrucciones del lazo no serán
nunca ejecutadas si V_Inicial es mayor a V_Final. La variable se incrementa automáticamente luego de cada
ciclo en el valor definido como Paso. Si Paso no se define, se toma 1 como valor por defecto.

o Lazo WHILE:
El lazo WHILE puede utilizarse de manera similar al FOR, con la diferencia de que la condición de salida
puede ser cualquier expresión booleana. Esto significa que mientras se cumpla la condición indicada el lazo
será ejecutado.

Sintaxis:
WHILE <Expresión_Booleana> DO
<Instrucciones>
END_WHILE;

Debe notarse que si la condición booleana es falsa en la primera evaluación, las instrucciones
correspondientes no se ejecutaran nunca. De igual manera, si la condición booleana no toma nunca el valor
falso, se entra en un bucle infinito.

o Lazo REPEAT:
Este bucle se diferencia del WHILE en que la condición de salida es chequeada luego de la ejecución
del lazo. De esta manera, el lazo será ejecutada al menos una vez antes de finalizar su ejecución sin
importar el valor de la condición booleana. Es este lazo las instrucciones se ejecutarán hasta que la
condición booleana retorne el valor VERDADERO. Si la condición booleana nunca toma ese valor, se
generará un bucle infinito.

© Festo Didactic Ar-Festo 57


Sintaxis:
REPEAT
<Instrucciones>
UNTIL <Expresión_ Booleana>
END_REPEAT;

Las instrucciones WHILE y REPEAT tienen mejores prestaciones que la instrucción FOR dado que no es
necesario conocer de antemano la cantidad de ciclos a ejecutar. Sin embargo, en caso de conocerse dicho
valor es preferible trabajar con el lazo FOR, ya que de esta manera se evita el riesgo de caer en un bucle
infinito.

Fig. 6.4: Ejemplo de programación en texto estructurado (ST).

Lenguajes de programación gráficos


SFC – Esquema secuencial de funciones

El esquema secuencial de funciones (SFC) es un lenguaje de programación gráfico que permite describir el
orden cronológico de las diferentes acciones a llevar a cabo en un programa. Es una importante herramienta
para estructurar y ordenar el programa, aunque tiene la desventaja de no poder ser convertido a otro
lenguaje.
Cada una de los pasos tiene acciones asociadas que se llevan a cabo cuando el mismo se encuentra activo.
Dichas acciones son los verdaderos programas. Los pasos están separados por transiciones, las cuales
contienen las condiciones booleanas para la continuación del la secuencia. Si bien CoDeSys soporta una
versión de SFC que está en concordancia con el estándar IEC 61131-3, también ofrece un modo simplificado;
mientras que los pasos IEC contienen flags con calificadores y soportan hasta nueve acciones en un solo
paso, la versión simplificada solo muestra un triángulo negro en la esquina superior derecha del paso y
permite una sola acción en cada paso. Las acciones pueden programarse en cualquiera de los lenguajes IEC,
inclusive en SFC nuevamente.

58 © Festo Didactic Ar-Festo


Fig. 6.5: Ejemplo de programación en esquema secuencial de funciones (SFC).

Para poder utilizar pasos IEC en lugar de pasos simplificados, la librería iecsfc.lib debe ser incluida en el
proyecto. Las acciones asociadas con pasos IEC son mostradas a la derecha del paso, en una caja de dos
partes. Del lado izquierdo se puede ver un calificador, mientras que del lado derecho se muestra el nombre
de la acción. La tabla 6.3 resume los posibles calificadores IEC y su implicancia.

Adicionalmente, es posible asociar a cada paso una acción de entrada y una acción de salida. Una acción de
entrada es ejecutada por única vez apenas el paso se hace activo. Una acción de salida es también
ejecutada una única vez apenas el paso es desactivado. Las acciones de entrada se identifican en cada paso
con una E en la esquina inferior izquierda, mientras que las acciones de salida se identifican con una X en la
esquina inferior derecha.

© Festo Didactic Ar-Festo 59


Calificador Implicancia
N La acción estará activa mientras el paso lo esté

No almacenar

R La acción es desactivada

Reset

S La acción es activada y permanece activa hasta ser


Set específicamente desactivada.

L Limitado La acción es activada por un determinado periodo de


temporalmente tiempo, siendo como máximo el tiempo que el paso se
encuentre activo.
D La acción se vuelve activa luego de un tiempo
Retardada en tiempo determinado siempre y cuando el paso siga activo. Una
vez iniciada, permanece activa todo el tiempo que el paso
P se encuentre
La acción es ejecutada activo.
solo una vez si el paso se encuentra
Pulso activo.
SD La acción se vuelve activa luego de un tiempo
Almacenada y determinado y permanece activa hasta ser
retardada en tiempo específicamente desactivada.

DS Retardada y La acción se vuelve activa luego de un tiempo

Almacenada determinado siempre y cuando el paso siga activo.


Permanecerá activa hasta ser específicamente
desactivada.

SL Almacenada y La acción es activada por un determinado tiempo.


limitada
t emporalmente

Tabla 6.3: Calificadores de acciones IEC y sus implicancias.

Fig. 6.6: STEP en SFC con acción de entrada (E) y salida (X).

60 © Festo Didactic Ar-Festo


Además de la configuración de las acciones, diferentes tipos de ramificaciones pueden ser generadas a lo
largo del programa, a saber:

o Ramas alternativas:
Dos o más ramas pueden ser alternativas. Esto significa que cada rama debe comenzar y finalizar con una
transición. Las ramas alternativas pueden contener ramas paralelas e incluso otras ramas alternativas. Una
rama alternativa siempre comienza y finaliza con una línea horizontal. Son evaluadas de izquierda a
derecha; la primera transición con un resultado verdadero habilita la ejecución de su respectiva rama en
detrimento del resto de ellas.

o Ramas paralelas:
Dos o más ramas pueden definirse como paralelas. Cada rama paralela debe comenzar y finalizar con un
paso. Las ramas paralelas pueden contener ramas alternativas y otras ramas paralelas. Una rama paralela
comienza con una doble línea y finaliza con una doble línea o un salto. Al hacerse verdadera la condición
previa a las ramas paralelas, todas las primeros pasos de las ramas paralelas entre sí son ejecutados en
simultaneo. El paso que sigue la línea final de las ramas paralelas se convierte en activo cuando todos los
pasos previos están activos y la condición de transición anterior produce un valor verdadero.

Fig. 6.7: Ejemplos de ramas alternativas, y saltos en SFC.

© Festo Didactic Ar-Festo 61


o Salto (jump):
Un salto es una conexión a un paso no consecutivo al actual, cuyo nombre es indicado en la etiqueta del
salto. Los saltos son necesarios debido a que no se permiten conexiones hacia arriba o cruzadas.

Otra característica de la programación en SFC son las variables implícitas (flags) para consultar el estado de
los pasos, las acciones y la duración de los pasos activos. Estas variables son implementadas por la librería
iecsfc.lib para pasos IEC y directamente por CoDeSys para pasos no-IEC.

FBD – Diagrama de bloques de funciones

El lenguaje de programación de diagrama de bloques de funciones (FBD) es un lenguaje gráfico orientado a


redes y muy sencillo de comprender. Cada una de las redes contiene una estructura que representa ya sea
una expresión lógica, aritmética, el llamado a una función, el llamado a un bloque de funciones o un salto.
El editor FBD de CoDeSys permite agilizar notablemente la programación a través de la configuración
automática de bloques y conexiones.

Fig. 6.8: Ejemplo de programación en Diagrama de bloques de funciones (FBD).

CFC – Esquema continuo de funciones

El esquema continuo de funciones (CFC) no es un lenguaje de programación en si mismo sino que se trata
de un editor que realiza una implementación particular del editor de FBD, pero no orientado a redes. De esta
manera, la libre ubicación de bloques y conexiones es posible, permitiendo funciones tales como lazos de
realimentación.
Para controlar y modificar el orden de ejecución de los bloques, se utiliza un cuadro gris con un número que
se puede encontrar en la esquina superior derecha de cada uno de los bloques, en donde se muestra el
número de orden de ejecución en el ciclo de control.

62 © Festo Didactic Ar-Festo


Fig. 6.9: Ejemplo de programación en esquema continuo de funciones (CFC).

LD – Diagrama de escalera

La programación en diagrama de escalera es un lenguaje de programación gráfico que permite combinar


contactos de relés y bobinas, simplificando notablemente la comprensión del programa por personal con
poca experiencia en programación. Es un lenguaje orientado a redes, y se encuentra disponible para la gran
mayoría de los PLC’s clásicos. Es muy simple para la programación de expresiones booleanas, pero su grado
de complejidad aumenta cuando se necesita trabajar con datos de otros tipos, como por ejemplo valores
analógicos.

Fig. 6.10: Ejemplo de programación en diagrama de escalera (LD).

© Festo Didactic Ar-Festo 63


7 Operadores IEC 61131-3
La suite de desarrollo CoDeSys soporta todos los operadores especificados por el estándar IEC 61131-3. En
contraste con las funciones estándar, las cuáles son provistas por librerías (Ver capítulo 8 – librería
estándar), los operadores son reconocidos implícitamente a lo largo de todo el proyecto, y son utilizados en
las POU de la misma manera que las funciones. Además de los operadores IEC, CoDeSys también soporta
algunos otros operadores, los cuáles serán tratados en las secciones subsiguientes.
Es importante destacar que en operaciones con variables de punto flotante, los resultados dependen
directamente del sistema target que está siendo utilizado.

Operadores de asignación
Estos operadores tienen por finalidad la asignación de valores a las variables. Dichos valores pueden
provenir de direcciones, resultados de expresiones, constantes, etc. Este tipo de operadores pueden ser
utilizado para cualquier tipo de datos, ya sea estándar o definido por el usuario.
La forma de asignar variables difiere en función del lenguaje en el cuál se esté programando, si bien los
resultados finales serán siempre los mismos. Debe destacarse que para la programación en LD, la
asignación de variables es válida solamente si se utilizan variables de tipo booleanas.

LD / ST

LD /ST se trata de la asignación mas básica de variables. Su función es la de asignar un valor o el resultado
de una expresión a una variable. En la figura 7.1 se pueden apreciar ejemplos de su uso en los diferentes
lenguajes IEC.

LDN / ST

Con este operador, el valor a ser asignado debe ser en general de tipo booleano (Nótese que no se habla
solamente del tipo de variable BOOL sino que en algunos lenguajes se puede utilizar los tipos WORD, BYTE,
y todos aquellos tipos de datos que almacenen valores binarios o booleanos). El resultado será cargar la
inversa del valor de la primera variable en la segunda. La figura 7.2 muestra ejemplos de su uso en los
diferentes lenguajes IEC.

64 © Festo Didactic Ar-Festo


FBD:

ST:

IL:

Figura 7.1: Ejemplos de asignación LD / ST en los diferentes lenguajes IEC.

FBD:

LD:

ST:

IL:

Figura 7.2: Ejemplos de asignación LDN / ST en los diferentes lenguajes IEC.

LD / S

El valor a ser asignado debe ser en general de tipo booleano. El resultado será cargar el valor verdadero en
la variable de salida si la variable de entrada es también verdadera. Ejemplos de su uso pueden verse en la
figura 7.3.

© Festo Didactic Ar-Festo 65


FBD:

ST:

IL:

Figura 7.3: Ejemplos de asignación LD / S en los diferentes lenguajes IEC.

FBD:

ST:

IL:

Figura 7.4: Ejemplos de asignación LD / R en los diferentes lenguajes IEC.

66 © Festo Didactic Ar-Festo


LD / R

Similar al caso anterior, el valor a ser asignado debe ser de tipo booleano. El resultado será cargar el valor
falso en la variable de salida si la variable de entrada es verdadera. La figura 7.4 muestra algunos ejemplos
de su uso en los diferentes lenguajes de programación IEC.

MOVE

El operador MOVE permite la asignación de una variable o una constante a otra variable del tipo adecuado.
Puede utilizarse en combinación con la función de habilitación de los editores de LD y CFC, aunque esta
combinación no es posible en FBD. En caso de utilizar dicha combinación, la asignación se hará efectiva
cuando la entrada de habilitación tenga el valor TRUE. La figura 7.5 muestra algunos ejemplos de su uso en
los diferentes lenguajes IEC.

CFC:

IL:

Figura 7.5: Ejemplos de uso del operador ADD en diferentes lenguajes IEC.
Operadores aritméticos

ADD

El operador ADD permite sumar variables de los tipos BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT,
UDINT, REAL y LREAL. También permite sumar dos variables temporales, resultando en un nuevo valor de
tiempo. (Por ejemplo, t#45s + t#50s = t#1m35s). La figura 7.6 muestra algunos ejemplos de su uso en los
diferentes lenguajes de programación IEC.

© Festo Didactic Ar-Festo 67


FBD:

ST:

IL:

Figura 7.6: Ejemplos de uso del operador ADD en diferentes lenguajes IEC.

MUL

El operador MUL permite multiplicar variables de los tipos BYTE, WORD, DWORD, SINT, USINT, INT,
UINT, DINT, UDINT, REAL and LREAL.
La figura 7.7 muestra algunos ejemplos de su uso en los diferentes lenguajes de programación IEC.

FBD:

ST:

IL:

Figura 7.7: Ejemplos de uso del operador MUL en diferentes lenguajes IEC.

68 © Festo Didactic Ar-Festo


SUB

Permite sustraer una variable de otra de los tipos BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT,
UDINT, REAL and LREAL. También permite sustraer una variable temporal de otra, resultando en un nuevo
valor de tiempo. (Por ejemplo, t#1m35s - t#50s = t#45s). La figura 7.8 muestra algunos ejemplos de su uso
en los diferentes lenguajes de programación IEC.

FBD:

ST:

IL:

Figura 7.8: Ejemplos de uso del operador SUB en diferentes lenguajes IEC.

DIV

FBD:

ST:

IL:

Figura 7.9: Ejemplos de uso del operador DIV en diferentes lenguajes IEC.

Permite la división entera de una variable en otra de los tipos BYTE, WORD, DWORD, SINT, USINT, INT, UINT,
DINT, UDINT, o la división entera y fraccionaria de los tipos de datos REAL and LREAL. La figura 7.9 muestra
algunos ejemplos de su uso en los diferentes lenguajes de programación IEC.

© Festo Didactic Ar-Festo 69


MOD

Este operador permite obtener el resto de la división entera de dos variables de los tipos BYTE, WORD,
DWORD, SINT, USINT, INT, UINT, DINT, UDINT. La figura 7.10 muestra algunos ejemplos de su uso en los
diferentes lenguajes de programación IEC.

FBD:

ST:

IL:

Figura 7.10: Ejemplos de uso del operador MOD en diferentes lenguajes IEC.

Operadores de cadenas de bits

AND

FBD:

ST:

IL:

Figura 7.11: Ejemplos de uso del operador AND en diferentes lenguajes IEC.

Realiza la operación AND lógica bit a bit entre operandos binarios. Estos deben ser del los tipos BOOL,
BYTE, WORD o DWORD.

70 © Festo Didactic Ar-Festo


OR
Realiza la operación OR lógica bit a bit entre operandos binarios. Estos deben ser del los tipos BOOL, BYTE,
WORD o DWORD.

FBD:

ST:

IL:

Figura 7.12: Ejemplos de uso del operador OR en diferentes lenguajes IEC.

XOR
Realiza la operación XOR lógica bit a bit entre operandos binarios. Estos deben ser del los tipos BOOL,
BYTE, WORD o DWORD. Para el caso de tener más de dos entradas, las entradas serán chequeadas en pares
y los resultados particulares comparados nuevamente en pares.

NOT
Realiza la operación NOT lógica bit a bit entre operandos binarios. Estos deben ser del los tipos BOOL, BYTE,
WORD o DWORD.

Operadores de desplazamiento (registros de desplazamiento)


SHL

Este operador realiza la operación de rotación a la izquierda del operando binario, el cual resulta
desplazado en n bits (ej.: SHL (in, n)). Los tipos de datos soportados son BYTE, WORD o DWORD. Los
espacios de la derecha serán completados con cero y los bits sobrantes a la izquierda serán descartados.

Figura 7.13: Funcionamiento del operador SHL.

© Festo Didactic Ar-Festo 71


Figura 7.14: Ejemplo de uso del operador SHL en ST.

Como puede apreciarse en la figura 7.14, a iguales operaciones los resultados serán diferentes para
diferentes tipos de datos, a pesar que las variables de entradas tengan el mismo valor.

SHR
Este operador realiza la operación de rotación a la derecha del operando binario, el cual resulta desplazado
en n bits (ej.: SHR (in, n)). Los tipos de datos soportados son BYTE, WORD o DWORD. Los espacios de la
izquierda serán completados con cero y los bits sobrantes a la derecha serán descartados.

Figura 7.15: Funcionamiento del operador SHR.

Figura 7.16: Ejemplo de uso del operador SHR en FBD.

72 © Festo Didactic Ar-Festo


ROL
Este operador realiza la operación de rotación a la izquierda del operando binario, el cual resulta
desplazado en n bits (ej.: ROL (in, n)). Los tipos de datos soportados son BYTE, WORD o DWORD. Los
espacios de la derecha serán completados con los bits sobrantes de la izquierda.

Figura 7.17: Ejemplo de uso del operador ROL en IL.

Figura 7.18: Funcionamiento del operador ROL.

ROR
Este operador realiza la operación de rotación a la derecha del operando binario, el cual resulta desplazado
en n bits (ej.: ROL (in, n)). Los tipos de datos soportados son BYTE, WORD o DWORD. Los espacios de la
izquierda serán completados con los bits sobrantes de la derecha.

Figura 7.19: Funcionamiento del operador ROR.

© Festo Didactic Ar-Festo 73


Operadores de selección

SEL

FBD:

ST:

IL:

Figura 7.20: Ejemplos de uso del operador SEL.

El operador SEL permite la selección binaria, a través de la cuál una variable podrá tomar uno de los valores
previamente definidos en función del valor de otra variable del tipo binario. El siguiente ejemplo aclarará el
funcionamiento del mismo:

Vx := SEL(G, V1, V2) significa:


o Vx := V1 si G= Falso.
o Vx := V2 si G= Verdadero.

Las variables VX, V1 y V2 pueden ser de cualquier tipo, pero todas ellas deben ser del mismo tipo. La
variable G debe ser una variable binaria. El valor almacenado en la variable Vx será V1 cuando G sea falsa, o
V2 cuando G sea verdadera.

74 © Festo Didactic Ar-Festo


MAX
Este operador retorna el valor máximo de entre dos valores. Puede ser utilizado con variables de cualquier
tipo.

Figura 7.21: Ejemplos de uso del operador MAX en ST.

MIN

Figura 7.22: Ejemplos de uso del operador MIN en IL.

Este operador retorna el valor mínimo de entre dos valores. Puede ser utilizado con variables de cualquier
tipo.

LIMIT
El operador LIMIT permite limitar el rango de variación de una variable entre un valor mínimo y un valor
máximo, tal como se muestra en la figura 7.23. Se puede trabajar con variables de cualquier tipo. El
siguiente ejemplo despejará dudas:

OUT := LIMIT(MIN, IN, MAX)

Donde Min es la variable o el valor límite inferior y MAX es el valor o variable superior. Si el valor de la
variable IN esta en el rango ( MIN < IN < MAX ) entonces la variable OUT tendrá el mismo valor que la variable
IN. Si IN está por encima de MAX, la variable OUT tomará el valor de MAX. Si IN está por debajo de MIN,
entonces la variable OUT tomará el valor de MIN.

© Festo Didactic Ar-Festo 75


Figura 7.23: Relación entrada/Salida del operador LIMIT.

Figura 7.24: Ejemplos de uso del operador LIMIT en IL.

Operadores de comparación

GT
GT es un operador booleano que retorna verdadero si el valor del primer operando es mayor al valor del
segundo. Los operandos pueden ser de los tipos BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT,
UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME y STRING.

Figura 7.25: Ejemplos de uso del operador GT en FBD.

76 © Festo Didactic Ar-Festo


LT
LT es un operador booleano que retorna verdadero si el valor del primer operando es menor que el valor del
segundo. Los operandos pueden ser de los tipos BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT,
UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME y STRING.

Figura 7.26: Ejemplos de uso del operador LT en IL.

LE

LE es un operador booleano que retorna verdadero si el valor del primer operando es menor o igual que el
valor del segundo. Los operandos pueden ser de los tipos BOOL, BYTE, WORD, DWORD, SINT, USINT, INT,
UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME y STRING.

Figura 7.27: Ejemplos de uso del operador LE en ST.

© Festo Didactic Ar-Festo 77


GE
GE es un operador booleano que retorna verdadero si el valor del primer operando es mayor o igual al valor
del segundo. Los operandos pueden ser de los tipos BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT,
DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME y STRING.

EQ
EQ es un operador booleano que retorna verdadero si el valor del primer operando es igual al valor del
segundo. Los operandos pueden ser de los tipos BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT,
UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME y STRING.

NE
NE es un operador booleano que retorna verdadero si el valor del primer operando es distinto del valor del
segundo. Los operandos pueden ser de los tipos BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT,
UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME y STRING.

Operadores de direcciones

ADR
Este operador no está definido en el estándar IEC 61131-3. Su función es la de retornar la dirección de su
argumento. Su argumento puede ser una variable de cualquier tipo. Esta dirección puede ser utilizada para
implementar funciones para ser tratadas como punteros, o puede ser utilizada para almacenar su valor de
salida directamente en un puntero. La salida de este operador es siempre una variable del tipo DWORD.

Figura 7.28: Ejemplos de uso del operador ADR en IL.

78 © Festo Didactic Ar-Festo


Operadores de ramificación

CAL

Este operador es válido para el lenguaje de listado de instrucciones solamente (IL). Permite llamar una
función, un bloque de funciones o un programa. Las variables de entrada de la POU que está siendo llamada
deben colocarse en paréntesis a continuación del nombre de la POU y separadas por comas.

Figura 7.29: Ejemplos de uso del operador CAL en IL.

JMP

Este operador puede ser utilizado en los lenguajes de programación IL, FBD y LD, aunque en diferentes
maneras en cada uno de ellos. Su función es la de generar un salto incondicional a una etiqueta dentro de la
misma POU. Las figuras 7.30 a 7.32 muestran ejemplos del uso de este operador en IL, LD y FBD
respectivamente.

RET (RETURN)

RET puede ser utilizado en los lenguajes de programación IL, FBD y LD. Su función es la de interrumpir
prematuramente el ciclo de ejecución. Las figuras 7.30 a 7.32 muestran ejemplos del uso de este operador
en IL, LD y FBD respectivamente.

Figura 7.30: Ejemplos de uso del operador JMP y RET (RETURN) en LD.

© Festo Didactic Ar-Festo 79


Figura 7.31: Ejemplos de uso del operador JMP y RET en IL.

Figura 7.32: Ejemplos de uso del operador JMP y RET (RETURN) en FBD.

80 © Festo Didactic Ar-Festo


Llamada a otras POU

Tabla 7.1: Llamado a otras unidades de programa.

La llamada a otras POU se debe realizar de manera diferente en cada uno de los lenguajes de programación
IEC 61131-3. En la tabla 7.1 puede verse de manera resumida y a través de ejemplos la manera en la cual se
debe realizar el llamado a otras POU, específicamente programas, funciones y bloques de funciones.

Operadores numéricos

ABS

El operador ABS tiene por función devolver el valor absoluto del operando de entrada. Las posibles
combinaciones de tipos de datos de entrada / Tipos de datos de salida pueden apreciarse en la tabla 7.2,
mientras que la figura 7.33 presenta un ejemplo de su utilización en lenguaje de texto estructurado.

Figura 7.33: Ejemplos de uso del operador ABS en ST.

© Festo Didactic Ar-Festo 81


Variable de entrada Variable de Salida
INT INT, REAL, WORD, DWORD,
DINT

REAL REAL
BYTE INT, REAL, BYTE, WORD,
DWORD, DINT

WORD INT, REAL, WORD, DWORD,


DINT
DWORD REAL, DWORD, DINT
SINT REAL
USINT REAL
UINT INT, REAL, WORD, DWORD,
DINT, UDINT, UINT

DINT REAL, DWORD, DINT


UDINT REAL, DWORD, DINT, UDINT

Tabla 7.2: Posibles combinaciones de tipos de variable de entrada/salida para el operador ABS.

SQRT

Este operador retorna la raíz cuadrada de la variable de entrada. Dicha variable puede ser de los tipos BYTE,
WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT.
La variable de salida debe ser del tipo REAL.

Figura 7.34: Ejemplos de uso del operador SQRT en FBD.

82 © Festo Didactic Ar-Festo


LN

Este operador retorna el logaritmo natural de la variable de entrada. Dicha variable puede ser de los tipos
BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT. La variable de salida debe ser del tipo
REAL.

Figura 7.35: Ejemplos de uso del operador LN en IL.

LOG

Este operador retorna el logaritmo base diez de la variable de entrada. Dicha variable puede ser de los tipos
BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT. La variable de salida debe ser del tipo
REAL.

Figura 7.36: Ejemplos de uso del operador LOG en ST.

EXP

Este operador retorna la función exponencial ex, donde X es la variable de entrada. Dicha variable puede ser
de los tipos BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT. La variable de salida debe ser
del tipo REAL.

© Festo Didactic Ar-Festo 83


SIN

Este operador retorna el seno de la variable de entrada, la cual debe estar en radianes. Dicha variable puede
ser de los tipos BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT. La variable de salida debe
ser del tipo REAL.

COS

Este operador retorna el coseno de la variable de entrada, la cual debe estar en radianes. Dicha variable
puede ser de los tipos BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT. La variable de
salida debe ser del tipo REAL.

TAN

Este operador retorna la tangente de la variable de entrada, la cual debe estar en radianes. Dicha variable
puede ser de los tipos BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT. La variable de
salida debe ser del tipo REAL.

ASIN

Este operador retorna el arco-seno (función inversa del seno) de la variable de entrada, la cual debe estar en
radianes. Dicha variable puede ser de los tipos BYTE,

WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT. La variable de salida debe ser del tipo REAL.

ACOS

Este operador retorna el arco-coseno (función inversa del coseno) de la variable de entrada, la cual debe
estar en radianes. Dicha variable puede ser de los tipos BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT,
UINT, UDINT. La variable de salida debe ser del tipo REAL.

7. 9. 11 ATAN

84 © Festo Didactic Ar-Festo


Este operador retorna el arco-tangente (función inversa de la tangente) de la variable de entrada, la cual
debe estar en radianes. Dicha variable puede ser de los tipos BYTE, WORD, DWORD, INT, DINT, REAL, SINT,
USINT, UINT, UDINT. La variable de salida
debe ser del tipo REAL.

7. 9. 12 EXPT

Este operador realiza la función potenciación, la exponenciación de una variable con otra variable. El valor
de salida es (variable_1)(variable_2). Las variables de entrada pueden ser de los tipos BYTE, WORD,
DWORD, INT, DINT, REAL, SINT, USINT, UINT,
UDINT. La variable de de salida debe ser del tipo REAL.

FBD:

ST:

IL:

Figura 7.37: Ejemplos de uso del operador EXPT.

© Festo Didactic Ar-Festo 85


7. 10 Operadores de conversión de tipo

Este tipo de operadores tienen por finalidad convertir variables de un tipo de datos a otro.

Figura 7.38: Asistente de entrada. Listado de los operadores de conversión de tipo disponibles en CoDeSys.

Debe notarse que esta implícitamente prohibido convertir tipo ‚más grandes‛ en tipos ‚más pequeños‛
(como por ejemplo de tipo ENTERO a BYTE). Para estas conversiones se requieren ciertas consideraciones
especiales para no perder información.
Si bien las posibilidades de conversión son muchas, todas ellas utilizan la misma sintaxis y operan de forma
similar. El asistente de entrada será de gran ayuda para ver los tipos de conversiones permitidas. La sintaxis
a utilizar es la siguiente:

<Tipo_de_dato_Variable_1>_TO_< Tipo_de_dato_Variable_2>

7. 10. 1 BOOL_TO

Permite convertir de tipo booleano en cualquier otro tipo. Para tipos numéricos, el resultado será 1 cuando
el operando es VERDADERO y 0 cuando el operando es FALSO. Para tipos STRING, el resultado será la
cadena de caracteres TRUE o FALSE respectivamente.

86 © Festo Didactic Ar-Festo


Figura 7.39: Ejemplo de conversión BOOL_TO en IL.

7. 10. 2 TO_BOOL

Permite convertir de cualquier tipo a tipo booleano. Para tipos numéricos, el resultado será VERDADERO
cuando el operando no es igual a 0. El resultado será falso cuando el operando es 0. Para tipos STRING, el
resultado será VERDADERO cuando el operando es ‘TRUE’, y será FALSO en cualquier otro caso.

Figura 7.40: Ejemplo de conversión TO_BOOL en ST.

© Festo Didactic Ar-Festo 87


7. 10. 3 Conversiones entre tipos de números enteros

Permite convertir de cualquier tipo de número entero en otro tipo de número. Si se realiza una conversión
hacia un tipo de número ‚menor‛ (Menor tamaño del campo), puede perderse información; si el número que
se está convirtiendo excede el rango del tipo de dato de salida, los primeros bytes serán ignorados.

7. 10. 4 REAL_TO / LREAL_TO

Figura 7.41: Ejemplo de conversiones REAL_TO en ST.

Permite convertir de una variable de tipo REAL o LREAL en un tipo diferente. El valor será redondeado hacia
arriba o hacia abajo hacia el valor más cercano y convertido en el nuevo tipo de variable.

7. 10. 5 TIME_TO / TIME_OF_DAY

88 © Festo Didactic Ar-Festo


Figura 7.42: Ejemplo de conversiones TIME_TO en IL.

Permite convertir de una variable de tipo TIME o TIME_OF_DAY en un tipo diferente. El tiempo será
almacenado internamente en una variable de tipo DWORD en milisegundos. Este es el valor que será
convertido.

7. 10. 6 STRING_TO

Permite convertir desde una variable del tipo STRING en un tipo de variable diferente. La variable de tipo
STRING debe contener un valor que sea válido en la variable de salida. En cualquier otro caso, el valor de
salida será 0.

© Festo Didactic Ar-Festo 89


Figura 7.43: Ejemplo de conversiones STRING_TO en ST.

7. 10. 7 TRUNC

Este operador permite convertir de variables de tipo REAL en variables de tipo INT. La parte entera de la
variable de entrada será utilizada, descartando la parte irracional.

90 © Festo Didactic Ar-Festo


8 Librerias: La librería estándar

Una librería es una lista de objetos los cuales pueden ser utilizados en diferentes proyectos. Las librerías
pueden ser generadas por el usuario o pueden ser propias de CoDeSys. También puede darse el caso de
que sean entregadas por el fabricante del hardware, en cuyo caso pueden estar encriptadas.

La librería por defecto que se incluye en todos los proyectos es la librería standard.lib. Esta librería es
propia de CoDeSys y provee funciones básicas tales como temporizadores y contadores entre otras. En este
capítulo se desarrollaran algunas de las funciones más destacadas de la librería standard.lib. Para mayor
información acerca de las funciones disponibles en esta librería debe consultarse la documentación oficial
de CoDeSys.

Otra librería de gran utilidad es la librería util.lib, la cual contiene funciones adicionales tales como
conversiones BCD, funciones matemáticas auxiliares, generadoras de señales y manipuladores para
procesamiento de valores analógicos entre otras. Esta librería no será tratada en este documento, pero
puede obtenerse mayor información en la documentación oficial.

Figura 8.1: El administrador de librerías. Funciones de la librería estándar.

© Festo Didactic Ar-Festo 91


R_TRIG

R_TRIG es un bloque de funciones que permite detectar el flanco ascendente de una señal booleana. La
variable de salida será también una variable booleana, y permanecerá en estado FALSO mientras que la
variable de entrada sea falsa. Tan pronto como la señal de entrada pase de FALSO a VERDADERO, la salida
generará un pulso de corta duración indicando la detección del flanco ascendente, permaneciendo
nuevamente en estado FALSO hasta el próximo flanco ascendente de la señal de entrada.

Figura 8.2: Diagrama temporal del bloque de funciones R_TRIG.

Dado que se trata de un bloque de funciones, debe declararse una variable del tipo R_TRIG en la declaración
del programa, para de esta manera generar la instancia correspondiente.

Figura 8.3: Ejemplos de uso del bloque de funciones R_TRIG en IL.

F_TRIG

Figura 8.4: Diagrama temporal del bloque de funciones F_TRIG.

92 © Festo Didactic Ar-Festo


F_TRIG es un bloque de funciones similar al caso anterior, cuya función es la de detectar el flanco
descendente de una señal booleana. La variable de salida será también una variable booleana, y
permanecerá en estado FALSO mientras que la variable de entrada sea verdadera. Tan pronto como la señal
de entrada pase de VERDADERO a FALSO, la salida generará un pulso de corta duración indicando la
detección del flanco descendente, permaneciendo nuevamente en estado FALSO hasta el próximo flanco
descendente de la señal de entrada.
Dado que se trata de un bloque de funciones, debe declararse una variable del tipo F_TRIG en la declaración
del programa, para de esta manera generar la instancia correspondiente.

Figura 8.5: Ejemplos de uso del bloque de funciones F_TRIG en ST.

Contadores

CTU

Se trata de un bloque de funciones incluido en la librería estándar para realizar cuentas ascendentes. Tanto
las variables de entrada CU y RESET como la variable de salida Q son del tipo BOOL. La variable de entrada
PV y la variable de salida CV son del tipo WORD.

Figura 8.6: Ejemplos de uso del bloque de funciones CTU en IL.

© Festo Didactic Ar-Festo 93


La variable CV es la encargada de llevar la cuenta, y será inicializada con el valor 0 si la entrada RESET es
verdadera. Por cada flanco ascendente que presenta la variable de entrada CU, se incrementará la variable
de salida CV en una unidad.

La variable Q será verdadera cuando CV sea mayor o igual que la variable de entrada PV. La figura 8.6
ayudara a aclarar la forma de utilización de este bloque de funciones, mientras que la figura 8.7 muestra la
declaración del bloque de funciones CTU, en el administrador de librerías, en la pestaña recursos del
organizador de objetos.

Figura 8.7: Declaración del Bloque de funciones CTU en el administrador de librerías.

CTD

CTD es también un bloque de funciones incluido en la librería estándar para realizar cuentas descendentes.
Tanto las variables de entrada CD y LOAD como la variable de salida Q son del tipo BOOL, mientras que la
variable de entrada PV y la variable de salida CV son del tipo WORD.
La variable CV será la encargada de realizar la cuenta descendente, y será inicializada con el valor de la
entrada PV cuando LOAD es verdadera. Por cada flanco ascendente que presenta la variable de entrada CD,
se decrementará la variable de salida CV en una unidad. La variable Q será verdadera cuando CV haya
alcanzado el valor 0.

94 © Festo Didactic Ar-Festo


Figura 8.8: Ejemplo de utilización del bloque de funciones CTD de la librería estándar en ST.

CTUD

El bloque de funciones CTUD permite realizar cuentas ascendentes y descendentes. Tanto las variables de
entrada CU, CD, RESET y LOAD como la variable de salida QU y QD son del tipo BOOL, mientras que la
variable de entrada PV y la variable de salida CV son del tipo WORD.

Figura 8.9: Ejemplo de utilización del bloque de funciones CTUD de la librería estándar en FBD.

Si la entrada RESET es verdadera, la variable CV será reinicializada a 0. En caso que LOAD este habilitada,
será reinicializada con el valor de la entrada PV. Igual que en el resto de los contadores, la variable que
llevará la cuenta es CV. Cuando LOAD y RESET tienen el valor FALSO, la variable CV será incrementada en 1
por cada flanco ascendente de la entrada CU (Count UP) y decrementada en 1 también por cada flanco
ascendente en la entrada CD (Count Down). La salida QU será verdadera cuando CV sea mayor o igual al
valor especificado en PV, mientras que QD será válida cuando CV será igual a 0.

© Festo Didactic Ar-Festo 95


Temporizadores

TP

El bloque de funciones TP es un temporizador que permite generar un pulso de una amplitud definida. IN y
PT son variables de entrada de los tipos BOOL y TIME respectivamente, mientras que Q y ET son las
variables de salidas de los tipos BOOL y TIME respectivamente.
Si la entrada IN es falsa, la salida Q será falsa y ET será 0. Tan pronto como la entrada IN pase al estado
VERDADERO, ET comenzará a ser incrementada en milisegundos hasta alcanzar el valor predefinido en PT y
permanecerá constante luego de esto. La salida Q tomará el valor VERDADERO desde el momento en que IN
toma el valor VERDADERO y hasta que ET alcance el valor de PT. En cualquier otro momento, la salida Q
tomará el valor FALSO. De esta manera, la salida Q estará entregando una señal cuadrada cuyo tiempo en
estado alto será definido por el valor de entrada PT (en milisegundos). La figura 8.18 muestra la secuencia
temporal de funcionamiento del bloque de funciones PT.

Figura 8.10: Diagrama temporal del bloque de funciones TP.

Figura 8.11: Ejemplo de utilización del bloque de funciones TP en ST.

96 © Festo Didactic Ar-Festo


TON

El bloque de funciones TON implementa un retardo a la conexión. Las variables IN y PT son variables de
entrada de los tipos BOOL y TIME respectivamente. Las variables Q y ET son variables de salida de los tipos
BOOL y TIME respectivamente. Si la entrada IN es falsa, tanto la salida Q como ET contienen el valor 0. Tan
pronto como IN pasa a estado VERADDERO, se comienza una cuenta de tiempo en milisegundos en la salida
ET hasta que el valor de dicha cuenta sea igual al ajustado en la entrada PT. De esta manera, la salida Q se
encuentra en estado verdadero cuando la entrada IN está en estado VERDADERO y Et es igual a PT. El
siguiente diagrama temporal ayuda a entender el funcionamiento de este temporizador.

Figura 8.12: Diagrama temporal del bloque de funciones TON.

Figura 8.13: Ejemplo de utilización del bloque de funciones TON en FBD.

© Festo Didactic Ar-Festo 97


TOF

El bloque de funciones TOF implementa un retardo a la desconexión. Las variables IN y PT son variables de
entrada de los tipos BOOL y TIME respectivamente. Las variables Q y ET son variables de salida de los tipos
BOOL y TIME respectivamente. Si la entrada IN es verdadera, la salida Q se encontrara en estado
VERDADERO y ET contendrá el valor 0. Tan pronto como IN pasa a estado FALSO, se comienza una cuenta de
tiempo en milisegundos en la salida ET hasta que el valor de dicha cuenta sea igual al ajustado en la
entrada PT. De esta manera, la salida Q se encuentra en estado FALSO cuando la entrada IN está en estado
FALSO y ET es igual a PT. El siguiente diagrama temporal ayuda a entender el funcionamiento de este
temporizador.

Figura 8.14: Diagrama temporal del bloque de funciones TOF.

Figura 8.15: Ejemplo de utilización del bloque de funciones TOF en IL.

98 © Festo Didactic Ar-Festo


Bloques de funciones biestable

SR

El bloque de funciones SR es básicamente un Flip-Flop con entrada de habilitación dominante. Tiene dos
entradas, SET1 y RESET, y una salida, Q1.EL valor de la salida responderá en todo momento a la siguiente
expresión:

Q1 := (RESET AND Q1) OR SET1

Este es, si la entrada SET1 se encuentra activa, la salida será TRUE independientemente del estado de la
entrada RESET. Si la entrada SET1 se encuentra en estado FALSE, el valor de la salida dependerá entonces
de la entrada RESET. Ambas entradas y la salida deben der del tipo BOOL.

RS

El bloque de funciones RS se trata al igual que el anterior de un Flip-Flop con entrada dominante. La
diferencia radica en que la entrada dominante es este caso la entrada de deshabilitación. Presenta dos
entradas, SET y RESET1, y una salida, Q1. EL valor de la salida responderá en todo momento a la siguiente
expresión:

Q1 := RESET AND (SET OR Q1)

Este es, si la entrada RESET1 se encuentra activa, la salida será FALSE


independientemente del estado de la entrada SET. Si la entrada RESET1 se encuentra en

estado FALSE, el valor de la salida dependerá de la entrada SET. Ambas entradas y la salida deben der del
tipo BOOL.

© Festo Didactic Ar-Festo 99


9 Apendice A: Atajos de teclado

o CTRL + O: Abrir un proyecto (Desde un medio de


almacenamiento o directamente del controlador).

o CTRL + S: Guardar el proyecto actual.

o F2: Asistente de entrada.

o SHIFT + F2: Autodeclaración de variables.

o F1: Ayuda (Sensible al contexto).

o F2: Asistente de entrada.

o F11: Compilar.

o ALT + F8: Iniciar Modo Online.

o CTRL + F8: Terminar modo Online.

o F5: Activar programa.

o SHIFT + F8: Detener programa.

o F9: Colocar o quitar Breakpoint.

o CTRL + F7: Escribir valores al controlador.

o F7: Forzar valores.

100 © Festo Didactic Ar-Festo


10 Bibliografia

o Base de datos SPIMS.

o CoDeSys provided by festo - Festo IPT.

o Welcome to the world of CoDeSys, CoDeSys pbf training – Dieter Staneker

o User Manual for PLC programming with CoDeSys 2.3


– 3S-Smart Solution Software.

o CoDeSys Visualization. Supplement to the User Manual


for PLC Programming with CoDeSys 2.3 – 3S-Smart
software solution.

o Your license to success: CoDeSys and your controller – 3S CoDeSys training.

o Su licencia el éxito: CoDeSys y su controlador – 3S


CoDeSys training. Traducción al español por festo-ME.

o http://www.infoplc.net/

o http://www.plcopen.org/

o http://www.3s-software.com/

o http://www.iec.ch

© Festo Didactic Ar-Festo 101


102 © Festo Didactic Ar-Festo

También podría gustarte