Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Contactos KOP
El contacto normalmente abierto se cierra (ON) cuando el valor de bit asignado es igual a
1.
El contacto normalmente cerrado se cierra (ON) cuando el valor de bit asignado es igual
a 0.
Los contactos conectados en serie crean segmentos lgicos Y.
Los contactos conectados en paralelo crean segmentos lgicos O.
out := in1 OR Una entrada cualquiera de un cuadro O tiene que cumplirse para que la
in2; salida sea TRUE (verdadera).
out := in1 XOR Un nmero impar de entradas de un cuadro O-exclusiva tiene que
in2; cumplirse para que la salida sea TRUE (verdadera).
1 En SCL: El resultado de la operacin debe asignarse a una variable para que pueda usarse en otra instruccin.
Si fluye corriente a travs de una bobina de salida o se habilita un cuadro FUP "=", el bit
de salida se pone a 1.
Si no fluye corriente a travs de una bobina de salida o no se habilita un cuadro de
asignacin FUP "=", el bit de salida se pone a 0.
Si fluye corriente a travs de una bobina de salida invertida o se habilita un cuadro FUP
"/=", el bit de salida se pone a 0.
Si no fluye corriente a travs de una bobina de salida invertida o no se habilita un cuadro
FUP "/=", el bit de salida se pone a 1.
Tabla 7- 8 Instrucciones S y R
1 En KOP y FUP: Estas instrucciones pueden disponerse en cualquier posicin del segmento.
2 En SCL: Es necesario escribir cdigo para duplicar esta funcin en la aplicacin.
1 En KOP y FUP: Estas instrucciones slo se pueden disponer en el extremo derecho de una rama.
2 En SCL: Es necesario escribir cdigo para duplicar esta funcin en la aplicacin.
Tabla 7- 12 Instrucciones RS y SR
1 En KOP y FUP: Estas instrucciones slo se pueden disponer en el extremo derecho de una rama.
2 En SCL: Es necesario escribir cdigo para duplicar esta funcin en la aplicacin.
El parmetro OUT indica la direccin de bit que se activa o desactiva. La salida opcional
OUT Q refleja el estado lgico de la direccin "OUT".
Tabla 7- 16 Tipos de datos para los parmetros (P y N contactos/bobinas, P=, N=, P_TRIG y N_TRIG)
Todas las instrucciones de deteccin de flancos utilizan una marca (M_BIT) para almacenar
el estado anterior de la seal de entrada que se est vigilando. Un flanco se detecta
comparando el estado de la entrada con el estado de la marca. Si los estados indican un
cambio de la entrada en el sentido deseado, se notifica un flanco activando la salida
(TRUE). De lo contrario, se desactivar la salida (FALSE).
Nota
Las instrucciones de deteccin de flancos evalan los valores de la entrada y de la marca
cada vez que se ejecutan, incluyendo la primera ejecucin. Los estados iniciales de la
entrada y de la marca deben considerarse al disear el programa, con objeto de permitir o
impedir la deteccin de flancos en el primer ciclo.
Puesto que la marca debe conservarse desde una ejecucin hasta la siguiente, es preciso
utilizar un bit unvoco para cada instruccin de deteccin de flancos. Este bit no se puede
utilizar en ninguna otra ubicacin del programa. Tambin se debe evitar la memoria
temporal y la memoria que pueda ser modificada por otras funciones de sistema, p. ej. una
actualizacin de E/S. Utilice slo el rea de marcas (M), DB global o memoria esttica (en
un DB de instancia) para las asignaciones de memoria de M_BIT.
7.2 Temporizadores
Las instrucciones con temporizadores se utilizan para crear retardos programados. El
nmero de temporizadores que pueden utilizarse en el programa de usuario est limitado
slo por la cantidad de memoria disponible en la CPU. Cada temporizador utiliza una
estructura de DB del tipo de datos IEC_Timer de 16 bytes para guardar la informacin del
temporizador especificada encima de la instruccin de cuadro o bobina. STEP 7 crea
automticamente el DB al introducir la instruccin.
El temporizador como impulso arranca en una transicin de 0 a 1 del valor de bit Tag_Input.
El temporizador se ejecuta durante el tiempo especificado por el valor de tiempo Tag_Time.
Nota
Si se insertan instrucciones de temporizador en un FB, se puede seleccionar la opcin
"Bloque de datos multiinstancia". Los nombres de estructura de temporizador pueden ser
diferentes con diferentes estructuras de datos, pero los datos del temporizador estn
contenidos como un bloque de datos nico y no requiere un bloque de datos separado para
cada temporizador. Esto reduce el tiempo de procesamiento y la memoria de datos
necesaria para gestionar los temporizadores. No hay interaccin entre las estructuras de
datos de los temporizadores en el DB multiinstancia compartido.
Manejo de temporizadores
Temporizador Cronograma
TP: Temporizador como impulso ,1
El temporizador TP genera un impulso con una
duracin predeterminada.
(7
37
37 37 37
4 37 37
4
37 37
Nota
En la CPU no se asigna ningn recurso dedicado a ninguna instruccin de temporizador
especfica. En lugar de eso, cada temporizador utiliza su estructura de temporizador propia
en la memoria de DB y un temporizador de funcionamiento continuo interno de la CPU para
la temporizacin.
Programacin de temporizadores
A la hora de planificar y crear el programa de usuario deben considerarse las siguientes
consecuencias del manejo de temporizadores:
Pueden producirse mltiples actualizaciones de un temporizador en el mismo ciclo. El
temporizador se actualiza cada vez que la instruccin de temporizador (TP, TON, TOF,
TONR) se ejecuta y cada vez que el miembro ELAPSED o Q de la estructura de
temporizador se utiliza como parmetro para otra instruccin ejecutada. Esto es una
ventaja si se desea tener el ltimo dato de tiempo (en esencia, una lectura inmediata del
temporizador). No obstante, si desea disponer de valores coherentes durante un ciclo del
programa, inserte la instruccin de temporizador antes de todas las instrucciones
restantes que requieran estos valores, y utilice las variables de las salidas Q y ET de la
instruccin de temporizador en lugar de los miembros ELAPSED y Q de la estructura de
DB de temporizador.
Pueden producirse ciclos durante los cuales no se actualice ningn temporizador. Es
posible arrancar el temporizador en una funcin y dejar de llamar la funcin durante uno
o ms ciclos. Si no se ejecuta ninguna otra instruccin que referencie los miembros
ELAPSED o Q de la estructura de temporizador, el temporizador no se actualizar. No se
produce una nueva actualizacin hasta que la instruccin de temporizador se ejecuta de
nuevo o se ejecuta alguna otra instruccin utilizando ELAPSED o Q de la estructura del
temporizador como un parmetro.
Aunque no es comn, se puede asignar la misma estructura de DB de temporizador a
varias instrucciones de temporizador. En general, para evitar una interaccin inesperada,
debera utilizarse slo una instruccin de temporizador (TP, TON, TOF, TONR) por
estructura de temporizador de DB.
Las inicializaciones propias de los temporizadores resultan tiles para lanzar acciones
que deben producirse peridicamente. Generalmente, los temporizadores
autoinicializables se crean colocando un contacto normalmente cerrado que referencie el
bit de temporizador situado frente a la instruccin de temporizador. Este segmento de
temporizador se suele colocar sobre uno o ms segmentos dependientes, que utilizan el
bit del temporizador para lanzar acciones. Cuando el temporizador finaliza (el tiempo
transcurrido llega al valor predeterminado), el bit de temporizador permanece en ON
durante un ciclo, permitiendo que se ejecute la lgica de segmento dependiente
controlada por el bit de temporizador. Con la siguiente ejecucin del segmento de
temporizador, el contacto normalmente cerrado est en desconexin, con lo que el
temporizador se reinicia y el bit de temporizador se desactiva. En el siguiente ciclo, el
contacto normalmente cerrado est en conexin, de modo que el contacto se inicializa.
Cuando cree temporizadores autoinicializables de este manera, no utilice el miembro "Q"
de la estructura de DB de temporizador, ya que el parmetro para el contacto
normalmente cerrado est delante de la instruccin de temporizador. En lugar de ello,
utilice la variable asociada a la salida "Q" de la instruccin de temporizador. La razn de
evitar el acceso al miembro Q de la estructura de DB de temporizador es que ello
provoca una actualizacin del temporizador, y si ste se actualiza debido al contacto
normalmente cerrado, ste inicializar la instruccin de temporizador inmediatamente. La
salida Q de la instruccin de temporizador no estar ON para el ciclo en cuestin, y los
segmentos dependientes no se ejecutarn.
Retencin de los datos de tiempo tras una transicin RUN-STOP-RUN o una desconexin y nueva
conexin de la CPU
Si una sesin en modo RUN finaliza con el modo STOP o una desconexin y nueva
conexin de la CPU y se inicia una nueva sesin en modo RUN, los datos de temporizador
guardados en la sesin anterior se pierden, a no ser que la estructura de datos se haya
definido como remanente (temporizadores TP, TON, TOF y TONR).
Si se aceptan los ajustes predeterminados del dilogo de opciones de llamada una vez
insertada la instruccin en el editor de programas, automticamente se asignar un DB de
instancia que no puede definirse como remanente. Para que los datos de temporizador
puedan ser remanentes, hay que usar un DB global o un DB multiinstancia.
Asignar un DB global para guardar los datos de temporizador como datos remanentes
Esta opcin funciona independientemente de dnde se encuentre el temporizador (OB, FC o
FB).
1. Crear un DB global:
Haga doble clic en "Agregar nuevo bloque" en el rbol del proyecto
Haga clic en el icono del bloque de datos (DB)
Elija DB global como tipo
Si desea poder definir elementos de datos individuales en este DB como remanentes,
asegrese de que est activada la casilla "Optimizado". La otra opcin para el tipo de
DB "Estndar - compatible con S7-300/400" slo permite definir todos los elementos
del DB como remanentes o no remanentes.
Haga clic en "Aceptar".
2. Agregar estructura(s) de temporizador al DB:
En el nuevo DB global, agregue una nueva variable esttica utilizando el tipo de datos
IEC_Timer.
En la columna "Remanencia" compruebe la casilla correspondiente para que la
estructura sea remanente.
Repita este procedimiento para crear estructuras para todos los temporizadores que
desee guardar en ese DB. Es posible insertar cada estructura de temporizador en un
DB global nico, o insertar mltiples estructuras de temporizador en el mismo DB
global. Tambin es posible asignar al DB global otras variables estticas aparte de los
temporizadores. La colocacin de mltiples estructuras de temporizador en el mismo
DB global permite reducir el nmero general de bloques.
Cambie el nombre de las estructuras de temporizador si lo desea.
3. Abra el bloque de programa para editar la posicin en la que desea colocar el
temporizador remanente (OB, FC o FB).
4. Site la instruccin de temporizador en la posicin deseada.
5. Cuando aparezca el dilogo de opciones de llamada, haga clic en el botn Cancelar.
6. En la parte superior de la nueva instruccin de temporizador escriba el nombre (no utilice
la funcin de ayuda para examinar) del DB global y de la estructura de temporizador que
ha creado antes (ejemplo: "Bloque_datos_3.Esttico_1").
Asignar un DB multiinstancia para guardar los datos de temporizador como datos remanentes
Esta opcin slo funciona si el temporizador se coloca en un FB
Esta opcin depende de si el FB se cre con acceso a bloques "Optimizado" (slo permite el
direccionamiento simblico). Una vez que el FB se ha creado ya no se puede cambiar la
casilla de verificacin de "Optimizado"; hay que seleccionarla correctamente en el momento
de la creacin del FB, en la primera pantalla que aparece tras seleccionar "Agregar nuevo
bloque" del rbol. Para comprobar cmo est configurado el atributo de acceso para un FB
existente, haga clic con el botn derecho sobre el FB en el rbol del proyecto, seleccione
Propiedades y a continuacin Atributos.
Si el FB se cre con la casilla "Optimizado" seleccionada (slo permite el direccionamiento
simblico):
1. Abra el FB para editarlo.
2. Site la instruccin de temporizador en la posicin deseada dentro del FB.
3. Cuando aparezca el dilogo de opciones de llamada, haga clic en el botn de
multiinstancia. La opcin de multiinstancia slo est disponible si la instruccin se est
colocando en un FB.
4. En el dilogo de opciones de llamada, cambie el nombre del temporizador si lo desea.
5. Haga clic en "Aceptar". La instruccin de temporizador aparece en el editor, y la
estructura IEC_TIMER aparece en la interfaz de FB, bajo Esttico.
6. En caso necesario, abra el editor de interfaz de FB (puede ser necesario hacer clic en la
flecha pequea para expandir la vista).
7. En Esttico, localice la estructura de temporizador que se acaba de crear.
8. En la columna Remanencia correspondiente a dicha estructura, cambie la seleccin a
"Remanencia". Cada vez que este FB se llame posteriormente desde otro bloque de
programa se crear un DB de instancia con esta definicin de interfaz, que contiene la
estructura de temporizador marcada como remanente.
Si el FB se cre con la casilla "Estndar - Compatible con S7-300/400" seleccionada
(permite el direccionamiento simblico y directo):
1. Abra el FB para editarlo.
2. Site la instruccin de temporizador en la posicin deseada dentro del FB.
3. Cuando aparezca el dilogo de opciones de llamada, haga clic en el botn de
multiinstancia. La opcin de multiinstancia slo est disponible si la instruccin se est
colocando en un FB.
4. En el dilogo de opciones de llamada, cambie el nombre del temporizador si lo desea.
5. Haga clic en "Aceptar". La instruccin de temporizador aparece en el editor, y la
estructura IEC_TIMER aparece en la interfaz de FB, bajo Esttico.
6. Abra el bloque que usar este FB.
7. Site el FB en la posicin deseada. De este modo se crea un bloque de datos de
instancia para este FB.
7.3 Contadores
El nmero de contadores que pueden utilizarse en el programa de usuario est limitado slo
por la cantidad de memoria disponible en la CPU. Los contadores utilizan la siguiente
cantidad de memoria:
En los tipos de datos SInt o USInt, la instruccin de contaje utiliza 3 bytes.
En los tipos de datos nt o UInt, la instruccin de contaje utiliza 6 bytes.
En los tipos de datos DInt o UDInt, la instruccin de contaje utiliza 12 bytes.
Estas instrucciones utilizan contadores por software cuya frecuencia de contaje mxima
est limitada por la frecuencia de ejecucin del OB en el que estn contenidas. El OB en el
que se depositan las instrucciones debe ejecutarse con suficiente frecuencia para detectar
todas las transiciones de las entradas CU o CD. Para operaciones de contaje rpido,
consulte la instruccin CTRL_HSC (Pgina 331).
Nota
Al colocar instrucciones con contadores en un FB es posible seleccionar la opcin de DB
multiinstancia. Los nombres de estructura de los contadores pueden diferir en las distintas
estructuras, pero los datos de los contadores se encuentran en un DB individual y no
requieren un DB propio para cada contador. Esto reduce el tiempo de procesamiento y la
memoria de datos necesaria para los contadores. No hay interaccin entre las estructuras
de datos de los contadores en el DB multiinstancia compartido.
Contador Operacin
El contador CTU incrementa en 1 cuando el valor del parmetro CU
cambia de 0 a 1. El cronograma de CTU muestra el manejo con un valor &8
de contaje de entero sin signo (donde PV = 3).
Si el valor del parmetro CV (valor de contaje actual) es superior o 5
igual que el del parmetro PV (valor de contaje predeterminado), el
parmetro de salida del contador Q = 1.
Si el valor del parmetro de desactivacin R cambia de 0 a 1, el
valor de contaje actual se pone a 0. &9
Contador Operacin
El contador CTD decrementa en 1 cuando el valor del
parmetro CD cambia de 0 a 1. El cronograma de CTD &'
muestra el manejo con un valor de contaje de entero sin signo
/2$'
(donde PV = 3).
Si el valor del parmetro CV (valor de contaje actual) es
inferior o igual a 0, el parmetro de salida del contador Q =
1. &9
Si el valor del parmetro LOAD cambia de 0 a 1, el valor
del parmetro PV (valor predeterminado) se carga en el 4
contador como nuevo CV (valor de contaje actual).
Contador Operacin
El contador CTUD incrementa o
decrementa en 1 en una &8
transicin de 0 a 1 de las
entradas de contaje ascendente &'
(CU) o descendente (CD). El
cronograma muestra el
funcionamiento de un contador 5
CTUD con un valor de contaje
de entero sin signo (donde PV =
4). /2$'
Si el valor del parmetro CV
es superior o igual que el del
parmetro PV, el parmetro
de salida del contador QU = &9
1.
Si el valor del parmetro CV
es inferior o igual a 0, el 48
parmetro de salida del
contador QD = 1. 4'
Remanencia de los datos de contador tras una transicin RUN-STOP-RUN o una desconexin y
nueva conexin de la CPU
Si una sesin en modo RUN finaliza con el modo STOP o una desconexin y nueva
conexin de la CPU y se inicia una nueva sesin en modo RUN, los datos de contador
guardados en la sesin anterior se pierden, a no ser que la estructura de datos se haya
definido como remanente (contadores CTU, CTD y CTUD).
Si se aceptan los ajustes predeterminados del dilogo de opciones de llamada una vez
insertada la instruccin de contador en el editor de programas, automticamente se
asignar un DB de instancia que no puede definirse como remanente. Para que los datos de
contador puedan ser remanentes, hay que usar un DB global o un DB multiinstancia.
Asignar un DB global para guardar los datos de temporizador como datos remanentes
Esta opcin funciona independientemente de dnde se encuentre el contador (OB, FC o
FB).
1. Crear un DB global:
Haga doble clic en "Agregar nuevo bloque" en el rbol del proyecto
Haga clic en el icono del bloque de datos (DB)
Elija DB global como tipo
Si desea poder definir elementos individuales en este DB como remanentes,
asegrese de que est activada la casilla que limita el acceso a slo simblico.
Haga clic en "Aceptar".
2. Agregar estructura(s) de contador al DB:
En el nuevo DB global, agregue una nueva variable esttica utilizando uno de los
tipos de datos de contador. Asegrese de elegir el tipo que desea utilizar para los
valores predeterminado y de contaje.
Asignar un DB multiinstancia para guardar los datos de contador como datos remanentes
Esta opcin slo funciona si el contador se coloca en un FB
Esta opcin depende de si el FB se ha creado slo con acceso simblico. Una vez que el
FB se ha creado ya no se puede cambiar la casilla de verificacin que limita el
direccionamiento a slo simblico; hay que seleccionarla correctamente en el momento de
la creacin del FB, en la primera pantalla que aparece tras seleccionar "Agregar nuevo
bloque" del rbol. Para comprobar cmo est configurada esta casilla para un FB existente,
haga clic con el botn derecho sobre el FB en el rbol del proyecto, seleccione Propiedades
y a continuacin Atributos.
Si el FB se cre con la casilla de slo direccionamiento simblico seleccionada:
1. Abra el FB para editarlo.
2. Site la instruccin de contador en la posicin deseada dentro del FB.
7.4 Comparacin
7.4.1 Comparacin
7.4.2 Instrucciones "Valor dentro del rango" y "Valor fuera del rango"
1 En KOP y FUP: haga clic en "???" y seleccione el tipo de datos de la lista desplegable.
1 En KOP y FUP: Si el contacto KOP es TRUE, se activa el contacto ste y conduce corriente. Si el cuadro FUP es
TRUE (verdadero), la salida del cuadro es TRUE.
Tabla 7- 34 Operacin
Cuando la CPU comienza a ejecutar un bloque lgico SCL, pone OK en TRUE. Un error
ocurrido durante la ejecucin de una operacin (por ejemplo, divisin entre cero) pone OK
en FALSE. Durante la ejecucin del cdigo SCL, las instrucciones pueden consultar el
parmetro OK o pueden poner OK en TRUE o en FALSE.
SCL Comentario
OK := TRUE; // Poner OK en TRUE
Division:= 1 / "IN"; // Operacin de divisin
IF OK THEN // Comprobar operacin vlida (p.
ej. IN <>0).
... // Instrucciones para operacin
vlida.
ELSE // Operacin no vlida (p. ej. IN =
0).
... // Instrucciones para tratamiento de
operacin no vlida.
SCL Comentario
END_IF;
Se puede configurar el compilador SCL para que escriba el valor de OK en el parmetro de
salida ENO una vez que finaliza la ejecucin del bloque lgico. Vase el apartado sobre EN
y ENO (Pgina 161).
Haga clic en el icono de la calculadora para abrir el cuadro de dilogo y definir la funcin
matemtica. La ecuacin se introduce como entradas (p. ej. IN1 y IN2) y operaciones.
Cuando se hace clic en "Aceptar" para guardar la funcin, el cuadro de dilogo crea
automticamente las entradas de la instruccin CALCULATE.
En la parte inferior del editor, se muestra un ejemplo y una lista de las operaciones
matemticas que se pueden incluir.
Nota
Tambin es necesario crear una entrada para las constantes que pudiera haber en la
funcin. En este caso, el valor constante se introducira en la entrada asociada de la
instruccin CALCULATE.
Si se introducen constantes como entradas, es posible copiar la instruccin CALCULATE a
otras ubicaciones del programa de usuario sin tener que cambiar la funcin. Entonces,
pueden modificarse los valores o las variables de las entradas de la instruccin sin modificar
la funcin.
Cuando se ejecuta CALCULATE y todas las operaciones individuales del clculo se realizan
de forma correcta, entonces ENO = 1. Si no es as, ENO = 0.
Para agregar una entrada ADD o MUL, haga clic en el icono "Crear" o haga clic
con el botn derecho del ratn en el conector de entrada del parmetro IN
existente y seleccione el comando "Insertar entrada".
Para quitar una entrada, haga clic con el botn derecho del ratn en el conector de entrada
de uno de los parmetros IN existentes (si hay ms entradas adems de las dos originales)
y seleccione el comando "Borrar".
Si est habilitada (EN = 1), la instruccin matemtica realiza la operacin indicada en los
valores de entrada (IN1 e IN2) y almacena el resultado en la direccin de memoria que
indica el parmetro de salida (OUT). Una vez finalizada correctamente la operacin, la
instruccin pone ENO a 1.
ENO Descripcin
1 Sin error
0 El resultado de la operacin matemtica quedara fuera del rango numrico vlido del tipo de datos
seleccionado. Se devuelve la parte menos significativa del resultado que quepa en el tamao de destino.
0 Divisin por 0 (IN2 = 0): El resultado es indefinido y se devuelve cero.
0 Real/LReal: Si uno de los valores de entrada es NaN (no es un nmero), se devuelve NaN.
0 ADD Real/LReal: Si ambos valores IN son INF con signos diferentes, la operacin no est permitida y se
devuelve NaN.
0 SUB Real/LReal: Si ambos valores IN son INF con signos iguales, la operacin no est permitida y se
devuelve NaN.
0 MUL Real/LReal: Si un valor IN es cero y el otro es INF, la operacin no est permitida y se devuelve
NaN.
0 DIV Real/LReal: Si ambos valores IN son cero o INF, la operacin no est permitida y se devuelve NaN.
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
ENO Descripcin
1 Sin error
0 Valor IN2 = 0, a OUT se le asigna el valor cero
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
ENO Descripcin
1 Sin error
0 El resultado est fuera del rango numrico vlido del tipo de datos seleccionado.
Ejemplo de SInt: NEG (-128) arroja el resultado +128 que excede el lmite mximo del tipo de datos.
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
ENO Descripcin
1 Sin error
0 El resultado est fuera del rango numrico vlido del tipo de datos seleccionado.
Ejemplo de SInt: INC (+127) arroja el resultado +128, que excede el lmite mximo del tipo de datos.
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
ENO Descripcin
1 Sin error
0 El resultado de la operacin aritmtica est fuera del rango numrico vlido del tipo de datos
seleccionado.
Ejemplo de SInt: ABS (-128) arroja el resultado +128 que excede el lmite mximo del tipo de datos.
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
Para agregar una entrada, haga clic en el icono "Crear" o haga clic con el botn
derecho del ratn en el conector de entrada del parmetro IN existente y
seleccione el comando "Insertar entrada".
Para quitar una entrada, haga clic con el botn derecho del ratn en el conector de entrada
de uno de los parmetros IN existentes (si hay ms entradas adems de las dos originales)
y seleccione el comando "Borrar".
ENO Descripcin
1 Sin error
0 Slo para el tipo de datos Real:
Una o ms entradas no son un nmero real (NaN).
La salida OUT resultante es +/- INF (infinito).
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
Si el valor del parmetro IN est dentro del rango indicado, el valor de IN se deposita en el
parmetro OUT. Si el valor del parmetro IN est fuera del rango indicado, el valor OUT es
entonces el valor del parmetro MIN (si el valor IN es menor que el valor MIN) o del
parmetro MAX (si el valor IN es mayor que el valor MAX).
ENO Descripcin
1 Sin error
0 Real: Si uno o varios de los valores de MIN, IN y MAX es NaN (no es un nmero), se devuelve NaN.
0 Si MIN es mayor que MAX, el valor IN se asigna a OUT.
Ejemplos de SCL:
MyVal := LIMIT(MIN:=10,IN:=53, MAX:=40); //Resultado: MyVal = 40
MyVal := LIMIT(MIN:=10,IN:=37, MAX:=40); //Resultado: MyVal = 37
MyVal := LIMIT(MIN:=10,IN:=8, MAX:=40); //Resultado: MyVal = 10
1 En KOP y FUP: haga clic en "???" (junto al nombre de la instruccin) y seleccione un tipo de datos en el men
desplegable.
2 En SCL: Tambin es posible utilizar los operadores matemticos bsicos de SCL para crear expresiones matemticas.
7.6 Desplazamiento
1 Instruccin MOVE: para agregar otra salida en KOP o FUP, haga clic en el icono "Crear" situado junto al parmetro de
salida. Para SCL, utilice mltiples instrucciones de asignacin. Tambin se puede usar una de las construcciones de
bucle.
Para agregar salidas MOVE, haga clic en el icono "Crear" o haga clic con el
botn derecho en el conector de salida de uno de los parmetros OUT
existentes y seleccione el comando "Insertar salida".
Para eliminar una salida, haga clic con el botn derecho del ratn en el conector de salida
de uno de los parmetros OUT existentes (si hay ms salidas adems de las dos originales)
y seleccione el comando "Borrar".
Nota
Reglas para las operaciones de copia de datos
Para copiar el tipo de datos Bool utilice SET_BF, RESET_BF, R, S o bobina de salida
(KOP) (Pgina 176)
Para copiar un solo tipo de datos simple, utilice MOVE
Para copiar una matriz de un tipo de datos simple, utilice MOVE_BLK o UMOVE_BLK
Para copiar una estructura, utilice MOVE
Para copiar una cadena, utilice S_MOVE (Pgina 255)
Para copiar un solo carcter en una cadena, utilice MOVE
Las instrucciones MOVE_BLK y UMOVE_BLK no pueden utilizarse para copiar matrices
o estructuras en las reas de memoria I, Q o M.
Nota
STEP 7 V10.5 no soportaba una referencia variable como ndice de matriz o matrices
multidimensionales. Las instrucciones FieldRead y FieldWrite se utilizaban para
proporcionar operaciones de ndice de matriz variables para una matriz unidimensional.
STEP 7 V11 s que soporta una variable como ndice de matriz y matrices
multidimensionales. FieldRead y FieldWrite se han incluido en STEP 7 V11 para disponer de
una compatibilidad retroactiva con programas que utilizaban estas instrucciones.
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
Nota
Reglas para las operaciones de rellenar rea
Para rellenar el tipo de datos BOOL utilice SET_BF, RESET_BF, R, S, o bobina de salida
(KOP)
Para rellenar con un solo tipo de datos simple, utilice MOVE
Para rellenar una matriz con un tipo de datos simple, utilice FILL_BLK o UFILL_BLK
Para rellenar un solo carcter en una cadena, utilice MOVE
Las instrucciones FILL_BLK y UFILL_BLK no pueden utilizarse para rellenar matrices en
las reas de memoria I, Q o M.
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
7.7 Convertir
1 En KOP y FUP: haga clic en "???" y seleccione los tipos de datos del men desplegable.
2 En SCL: Defina la instruccin de conversin identificando el tipo de datos del parmetro de entrada (in) y el parmetro
de salida (out). Por ejemplo, DWORD_TO_REAL convierte un valor DWord en un valor Real.
Tras haber seleccionado el tipo de datos que se desea convertir, las conversiones posibles
aparecen en la lista desplegable (convertir a). Las conversiones de y a BCD16 estn
limitadas al tipo de datos Int. Las conversiones de y a BCD32 estn limitadas al tipo de
datos DInt.
1 En KOP y FUP: haga clic en "???" (junto al nombre de la instruccin) y seleccione un tipo de datos en el men
desplegable.
7.7.4 Instrucciones "Crear el siguiente nmero entero superior a partir del nmero en
coma flotante" y "Crear el siguiente nmero entero inferior a partir del nmero
en coma flotante"
1 En KOP y FUP: haga clic en "???" (junto al nombre de la instruccin) y seleccione un tipo de datos en el men
desplegable.
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
Nota
SCALE_X parmetro VALUE debe restringirse a ( 0.0 <= VALUE <= 1.0 )
Si el parmetro VALUE es menos que 0.0 o mayor que 1.0:
La operacin de escala lineal puede producir valores OUT menores que el parmetro
MIN o mayores que el valor del parmetro MAX de valores OUT comprendidos dentro
del rango de valores del tipo de datos OUT. La ejecucin de SCALE_X pone ENO =
TRUE para estos casos.
Es posible generar nmeros escalados no comprendidos en el rango del tipo de datos de
OUT. En estos casos, el parmetro OUT se ajusta a un valor intermedio igual a la parte
menos significativa del nmero real escalado antes de la conversin final al tipo de datos
de OUT. En ese caso, la ejecucin de SCALE_X pone ENO = FALSE.
NORM_X parmetro VALUE debe restringirse a ( MIN <= VALUE <= MAX )
Si el parmetro VALUE es menor que MIN o mayor que MAX, la operacin de escala lineal
puede producir valores OUT normalizados menores que 0,0 o mayores que 1,0. La
ejecucin de NORM_X pone ENO = TRUE en este caso.
Consulte tambin
Instruccin RETURN (Pgina 229)
SCL Descripcin
IF "condicin" THEN Si "condicin" es TRUE o 1, entonces ejecuta las siguientes instrucciones
instruccin_A; hasta que aparezca la instruccin END_IF.
instruccin_B; Si "condicin" es FALSE o 0, salta a la instruccin END_IF (a no ser que el
instruccin_C; programa incluya instrucciones ELSIF o ELSE adicionales).
;
[ELSIF "condicin-n" THEN La condicin ELSEIF1 opcional aporta condiciones adicionales que deben
instruccin_N; evaluarse. Ejemplo: Si "condicin" de la instruccin IF-THEN es FALSE,
;] entonces el programa evala "condicin-n". Si "condicin-n" es TRUE,
ejecuta "instruccin_N".
[ELSE La instruccin ELSE opcional aporta instrucciones que deben ejecutarse si
instruccin_X; la "condicin" de la instruccin IF-THEN es FALSE.
;]
END_IF; La instruccin END_IF finaliza la instruccin IF-THEN.
1 Se pueden incluir varias instrucciones ELSIF dentro de la instruccin IF-THEN.
Variables Descripcin
"condicin" Requerida. La expresin lgica puede ser TRUE (1) o FALSE (0).
"instruccin_A" Opcional. Una o ms instrucciones deben ejecutarse si "condicin" es TRUE.
"condicin-n" Opcional. La expresin lgica que debe ser evaluada por la instruccin opcional ELSIF.
"instruccin_N" Opcional. Una o ms instrucciones deben ejecutarse si "condicin-n" de la instruccin ELSIF
es TRUE.
"instruccin_X" Opcional. Una o ms instrucciones deben ejecutarse si "condicin" de la instruccin IF-THEN
es TRUE.
Nota
El uso de una o ms ramas tiene la ventaja de que las expresiones lgicas que siguen a
una expresin vlida ya no se evalan, al contrario que una secuencia de una instruccin
IF. De ese modo es posible reducir el tiempo de ejecucin de un programa.
SCL Descripcin
CASE "Valor_test" OF La instruccin CASE ejecuta uno de varios
"ListaValores": Instruccin[; Instruccin, ...] grupos de instrucciones en funcin del valor
"ListaValores": Instruccin[; Instruccin, ...] de una expresin.
[ELSE
Instruccin Else[; Instruccin Else, ...]]
END_CASE;
Tabla 7- 96 Parmetros
Parmetro Descripcin
"Valor_Test" Requerida. Cualquier expresin numrica del tipo de datos Int
"ListaValores" Requerida. Un valor nico o una lista de valores o rangos de valores separados por coma.
(Utilice dos periodos para definir un rango de valores: 2..8) El siguiente ejemplo ilustra las
diferentes variantes de la lista de valores:
1: Instruccin_A;
2, 4: Instruccin _B;
3, 5..7,9: Instruccin _C;
Instruccin Requerida. Se ejecutan una o ms instrucciones cuando "Valor_test" coincide con cualquier
valor de la lista de valores
Instruccin Else Opcional. Una o ms instrucciones que se ejecutan si no hay ninguna concordancia con un
valor de "ListaValores"
CASE var1 OF
1 : var2 := "A";
2 : var2 := "B";
CASE var1 OF
65..90: var2 := "CasoSuperior";
97..122: var2 := "CasoInferior";
END_CASE
ELSE
var1:= "CarcterEspecial";
END_CASE
SCL Descripcin
FOR "variable_control" := "inicio" TO "fin" Una instruccin FOR se utiliza para repetir una
[BY "incremento"] DO secuencia de instrucciones mientras la variable de
instruccin; control se encuentre dentro del rango de valores
; especificado. La definicin de un bucle con FOR
END_FOR; incluye la especificacin de un valor inicial y otro
final. Ambos valores deben ser del mismo tipo de
datos que la variable de control.
Tabla 7- 98 Parmetros
Parmetro Descripcin
"variable_control" Requerida. Un entero (Int o DInt) que sirve como contador de bucles
"inicio" Requerida. Expresin simple que especifica el valor inicial de las variables de control
"fin" Requerida. Expresin simple que determina el valor final de las variables de control
"Incremento" Opcional. Cantidad con la que una "variable de control" incrementa despus de cada bucle.
El "incremento" debe tener el mismo tipo de datos que la "variable de control". Si el valor de
"incremento" no est especificado, el valor de las variables de ejecucin se incrementar en
1 despus de cada bucle. No es posible cambiar el "incremento" mientras se ejecuta la
instruccin FOR.
SCL Descripcin
WHILE "condicin" DO La instruccin WHILE realiza una serie de instrucciones hasta que una condicin
Instruccin; determinada es TRUE.
Instruccin; Los bucles WHILE se pueden anidar. La instruccin END_WHILE se refiere a la
...; ltima instruccin WHILE ejecutada.
END_WHILE;
Parmetro Descripcin
"condicin" Requerida. Una expresin lgica que evala si el estado es TRUE o FALSE. (Una condicin
"null" se interpreta como FALSE.)
Instruccin Opcional. Una o ms instrucciones que se ejecutan hasta que la comprobacin de la condicin
sea TRUE.
Nota
La instruccin WHILE evala el estado de "condicin" antes de ejecutar cualquier
instruccin. Para ejecutar las instrucciones como mnimo una vez independientemente del
estado de "condicin" utilice la instruccin REPEAT.
SCL Descripcin
REPEAT La instruccin REPEAT ejecuta una serie de instrucciones hasta que una condicin
Instruccin; determinada es TRUE.
; Los bucles REPEAT se pueden anidar. La instruccin END_REPEAT se refiere a la
UNTIL "condicin" ltima instruccin REPEAT ejecutada.
END_REPEAT
Parmetro Descripcin
Instruccin Opcional. Una o ms instrucciones que se ejecutan hasta que la condicin sea TRUE.
"condicin" Requerida. Una o ms expresiones del siguiente modo: Una expresin numrica o de cadena
que evala si el estado es TRUE o FALSE. Una condicin "null" se interpreta como FALSE.
Nota
Antes de evaluar el estado de "condicin", la instruccin REPEAT ejecuta las instrucciones
durante la primera iteracin del bucle (incluso si "condicin" es FALSE). Para comprobar el
estado de "condicin" antes de ejecutar las instrucciones utilice la instruccin WHILE.
SCL Descripcin
CONTINUE La instruccin CONTINUE salta las instrucciones siguientes de un bucle de programa
Instruccin; (FOR, WHILE, REPEAT) y contina el bucle comprobando si se da la condicin de fin. Si
; no es as, el bucle contina.
SCL Descripcin
EXIT La instruccin EXIT se utiliza para finalizar un bucle (FOR, WHILE o REPEAT) en cualquier punto,
independientemente de si se cumple o no la condicin de fin.
SCL Descripcin
GOTOJumpLabel La instruccin GOTO omite instrucciones y salta a una etiqueta del mismo bloque.
Instruccin; La etiqueta ("JumpLabel") y la instruccin GOTO deben estar en el mismo bloque.
... ; El nombre de una etiqueta slo puede asignarse una vez dentro de un bloque.
JumpLabel: Instruccin; Cada etiqueta puede ser el destino de varias instrucciones GOTO.
No es posible saltar a una seccin de bucle (FOR, WHILE o REPEAT). S que es posible
saltar desde dentro de un bucle.
En el ejemplo siguiente: en funcin del valor del operando "Tag_value", la ejecucin del
programa se reanuda en el punto definido por la etiqueta correspondiente. Si "Tag_value" =
2, la ejecucin del programa se reanuda en la etiqueta "MyLabel2" y omite "MyLabel1".
CASE "Valor_variable" OF
1 : GOTO MyLabel1;
2 : GOTO MyLabel2;
ELSE GOTO MYLabel3
END_CASE;
MyLabel1: "Variable_1" := 1;
MyLabel2: "Variable_2" := 1;
MyLabel3: "Variable_4" := 1;
SCL Descripcin
Return; La instruccin RETURN abandona sin condiciones el bloque lgico que se est ejecutando. La
ejecucin del programa regresa al bloque invocante o al sistema operativo (si abandona un OB).
Nota
Una vez ejecutada la ltima instruccin, el bloque lgico regresa automticamente al bloque
invocante. No inserte una instruccin RETURN al final de un bloque lgico.
1 Los nombres de las etiquetas se crean tecleando directamente en la instruccin LABEL. Utilice el icono de ayuda para
seleccionar los nombres de etiqueta disponibles para el campo de nombre de etiqueta JMP y JMPN. El nombre de la
etiqueta tambin puede teclearse directamente en la instruccin JMP o JMPN.
En KOP y FUP: Primero se coloca el cuadro JMP_LIST en el programa; hay dos salidas de
etiqueta. Los destinos de saltos se pueden agregar o borrar.
Haga clic en el icono "Crear" dentro del cuadro (en la parte izquierda del
ltimo parmetro DEST) para agregar nuevas salidas de etiquetas.
Tabla 7- 113 Seleccin del tipo de datos del cuadro SWITCH y operaciones de comparacin
permitidas
Timeout de vigilancia
Si el tiempo de ciclo mximo finaliza antes de haberse completado el ciclo, se generar un
error. Si el bloque lgico de tratamiento de errores OB 80 se incluye en el programa de
usuario, la CPU lo ejecuta, y es posible agregar lgica para crear una reaccin especial. Si
no se incluye el OB 80, se ignora la primera condicin de timeout.
Si ocurre un segundo timeout de tiempo de ciclo mximo en ese mismo ciclo del programa
(valor del tiempo de ciclo mximo multiplicado por 2), se disparar un error y la CPU
cambiar al estado operativo STOP.
En el estado operativo STOP se detiene la ejecucin del programa mientras continan las
comunicaciones y los diagnsticos de sistema de la CPU.
Encontrar ms informacin en: Configurar las salidas en una transicin de RUN a STOP
(Pgina 88).
Si EN = TRUE, la CPU pasa a estado operativo STOP, se detiene la ejecucin del programa
y el estado de ENO carece de importancia. De lo contrario, EN = ENO = 0.
GetError
GetErrorID
Operacin
De forma predeterminada, la CPU reacciona a un error de ejecucin de bloque registrando
un error en el bfer de diagnstico. No obstante, si se insertan una o ms instrucciones
GetError o GetErrorID en un bloque lgico, ste puede tratar los errores en el bloque. En
este caso, la CPU no registra un error en el bfer de diagnstico. En su lugar, la informacin
de error se deposita en la salida de la instruccin GetError o GetErrorID. Es posible leer la
informacin de error detallada con la instruccin GetError, o bien slo el identificador del
error con la instruccin GetErrorID. Normalmente, el primer error es el ms importante; los
errores siguientes son slo consecuencias del primer error.
La primera ejecucin de una instruccin GetError o GetErrorID en un bloque devuelve el
primer error detectado durante la ejecucin del bloque. Este error puede haberse producido
en cualquier punto entre el inicio del bloque y la ejecucin de GetError o GetErrorID. Las
siguientes ejecuciones de GetError o GetErrorID devuelven el primer error desde la
ejecucin previa de GetError o GetErrorID. El historial de errores no se guarda y la
ejecucin de la instruccin en cuestin har que el sistema PLC capture el siguiente error.
El tipo de datos ErrorStruct que utiliza la instruccin GetError puede agregarse en el editor
del bloque de datos y editores de interfaz de bloque, de manera que la lgica del programa
pueda acceder a estos valores. Seleccione ErrorStruct en la lista desplegable de tipos de
datos para agregar esta estructura. Es posible crear varios ErrorStruct utilizando nombres
unvocos. No es posible cambiar el nombre de los elementos de un ErrorStruct.
Es posible conectar la lgica del programa de reaccin a errores a ENO que se activa
cuando ocurre un error. Si existe un error, sus datos se almacenan en el parmetro de
salida, donde el programa puede acceder a ellos.
GetError y GetErrorID pueden utilizarse para enviar informacin de error desde el bloque
que se est ejecutando (bloque llamado) a un bloque invocante. Coloque la instruccin en el
ltimo segmento del bloque de programa llamado para notificar el estado de ejecucin final
del bloque llamado.
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
Para agregar una entrada, haga clic en el icono "Crear" o haga clic con el botn
derecho del ratn en el conector de entrada del parmetro IN existente y
seleccione el comando "Insertar entrada".
Para quitar una entrada, haga clic con el botn derecho del ratn en el conector de entrada
de uno de los parmetros IN existentes (si hay ms entradas adems de las dos originales)
y seleccione el comando "Borrar".
Los valores de bit correspondientes de IN1 y IN2 se combinan para producir un resultado
lgico binario en el parmetro OUT. ENO es siempre TRUE (verdadero) tras ejecutarse
estas instrucciones.
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
La seleccin del tipo de datos del parmetro OUT de DECO como Byte, Word o DWord
delimita el rango til del parmetro IN. Si el valor del parmetro IN supera el rango til, se
realiza una operacin modulo para obtener los bits menos significativos, tal y como se indica
a continuacin.
Rango del parmetro IN de DECO:
3 bits (valores 0-7) IN se utilizan para activar 1 posicin de bit en Byte OUT
4 bits (valores 0-15) IN se utilizan para activar 1 posicin de bit en Word OUT
5 bits (valores 0-31) IN se utilizan para activar 1 posicin de bit en DWord OUT
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
[...in32:=variant_in,]
inelse:=variant_in);
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
Para agregar una entrada, haga clic en el icono "Crear" o haga clic con el
botn derecho del ratn en el conector de entrada del parmetro IN existente
y seleccione el comando "Insertar entrada".
Para eliminar una entrada, haga clic con el botn derecho del ratn en el conector de
entrada de uno de los parmetros IN existentes (si hay ms entradas adems de las dos
originales) y seleccione el comando "Borrar".
[...out32:=variant_in,]
outelse:=variant_in);
1 En KOP y FUP: haga clic en "???" y seleccione un tipo de datos en el men desplegable.
Para agregar una salida, haga clic en el icono "Crear" o haga clic con el botn derecho del
ratn en un conector de salida del parmetro OUT existente y seleccione el comando
"Insertar salida". Para eliminar una salida, haga clic con el botn derecho del ratn en el
conector de salida de uno de los parmetros OUT existentes (si hay ms salidas adems de
las dos originales) y seleccione el comando "Borrar".
Para agregar una salida, haga clic en el icono "Crear" o haga clic con el botn
derecho del ratn en un conector de salida del parmetro OUT existente y
seleccione el comando "Insertar salida".
Para eliminar una salida, haga clic con el botn derecho del ratn en el conector de salida
de uno de los parmetros OUT existentes (si hay ms salidas adems de las dos originales)
y seleccione el comando "Borrar".
1 En KOP y FUP: haga clic en "???" y seleccione los tipos de datos del men desplegable.
Tabla 7- 142 Ejemplo de SHL para datos del tipo Word (palabra):
Tabla 7- 145 Ejemplo de ROR para datos del tipo Word (palabra):