Mientras Macluskey escribía su serie sobre lógica, nos ha contado lo importante que era esa asignatura para los informáticos en ciernes, y hemos visto algunos ejemplos por el camino, como su aplicación a la redacción de los if de los lenguajes de programación.
Una de dichas aplicaciones es el diseño y fabricación de los circuitos digitales, que permiten tomar un conjunto de entradas digitales binarias y obtener un resultado 1 ó 0. Pero como Macluskey está siguiendo los apuntes de hace un porrón de años, en aquel momento no se contaba nada de eso en la escuela. Cuando él estudió aquello, les contaron interruptores (pero no puertas lógicas) probablemente porque se pensaba que muchos ingenieros informáticos tendrían que dedicarse al hardware, y el tiempo ha demostrado que… se equivocaron. La inmensa mayoría de los ingenieros informáticos se dedican al software. De hecho, yo soy teleco y también estudié interruptores en la carrera (aunque unos pocos años después de Mac) y después puertas lógicas, pensando en que probablemente los telecos, esos sí, se iban a dedicar al hardware… pero jamás lo he usado en mi vida profesional.[1]
Finalmente, aprovechando que me dais un púlpito al que subirme a largar, repasaremos un poquito las principales tecnologías hardware para hacer esto.
Este artículo puede enlazar detrás de casi cualquiera de los artículos introductorios de la serie de Macluskey, pero como probablemente el sitio natural sea justo después del del cálculo proposicional, ahí es justamente donde lo publicamos. Para seguir este artículo supondremos, además, conocimientos del artículo de álgebra de Boole y el del álgebra de circuitos. Revísalos si no los tienes frescos.
Para empezar a ver la utilidad de esto, y antes de entrar en formalismos, vamos a tratar de poner un ejemplo. Supongamos que yo tengo:
- Un sensor que me detecta si entra luz por la ventana. Si entra luz genera un 1, y si no, un 0 (ya veremos luego cómo representamos esto físicamente).
- Un sensor de movimiento que me detecta si estoy en la habitación, generando un 1 si estoy, y un 0 en caso contrario.
- Una luz que se enciende cuando recibe un 1, y se apaga cuando recibe un 0.
¿Podría yo crear un circuito digital que encienda la luz cuando estoy en la habitación pero no entra luz por la ventana? A lo mejor me gustaría que la luz del pasillo se encienda automáticamente cuando viene alguien, pero, claro, solo cuando no sea de día.
Pues sí, podría diseñar un circuito digital que haga eso. El circuito más sencillo que lo logra es el siguiente:
¡Hey! ¿Qué son esos dibujos extraños que hemos puesto entre los sensores y la bombilla?
Esos dibujos son puertas lógicas.
La primera de las puertas lógicas, la que parece una D mayúscula, es una puerta AND. Su trabajo (la veremos formalmente más adelante) es poner un 1 en la salida si en ambas entradas hay un 1, y un 0 en cualquier otro caso.
La segunda de las puertas lógicas, la que parece un triángulo con un círculo en la punta, es una puerta NOT. Su trabajo es poner en la salida lo contrario de lo que haya en la entrada.
Piénsalo un poco, y resumamos en la siguiente tabla los cuatro posibles estados del sistema:
Sensor de presencia |
Sensor de luz |
Bombilla |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
Si lo pensáis un poco, esa tabla resume lo que queríamos hacer: la luz se enciende si detecta a alguien, pero solo si es de noche.
Fácil, ¿verdad?
Existen 3 puertas lógicas básicas: AND, OR y NOT (supongo que, dada la serie en la que estamos, y dado que quizá adivinas algo de lo que vamos a decir en los próximo párrafos, no te sorprenden esos nombres…).
Una puerta AND se representa por el siguiente símbolo y define su comportamiento según la siguiente tabla:
Una puerta OR se representa por el siguiente símbolo y define su comportamiento según la siguiente tabla:
Finalmente, una puerta NOT se representa por el siguiente símbolo y define su comportamiento según la siguiente tabla:
¿Será, por un casual, el conjunto (S, OR, AND), junto con la puerta NOT, siendo S los dos posibles valores {0,1}, un álgebra de Boole? Ya sabemos cómo demostrarlo, si es necesario, por anteriores artículos de la serie… pero sí, obviamente, es un álgebra de Boole. De hecho, a poco inglés que sepamos, sabemos que AND significa Y, OR significa O y NOT significa NO… y eso nos da muchas pistas. No vamos a demostrarlo aquí, porque ya lo ha hecho Macluskey en otros artículos para otros casos; se hace igual.
Eso significa que podemos definir funciones a base de combinar puertas lógicas, y que podemos aplicarles a esas funciones todas las operaciones que veíamos en un álgebra de Boole, tales como la conmutatividad y asociatividad, las leyes de De Morgan, la simplificación de Karnaugh, su descripción en FND[2] o FNC,[3] o muchas otras. De hecho, es muy habitual definir las funciones de lógica digital precisamente con la misma notación que Macluskey ha usado en el resto de la serie: el símbolo de + para el OR; y el punto de multiplicación o simplemente nada para el AND. Para el NOT se usa a menudo una barra horizontal sobre la variable o una tilde tras ella… como hemos ido haciendo en el resto de la serie, vaya.
Por ejemplo, para definir nuestro circuito de arriba, si llamamos L al sensor de luz exterior, P al sensor de presencia y S a la salida, podemos decir que S=P·L’.
Saber que es un álgebra de Boole tiene su importancia. Por ejemplo, si definimos nuestra función digital en forma de tabla, podemos usar la simplificación de Karnough para encontrar la función digital que menos términos tiene (es decir, que menos puertas lógicas necesita). Esto tiene su importancia, porque a veces tener más puertas significa utilizar más mm2 de la oblea de silicio, y, por lo tanto, el circuito resulta más caro.
O también, podemos encontrar la FND de cualquier circuito, para comprobar si dos circuitos lógicos son en realidad el mismo. Por cierto, que esta FND tiene una ventaja adicional: al parecer es relativamente sencillo, por la forma en que se fabrican los circuitos integrados,[4] tomar todas las entradas, pasarlas agrupadas por un montón de puertas AND y el resultado pasarlo por una única puerta OR. Es decir, la representación FND de la función. Al parecer, dependiendo de la tecnología que se utilice, esto puede ser más fácil (es decir, más barato) que el circuito de Karnaugh equivalente, aunque aparentemente tenga más puertas.
Por comodidad, se suelen definir unas cuantas puertas lógicas más: XOR, NOR, XNOR y NAND. Pero no olvidemos que todas ellas se pueden representar simplemente como una combinación de AND, OR y NOT.[5]
XOR es el OR eXclusivo que ya ha salido otras veces a lo largo de la serie, y se suele representar con un + rodeado en círculo: . A menudo se dice que esta es la puerta de la suma (y no el OR, como podría parecer por el símbolo), porque si sumo con sumas “normales”, me sale lo que dice la puerta XOR… ¡Por Tutatis! ¿Y el 0 de la última fila! Ten en cuenta que son sumas binarias, y 1+1=… 0… y me llevo 1 (este “me llevo 1” se suele llamar acarreo, y se puede calcular simplemente con el AND), del mismo modo que en nuestro sistema decimal habitual, “5+5=0 y me llevo 1″.
NOR es simplemente la combinación de NOT y OR:
XNOR es nada más que la combinación de NOT y XOR y se suele representar con un punto en un círculo: . Se suele decir que esta es la puerta de la equivalencia, porque si os fijáis en la tabla veréis que comprueba si A y B son iguales.
Finalmente, la puerta NAND es la combinación de NOT y AND:
Bueno, ¿y esto qué tiene que ver con el álgebra de circuitos? Porque mucho decir que es continuación del álgebra de circuitos, pero hasta ahora solo lo hemos tratado como una cosa independiente. Pues tiene que ver porque hasta ahora estas puertas lógicas que hemos visto son solo un concepto abstracto, que vive en el mundo de las ideas de Platón. ¿Cómo trasladamos esas puertas ideales a componentes físicos con los que construir un ordenador?
El cómo lo hagamos depende de la tecnología que empleemos, pero hoy en día casi siempre es con interruptores, como los que vimos en el capítulo III, dedicado al álgebra de circuitos.
Pero antes… vaya… antes aún vamos a dar un paso intermedio. Vamos a definir primero un interruptor ideal controlado por una señal. Bueno, mejor dicho, vamos a definir dos:[6]
El interruptor de la izquierda, cuando recibe un 1 por la patilla de control, cierra el circuito (es decir, deja pasar la corriente); y cuando recibe un 0, lo abre. El de la derecha funciona exactamente al revés: cierra el circuito cuando recibe un 0 y lo abre cuando recibe un 1. Y ahora combinamos esos interruptores para conformar las puertas que hemos definido. Por ejemplo, veamos cómo es una puerta AND construida con estos interruptores:
Si lo pensamos un poco, vemos que este circuito cumple la tabla de la puerta AND: si alguna de las entradas A ó B es un 0, la parte superior del circuito está abierta, por lo que el 1 nunca llega hasta la salida, mientras que al menos uno de los interruptores de la parte de abajo lleva el 0 hasta la salida. Solo si ambas entradas son un 1 se cierra la parte superior y se abre la inferior, llevando el 1 hasta la salida.
De forma similar podemos construir todas las demás puertas lógicas (aunque no vamos a verlas… hacedlo mentalmente o en los comentarios si queréis).
Así que ya solo nos queda definir qué son el 0 y el 1 y cómo son esos interruptores. De nuevo, eso depende de la tecnología que estemos usando, pero es muy habitual decir que el 1 son 5V y el 0 son 0V (eso se llama “lógica TTL”). En otras tecnologías se usan +12/-12V, 3.3/0 ó cosas así.
Para los interruptores, la tecnología más antigua que conozco se basa en relés.[7]. Un relé es una cosa muy tonta: un electroimán que cierra o abre un circuito. Veamos el dibujo:
El muelle mantiene el circuito abierto por defecto. Cuando en las patillas de control metemos por ejemplo 5V, circula un montón de corriente por ahí, produciendo un electroimán que atrae al metal del interruptor, cerrando el circuito. Ingenioso.
La tecnología es muy sencilla, fácil de fabricar, y se conoce desde que se conoce el electromagnetismo. La desventaja principal es que se basa en el movimiento de componentes físicos muy grandes, que tardan un montón en moverse. Cuando empieza a circular corriente por la bobina de control, empieza a atraer al interruptor para cerrarlo… pero ese cierre tarda unos cuantos milisegundos. Puede parecer que unos pocos milisegundos es muy poco tiempo, pero piensa en que el ordenador que tienes delante funciona probablemente a un par de GHz… 2 mil millones de conmutaciones por segundo. O más. Es decir, que cada conmutación debe tardar menos de medio nanosegundo… decididamente, unos pocos milisegundos es muuuuuucho tiempo. Y eso por no hablar del precio.
Eso no impidió que se construyeran ordenadores con esta tecnología. Eran ordenadores primitivos, lentos… pero vaya, ordenadores al fin y al cabo. Como curiosidad, para los que se dediquen a la programación, parece ser que el término bug proviene de que con esta tecnología los bichos (insectos, arañas, cosas así) se metían físicamente entre los contactos (bug es bicho en inglés) e impedían que los terminales hicieran contacto… y por lo tanto debugar era ir con insecticida y pinza a quitar físicamente los bichos del circuito.
También de esta época es la palabra hacker. Al parecer, si un relé pasaba mucho tiempo en una determinada posición, sus terminales se empezaban a oxidar y ya no se movían. Así que unos expertos iban a darle un golpe a la máquina, un onomatopéyico hack!, en donde lo necesitaba, para despegarlos (hack en inglés es algo así como “hachazo”).
Con el tiempo vinieron los conmutadores de válvulas. No conozco en detalle el principio físico de las válvulas, pero las más comunes de ellas se basan en que, cuando pasa corriente por los terminales de control, sube la temperatura, aumentando la cantidad de electrones libres, lo que permite el paso de corriente entre las bornas del interruptor (¿algún físico en la sala que pueda ampliar la información?). También pueden usarse como amplificadores, aprovechando la parte de su curva de comportamiento en que hay una relación lineal entre entrada y salida.
Su principal desventaja, además del precio, es el tamaño.[8] Aunque muchos melómanos siguen diciendo que los amplificadores de válvulas dan un sonido mucho más fiel al original que los de transistores (aunque con mi oído patatero soy incapaz de diferenciarlo),[9] cuando se usan como conmutadores no les conozco ninguna ventaja frente a los transistores…
Y con esto, finalmente, llegamos a los transistores.
Si el principio de funcionamiento de las válvulas era complicado, el de los transistores no te digo nada (a ver si alguien recoge el guante…). Al parecer, existen compuestos (típicamente de silicio con pequeñas cantidades de otros elementos, aunque se pueden usar otros, como el germanio) que no se pueden catalogar simplemente como conductores o aislantes… sino que, a pesar de que por defecto son aislantes, dependiendo de si por uno de los lados se les mete más o menos voltaje (o corriente, depende), empiezan a conducir (se les llama precisamente semiconductores). Uhm… ¿eso no es básicamente nuestro interruptor controlado por tensión?
El comportamiento detallado de un transistor (sus ecuaciones) depende del tipo que sea (bipolar, JFET, MOSFET…), pero cualitativamente podríamos describirlo así:
- Si la tensión entre Base y Emisor es muy pequeña, no circula corriente entre Colector y Emisor (es decir, son un interruptor abierto) . A esto se le llama zona de corte.
- Si la tensión entre Base y Emisor es muy grande, no solo circula corriente entre Colector y Emisor, sino que es virtualmente un cortocircuito, un interruptor cerrado. A esto se le llama zona de saturación.
- Si no es ni muy pequeña ni muy grande, la corriente que circula por el Colector es proporcional a la corriente que circula por la Base. A esto se le llama zona lineal.
Lo que hemos descrito es un transistor bipolar NPN. El PNP funciona igual, pero cambiando los signos de las tensiones y corrientes… la flecha da una pista de cómo circula la corriente. Los transistores JFET y MOSFET, aunque siguen ecuaciones distintas, y con nombres distintos, son cualitativamente parecidos.
Cuando estamos usando un transistor para hacer un amplificador, se utiliza la zona lineal, mientras que si lo que estamos haciendo es un interruptor controlable, se usan las zonas de saturación y corte… pues bien, podemos aprovechar eso para fabricar nuestros circuitos digitales.
Las ventajas de los transistores son muchas: pequeño tamaño (estamos hablando de nanómetros), pequeño consumo, muy baratos (aunque el proceso de fabricación es complicado, mucho más que el de un relé, está muy trillado ya en la industria), velocidades de conmutación asombrosamente altas (en electrónica de consumo estamos acostumbrados, por ejemplo, a microprocesadores que van a varios GHz… y eso es solo la electrónica de consumo).
La única desventaja que se me ocurre de los transistores frente a los relés es que en general estos soportan más corriente y más voltaje. Además… parece que empezamos a encontrar el límite. Parece que estamos haciendo ya transistores muy pequeños, en los que los “microcomponentes”[10] de los transistores se mide en “unos pocos átomos”, y en esas situaciones empezamos a chocar con la cuántica, el “efecto túnel” deja de ser despreciable y ya no está tan claro que podamos hablar de “circuitos abiertos” o “circuitos cerrados” y toda esa terminología electrónica.
Antes de despedirnos, una última salvedad: aquí hemos usado continuamente el término “digital” para referirnos a 1s y 0s, es decir, lógica digital binaria. Obviamente es posible otra lógica digital que no sea binaria, sino ternaria, cuaternaria… Esa lógica ya no es un álgebra de Boole, pero es matemáticamente posible (aunque poco usada, ya que no sé si hay alguna situación no-binaria que no pueda resolverse con un uso ingenioso de la lógica binaria).
Y con esto nos despedimos. Hemos repasado las tecnologías involucradas de las puertas lógicas hacia abajo, hacia la física (por supuesto, solo un análisis cualitativo; una fabricación real es bastante más complicada). Otro día quizá, aprovechando otro púlpito, introduzcamos un poco lo que hay desde las puertas lógicas hacia arriba, hasta llegar al ordenador que tienes en tus manos.
Fue un placer.
- En la vida privada sí, pero es que soy muy friki. [↩]
- Forma Normal Disyuntiva [↩]
- Forma Normal Conjuntiva [↩]
- Tiene que ver con la distribución física de las distintas bandas de dopaje sobre el silicio. [↩]
- Se dice que el conjunto {AND, OR, NOT} es un conjunto completo (aunque no es el único que lo es) porque cualquier otro conjunto de puertas se puede representar con combinaciones de AND, OR y NOT… pero si realmente necesitabas esta nota es que necesitabas un texto un poco más profundo. [↩]
- Existen tecnologías que utilizan un componente más, un atenuador o debilitador, pero se usa poco, así que no lo vamos a explicar. Una vez más, si necesitabas esta salvedad, es que necesitabas algo más que este artículo. [↩]
- Bueno, existieron maquinas, basadas en piezas mecánicas o tuberías de agua que intentan ¡y consiguen! cosas parecidas. Existen desde hace ¡siglos!, pero no pasan de ser juguetes ingeniosos. [↩]
- Macluskey, que ya va para anciano, vio la tele por primera vez en un aparato de válvulas, a fines de los cincuenta. Las válvulas, un par de docenas o así, eran casi más grandes que la pantalla, que no sería de más de doce pulgadas… Cuando las válvulas se fundían, entonces llamabas a un técnico que venía con su soldador y cambiaba la fundida por otra nueva y ¡hala!, unos meses más de tele. [↩]
- Tiene que ver con que el comportamiento de las válvula es más lineal que el de los transistores. [↩]
- Por llamarlos de algún modo… técnicamente, nos referimos al “tamaño de la puerta”… pero otra vez, si necesitabas eso, no necesitas este artículo. [↩]
The Eso que llamamos Lógica (Anexo B) Lógica digital by , unless otherwise expressly stated, is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 2.5 Spain License.
{ 12 } Comentarios
Genial, como siempre. Muchas gracias.
Un anexo muy decente. Yo estoy intentando entender como funciona un PNP, si lo logro lo cuento, me quedao en PN, pero PNP me hace la cabeza un lio.
Fantástico J!
Entonces igual pregunto una burrada, pero así por encima, ¿el ordenador que tengo en las manos funciona con este principio a lo bruto? Quiero decir, lo que yo veo en la pantalla son 1 y 0 que encienden o apagan los píxeles en la pantalla. No sé exactamente el número, pero digamos que unos millones de 1 y 0 me proporcionan un texto en una página. Las entradas son las pulsaciones de mis teclas, que van asociadas a encender o apagar píxeles determinados.
Pero si ese texto está archivado en una carpeta en el escritorio, primero tengo unos píxeles que me dibujan la carpeta. Clicando sobre esos píxeles (detector de puntero AND detector de click ) accedo a otra combinación de píxeles que me muestra la lista de archivos (que no es una lista de archivos!! son unos millones de píxeles que el ordenador enciende o apaga de memoria!). Clicando sobre los píxeles donde está mi archivo accedo a la combinación de píxeles que me muestran mi texto. Y todas estas etapas formadas por millones de 1 y 0 están de alguna manera memorizadas y accesibles según la etapa en la que me encuentro. ¿Van por ahí los tiros?
Pues me parece una barbaridad!
En realidad es hacerlo a poco, que supongo que ya iran introduciendo, empiezas con un transistor, unas puertas logicas, unos flip-flop, una ram, un corrector de errores, una cpu, un contador y al final pues es hacerlo muy rapido, un teclado, una pantalla, y todo el software apartir de aahi. Y para mas inri, sino recuerdo mal, en realidad solo se usa una puerta logica, NAND o NOR creo, resulta que ocupa menos las necesarias para reproducir las otras que hacerlas.
@Argus: Sí. Eso es exactamente.
Mientras no funcionen los ordenadores cuánticos (si funcionan algún día, más bien), todo ordenador sólo entiende de ceros y unos. O sea: Corriente sí-corriente-no, o corriente 1V-corriente-5V, o lo que sea. Todo lo que ves en una pantalla, en un disco, todo lo que hay en la memoria son ceros y unos. Nada más. Representados con perforaciones en tarjetas perforadas o en cinta perforada, en cintas magnéticas o en discos, en flips o en flops, en ferritas, en transistores, en pantallas… sólo hay ceros y unos.
Así una A en ASCII se representa con la combinación “01000001″, o el 7, también en ASCII, será “00110111″. Los programas que ejecutas son ceros y unos, las imágenes que ves representadas en pantalla son ceros y unos.
¿Seremos nosotros también ceros y unos? No es coña, hay por ahí quien dice que sí, que la naturaleza son ceros y unos también…
Saludos
No me extraña que te parezca mágico. Para entenderlo globalmente hay que ir estudiando cajitas, luego componiendo cajitas para hacer cajas más grandes, y así sucesivamente.
Acojona solo de pensarlo.
Macluskey, si una A es “01000001″, tiene que ser después algo más, porque tiene muchos más píxeles en pantalla. Supongo, J, que te refieres a eso con lo de las cajitas. No sé si se verá, pero una A en pantalla sería (como mínimo):
0001000
0010100
0111110
1000001
Toma caligrafía Times!
Es decir, que hay que traducir 01000001 a una cuadrícula que muestre la A, ¿cierto?
Algo recuerdo de cuando trasteaba con el basic. Yo ponía Print “A”, y salía la A. Pero Print”A” es en sí una malla de píxeles que se convierten en otra malla de píxeles que dice “A”. Uuuuff qué lío! ¿Entonces el ordenador reconoce “Print” como una sucesión de 1 y 0 que devuelve lo que haya entre las comillas (que son en sí otra ristra de 1 y 0).
Pero vamos a ver… el ordenador ¿cómo lleva la cuenta de en qué ristra está y cómo de grande se espera que sea, dónde cortarla y a qué la tiene que traducir? Moooodre mía!!
En cualquier caso, gracias por vuestras respuestas. Me llena de honor que talentos como vosotros me digan que estoy más o menos en lo cierto.
A ver si me explico (en pocas palabras).
Cualquier ordenador sabe sólo de unos y ceros. Pero un mismo conjunto de unos y ceros significan unas cosas u otras, dependiendo del código que se utilice.
El código ASCII es eso: un código usado para representar caracteres. Como usa 8 bits para cada carácter, puede representar como mucho 256 caracteres diferentes. Si el ordenador sabe (porque alguien se lo ha dicho, que muy listo no es) que una cierta área de memoria es un texto en ASCII, si se encuentra allí con un “01000001″ (un 41 hexadecimal, o 41H) y lo envía a una impresora, es el software de la propia impresora el que decodifica ese “41H” y lo traduce a una serie de puntos: lo que ha hecho ha sido simplemente cambiarlo de código, y en este nuevo código “impresoril” una “A” necesita mucho más de ocho bits para representarla.
Lo mismo la pantalla: la tarjeta gráfica traduce ese “41H” y activa unos píxeles en pantalla y desactiva otros, hasta componer lo que los humanos vemos como una A.
Y el teclado es lo mismo: cada tecla genera una corriente que es decodificada como una determinada letra por el software, según su tabla de traducción, que hace que al pulsar la teclita de la izquierda rotulada como una “A”, lo que aparece en la memoria es un “41H”. Así ocurre con todos los dispositivos de “interfaz humana”.
La gracia del asunto es que en los sitios donde ocupa espacio: en el disco, en las cintas, en la memoria interna, donde sea, una A sólo necesita 8 míseros bits (o sea, un byte) para representarla.
Y para acabar de rematar la complejidad, existen muchísimos códigos. Por ejemplo, en EBCDIC (otro código aún más antiguo que ASCII, y que es el que usan los mainframes de IBM), una “A” se representa con C1H, es decir, “11000001″. Y así, muchos. Y en cuanto a las impresoras o pantallas, existen muchísimas formas de decodificar una A, según esté en Arial, en Times New Roman, en Verdana, etc, dependiendo del color de la letra y del tamaño: obviamente una A de 20 puntos necesita de más píxeles que una A de sólo 10…
Pero dentro, dentro… sólo hay ceros y unos. O, como decía un antiguo colega: “cerros y hunos”
No se si m’ejplico…
Perfectamente, Mackluskey. Me voy haciendo una idea, aunque me cuesta imaginar la cantidad de millones de 1 y 0 que trasiegan por el ordenador en un segundo y sin fallos. Para ti, una A son 8 míseros bits, pero para mí 8 bits son algo complicadísimo: En algún sitio hay que guardar esos 8 estados de potencial para comunicarlos a un cable que los envíe en el microsegundo exacto. Y todo para pintar una A. En este texto llevo ya unas cuantas… Realmente son magnitudes que escapan a mi intuición. En realidad escapan a la intuición de mi intuición.
Excelente articulo, casi ya no recordaba este tema desde los tiempos de la universidad, y eso que soy informatico tambien.
Y si, todos somos ceros y unos!!!
Saludos
Pues hay un ámbito “intermedio” entre el software y el hardware que se mencionan aquí: Los PLC (abreviatura de Controladores Lógicos Programables en inglés, lo que en el mundillo solemos llamar autómatas programables). Este tipo de equipos son el “cerebro” de una parte muy importante de la maquinaria industrial hay por ahí hoy en día. Estos aparatos se inventaron para sustituir a los circuitos lógicos hechos con relés en las máquinas, con la ventaja de que al ser programables son más flexibles, básicamente son una especie de ordenadores especializados en recibir señales lógicas (los ingenieros las llamamos “digitales”), hacer operaciones con ellas y dar otras salidas lógicas. En la práctica no todo es tan “puro”, también hay entradas y salidas “analógicas”, y operaciones diferentes de las lógicas como contadores, temporizadores, … pero en esencia es eso lo que hacen. Aunque existen lenguajes de programación muy variados para PLC, hoy en día la mayoría de los fabricantes hacen sus equipos compatibles con la norma IEC 61131, que incluye varios lenguajes. El más usado (al menos en mi entorno) es el LD, que emula un plano de contactos, y se inventó en su día para que fuese fácil de aprender para los electricistas acostumbrados a hacer circuitos lógicos con relés. Por ejemplo, para hacer una “Y” lógica entre 2 variables los que se hace es colocar el dibujo de dos contactos representando esas dos variables “en serie”. Si se quiere hacer una “O” se ponen en paralelo. Existe otro lenguaje en la norma llamado FBD (bloques de funciones), que fue diseñado para que fuese fácil de aprender por parte de los electrónicos, acostumbrados a diseñar circuitos con puertas lógicas. En este caso una operación “Y” es una puerta lógica, en las entradas se ponen los operandos en la salida tenemos el resultado, que a su vez se puede “cablear” hasta la entrada de otra operación, etc. Por cierto, como podréis deducir con lo aprendido en estas lecciones tan interesantes, los lenguajes LD y FBD son matemáticamente equivalentes, y se puede traducir de forma automática y directa un programa de uno a otro, por lo que elegir ente ellos es solamente una cuestión de gustos (o de hábito). ¡Ah! y se me olvidaba decir por qué considero que es un caso intermedio: Porque es software, pero se programa como si se estuviese diseñando un hardware.
Argus. XKCD explica como funcionan los ordenadores:
http://xkcd.com/722/
Escribe un comentario