Professional Documents
Culture Documents
ARITMÉTICA
En cualquiera de las actividades que desarrollamos en nuestra vida diaria se hace necesario el uso de
herramientas de tipo matemático para trabajar con datos numéricos.
Del mismo modo, estamos rodeados de máquinas que realizan cálculos para servir a nuestras
necesidades, tanto domésticas, como en entornos de trabajo y entorno industriales.
El usuario de la máquina no tiene por qué saber que nuestro autómata cuenta el tiempo en décimas
de segundo o unidades menores, así que debemos facilitarle la tarea. En la pantalla, el usuario
introducirá una cifra en segundos, pero nosotros debemos multiplicarla por 10 para que el
temporizador cuente el tiempo correctamente. Si el usuario trabajase con horas, minutos y
segundos, entonces tendríamos que convertir todo a segundos, sumar el resultado total de segundos
y volver a multiplicar por 10 para que el temporizador cuente correctamente.
Resumiendo, las operaciones aritméticas son necesarias para dar mayores prestaciones a nuestros
programas.
Las operaciones que veremos en esta unidad, son operaciones con números enteros, no con números
decimales.
Las operaciones con números enteros se denominan operaciones aritméticas en coma fija y las
operaciones aritméticas con números decimales (números reales) se denominan operaciones
aritméticas en coma flotante.
1.- Suma
La suma se realiza entre enteros o entre dobles enteros. Se trata de sumas de Words o de dwords. No
existe la suma de bytes.
Es importante tener en cuenta que nunca es posible sumas enteros con dobles enteros. Cada unidad
tiene su propia operación de suma.
- IN1: primer sumando. Toda suma está formada de dos o más sumandos. Las funciones de suma
para el autómata S7-200 solamente permiten sumar de dos en dos (dos sumandos). El primer
sumando es IN1; será un valor en formato de Word de entradas, salidas o marcas, o un valor
constante dentro del rango -32767 a +32767
- IN2: segundo sumando. Segundo componente de la suma. Al igual que IN1 será un valor en
formato Word
- OUT: resultado de la suma entre IN1 e IN2. El resultado de esta suma se guarda en una
dirección de Word que se indica en OUT. En el caso del ejemplo, esta dirección es VW50.
Siempre será una dirección de Word. Esta puede ser de salidas o marcas
- ENO: es una salida binaria (0 ó 1) que se encuentra a 1 cuando la operación está habilitada y
no se produce ningún error en la operación. Permite conectar varias funciones en un mismo
segmento de programa.
Ahora hemos de rellenar los valores correspondientes a IN1, IN2 y OUT que aparecen con
interrogantes. Una vez introducidos los valores o direcciones de la suma, ya tenemos completada la
línea de activación y la configuración de esta suma de enteros.
El bit de desbordamiento de la operación suma es SM1.1. Se trata de una marca especial y que indica
un estado del sistema. En este caso, es una marca reservada por el sistema para indicar
desbordamiento en la suma. Hay muchas más marcas especiales, cada una tiene la “misión” de
indicar eventos que se producen en las operaciones del programa.
El bit de desbordamiento se comporta como una marca cualquiera, de forma que podemos utilizarla
en programa para detener un funcionamiento, provocar un aviso de alarma,
etc.
Sin embargo la operación ADD_I está definida de forma que solamente permite trabajar con valores
de Word. Por eso existe una función que permite la suma entre valores mayores, en forma de
formato dword: la suma ADD_DI
2.- Resta
La resta se realiza entre enteros o entre dobles enteros, de la misma manera que ocurre en el caso
de la suma. Tendremos restas entre enteros (Word) o entre enteros dobles (dword). Tampoco existe
la resta de bytes.
-IN1: minuendo o primer elemento de la resta. Toda resta está formada por
minuendo y sustraendo. Las operaciones de resta para el autómata S7-200
solamente permiten restar de dos en dos, es decir, un minuendo y un
sustraendo. El minuendo es IN1. Será un valor en formato de Word de entradas, salidas o
marcas, o un valor constante dentro del rango -32.767 y 32.767
- IN2: sustraendo, segundo componente de la resta. Al igual que IN1, será un valor en formato
de Word de entradas, salidas o marcas, o un valor constante en el rango -32767 y 32.767.
- OUT: resultado de la resta entre IN1 e IN2, es decir, la diferencia. El resultado de esta resta
se guarda en una dirección de Word que se indica en OUT. En el caso del ejemplo esta
dirección de Word es VW50. Siempre será una dirección Word. Esta puede ser de salidas o
marcas.
- ENO: es una salida binario (0-1) que se encuentra a 1, cuando la operación está habilitada, y
no se produce ningún error en la operación. Permite conectar varias funciones en un mismo
segmento de programa.
La operación SUB_I realiza una resta de dos enteros de 16 bits y lo deposita en otro entero de 16
bits. Pero el mínimo valor que se puede representar por medio de un Word es -32.767. Por tanto, si
restamos un entero de valor alto, fácilmente obtendremos valores menores de -32.767 como
resultado de la resta.
El bit de desbordamiento de la operación de resta es el SM1.1, el mismo que para el caso de la suma.
De forma que esta marca no discrimina si se produce un desbordamiento en una operación de resta o
suma, sino simplemente nos indica que se ha producido dicho desbordamiento.
El bit de desbordamiento se comporta como una marca cualquiera, de forma que podemos utilizarla
en programa para detener un funcionamiento, provocar un aviso de alarma, etc. En definitiva, lo
podemos integrar en la lógica de programa como una marca más.
Por eso, existe una función que permite la resta entre valores mayores, en formato dword. Esta
función es la resta de doble entero SUB_DI.
El funcionamiento es exactamente el mismo que el visto para el caso de la resta de enteros, con la
única diferencia ya comentada de que estamos trabajando con valores más grandes.
El bit de desbordamiento es el mismo SM1.1, aunque, lógicamente, no se activa ante los mismos
valores que en el caso de la resta de enteros, sino en valores que desborden el valor máximo
representado en 32 bits.
Ejemplo: Podemos hacer uso de la resta de enteros en el caso de que queramos representar una
cuenta atrás con respecto a un valor predeterminado.
3.- Multiplicación
La multiplicación se realiza entre enteros (Word) o entre dobles enteros (dword). Tampoco existe la
multiplicación de valores enteros en formato byte.
- IN2: Multiplicador
- ENO: es una salida binaria (0-1) que se encuentra a 1, cuando la operación está habilitado y
no se produce ningún error en la operación. Permite conectar varias funciones en un mismo
segmento de programa.
En el caso de la multiplicación, se hace mucho más patente que en el caso de la suma y resta,
pues por la propia naturaleza de la operación es mucho más fácil obtener datos con valores altos.
La operación MUL_I realiza una multiplicación, de dos enteros de 16 bits y lo deposita en otro
entero de 16 bits, pero el máximo valor que se puede representar por medio de un Word es
32.767. Por tanto, si trabajamos con enteros de valores altos, fácilmente obtendremos valores
mayores de 32.767 como resultado de la multiplicación.
Para trabajar con datos de mayor valor deberíamos hacer como en el caso de sumas y restas, es
decir, debería haber una operación de multiplicaciones de enteros dobles. Esta operación, existe.
Sin embargo, existe una operación de multiplicación que permite trabajar con enteros como
multiplicando y multiplicador, pero que el resultado no tiene que ser necesariamente un entero,
sino que puede ser un entero doble.
El bit de desbordamiento es el mismo SM1.1, aunque lógicamente, no se activa ante los mismos
valores.
Ejemplo:
Un sencillo ejemplo sería el uso, combinado con la operación suma, para convertir un valor de
tiempo introducido por un usuario en minutos y segundos a décimas de segundo para que las
pueda entender uno de nuestros temporizadores.
Supongamos que ya hemos hecho la conversión de minutos a segundos y los hemos sumado. El
resultado de la suma de segundos lo guardamos en VW20. La operación sería algo así:
4.- División
La división se realiza entre enteros o entre dobles enteros. Tendremos división entre enteros
(Word) o división entre dobles enteros (dword). Tampoco existe la división de valores enteros en
formato de byte.
La función división se ejecuta como resultado de la lógica de programar conectada a la línea de
entrada EN, Veamos sus componentes:
- IN2: divisor. Segundo componente de la división. Al igual que IN1, será un valor en formato de
Word de entradas, salidas o marcas, o un valor constante en el rango -32767 ---- 32767
- OUT: resultado o cociente de la división entre IN1 e IN2. El resultado de esta división se
guarda en una dirección de Word que se indica en OUT. En el caso del ejemplo, esta dirección
de Word es VW50. Siempre será una dirección Word. Esta puede ser de salidas o marcas
- ENO: es una salida binaria (0 o 1) que se encuentra a 1 cuando la operación está habilitada y
no se produce ningún error en la operación. Permite conectar varias funciones en un mismo
segmento de programa.
En el caso de la división de enteros la limitación es mucho mayor que en el caso de las operaciones
aritméticas vistas hasta ahora para enteros o enteros dobles, puesto que al trabajar con enteros
todos los componentes de la operación han de ser enteros, pero la división nos genera como
resultado números no enteros, es decir, números con decimales, estos es, números reales. Estos
números reales provocan un desbordamiento en la operación de división si resulta un número real
como cociente de una división.
Ejemplo: 1/2=0,5
En el caso de la división, también existe una operación en la que los factores son Word y el resultado
es dword. Pero nos podemos encontrar con el desbordamiento por cociente real, que en el fondo es
un cociente fuera de rango. Esta operación es DIV, cuyas características como operación a la hora de
programar son idénticas a la operación DIV_I, pero que se diferencia en que el parámetro OUT no es
un Word sino un dword.
El error de división por 0 afecta a todas las operaciones de división, tanto DIV como DIV_I, como las
que veremos en los siguientes aparatados.
4.2.- División de doble entero
La limitación de uso de las operaciones de división de enteros (16 bits) crea la necesidad de trabajar
con unidades mayores, puesto que, lógicamente, podemos tener que trabajar con unidades mucho
mayores que el valor 32767.
Por eso existe una función que permite la división entre valores mayores en formato dword: es la
división de doble entero DIV_DI. El funcionamiento y la forma de trabajo de la función DIV_DI es
exactamente el mismo que el visto para la división de enteros, con la diferencia de que estamos
trabajando con valores más grandes.
El bit de desbordamiento sigue siendo el SM1.3.
Son básicamente una suma en la que el primer sumando es fijo: su valor es 1. El segundo sumando es
una variable o una constante en formato byte, Word o dword.
Es una operación que nos permite crear un registro de contaje o descontaje sin las limitaciones de
un contador. Sin embargo tal y como vemos en los dibujos (sumar 1 a VW10 y depositarlo en VW20)
no tiene muchas aplicaciones. Como podemos sacarle mucho partido, es cuando en el campo de
salida OUT colocamos la misma dirección que en la de entrada.
Esta es la manera de establecer contajes mediante incrementos de uno en uno en todo tipo de
variables (byte, Word y dword) y sin tener que recurrir a contadores, que, por otra parte, tienen un
número limitado.
La limitación de uso que presenta es la que ya conocemos para la operación suma. Podemos alcanzar
valores por encima del máximo para un byte o para un Word, sobre, todo, pero también para el caso
de un dword. El bit o marca de desbordamiento es el SM1.1
Ejemplo: Un contador se realiza en una variable Word, luego está sujeto a la limitación de tamaño
de una Word (-32767 --- 32767). Si tuviésemos que contar una producción de miles de piezas,
seguramente no tendríamos problemas a la hora de contarlos con un contador. Pero hay producciones
que se miden en centenares de miles o millones de piezas y eso no lo podríamos contar con un
contador de los que tenemos en el autómata, pero podríamos utilizar la operación INC_DW que nos
ayuda a realizar grandes contajes.
6.- Operaciones de decrementar un valor
Si la operación de incremento de un valor es básicamente una suma donde uno de los sumandos es
fijo e igual a 1, la operación de decrementar valor tiene una explicación similar, pero fundamentada
en la resta de enteros.
Es básicamente una resta en la que el segundo elemento de la resta, el sustraendo, es fijo y su valor
es 1; el minuendo es una variable o una constante en formato byte, Word o dword. A diferencia de
las restas, está definida para bytes.
Esta operación nos permite crear un registro de contaje hacia atrás o descontaje sin las limitaciones
de un contador, que nos permite descontaje pero no sobre cualquier unidad.
Si nos fijamos en la operación decrementar dword, tenemos que, cada vez que recibe un pulso de
subida a la entrada EN, se produce un decremento en una unidad sobre el valor de IN=VD10, que se
deposita en OUT=VD10. De esta forma, a cada pulso en la entrada EN, tenemos un decremento de 1
en VD10.
La inserción en la lógica de programa es igual a la que ya hemos visto para el resto de operaciones, y
su limitación de uso es la misma que presentan las operaciones suma, resta y operación incrementar:
podemos alcanzar valores por encima del máximo para un byte o una Word, sobre todo, pero
también para el caso de una dword.
Ejemplo: podemos proponer un ejemplo similar al que vimos para la operación incrementar.
Imaginemos que tenemos que realizar el contaje, hacia atrás, de una cantidad de millones de
unidades, por ejemplo, la producción de una fábrica de pilas. Pero queremos disponer del número de
piezas que faltan para alcanzar una producción dada. Cada pieza terminada supondrá un descontaje
sobre el objetivo, hasta la producción buscada. En este caso, la operación de DEC_DW nos ayudaría a
realizar grandes contajes.