Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programación de Una Cola de Espera (FIFO) - TIAP
Programación de Una Cola de Espera (FIFO) - TIAP
Ejemplo de programación
En el siguiente ejemplo se programa un búfer en anillo que se compone de un ARRAY y
se escribe y se lee según el principio FIFO. El código de programa contiene un puntero
VARIANT de lectura y otro de escritura. Mediante las instrucciones VARIANT es posible
programar el código de programa de manera robusta y garantizar una copia o borrado se-
guro.
Con el tipo de datos VARIANT es posible influir en partes del programa durante la ejecu-
ción. El puntero VARIANT es un puntero con seguridad de tipos, es decir, se realiza una
comprobación de tipo durante la ejecución. En el caso de bloques que se han creado con
la propiedad de bloque "Optimizado", las funciones parciales que antes se programaban
con un puntero ANY ahora pueden resolverse con un puntero VARIANT. El tipo de datos
VARIANT se utiliza para transferir estructuras a bloques de función del sistema.
Procedimiento
1. Cree un bloque de función SCL y llámelo "FIFOQueue".
2. Declare la interfaz del bloque de la manera siguiente:
La instrucción se eje-
cuta cuando en el
request BOOL parámetro "request"
se registra un flanco
de señal ascendente.
0 = se devuelve la pri-
mera entrada del bú-
Input fer en anillo.
mode BOOL 1 = se escribe una
entrada en la última
posición del búfer en
anillo.
Valor con el que se
initialValue VARIANT inicializa el ARRAY
del búfer en anillo.
Output error INT Información de error
La entrada que se de-
vuelve del búfer en
item VARIANT
anillo o que se es-
InOut cribe en él.
Un ARRAY que se
buffer VARIANT utiliza como búfer en
anillo.
Marca de flancos en
la que se almacena el
Static edgeupm BOOL
RLO de la consulta
anterior.
-1-
Ejemplo de programación de una cola de espera (FIFO) (S7-1200, S7-1500)
Índice de la entrada
firstItemIndex INT más antigua del búfer
en anillo
Índice del siguiente
nextEmptyIte-
INT elemento libre en el
mIndex
búfer en anillo
Resultado de la eval-
edgeup BOOL
uación de flancos
internalError INT Información de error
newFirstItemIn-
INT Índice variable
dex
Temp
newNextEmp-
INT Índice variable
tyItemIndex
Número de elemen-
bufferSize UDINT tos ARRAY en el bú-
fer en anillo
3. En el bloque de función "FIFOQueue", cree el siguiente código de programa:
-2-
Ejemplo de programación de una cola de espera (FIFO) (S7-1200, S7-1500)
-3-
Ejemplo de programación de una cola de espera (FIFO) (S7-1200, S7-1500)
#error := -40;
RETURN;
END_IF;
IF (#internalError = 0) THEN
(* Esta sección del código del programa comprueba si
el búfer en anillo contiene elementos de ARRAY. En ca-
so afirmativo, se desplaza la primera entrada y el ín-
dice se incrementa en 1. *)
#internalError := MOVE_BLK_VARIANT(SRC := #ini-
tialValue,
COUNT := 1,
SRC_INDEX :=
0,
DEST_INDEX :=
#firstItemIndex,
DEST =>
#buffer);
-4-
Ejemplo de programación de una cola de espera (FIFO) (S7-1200, S7-1500)
ELSE
IF (#internalError = 0) THEN
// Esta sección del código del programa incrementa el
índice en 1 y calcula el nuevo índice de entrada vac-
ío.
#newNextEmptyItemIndex := #nextEmptyItemIndex
+1;
#newNextEmptyItemIndex := #newNextEmptyItemIndex
MOD #bufferSize;
#nextEmptyItemIndex := #newNextEmptyItemIndex;
-5-
Ejemplo de programación de una cola de espera (FIFO) (S7-1200, S7-1500)
Resultado
Llame al bloque de función SCL en el lugar del programa donde deba ejecutarse la cola de
espera FIFO.
-6-