Está en la página 1de 4

Recomendaciones de programacin

Optimizacin del tiempo de ciclo en Logix

Copyright 2008 Rockwell Automation, Inc. All Rights Reserved.

Recomendaciones de Programacin
Optimizacin del tiempo de ciclo en Logix

El objetivo del presente documento es describir una serie de


recomendaciones a seguir para optimizar el tiempo de ciclo de
un programa en un procesador Logix.
Logix es un sistema operativo multitarea por comparticin de
tiempo. Hay que asegurarse que cada una de las tareas tiene
tiempo suficiente para su ejecucin.
Una de esas tareas es atender a la mensajera proveniente de
HMI, software de programacin o instrucciones mensaje
provenientes del mismo o de otro controlador.
Si no se deja suficiente tiempo para atender a esta mensajera
pueden darse situaciones en las que se rechace el
establecimiento de una conexin. Si el procesador est cerca
de su limite, puede darse este problema cuando se realiza el
switchover de un controlador a otro en redundancia.
Por tanto, hay que intentar dejar el procesador con parte de
recursos libres para atender a la carga de trabajo extra que
necesita para realizar el switchover. Se recomienda no superar
el 70% de carga de trabajo para los procesadores.

Copyright 2008 Rockwell Automation, Inc. All Rights Reserved.

Recomendaciones de Programacin
Optimizacin del tiempo de ciclo en Logix

Optimizacin de cdigo:
Operaciones de 32 bits
En los controladores Logix, tanto el procesador como la
memoria trabajan a 32 bits. Quiere decir que estn optimizados
para operaciones con 32 bits, realizando todos los clculos con
valores en formato DINT o REAL. Si la operacin a realizar
utiliza variables en otro formato, la convierte antes a DINT o
REAL, invirtiendo tiempo en la conversin y utilizando memoria
adicional. En operaciones donde intervienen variables en
diferentes formatos, tambin se hace una conversin para
operar de forma consistente. Esta conversin tambin consume
tiempo y memoria.

En vez de hacer operaciones en coma flotante, es preferible


hacerlas en coma fija utilizando otra unidad (por ejemplo
milsimas en vez de unidades). Al final, el resultado ser un
valor 1000 veces superior con la intencin de mostrar 3
decimales. En el HMI se puede realizar el escalado final para
mostrar las unidades correctas.
Una revisin sobre el programa de la Charles Darwing mostr
que se realizan excesivas conversiones, causando incrementos
en el tiempo de ciclo.
Puesta a 0 de variables

Por ejemplo,
Usar instrucciones CLR en vez de MOVer 0 a un tag. Cuando
se pone un tag a cero, la instruccin MOV es ms lenta que la
instruccin CLR. El resultado es el mismo, ya que CLR pone
todos los bits del tag a 0.
Bucles

El tag TIME_FILTER_DI es REAL, pero la constante 0 en


Source B se considera entero (DINT). Antes de hacer la
operacin (en este caso comparacin), el valor entero (0) se
convierte a real (0.0) para hacer la comparacin en el mismo
formato. Si fuese una operacin matemtica, habra que tener
en cuenta tambin el formato de salida, ya que puede requerir
conversiones adicionales. El simple hecho de cambiar en la
instruccin el 0 por un 0.0 hace que no se deba realizar la
conversin, ahorrando tiempo y memoria. Mejor todava sera
que el tag TIME_FILTER_DI fuese DINT, ya que las
operaciones en coma flotante tardan ms que las de coma fija.

En texto estructurado tener cuidado con los bucles. Consumen


mucho tiempo, sobre todo si se utiliza direccionamiento
indirecto. En vez de crear bucles FOR DO LOOP y usar
referencias indirectas (el programa G017_Alarms tiene
muchos), es preferible, en cuanto a tiempo de ejecucin, repetir
el cdigo para cada iteracin usando referencias directas. Esto
es ms laborioso, pero hacindolo en ladder, se puede utilizar
Excel para generar el cdigo.

En este mismo sentido, en los parmetros de los AOI, si uno de


ellos es de tipo REAL, hay que pasarle una variable tipo REAL
(500.0 en vez de 500) para no perder tiempo en conversiones.
Es muy recomendable que todas las variables que intervienen
en una operacin sean del mismo tipo. El incremento de tiempo
de ciclo es pequeo, pero estas operaciones repetidas muchas
veces hacen que ese incremento sea considerable.

Copyright 2008 Rockwell Automation, Inc. All Rights Reserved.

Recomendaciones de Programacin
Optimizacin del tiempo de ciclo en Logix

Reduccin de memoria.

Errores

La reduccin del uso de memoria mejorar tambin el tiempo


de crossload, o sea, el tiempo que tardan los mdulos de
redundancia en pasar los valores de todos los tags de un
procesador al otro en la pareja redundante. Esto hace que el
tiempo de ciclo sea tambin menor.

En el programa de la Charles Darwing se observaron errores


menores resultado de overflows en operaciones matemticas al
dividir por 0. Es conveniente prevenir la ejecucin de una
divisin por 0 cuando ya se sabe que el divisor es 0.

Tipo de datos booleano

Hardware

En vez de crear tags de tipo BOOL, utilizar los miembros BOOL


de un tag tipo DINT. Un tag de tipo BOOL se almacena en una
celda de memoria. Antes ya se ha comentado que la memoria
es de 32 bits, por lo que se desperdician 31 bits por cada
variable BOOL.

Utilizar procesadores ms potentes. La utilizacin de


procesadores 1756-L7x acelera el procesamiento del programa
entre 2 y 3 veces.

Estructuras de datos
Reorganizar los miembros de las UDT. Dentro de una UDT, al
almacenar en memoria, los BOOL se almacenan en cualquier
lugar, los SINT se almacenan empezando en los bits mltiplos
de 8, los INT en bits mltiplos de 16 y los DINT en el bit 0. Esto
quiere decir que en funcin del orden de definicin de los
miembros de un UDT, se puede consumir ms o menos
memoria.

Emplear redundancia enhanced en vez de redundancia


standard. La redundancia enhanced optimiza mucho el tiempo
de crossload, mejorando de esa forma el tiempo de ciclo.

Fuentes de informacin
Logix5000 Controller Design Considerations
(1756-RM094)
ControlLogix Enhanced Redundancy System User Manual
(1756-UM535)
ControlLogix Enhanced Redundancy System V19.53
Release Notes (1756-RN684)

En los AOI no pasa esto. En la creacin del tag de instancia de


un AOI, se optimiza la memoria y no hace falta tener en cuenta
el orden de aparicin de los parmetros y tags locales.
Arrays
Uso de arrays en vez de tags sueltos. El uso de memoria se
optimiza mucho utilizando Arrays. Por ejemplo:
5000 DINTs individuales = 424,746 Bytes
5000 DINTs en un array = 44,844 Bytes
Borrar tags no usados para no perder tiempo en el crossload de
variables que no sirven para nada.
Copyright 2008 Rockwell Automation, Inc. All Rights Reserved.

También podría gustarte