booblUnidad Didáctica 1.
PROGRAMACIÓN DE PLC¨s: CONCEPTOS
GENERALES Y ALGEBRA DE BOOLE.
Introducción a la estructura de un PLC
PLC: equipo electrónico de control con un hardware interno que es
independiente del proceso que pretende controlar. Dichos procesos se
controlan mediante un software que contiene las operaciones a realizar para
el control.
La secuencia de operaciones que realiza se define sobre las señales de
entrada y salida que obtenemos del proceso. Dichas entradas y salidas, van
cableadas directamente al PLC.
El autómata genera las señales de salida a partir del estado de las señales
de entrada y según el programa de control que tenga almacenado en su
memoria. Dicho programa es introducido a través de la unidad de
programación.
La configuración del autómata se desarrolla alrededor de una unidad central
o de control que por medio de buses internos une las interfaces de entrada,
salida y las memorias.
Estructura de un autómata.
Bloques esenciales para el funcionamiento de un autómata
Unidad central de proceso (CPU)
La CPU: se encarga de ejecutar el programa que tenga almacenado el PLC.
Gestiona y ordena las transferencias de información entre las entradas y las
salidas y de establecer la comunicación con los periféricos externos.
Estructura y elementos de la CPU.
Memoria del autómata.
En ella se almacenan:
- Datos del procesador: Entradas y salidas, señales que se generen en
la planta, variables internas o constantes que se usen durante el
proceso.
- Datos de control: Programa de usuario o configuración del autómata.
Tipos de memorias de un autómata:
- Memorias internas: donde se almacenan el estado de las variables
con las que trabaja el autómata. Están formadas por relés internos
y/o auxiliares, las memorias imagen de E/S, temporizadores,
contadores, registros internos, etc…
- Memorias de programa: Suelen ser externas y están conectadas a la
CPU. En ellas se almacena el programa que controla la aplicación,
que ha sido escrito por el programador. También pude contener
textos variables, información sobre el sistema o datos alfanuméricos.
Interfaces de entrada y salida.
Comunican la unidad central con el proceso. Se encargan de filtrar, adaptar
y codificar de forma adecuada para dicha unidad, las señales de entrada y
decodificar y amplificar las señales de ejecución antes de enviarlas a los
elementos conectados a la salida.
Fuente de alimentación
Se encargan de proporcionar las tensiones necesarias a partir de una
tensión exterior.
Por lo general necesitaremos al menos 2, ya que la CPU, y las memorias por
un lado y los emisores de señal y actuadores de salida por otro, necesitan
una tensión de funcionamiento distinta.
La mayoría de PLC´s pueden incluir una batería extra para asegurar la
alimentación en caso de fallo o desconexión.
La mayoría de fabricantes con el fin de evitar incompatibilidades y poder
simplificar la aplicación de sus dispositivos proporcionan módulos de
alimentación con varias tensiones de salida y niveles de potencia adecuados
para poder cubrir los requerimientos del sistema.
1. Conceptos generales de programación.
Desde el punto de vista del procesador, se denomina programa a un conjunto
de instrucciones o proposiciones definidas correctamente que le dicen lo que
tiene que hacer.
Cada instrucción indica:
- Qué operación realizará a continuación.
- De donde obtendrá los datos que necesita para realizarla.
- Dónde guardará los resultados de la operación.
Desde el punto de vista del procesador, se denomina programa a un conjunto
de instrucciones o proposiciones definidas correctamente que le dicen lo que
tiene que hacer.
Un programa se escribe en un lenguaje de programación. Estos lenguajes
permiten simplificar la creación de programas debido a s fácil descripción de
las instrucciones que ha de ejecutar el procesador; agrupando varias
instrucciones y dando un solo nombre al conjunto, de tal forma que la lista
de operaciones se reduce considerablemente haciendo más fácil la
compresión y elaboración de programas.
Programación: elaboración de un programa.
En el PLC existen dos tipos principales de programas:
- Programa de aplicación de usuario: Es el programa que elabora el
usuario para ejecutar una determinada tarea que necesita automatizar.
- Programa del sistema: Son los programas ya escritos por el fabricante
del PLC, que permiten procesar los programas del usuario.
Nota:
Programa de aplicación:
Hace referencia al conjunto de instrucciones o proposiciones que el usuario programa,
con la finalidad de solucionar tareas de automatización específica. Para ello, el usuario
escribe el programa de acuerdo a la representación del lenguaje de programación en
el Cuál tenga un mejor dominio. Es necesario tener en cuenta que hay fabricantes
que no utilizan todos los tipos de representaciones disponibles de los lenguajes de
programación, pero, a pesar de ello, el usuario tendrá que adaptarse a la
representación que se disponga.
Los programas del sistema, proporcionan servicios vitales a los programas
del usuario. Incluyen traductores de lenguaje de alto nivel a nivel de máquina
y realizan funciones operativas internas del controlador. Son el S. O. del PLC.
Los programas de aplicación son estructurados en función de la forma en la
que se procesan los programas (tareas). Pueden ser de dos tipos.
Cuando el autómata se sitúa en el ciclo de ejecución, también conocido como
ejecución cíclica, la CPU realiza un barrido del programa contenido en
memoria de usuario desde la dirección o línea 0000 hasta la última posible.
Dependiendo de cómo se realice la ejecución o barrido del programa, se
diferencia las siguientes estructuras:
- Ejecución cíclica lineal.
- Ejecución con salto condicional.
- Ejecución con salto a subrutinas o programación estructurada.
A. Salto condicional
Se puede considerar una variante de la programación lineal, con la única
diferencia de que en el ciclo de ejecución de un programa tiene la posibilidad
de alterar la secuencia línea a línea y dar un salto a otras líneas del programa
dejando un número “x” de líneas sin ejecutar. Esto es el salto condicional.
Su funcionamiento es el siguiente.
Si al llegar, en el proceso de ejecución del programa a la instrucción U, tal
como se puede apreciar en la figura siguiente, se cumple la condición en ella
indicada, se salta a V, continuando el barrido en V+1 hasta n. Si por el contra,
al llegar a U no se cumple la condición, el programa se ejecuta de forma lineal
continuando en U+1.
Esta facultad que tiene gran número de autómatas permite reducir el
tiempo de ejecución del ciclo, siendo aplicable en aquellos casos en que las
instrucciones contenidas en el salto sólo son precisas cuando se dan
determinadas condiciones impuestas por el propio programa
B. Programación estructurada
Cuando se quieren programar tareas de automatización que son muy
complejas, sería conveniente dividir el problema de manera parcial en
bloques y, al final, unir el conjunto de programas obtenidos en uno solo,
resultando la programación significativamente más fácil tanto para el usuario
programador como para los usuarios mantenedores.
Las funciones de automatización que son muy complejas se procesan mejor
cuando se dividen en pequeñas tareas correspondientes a las funciones
tecnológicas del proceso de automatización o si se van a utilizar
frecuentemente. Estas tareas parciales están representadas (programación
estructurada) en el programa de usuario mediante bloques.
Esta filosofía utilizada para la programación se denomina “Programación
Estructurada”, y consiste en dividir el programa de aplicación en varios
bloques que se caracterizan por poseer una independencia de tipo funcional,
donde cada bloque del programa lleva a cabo una tarea específica claramente
definida.
Cuando se realiza la programación de manera estructurada, se optimiza el
tiempo de escaneo porque no hay que ejecutar todos los bloques en cada uno
de los ciclos de barrido, ejecutándose sólo los que están en actividad en el
momento dado.
Las principales ventajas que se obtienen cuando se programa de forma
estructurada son las siguientes:
- La compresión, la solución, la simulación y las pruebas son fáciles si
cuando el problema es muy complejo se trata por partes.
- El diagnóstico de los fallos y su solución también es más fácil. Esto se
debe a que cuando y ase ha identificado el bloque del programa en el
que está el fallo, su corrección es más rápida que si se afronta el
problema de manera global.
- Los programas parciales se pueden ejecutar de manera inmediata por
equipos de programadores si cada uno elabora bloques individuales;
también se pueden usar de manera reiterada durante el escaneo del
programa o formar parte de otro programa de aplicación.
- Se utiliza con mayor eficacia la capacidad de la memoria, ya que se
pueden llamar los bloques de programas todas las veces que sea
necesario sin que haya que programar varias veces.
- Optimización del tiempo de barrido.
Jerarquía de llamadas: es la secuencia y anidamiento de las llamadas de
bloques. La profundidad del anidamiento o número de bloques depende el
fabricante de la CPU.
Ejemplo de la familia de autómatas de Siemens. Secuencia y profundidad de
anidamiento de las llamadas de bloques dentro de un ciclo de ejecución.
La figura siguiente ilustra el desarrollo de la llamada de un bloque dentro del
programa de usuario: el programa llama el segundo bloque, cuyas
operaciones se ejecutan luego hasta el final. Una vez que finaliza el
tratamiento del bloque llamado, se sigue con el procesamiento del bloque
invocante mediante la operación subsiguiente a la llamada del bloque.
Bloque o módulo de Organización (OB)
La ejecución cíclica de programas es la ejecución "normal" en los sistemas
de automatización. El sistema operativo llama de manera cíclica al OB 1 y se
arranca la ejecución cíclica del programa de usuario.
Funciones:
Son bloques programables. Se denomina función a un bloque lógico "sin
memoria". Las variables de las FCs que son temporales se memorizan en la
pila de datos locales. Estos datos se pierden tras el tratamiento de las FCs.
Para fines de memorización de datos, las funciones pueden utilizar bloques
de datos globales (BD).
La FC contiene un programa que se ejecuta cada vez que la FC es llamada
por otro bloque lógico. Las funciones se pueden utilizar para:
- Devolver un valor de función al bloque invocante (funciones
matemáticas)
- Ejecutar una función tecnológica (control individual con combinación
binaria)
Bloque de función (FB)
Los bloques de función son denominados bloques programables. Un FB es
un bloque "con memoria". El cual contiene un bloque de datos asignado como
memoria llamado bloque de datos de instancia (DBinst). Tanto los parámetros
que se transfieren al FB, como las variables estáticas, son memorizados en
el DB de instancia; mientras que las variables temporales se memorizarán en
la pila de datos locales.
Los datos que han sido memorizados en el DB de instancia, no se perderán
cuando termine el tratamiento del FB. Mientras que los datos que se han
memorizado en la pila de datos locales sí se pierden cuando termina el
tratamiento del FB.
Un FB está compuesto por un programa que siempre se ejecuta cuando el
FB es llamado por otro bloque lógico. Los bloques de función simplifican la
programación de funciones complejas de uso frecuentado.
DB Módulo de Datos
Al contrario de los bloques lógicos, los bloques de datos no contienen
instrucciones. En cambio, sirven para guardar datos de usuario, esto quiere
decir que los bloques de datos tienen datos que pueden variar con los que
trabaja el programa de usuario. Los bloques de datos globales contienen
datos de usuario utilizables desde otros bloques.
Bloques de función de sistema (SFB) y funciones del sistema (SFC)
No es necesario programar cada función. Algunos fabricantes ofrecen
bloques pre-programados que se pueden llamar desde el programa de
usuario.
Un SFB es un bloque de funciones integrado. Al igual que los FBs, los SFBs
son bloques "con memoria". Para los SFBs se deben crear también bloques
de datos de instancia, además de cargarlos en la CPU como parte integrante
del programa.
Una función del sistema SFC es una función pre programada integrada en
la CPU. La SFC se puede llamar desde el programa. Teniendo en cuenta que
las SFCs forman parte del sistema operativo, no se cargarán como parte
integrante del programa. Igual que las FCs, las SFCs son bloques que no
tienen memoria.
Representación de los lenguajes de programación y la norma IEC
61131-3.
En la actualidad cada fabricante diseña su propio lenguaje de programación.
Las diferentes formas que adopta el lenguaje de programación utilizado para
realizar programas se llama representación del lenguaje de
programación.
Hay cuatro tipos de representaciones, que son las más difundidas a nivel
mundial, y son:
- Lista de instrucciones.
- Plano de funciones o diagrama lógico.
- Diagrama de contactos o plano de contactos.
- Diagrama algorítmico.
La gran variedad de lenguajes de programación, hace que cada fabricante
tenga su representación propia.
En la siguiente tabla se presentan lenguajes de uso común bajo nombres
distintos asignados por el fabricante:
A. Norma IEC 61131-3
Supone el primer esfuerzo real para la estandarización de los lenguajes de
programación usados en la automatización industrial.
La norma IEC 61131-3 supone el primer esfuerzo real para la
estandarización de los lenguajes de programación utilizados en la
automatización industrial.
Esta parte de la programación, es la tercera del estándar 61131.
Hay muchas formas de ver esta parte del estándar. Algunas son:
Es el resultado de la fuerza de trabajo del IEC TC65 SC65B.
Es el resultado del trabajo de 7 compañías internacionales que
han sumado muchos años de experiencia en el sector de la
automatización industrial.
Son aproximadamente 200 páginas de texto, con unas 60 tablas.
Es la especificación tanto de la sintaxis como de la semántica de
un conjunto unificado de lenguajes de programación, donde también
se incluye el modelo general del software y su estructura como
lenguaje.
Algunas de las ventajas que ofrece son:
Reducción del esfuerzo humano para entrenamiento,
depuración, consultoría y mantenimiento
Permite crear un software reutilizable, lo que minimiza el
esfuerzo a la hora de codificar, el tiempo para el desarrollo del sistema
y los errores que surjan de la compilación
Permite incluir técnicas de programación usadas en entornos
distintos al industrial
Conectividad aumentada para facilitar la distribución del control.
Para que todo esto se cumpla y la norma sea estable debe de cumplir que:
El software se desarrolla basándose en proyectos, diseño,
tareas, bloques y programas.
Tiempo un fuerte tipado de datos. Esto se debe a que para cada
operación del lenguaje solo se le pueden aplicar un tipo de datos.
La ejecución la controlamos a través de tareas
La norma nos permite dos caminos de desarrollo para el programado:
- Hacia abajo: definimos los tipos de datos y posteriormente el software
que trabaje mejor con esos tipos de datos.
- Hacia arriba: selecciona un software de programación mejor para el
proceso y después define los tipos de datos con los que este software
se adecue mejor.
Estas dos modalidades también las podemos definir como de elementos
comunes y de lenguajes de programación respectivamente.
Lenguajes de programación
Se definen cuatro lenguajes de programación normalizados, lo que significa
que se han definido tanto la sintaxis como la semántica, y no se permiten
particularidades distintivas (dialectos). Cuando ya han sido aprendidos s
podrá usar una amplia variedad de sistemas basados en esta norma:
Los lenguajes consisten en dos tipos:
Literales:
Lista de instrucciones (Instruction List, IL).
Texto estructurado (Structured Text, ST).
Gráficos:
Diagrama de contactos (Diagram Ladder, LD).
Diagrama de bloques funcionales (Function Block
Diagram, FBD).
Los cuatros programas describen la misma acción.
La elección del lenguaje de programación depende de:
Los conocimientos del programador.
El problema a trata.
El nivel de descripción del proceso.
La estructura del sistema de control.
La coordinación con otras personas o departamentos.
Estos cuatro lenguajes están relacionados entre sí, y se pueden utilizar para
resolver de forma conjunta un problema común en función de la experiencia
del usuario.
El Diagrama de contactos (LD): se basa en la presentación
gráfica de la lógica de relés.
Lista de Instrucciones (IL): es el modelo de lenguaje
ensamblador que se basa en un acumulador simple.
El Diagramas de Bloques Funcionales (FBD): se suele
utilizar en aplicaciones que requieren un flujo de información o datos
entre los componentes de control. Tanto las funciones como los
bloques funcionales se presentan como circuitos integrados.
El lenguaje Texto estructurado (ST): es un lenguaje de alto
nivel con orígenes en el Ada, Pascal y ́C ́; puede ser utilizado para
codificar expresiones complejas e instrucciones anidadas; es un
lenguaje que dispone de estructuras para bucles (REPEAT-UNTIL;
WHILE-DO), una ejecución condicional (IF-THEN-ELSE; CASE), y
funciones (SQRT, SIN, etc.).
Algebra de Boole.
Tanto en sistemas digitales de grandes dimensiones como en ordenadores,
los procesos son operaciones simples realizadas por una gran cantidad de
circuitos digitales que veremos a continuación. Todos se denominan puertos
o circuitos lógicos, ya que emplean ecuaciones del álgebra de Boole. Es un
sistema de análisis matemático de la lógica.
Sistema digital: funciona de forma binaria. Emplea dispositivos en los que
solo son posibles dos estados. Un elemento puede tener tensión alta, por
ejemplo 4V, o baja de unos 0,2V, pero ningún otro valor. Dichos estados son
1 para alta, y 0 para baja. La aritmética binaria se maneja más cómodamente
con la clasificación de 0 y 1.
Para explicar el sistema binario se utiliza el sistema décimas, Base 10 (del 0,
al 9).
La representación en base 10 se basa en potencias de base 10. Estas las
podemos denotar como A X 10^B.
A sería el número en la posición de las unidades, decenas,
centenas etc...
Y B la posición que ocupa siendo la posición de las unidades la 0
y las siguientes 1 valor numérico por encima de la anterior posición.
Si usamos de ejemplo el número 1524 tendríamos la siguiente
descomposición.
1524 = 1x10^3 + 5x10^2 + 2x10^1 + 4x10^0 = (1 x 1000) + (5 x 100)
+ (2 x 10) + (4 x 1)
En el sistema binario de representación, la base es 2 en vez de 10, e igual
que en el sistema decimal la potencia tendrá la estructura de A x 2^B Con
la diferencia de que en el sistema decimal A solo puede tomar un
valor (0 ó 1). Veremos ejemplos de obtener el número decimal de un
binario y viceversa.
Por ejemplo el número 10011 podríamos representarlo
como
10011 = 1 x 2^4 + 0 x 2^3 + 0 x 2^2 + 1 x 2^1 + 1 x 2^0 = (1 x 16) +
(0 x 8) + (0 x 4) + (1 x 2) + (1 x 1) = 16 + 2 +1 = 19
Esta sería el paso de un número binario a su equivalente decimal, la acción
contraria es algo más larga. Consiste en ir dividiendo consecutivamente el
número por 2 e ir guardando los resultados. Hagamos el ejemplo con 19:
19:2 = 9, y de resto nos da 1
9:2 = 8, y de resto nos da 1
8:2 = 4, y de resto nos da 0
4:2 = 2, y de resto nos da 0
2:2 = 1 y de resto nos da 0
El número binario final estaría representado por el resto de la última
operación, a continuación el resultado de la última operación y los demás
restos de las demás operaciones. En nuestro caso 010011 = 10011; que es
el número que previamente habíamos comprobado que daba 19 en binario.
Un digito binario se denomina bit. Un grupo de bit que tenga un
determinado significado se denominará información, palabra o código.
Se define el álgebra de Boole como la clase o conjunto de elementos
que pueden tomar dos valores perfectamente diferenciados, designados por
0 y 1 y que se relacionan entre sí mediante operaciones binarias, la suma y
el producto.
Operaciones en el álgebra de Boole
Operación OR:
La operación Suma o Adición que se aplica a las variables A y B y se define
de la siguiente manera:
Las tres primeras operaciones resultan obvias, son iguales a la suma
aritmética que conocemos de las operaciones básicas, sin embargo 1+1=1
resulta extraña. La explicación es que el resultado es igual a 1 siempre que
alguno de los bits sumados sea igual a 1. O lo que es lo mismo, el resultado
será 0 si los dos bits que estamos sumando son iguales a 0.
La función o puerta que representa esa tabla de verdad es la OR:
Puerta OR básica con su tabla de verdad.
Operación AND:
La operación producto se define por la siguiente tabla de verdad:
0*0=0.
0*1=0.
1*0=0.
1*1=1.
A la vista de los resultados, podemos decir que solo es 1 cuando los dos
bits están a 1, o el resultado es 0 cuando alguno de los bits es 0.
La Tabla de la Verdad que representa esta operación es la de la puerta o
función AND.
Puerta And con su tabla de verdad
Ejemplo de aplicación de la función AND:
Por ejemplo, imaginemos unas caja de seguridad de un banco que solo se
abre cuando se han introducido dos llaves diferentes, una está en manos del
director y la otra del jefe de seguridad.
Si solo se introduce una de ellas, la caja no se abrirá. Modelaremos el
problema así. Utilizaremos la variable A para referirnos a una de las llaves (0
no introducida, 1 introducida) y la variable B para la otra llave con el mismo
significado. Con la variable F expresamos el estado de la caja de seguridad
(0 cerrada y 1 abierta). El estado de la caja lo podemos expresar con la
ecuación:
F= A*B
Lo que indica que la caja se va abrir (F=1) solamente si A=1 (una llave
introducida) y B=1 (la otra llave introducida), en cualquiera de los demás
casos F=0 y por tanto la caja no se abrirá.
Operación NOT:
La operación de implementación, la cual puede denominarse de negación,
nos permite obtener el estado complementario del bit o variable booleana al
que se lo aplicamos. Se define de la siguiente manera:
Operación
Es decir, que si lo aplicamos a 0 obtenemos 1 y si lo aplicamos a 1
obtenemos 0. Esta operación nos permite cambiar el estado de una variable
booleana. La función o puerta que representa es la NOT.
Puerta NOT
Puerta not básica con su tabla de verdad.
Funciones complementarias: Combinando las funciones vistas
anteriormente con la función NOT surgen las complementarias. La función
NOR es la combinación de conectar la entrada de una puerta NOT a la salida
de una puerta OR. Su tabla de verdad será.
A=0,B=0, F=1
A=0,B=1, F=0
A=1, B=0, F=0
A=1, B=1,F=0
La función NAND es la combinación de conectar la entrada de una puerta NOT
a la salida de una puerta NAND. Su tabla de verdad será.
A=0,B=0, F=1
A=0,B=1, F=1
A=1, B=0, F=1
A=1, B=1,F=0
La función XOR implementa la disyunción exclusiva. Es decir un 1 para
entradas distintas y un 0 para entradas iguales. Representa la operación.
función
Su tabla de verdad es la siguiente.
A=0,B=0, F=0
A=0,B=1, F=1
A=1,B=0, F=1
A=1,B=1, F=0
La función XNOR es la inversa de la puerta XOR.
Función xnor
Su tabla de verdad es la siguiente.
A=0,B=0, F=1
A=0,B=1, F=0
A=1,B=0, F=0
A=1,B=1, F=1
Postulados fundamentales del Álgebra de Boole aplicados a contactos
eléctricos.
Dentro del Álgebra de Boole, vamos a destacar seis postulados
fundamentales, con ellos y las funciones básicas booleanas se realiza de la
descripción básica de circuitos digitales:
Postulado 1. Definición
El álgebra booleana hace referencia a un sistema algebraico que se define
en un conjunto B, que contiene dos o más elementos y entre los que se
definen dos operaciones denominadas "suma u operación OR" (+) y "producto
o multiplicación u operación AND" ( ).
Postulado 2. Existencia de neutros
Existen en B el elemento neutro de la suma, llamado O y el neutro de la
multiplicación, llamado 1, de manera que para cualquier elemento x de s:
Elementos neutros
Postulado 3. Conmutatividad
Para cada x, y en B:
Conmutatividad
Postulado 4. Asociatividad
Para cada x, y, z en B:
Asociatividad
Postulado 5. Distributividad
Para cada x, y, z en B:
Distributividad
Postulado 6. Existencia de complementos
Para cada x en B existe un elemento único denotado x’, llamado
complemento de x tal que:
Existencia de complementos
Actividad.
Como actividad de ampliación se propone demostrar las siguientes
igualdades.
Ecuación 1: Se puede demostrar aplicando el elemento unidad.
Ecuación de álgebra de Boole
Ecuación 2: Se puede demostrar aplicando la ley distributiva
Ecuación de álgebra de Boole
Ecuación 3: Se puede demostrar mediante desarrollo y aplicación de lo
anterior
Ecuación del álgebra de Boole
Ecuación 4: Desarrollando mediante la propiedad distributiva
Ecuación del álgebra de Boole
Ecuación 5: Podemos resolverla teniendo en cuenta la primera ecuación y
desarrollando
Ecuación del álgebra de Boole
Ecuación 6: Desarrollando
Ecuación del álgebra de Boole
Teoremas de Morgan.
El teorema de Morgan nos afirma que las siguientes transformaciones son
posibles:
Teoremas de Morgan
Demostración del inciso (a):
Demostración del inciso (a)
Así, para la demostración del inciso (a) hay que demostrar que A+B es el
complemento de A • B, para ello se hará en dos partes:
Sumando:
Teoremas de Morgan sumativa
Por conmutatividad
Por cancelación.
Propiedad del complemento
Por Teorema 1.
Multiplicando:
Teoremas de Morgan en multiplicación
Por distributividad.
Propiedad del complemento.
Idempotencia.
Teoremas de Morgan
El teorema de Morgan nos permite representar funciones complejas de
forma más simple. Un ejemplo sería el siguiente.
Ecuación objetivo de aplicación del teorema de Morgan
Podemos suponer que nuestro sistema necesita realizar esta función pero
solo disponemos de una puerta AND cuando la función requiere 3. Aplicando
el teorema de Morgan podemos redefinirla de la siguiente forma
Transformadas para el teorema de Morgan
Como vemos en la ecuación final solo usaríamos una puerta AND. Para el
cambio se ha realizado de forma adecuada debemos comprobar que la
función inicial y esta última tienen la misma salida para unas entradas dadas.