Automatas Plc Grafcet

120
5/17/2018 AutomatasPlcGrafcet-slidepdf.com http://slidepdf.com/reader/full/automatas-plc-grafcet 1/120 UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CONTROL DE VARIABLES POR MEDIO DE PLC. Alumnos: Ortiz Romero Juan Manuel. 96219208 Huerta Ayala Alfredo Carlos Muñoz González Saúl Asesor: Victor Hugo Téllez Arrieta “Si puedes soñarlo... ...puedes hacerlo” Mayo 2003

Transcript of Automatas Plc Grafcet

Page 1: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 1/120

UNIVERSIDAD AUTÓNOMA

METROPOLITANA

IZTAPALAPA

CONTROL DE VARIABLESPOR MEDIO DE PLC.

Alumnos: Ortiz Romero Juan Manuel. 96219208Huerta Ayala Alfredo CarlosMuñoz González Saúl

Asesor: Victor Hugo Téllez Arrieta

“Si puedes soñarlo...

...puedes hacerlo”

Mayo 2003

Page 2: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 2/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- I -

CONTROL DE VARIABLES POR MEDIO DE PLC.

Durante el proyecto de ingeniería electrónica, en el primer período, se trabajo con el aprendizaje

del software, para el control del PLC, así como su manejo; se realizaron varias practicas,

comenzando con la programación, planteando algunos problemas, para después darle solución, y

comprobando su desempeño físicamente con el PLC, proporcionado por el profesor.

Durante el segundo periodo del proyecto de ingeniería electrónica, el trabajo realizado, se baso

principalmente en el conocimiento del manejo de la comunicación PLC-PC, mediante Sockets,

para de esta forma pasar a la practica y desarrollar un programa, que realizara una simulación de

la transmisión de datos entre el PLC y la PC.

El paso siguiente seria el realizar la interfaz grafica y lograr la interacción entre el software y el

PLC, para tener el control de diferentes variables, por ejemplo la apertura y cierre de puertas y

ventanas, como un sistema de seguridad y control, con el propósito final de implementarlo en el

edificio A-T, principalmente en el área de laboratorios.

El trabajo realizado, se muestra en 3 capítulos, ubicados de la siguiente forma:Capítulo 1: Primer periodo del Proyecto.

Capítulo 2: Segundo periodo del Proyecto.

Capítulo 3: La parte de conclusiones dada por el equipo en la segunda parte del proyecto.

Esperamos sea un trabajo interesante e importante para las siguientes generaciones.

Page 3: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 3/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- II -

CAPITULO 1

INTRODUCCIÓN AL CONTROL INDUSTRIALAntecedentes HistóricosTopología de los sistemas de controlTipos de sistemas de control

CLASIFICACIÓN DE LOS SISTEMAS DE CONTROL SEGÚN LATECNOLOGÍA

Autómata programableControl por ordenadorArquitectura de los autómatas programables

INTRODUCCIÓN A LOS AUTÓMATAS PROGRAMABLES

Estructura externaClasificaciónBloques que forman un autómata programableMemorias internasConvertidor A / DConvertidor D / AOtras variables que se almacenan en la memoria interna:Memorias de programaInterfaces de entrada y salidaFuente de Alimentación

PROGRAMACIÓN DE AUTÓMATAS

Introducción a la programación del autómataà Definición del sistema de controlà Descripciones literalesà Funciones algebraicasà Esquemas de relésà Diagramas lógicosà Diagramas de flujoà Grafcetà Definir las variables que intervienen y asignarles direcciones de memoria

Lenguajes de programación

à Lista de instruccionesà Diagramas de contactos y funcionesà Lenguajes de alto nivel

Grafcetà Introducciónà Símbolos normalizadosà Reglas de evolución del Grafcet

Page 4: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 4/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- III -

à Posibilidades de representación de automatismos con Grafcet Estructuras baseà Estructuras lógicasà Ejemploà Implementación del Grafcet sobre autómatas programablesà Niveles de Grafcetà

Representación de situaciones especiales en Grafcet Secuencias exclusivasà Temporizadores y contadores en GrafcetMarchas de intervención“Marchas de ajuste del sistema”SeguridadTratamiento de alarmas y emergenciasDiseño estructurado de un sistema de control.

CAPITULO 2

COMUNICACIONES EN RED

Socketsà Sockets Stream (TCP)à Sockets Datagrama (UDP)à Sockets Raw

PROGRAMACIÓN DE SOCKETSà Programación de URL

LA CLASE INETADDRESSLA CLASE URLLA CLASE URLCONNECTIONLA CLASE SOCKET

à Cliente Ecoà

Cliente Fechaà Cliente HTTPLA CLASE DE SERVERSOCKET

à Agente de seguridadà Servidor Ecoà Servidor HTTP

LA CLASE DATAGRAMPACKETLA CLASE DATAGRAMSOCKET

à Cliente Ecoà Servidor UDP

CAPITULO 3

CONCLUSIONES

Page 5: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 5/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- IV -

Page 6: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 6/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 1 -

CAPITULO 1

Page 7: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 7/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 2 -

Introducción al Control Industrial

Se puede definir control como “la manipulación indirecta de las magnitudes de unsistema llamado planta a través de otro sistema llamado sistema de control”.

Antecedentes Históricos

Los Primeros sistemas de control se desarrollaron en la Revolución industrial a finales del sigloXIX y principios del XX.

Ø Basados en componentes mecánicos y electromagnéticos, básicamenteengranajes, palancas, pequeños motores, relés, contadores y temporizadores.

El uso de contadores, relés, temporizadores, ... para automatizar tareas fue aumentando a lo largodel tiempo, con lo cual se tuvieron diversos problemas derivados de ello, como:

Ø

Armarios donde se alojaban muy grandes y voluminososØ Probabilidad de avería muy altaØ Localización de la avería muy difícil y complicadaØ Stock de material muy importante. Costo económico muy altoØ No flexibles

A partir de los años 50, se utilizaron semiconductores, y los primeros circuitos integradossustituirían las funciones realizadas por los relés.

Algunas de estas Mejoras fueron:

Ø Sistemas de menor tamaño y con menor desgaste.Ø Reducía el problema de fiabilidad y de stock.

El Problema de estos sistemas:Ø Su falta de FLEXIBILIDAD.

OPERADOR SISTEMA DECONTROL

PLANTA

CONSIGNASSEÑALES DECONTROL

RESPUESTA

Page 8: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 8/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 3 -

A finales de los años 60, la industria estaba demandando cada vez más un sistema económico,robusto, flexible y fácilmente modificable.

En 1968 nacieron los primeros autómatas programables (APIs o PLCs).Los primeros PLC’s estaban constituidos por memoria cableada y una unidad central diseñada

por circuitos integrados.A principios de los 70, Los PLC’s incorporan el MICROPROCESADOR, los cual los llevo a:

Ø Más prestaciones, elementos de comunicación hombre-máquina más modernos,manipulación de datos, cálculos matemáticos, funciones de comunicación, etc.

En la Segunda mitad de los 70 los PLC’s tuvieron:

Ø Más capacidad de memoria, posibilidad de entradas/salidas remotas, analógicas ynuméricas, funciones de control de posicionamiento, aparición de lenguajes con mayornúmero de instrucciones más potentes y, desarrollo de las comunicaciones conperiféricos y ordenadores.

En la Década de los 80 la mejora de las prestaciones se refiere a:

Ø Velocidad de respuesta, reducción de las dimensiones, mayor concentración de númerode entradas / salidas en los módulos respectivos, desarrollo de módulos de controlcontinuo, PID, servocontroladores, y control inteligente, fuzzy

Ø Mas capacidad de diagnóstico en el funcionamiento e incremento en los tipos delenguajes de programación: desde los lenguajes de contactos, lenguajes de funcioneslógicas, lista de instrucciones basados en nemotécnicos, flujogramas, lenguajesinformáticos, Grafcet, etc.

Debido al desarrollo de la electrónica. Hoy en día hay distintas variedades de autómatas que vandesde:

Ø Microautómatas y Nanoautómatas que se utilizan en apertura y cierre de puertas,domótica, control de iluminación, control de riego de jardines, etc.

Ø Autómatas de gama alta prestaciones de un pequeño ordenadorLa principal virtud de un PLC es su robustez y facilidad de interconexión con el proceso.

Su tendencia actual es: dotarlo de funciones específicas de control y de canales de comunicaciónpara que puedan conectarse entre si y con ordenadores en red. Red de autómatas. CIM

Page 9: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 9/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 4 -

Estudio preliminar

Conocer con el mayor detalle posible lascaracterísticas, el funcionamiento, las distintasfunciones, etc. De la máquina o proceso aautomatizar.

Análisis técnico y económicoEspecificaciones técnicas del automatismo:materiales, aparatos, su adaptación al sistema, etc.Valoración económica

Toma de la decisión final- Ventajas e inconvenientes- Posibles ampliaciones

- Rentabilidad de la inversión- Etc

Topología de los sistemas de controlTipos de topologías

El objetivo de un sistema de control es:

Gobernar la respuesta de una planta, sin que el operador intervenga directamente sobre suselementos de salida. El operador manipula únicamente las magnitudes de consigna y el sistemade control se encarga de gobernar dicha salida a través de los accionamientos.

El sistema de control opera, en general, con magnitudes de baja potencia, llamadasgenéricamente señales, y gobierna unos accionamientos que son los que realmente modulan lapotencia entregada a la planta.

INICIO

Especificaciones técnicas del sistema oroceso a automatizar

Toma de Decisiones

Ló ica Pro ramadaLó ica Cableada

FIN

Elección de las opciones tecnológicasmás eficaces

Evaluación de las opciones desde elpunto de vista económico

Page 10: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 10/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 5 -

Existen dos tipos de topologías:Ø Lazo AbiertoØ Lazo Cerrado

Lazo AbiertoSistema de control no recibe información del comportamiento de la planta.

Lazo CerradoExiste una realimentación a través de los sensores desde la planta hacia el sistema de

control.

Tipos de sistemas de controlClasificación, según el tipo de señales que interviene en la planta a controlar:

Ø Sist. Control analógicos. Señales de tipo continuo (0 a 10 V, 4 a 20 mA, etc.)proporcionales a unas determinadas magnitudes físicas (presión, temperatura, velocidad,etc.)

Page 11: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 11/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 6 -

Ø Sist. Control Digitales: señales binarias (todo o nada) sólo puede representar dos estadoso niveles.

Ø Sist. Control híbridos analógicos- digitales: Autómatas programables

La unidad de control esta formada por un microprocesador:Ø

Señales digitales de entrada y salidaØ Señales analógicas de entrada previamente convertidas (A/D)Ø Señales analógicas de salida previamente convertidas (D/A)

Clasificación de los sistemas de control según la tecnología

Tipos de sistemas de controlCaracterística a estudiar Programada Lógica Cableada LógicaFlexibilidad Baja AltaPosibilidad de ampliación Baja AltaTiempo de desarrollo del sistema Mucho Poco

Page 12: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 12/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 7 -

Mantenimiento Difícil FácilHerramientas de simulación No SiCoste para pequeñas series Alto BajoEstructuración en bloques independientes Difícil Fácil

Autómata programable

Ø Juega el papel de UNIDAD DE CONTROLØ Incluye total o parcialmente las interfaces con las señales de la planta (niveles de tensión

e intensidad industriales, transductores y periféricos electrónicos)

Ø Programable por el usuarioØ Entradas: señales de consigna y de realimentaciónØ Salidas: señales de controlØ Hardware estándar y modular (módulos ínterconectables, configurar sistema a la medida

de las necesidades)

Control por ordenador

Los Procesos complejos en los sistemas de control cuentan con:

Ø Gran capacidad de cálculo

Ø Conexión a estaciones gráficasØ Múltiples canales de comunicaciónØ Facilidad de adaptaciónØ Capacidad multiproceso etc.

Para ellos se han utilizado mini ordenadores, con interfaces específicas para la planta a controlar.Ø INCONVENIENTE: Es caro y poco estándar

La frontera entre autómatas de gama alta y los mini ordenadores esta actualmente muy difusa

Actualmente

Ø red de autómatas controlados por uno o varios ordenadores, con lo que se consiguecombinar las ventajas de ambos, facilidad de interfaces estándar (autómata) y la potenciade cálculo (ordenador).

Ø El sistema resultante tiene las siguientes característicaso Sistema programable con una capacidad de cálculo elevadao Interfaces hombre-máquina estándar, proporcionados por el ordenadoro Software estándar para el manejo de datos y gestión de la producción

Page 13: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 13/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 8 -

o Posibilidad de control descentralizadoo Sistemas de comunicación estándar: LAN o WANo Mantenimiento fácilo Interfase con la planta sencillo debido a los autómataso Visualización del proceso en tiempo realo

Multitud de herramientas para simulación y mantenimientoo Flexibilidad

Arquitectura de los autómatas programables

Introducción a los autómatas programablesØ Estructura externa del autómataØ Bloques que forman un autómata programable

Arquitectura interna de un autómata programableØ Unidad central de procesoØ Memoria

o Memorias internaso Memoria de programa

Interfaces de entrada salidaFuente de alimentación

Introducción a los autómatas programables

Un autómata programable es:“un equipo electrónico, basado en un microprocesador o microcontrolador, que tienegeneralmente una configuración modular, puede programarse en lenguaje no informáticoy está diseñado para controlar procesos en tiempo real y en ambiente agresivo (ambienteindustrial)”

Una característica diferenciadora del autómata programable frente a otros sistemas de controlprogramables está en la estandarización de su hardware, que permite la configuración desistemas de control a medida.

Page 14: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 14/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 9 -

Estructura externa

Aspecto físico exterior del mismo, los bloques en los que esta dividido, etc.

ClasificaciónEstructura compacta

En un solo bloque todos sus elementos : fuente de alimentación, CPU, memorias,entrada/salida, etc.Aplicaciones en el que el número de entradas/salidas es pequeño, poco variable yconocido a prioricarcasa de carácter estanco, que permite su empleo en ambientes industrialesespecialmente hostiles

Estructura modularPermite adaptarse a las necesidades del diseño, y a las posteriores actualizaciones.

Configuración del sistema variable

Funcionamiento parcial del sistema frente a averías localizadas, y una rápida reparacióncon la simple sustitución de los módulos averiados.

Estructura modular del autómata S7-224.

Page 15: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 15/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 10 -

Bloques que forman un autómata programable

Bloques principalesØ Bloque de entradasAdapta y codifica de forma comprensible para la CPU las señales procedentes delos dispositivos de entrada o captadores, como por ejemplo, pulsadores, finales decarrera, sensores, etc.Misión: proteger los circuitos internos del Autómata, proporcionando unaseparación eléctrica entre estos y los captadores.

Ø Bloque de salidas

Decodifica las señales procedentes de la CPU, las amplifica y las envía a losdispositivos de salida o actuadores, como lámparas, relés, contactores,arrancadores, electroválvulas, etc.

Ø Unidad central de proceso (CPU)Este bloque es el cerebro del autómataSu función es la interpretación de las instrucciones del programa de usuario y enfunción de las entradas, activa las salidas deseadas.

Page 16: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 16/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 11 -

Bloques necesarios para el funcionamiento del autómata

Ø Fuente de alimentaciónA partir de una tensión exterior proporciona las tensiones necesarias para elfuncionamiento de los distintos circuitos electrónicos del autómata.Batería, condensador de alta potencia: para mantener el programa y algunos datosen la memoria si hubiera un corte de la tensión exterior.

Ø Consola de programaciónPC o consolas de programación

Ø PeriféricosSon aquellos elementos auxiliares, físicamente independientes del autómata, que

se unen al mismo para realizar una función específica y que amplían su campo deaplicación o facilitan su uso. Como tales no intervienen directamente ni en laelaboración ni en la ejecución del programa.

Ø InterfacesCircuitos o dispositivos electrónicos que permiten la conexión a la Chp. de loselementos periféricos descritos.

Page 17: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 17/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 12 -

Esquema de la arquitectura interna de un PLC

Unidad central de proceso (CPU)

La CPU (Control Processing Unit) es la encargada de ejecutar el programa de usuario y activar elsistema de entradas y salidas

Ø Tiene la misión, en algunos tipos de autómatas, de controlar la comunicación con otrosperiféricos externos, como son la unidad de programación, LCDs, monitores, teclados,otros autómatas u otros ordenadores, etc.

La CPU esta formada por el microprocesador (P), la memoria y circuitos lógicoscomplementarios

Ø El microprocesador se sustituye por dispositivos lógicos programables (DLP), o redes depuertas lógicas (gate array), también llamados circuitos integrados de aplicaciónespecífica ASIC.

La CPU ejecuta el programa de usuario, que reside en la memoria, adquiriendo las instruccionesuna a una.

El funcionamiento es de tipo Interpretado, con decodificación de las instrucciones que cada vezque son ejecutadas

Unidad central de proceso (CPU)

Lenguaje compilado vs interpretadoØ Compilado

programa fuente -> compilación -> programa objeto -> enlazado ó linkado ->programa ejecutable

Ø Interpretado

Page 18: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 18/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 13 -

analiza y ejecuta un programa sentencia a sentencia

Bloques fundamentales de una CPU

Ø ALU (Arithmetic Logic Unit)Ø

AcumuladorØ FlagsØ Contador de programa (PC)Ø Decodificadores de instucciones y secuenciadorØ Programa ROM

Esquema de los bloques fundamentales que componen una CPU

ALUUnidad aritmético lógica, es la parte de la CPU donde se —realizan los cálculos y lasdecisiones lógicas (combinaciones Y, O, sumas, comparaciones, etc.).

ACUMULADORAlmacena el resultado de la última operación realizada por la ALU

FLAGS

Indicadores de resultado de operación (mayor que, positivo, negativo, resultado cero,etc.). El estado de estos flags puede ser consultado por el programa.

CONTADOR DE PROGRAMA (PC)Direccionamiento de la memoria donde se encuentran las instrucciones del programa decontrol, y del cual depende la secuencia de ejecución de ellas.

DECODIFICADOR DE INSTRUCCIONES Y SECUENCIADOR

Page 19: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 19/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 14 -

Cableado y/o programado, donde se codifican las instrucciones leídas en la memoria y segeneran las señales de control pertinentes.

PROGRAMA ROMEl fabricante suele grabar una serie de programas ejecutables fijos, firmware o software

del sistema y es a estos programas a los que accederá el microprocesador para realizar lasfunciones ejecutivas.El software de sistema de cualquier Autómata consta de una serie de funciones básicasque realiza en determinados tiempos de cada ciclo:

Ø En el inicio o conexiónØ Durante el ciclo o ejecución del programa y,Ø A la desconexión.

PROGRAMA ROMEste software o programa del sistema es ligeramente variable para cada autómata, pero,en general, contiene las siguientes funciones:

Ø Supervisión y control de tiempo de ciclo (watchdog), tabla de datos, alimentación,batería, etc.

Ø Autotest en la conexión y durante la ejecución del programa. Inicio del ciclo deexploración de programa y de la configuración del conjunto.

Ø Generación del ciclo base de tiempo.Ø Comunicación con periféricos y unidad de programación.Ø Etc.

Hasta que el programa del sistema no ha ejecutado todas las acciones necesarias que lecorresponden, no se inicia el ciclo de programa de usuario.

MEMORIA

Definición“Cualquier tipo de dispositivo que permita almacenar información en forma de bits (unosy ceros), los cuales pueden ser leídos posición a posición (bit a bit), o por bloques de 8(byte) o dieciséis posiciones (word)”

Clasificación

Ø RAM (Random Access Memory), memoria de acceso aleatorio o memoria delectura-escritura. Pueden realizar los procesos de lectura y escritura porprocedimientos eléctricos. Su información desaparece al faltarle la alimentación.

Ø ROM (Read Only Memory), o memoria de sólo lectura. En estas memorias sepuede leer su contenido, pero no se puede escribir en pila; los <latos einstrtirniones los riraha el fabricante y el usuario no puede alterar su contenido.Aunque haya un fallo en la alimentación.

Clasificación (lectura/escritura)Ø Memorias de lectura/escritura, RAMØ Memorias de sólo lectura, no reprogramables, ROM

Page 20: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 20/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 15 -

Ø Memorias de sólo lectura, reprogramables, con borrado por ultravioletas, EPROMØ Memorias de sólo lectura, reprogramables, alterables por medios eléctricos,

EEPROM. Tienen un número máximo de ciclos de borrado/grabado.

Memorias internas

Se almacena el estado de las variables que maneja el autómata entradas, salidas, contadores, relésinternos, señales de estado, etc.

Clasificación por el tipo de variables que almacena y el número de bits que ocupa la variable:

Page 21: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 21/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 16 -

Ø Posiciones de 1 bit (bits internos).o Memoria imagen entradas/salidaso Relés internoso Relés especiales/auxiliares

Ø Posiciones de 8,16 o más bits (registros internos).o

Temporizacioneso Contadoreso Otros registros de uso general

Las variables contenidas en la memoria interna pueden ser consultadas y modificadascontinuamente por el programa, cualquier número de veces. RAM

Memoria Imagenalmacena las últimas señales leídas en la entrada y enviadas a la salida, actualizándose tras cadaejecución completa del programa.

Ciclo de tratamiento de las señales de entrada/salida a través de las memorias imagen:

o Antes de la ejecución del programa de usuario, la CPU consulta los estados de lasentradas físicas y carga con ellos la memoria imagen de entradas.

Durante la ejecución del programa de usuario, la CPU realiza los cálculos a partir de los datos dela memoria imagen y del estado de los temporizadores, contadores y relés internos. El resultadode estos cálculos queda depositado en la memoria imagen de salidas.

Page 22: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 22/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 17 -

o Finalizada la ejecución, la CPU transfiere a las interfaces de salida los estados de lasseñales contenidos en la memoria imagen de salidas, quedando el sistema preparado paracomenzar un nuevo ciclo

Ciclo real (optimizar)

Carga en la memoria imagen de entradas de las entrada digitales.

Page 23: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 23/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 18 -

Carga en la memoria imagen de entradas de las entradas analógicas.

Esquema de la transferencia de los datos contenidos en la memoria de salidas a las salidasdigitales

Page 24: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 24/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 19 -

Esquema de la transferencia de los datos contenidos en la memoria de salidas a las salidasanalógicas.

Convertidor A / D

Page 25: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 25/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 20 -

Convertidor D / A

OTRAS VARIABLES QUE SE ALMACENAN EN LA MEMORIAINTERNA:

Ø relés internos ocupan posiciones RAM de 1 bit, y son utilizados como área de datostemporales, como salida de resultados de operaciones intermedias, y para controlar otrosbits o registros, temporizadores y contadores.

Ø relés auxiliares / especiales se guardan en posiciones de 1 bit, y mantienen informaciónsobre señales necesarias para el sistema, como relojes, bits de control, flags de estados dela CPU, e información sobre el autómata (Run, Stop, Halt, errores, etc.). Estos reléspueden consultarse y utilizarse desde el programa usuario.

Ø Área de temporizadores y contadores ocupa posiciones de 16 bits o más bits, capaces de

almacenar los valores de preselección y estado actualizados de estos elementos.

Memorias de programa

Almacena el programa de usuario.Ø Además puede contener datos alfanuméricos y textos variables, y también información

parametrizada sobre el sistema, por ejemplo nombre o identificación del programa

Page 26: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 26/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 21 -

escrito, indicaciones sobre la configuración de E/S o sobre la red de autómatas, si existe,etc.

Cada instrucción del programa de usuario ocupa un paso o dirección del programa y necesitapara ser almacenada dos posiciones de memoria (dos bytes o lo que es lo mismo una palabra

(word)).MODELOS DE AUTÓMATAS Memoria central o memoria de programa

(memoria para programa y datos)SIMATIC S7-200 (1 inst =2. bytes)CPU 210 512 bytes / 185 instrucciones de programaCPU 212 1 Kbytes / 500 instrucciones y 512 palabras

datosCPU 216 8 Kbytes / 4K instrucciones y 2.5K palabras

datosCPU 224 8 Kbytes / 4K instrucciones y 2560 palabras

datosSIMATIC S7-300 (1 inst = 3 bytes)CPU 312 ]FM 6 Kbytes / 2K instruccionesCPU 313 12 Kbytes / 4K instruccionesCPU 316 128 Kbytes / 42K instrucciones

Memoria de usuario es siempre de tipo permanente RAM + batería o EPROM / EEPROMSecuencia normal de trabajo

Ø En la fase de desarrollo y depuración del programa de control se utilizan las memoriasRAM respaldadas por batería

Ø Una vez se este seguro del funcionamiento correcto del programa se pasa este a las

memorias no volátiles EPROM o EEPROM. Cartuchos de memoria

A todas las posiciones de memoria que es capaz de direccionar el autómata se le denomina mapa

de memoria.

Ø Depende de varios factores: La capacidad de direccionamiento de la CPU, que determinael número de direcciones asignadas a los dispositivos internos. El número deentradas/salidas conectadas, que determina la longitud de la memoria imagen de FIS. Lalongitud de la memoria de usuario utilizada.

Interfaces de entrada y salida

Misión establecer un puente de comunicación entre el autómata y el procesoØ Interfaces de entrada filtran, adaptan y codifican de forma comprensible para la CPU las

señales procedentes de los elementos de entrada.Ø Las interfaces de salida son las encargadas de decodificar, y amplificar las señales

generadas durante la ejecución del programa antes de enviarlas a los elementos de salida.

En los autómatas pequeños, el tipo de interfaces disponibles suele ser limitado, siendo las másfrecuentes, clasificadas por entradas y salidas:

Page 27: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 27/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 22 -

— EntradasCorriente continua a 24 o 48 Vcc. Corriente alterna a 110 o 220 Vca. Analógicasde 0-10 Vcc o 4-20 mA

— SalidasPor relé. Estáticas por triac a 220 Vca máximo. Colector abierto para 24 o 48 Vcc.Analógicas de 0-10 V o 4-20 mA.

Fuente de Alimentación

Misión: Proporcionar las tensiones necesarias pare el funcionamiento de los distintos circuitosdel sistema

Debido a:Ø Autómatas formados por bloques que requieren niveles de tensión y de potencia

diferentesØ Están en ambientes con un alto contenido en ruido electromagnético.

Por estos motivos normalmente la alimentación se obtiene de diferentes fuentes separadas,procurando aislar o independizar las siguientes partes del circuito:

Ø Unidad central e interfaces E/S (alimentación autómata).Ø Alimentación de entradas.Ø Alimentación de salidas (cargas) de tipo electromagnético.

Page 28: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 28/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 23 -

La alimentación de la CPU:Ø Puede ser continua a 24 Vcc o alterna a 110/220 VcaØ La propia CPU la que alimenta las interfaces conectadas a través del bus interno.

La alimentación de los circuitos de E / S puede realizarse, según tipos , en alterna a 48/110/220Vca, o en continua a 12/24/48 Vcc.

Formas de alimentar a un autómata y a sus unidades de expansión de entradas/salidas locales(unidas por el bus interno del autómata), con sus sensores y actuadores:

Ø Una única fuente incorporada en el autómata alimenta a la CPU con sus interfaces deentrada y salida y a los sensores y actuadores. A la unidad de expansión le llega latensión a través del bus interno.

Ø Varias fuentes de alimentación diferentes parao La propia del autómatao La auxiliar para alimentación de E/So Fuente de alimentación CC para los actuadores de salidao Fuente de alimentación de CA para los actuadores de salida

La elección de uno u otro sistema de alimentación depende de los siguientes aspectos:Ø Niveles de potencia necesarios para la aplicación. Compatibilidad entre la

tensión auxiliar suministrada por el autómata y las necesarias en el sistemade E/S

Ø Funcionamiento o no de sensores y cargas a igual tensión de alimentaciónØ Necesidad de aislamiento galvánico en el sistema de E/S

Page 29: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 29/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 24 -

Programación de autómatas: Introducción al Grafcet

Introducción a la programación del autómataà Definición del sistema de controlà Descripciones literalesà Funciones algebraicasà Esquemas de relésà Diagramas lógicosà Diagramas de flujoà Grafcet

Definir las variables que intervienen y asignarles direcciones de memoria

Lenguajes de programaciónà Lista de instruccionesà Diagramas de contactos y funcionesà Lenguajes de alto nivel

Grafcetà Introducciónà Símbolos normalizadosà Reglas de evolución del Grafcetà Posibilidades de representación de automatismos con Grafcet Estructuras base

— Estructuras de secuencia única— Estructuras de secuencias paralelas

à Estructuras lógicas— Divergencia OR— Convergencia OR— Divergencia en AND— convergencia en AND— Saltos condicionales

à Ejemplo— Implementación del Grafcet sobre autómatas programables— Niveles de Grafcet— Representación de situaciones especiales en Grafcet Secuencias exclusivas— Temporizadores y contadores en Grafcet— Programación de autómatas: Introducción al Grafcet

Page 30: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 30/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 25 -

Introducción a la programación del autómata

Sistemas y recursos envueltos en la transferencia de información que rodean al autómataIntroducción a la programación del autómata

Podríamos dividir la programación del autómata en varios pasos:Ø Definir el sistema de control (que debe hacer, en que orden, etc.):Ø diagrama de flujo, la descripción literal o un grafo GRAFCET.Ø Identificar las señales de entrada y salida del autómata.Ø Representar el sistema de control mediante un modelo, indicando todas las funciones que

intervienen, las relaciones entre ellas, y la secuencia que deben seguir. Algebraica(instrucciones literales) o gráfica (símbolos gráficos).

Ø

Asignar las direcciones de entrada / salida o internas del autómata a las correspondientesdel modelo.Ø Codificar la representación del modelo. Lenguaje de programación.Ø Cargar el programa en la memoria del autómata desde la unidad de programación.Ø Depurar el programa y obtener una copia de seguridad.

Esquema del desarrollo de un proceso controlado por un autónoma

INICIO

Documentación del proceso:-Memoria de funcionamiento-Planos-Etc.

Interpretación del proceso a controlar

Determinación de E / S , temporizadores,contadores, etc, necesarios

Page 31: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 31/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 26 -

Definición del sistema de control

Se complementa con otras formas de representación:Funciones algebraicas Y = (BC’ + B’C) A

Las funciones algebraicas de cada una de las salidas se obtienen:§ O bien directamente de la descripción literal del proceso a controlar§ O bien se aplican métodos de sintesis basados en el álgebra de Boole

(tablas de verdad, Kamaugh, etc.).

Elección del autómata

Asignación de E / S 

ProgramaciónDiagramaLista de instruccionesEtc.

Esquema eléctricoDe potenciaDe proceso

AutómataPuesta en funcionamiento

Plano Distribución 

Puesta en modo RUN Esquema de conexionado

E/S al autómata

Proceso a controlar

FIN

Page 32: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 32/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 27 -

Difícil de analizar y sintetizar sistemas secuenciales. Limitado a la representación decombinaciones de variables independientes del tiempo (condiciones de alarma,operaciones aritméticas con variables analógicas, etc.)

Esquemas de relés

Origen: en la representaciones electromecánicas de sistemas de mandoEsquemas de relés

Es una representación de sistemas sencillos: señales lógicas binarias todo - nada (digitales), obloques secuenciales predefinidos, como temporizadores y contadores.

Deficiencias en cuanto a la representación de funciones secuenciales complejas y sobre todo enla manipulación de señales digitales de varios bits (por ejemplo, las obtenidas de una conversiónA/D).

Utilizado por electricistas o ingenieros con formación eléctrica

Esquema de relés

Función Lógica:[(X1’*X2’)+(X4’*X5)+Y1]*x3’=Y1

Diagramas lógicos

Este tipo de representación del sistema de control se utiliza en la documentación de lasespecificaciones y representación de los mismos

En muy pocos casos los usuarios finales de autómatas utilizan esta representación

Page 33: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 33/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 28 -

Diagramas de flujo

à Organigrama y flujograma, es un sistema de representación que se basa en una serie desímbolos que según un convenio establecido tienen un determinado significado.

2 Niveles :Nivel 1:

o secuencia de acciones a realizaro

representar el funcionamiento general del sistemaNivel 2:o especificadas las acciones en forma de instrucción: instrucciones entendibles

directamente por el autómata o en forma de funciones lógicas.

Grafcet (Graphe de Comande Etape Transition, cuya traducción literal es Gráfico de OrdenEtapa Transición)

“Es una secuencia de etapas que tienen asociadas unas determinadas acciones a realizar sobre elproceso junto con las condiciones o transiciones que provocan que se produzca el paso de unaetapa a otra”

Una de las mejores herramientas para representar automatismos secuenciales

INICIOFIN ACCIONES

TOMA DENO

SI

Page 34: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 34/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 29 -

Definir las variables que intervienen y asignarles direcciones de memoria

Con los métodos anteriores:à Descripción funcional del sistema de controlà Fijadas las entradas y salidas que tendrán nombres simbólicosà

Ejemplo:

“Control de una puerta corredera accionada por medio de un motor. El contador S1 produce laapertura de la puerta, el contador S2 controla el cierre de la puerta. El interruptor E3 de final

de carrera se activa cuando la puerta esta abierta, y el interruptor E2 de fin de carrera se activa

cuando la puerta esta cerrada. La puerta se abre al aplicar una determinada presión sobre

un sensor de paso de vehículos El situado enfrente de la puerta. Si el sensor El no se activa, la

 puerta se cierra después de transcurridos 10 segundos. Si se activa El, se cierra el contador S2 y

se mantiene cerrado hasta que el interruptor E3 de final de carrera desactive el contador S2.

Cuando se esta abriendo la puerta, o bien cuando una vez abierta haya detectado un vehículo

con el sensor El, el temporizador TI no se activa. Si no se dan estas circunstancias y la puerta

esta abierta E3 activado, se activa el tempo rizador Tl, y transcurridos 10 segundos, la puerta se

cierra mediante el contador S1 por el temporizador TI. La acción de cerrar se produce hasta

que o bien se detecta fin de carrera E2 o bien se detecta otro vehículo mediante la activación de El en cuyo caso se abre la puerta activando para ello el contador S2.

 Las lámparas LED1 y LED2 indican cuando se está cerrando o abriendo la puerta

respectivamente.”

Tabla de asignación de variablesTipo Termino Símbolo Descripción

Page 35: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 35/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 30 -

El VEHÍCULO Sensor presenciavehículo

E2 CERRADA Limite pueda cerrada

Entradas

E3 ABIERTA Limite puerta abierta

S1 CERRAR Contador cerrar

S2 ABRIR Contador abrir

LED1 LEDCER Lámpara puertacerrándose

Salidas

LED2 LEDABI Lámpara puertaabriéndose

Temporizador T1 TIEMPO Temporizador 10 seg

Posteriormente se asignan las direcciones físicas a estas variables

Tipo Termino Símbolo DirecciónE1 VEHICULO I0.0E2 CERRADA I0.1

Entradas

E3 ABIERTA I0.2

S1 CERRAR Q0.0S2 ABRIR Q0.1LED1 LEDCER Q0.2

Salidas

LED2 LEDABI Q0.3Temporizador T1 TIEMPO T5

Además de estas variables: necesitare un contador que cuente los periodos de temporización. Enlas tablas anteriores este contador no se ha tenido en consideración.

Lenguajes de programación

“Conjunto de instrucciones y/o símbolos que están disponibles para escribir el programa, sedenomina lenguaje de programación”

Tipo Lenguajes de ProgramaciónAlgebraicos Lenguajes Boléanos

Lista de InstruccionesLenguajes de alto nivel

Gráficos Diagrama de contactos

Page 36: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 36/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 31 -

Diagrama de FuncionesInterprete Grafcet

Si unidad de programación acepta directamente la representación del Sist. de control, se carga enla CPU. Si no hay que traducirla al lenguaje de programación pertinente.

Lista de instrucciones

“Es un lenguaje booleano al cual se le ha añadido una serie de instrucciones que permiten lamanipulación de datos y variables digitales y gestión del programa.”

Y=(BC’+B’C)A

Diagrama de contactos. Diagrama de funciones

Es un lenguaje gráfico procedente del lenguaje de relés que en base símbolos que representancontactos, bloques funcionales, etc. codifican la secuencia de control.

Diagrama de funciones: deriva de la representación lógica utilizada por los técnicos enelectrónica digital

Lenguajes de alto nivel

Lista de instrucciones, diagramas de contactos, ... Insuficientes para programar aplicacionescomplejas para autómatas de gama media y alta.

Herramientas de ingeniería:à S7-SCL: lenguaje de alto nivel que se asemeja al Pascal

LD “B”AN “C”LDN “B”A “C”OLDA “A”

= “Y”

Page 37: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 37/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 32 -

à M7-ProC/C++: Entorno Borland C/C++ y depurador multitarea.

Casi todos los fabricantes de autómatas este tipo de herramientas que permiten programar enBasic, C, Pascal, Fortran, etc. mediante el uso de los interpretes o compiladores respectivos.Estas herramientas permiten resolver tareas de cálculo científico de alta resolución,

clasificaciones y tratamiento de datos, estadísticas, etc., con acceso a subrutinas específicas delenguajes informáticos.

GrafcetIntroducción

El Grafcet es un método gráfico de modelado de sistemas de control secuenciales

Surgió en Francia a mediados de los años 70, y fue creado por una agrupación de algunosfabricantes de autómatas, en concreto Telemecanique y Aper, junto con dos organismosoficiales, AFCET (Asociación Francesa para la Cibernética, Economía y Técnica y ADEPA(Agencia Nacional para el Desarrollo de la Producción Automatizada).

Fue homologado en Francia (NFC), Alemania (DIN), y con posterioridad por la ComisiónElectrotecnia Internacional ( IEC 848, en 1998).

Describe la evolución de un proceso que se pretende controlar, indicando las acciones que hayque realizar sobre dicho proceso que informaciones provocan el realizar una u otra acción

Símbolos normalizados

Etapasà La evolución de un proceso representada mediante un gráfico Grafcet, esta formada por

una sucesión de etapas que representan cada uno de sus estados, llevando cada una deellas asociada una o varias acciones a realizar sobre el proceso.

à Las etapas se representan con un cuadro y un número o símbolo con un subíndicenumérico en su interior, en ambos casos el número indica el orden que ocupa la etapadentro del Grafcet

à Las etapas iniciales, aquellas en las que se posiciona el sistema al iniciarse el proceso, serepresentan con un cuadro doble.

Acción asociadaà Son una o varias acciones a realizar sobre el proceso, cuando la etapa de la cual dependen

dichas acciones se encuentra activada.à Dichas acciones correspondientes a una etapa, se simbolizan mediante rectángulos

conectados y situados a la derecha de dicha etapa. En el interior de estos rectángulos seindica, bien de forma literal, bien de forma simbólica, las acciones a realizar.

En una primera clasificación se puede dividir las acciones en dos tipos:à Incondicionales: acciones que se ejecutan con solo quedar activadas las etapas

correspondientes.

Page 38: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 38/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 33 -

à Condicionales : son las acciones que necesitan el cumplimiento de una condición ademásde la propia activación de la etapa correspondiente.

Clasificar las acciones en:à Internas : acciones que se producen en el equipo de control, por ejemplo

temporizaciones, contadores, cálculos matemáticos, etc.à Externas : las acciones que se producen sobre el proceso, por ejemplo abrir o cerrar una

válvula, activar o desactivar una bomba, etc.

Transición y Condición de transiciónà En el diagrama Grafcet, un proceso se compone de una serie de etapas secuenciales que

se activan una tras otra unidas mediante una transición.à El paso de una etapa a la siguiente se realiza dependiendo de si se cumple o no la

condición de transición entre ellas.

Toda transición lleva asociada una condición de transición o función lógica booleana que sedenomina receptividad, y que puede ser verdadera o falsa.

Se dice que la transición está validada, cuando la etapa o etapas anteriores a la transición estánactivadas. El franqueamiento de la transición se producirá si, y sólo si, la transición esta validaday la receptividad es verdadera.

Arcoà Es el segmento de recta que una transición (con su condición de transición) con una etapa

y viceversa, pero nunca dos elemento iguales entre sí. Los arcos pueden ser o verticales uhorizontales, además los arcos verticales deben llevar una flecha indicando su sentido enel caso de ser este ascendente

Reglas de evolución del GrafcetReglas

à La etapa inicial de un Grafcet se activan de forma incondicional. Esta situación inicial secorresponde en general con una situación de reposo.

Activar Motor 2

A

Activar Motor 11

Activar Motor 11

Activar Motor 22

Condición de transición

Page 39: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 39/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 34 -

à Una transición esta en disposición de ser validada cuando todas las etapasinmediatamente precedentes, unidas a dicha transición, están activadas. La activación deuna transición se produce cuando está validada y la condición de transición oreceptividad es verdadera. Se podría definir una etapa como activable cuando latransición precedente esta validada.

à Franquear una transición implica la activación de todas las etapas siguientes inmediatas,y la desactivación de las inmediatas precedentes.

à Transiciones conectadas en paralelo, se activan de forma simultánea si se cumplen lascondiciones para ello.

à Una o varias acciones se asocian a cada etapa. Estas acciones sólo están activas cuando laetapa esta activa.

Estructura Base

Grafcet soporta diferentes tipos de estructura secuencial:à Estructura base: trata conceptos de secuencialidad y concurrenciaà Estructura lógica: trata conceptos de concatenación de estructuras

Estructuras base

à Estructuras de secuencia únicao Son estructuras formadas por secuencias de etapas que se van activando una tras

otra, sin interacción con ninguna otra estructura

à Estructuras de secuencia paralelao Son un conjunto de estructuras únicas activadas por una misma transición de

forma simultanea. Después de la activación de las distintas secuencias suevolución se produce de forma independiente

1

2

Estructura base

11 21

22

n1

n2

1x

yx

2x

yy

nx

ny

Estructura desecuenciasparalelas

Page 40: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 40/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 35 -

Estructuras LógicasFunciones lógicas OR AND y saltos condicionales

Divergencia ORà Se utiliza cuando lo que se trata es de modelar la posibilidad de tomar dos o más

secuencias alternativas a partir de una etapa común.

La etapa n pasara a estar activa si estando activa la etapa n1 sesatisface la condición de transición o receptividad x , De igualforma la etapa n2 pasara a estar activa si estando activa la etapan1, se satisface la condición de transición o receptividad y.

Convergencia ORLa etapa n1 pasara a estar activa si estando activa la etapa n sesatisface la condición de transición o receptividad x , o siestando activa la etapa n2 se satisface la condición de transicióno receptividad y.

Divergencia AND

à Permite la implementación de procesos concurrentes síncronos, de forma que dos o mássubprocesos del sistema, representados por las secuencias paralelas, pueden activarse deforma sincronizada.

La etapa n2 y n pasaran al estado activo, si estando activa la etapa n1 sesatisface la condición de transición o receptividad d+c

Convergencia en AND

n1

n2n

x y

n1

n2n

x y

n1

n2n

d+c

n1

n2n

x

Page 41: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 41/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 36 -

La etapa n1 pasara al estado activo, si estando las etapas n1 y n2 activas se satisface la condición de transición oreceptividad x

Saltos condicionales

(a) Se implementa un salto condicional a la etapa i+j+1 siesta activada la etapa i y se cumple la condición detransición o receptividad

(b) Se implementa un bucle que permite la receptividad de

la secuencia de etapas hasta que x sea igual a 1.

En el siguiente ejemplo, dos montacargas se mueven cuando se pulsa un botón (xl o x2) ensentido ascendente hasta el final de recorrido (s,t), y de inmediato se descendiende a la situacióninicial (q,r).

à La pulsación de xl o x2 deberá iniciar el movimiento ascendente del montacargas ml om2 respectivamente. Sólo un montacargas debe estar en funcionamiento a la vez.También inicialmente se supone que el accionamiento simultáneo de los dos pulsadoresno puede ocurrir.

i

i+1

x

y

i+j

i+j+1

z

u

i

i+1

x

y

i+j

i+j+1

z

u

(a) (b)

UD1

q

s

X1

UD2

r

t

X2

Page 42: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 42/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 37 -

Implementación del Grafcet sobre A.P.I.

Diagrama Grafcet que representa el proceso, en un algoritmo de control y su posteriorprogramación sobre un API.

Para ello a cada una de las etapas en las que se divide el Grafcet se le asocia una variable interna.

La condición de transición es la encarga de activar la etapa siguiente y desactivar la anterior;para ello se utilizan las instrucciones Set y Reset que poseen todos los autómatas programables.

En el Siemens S7-200 las instrucciones SET y RESET son:

à Cuando se ejecutan las operaciones “Set” (Poner a 1 (S)) y“Reset” (Poner a O (R)), se activa (se pone a 1) o se desactiva(se pone a 0) el número indicado de salidas (N) a partir del valorindicado por el bit o por el parámetro OUT. EL margen de E / Sque se pueden poner a 0 está comprendido entre 1 y 255. Lasinstrucciones Set y Reset se utilizan para activar o desactivar lasvariables internas que en este autómata son las marcas internas(M0.0, M0.l,.....etc.)

q

U11

D12

s

X1.q

0

r

U23

D24

t

X2..r

S

1

M0.0I0.0

S

1

M0.0

S

1

M0.0I0.1

R

1

M0.1

Page 43: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 43/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 38 -

Activa la etapa “y” ydesactiva la etapa “x”

Activa la etapa “z” y desactivala etapa “y”

Para activar la etapa inicial “0” existen diferentes formas:à Como última línea del programa de control del autómata, se pone a cero “Reset” de la

marca asignada a la última etapa, siempre que la condición de transición se cumpla.Además añadimos una línea más donde se active la marca correspondiente a la etapainicial siempre que todas las etapas anteriores estén desactivadas.

“x” “b”

S

1

M0.0

S

1

“y”

S

1

M0.0

R

1

“x”

“x” “b”

S

1

M0.0

S

1

“z”

S

1

M0.0R

1

“y”

Page 44: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 44/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 39 -

à Otra posibilidad es que cuando se cumpla la última condición de transición se desactivela última etapa activa y se active la etapa inicial.

à Existe otra posibilidad de activación de la etapa inicial, que se realiza mediante el uso devariables internas del sistema. Esta última opción depende del tipo de autómata utilizado.

à Varios ejemplos de cómo codificar en lenguajes de contactos algunos casos que sepueden dar en diagramas Grafcet

Divergencia OR

Caso de secuencias paralelas

Page 45: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 45/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 40 -

Saltos condicionales a otras etapas

Mediante funciones lógicas en un diagrama de escalera

La ecuación de activación o desactivación asociada a la etapa enésimaEn = En-1. Tn-1 + (En+1)’

. En

“La etapa En se activará, si estando activada la etapa En-1 y desactivada la En+1 sesatisface la transición Tn-1. Apartir de este instante permanecerá activada hasta que se active laEn+1 “

Page 46: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 46/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 41 -

Aparte se tiene que afrontar las ecuaciones de activación de las acciones asociadas a lasetapas. La expresión de estas ecuaciones dependerá del carácter condicional oincondicional de estas acciones.

Partiendo de ecuación General:- CondA: condición de activación

- Cond D’ condición de mantenimiento y desactivación

Divergencia OR

Convergencia OR

Divergencia AND

Page 47: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 47/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 42 -

Convergencia AND

Etapas iniciales- La etapa/as inicial/es deben quedar activadas cuando se inicializa el sistema.- Las etapas iniciales no tienen ninguna etapa ni transición precedente que puedan

incluirse en las condiciones de activación (CondA) de la expresión general.- Para solucionar este problema se introducen unas condiciones de activación iniciales

CondAl, adicionales a las condiciones de activación CondA.- Este tipo de etapas se implementan, mediante la siguiente expresión:

E0(t)=Cond AI +Cond A

La expresión de las condiciones de activación iniciales se puede obtener de dos formas:

- Aprovechando el hecho de que, en la fase de inicialización del programa las variablesestán inicializadas a cero y por tanto, también todas las variables internasrepresentativas de las diversas etapas existentes estarán ¡nicialízadas a cero.

Esta expresión puede llegar a ser laboriosa de implementar, si el Grafcet que se está realizando

dispone de un gran número de etapas.

Otra posibilidad, aparece por el hecho de que los autómatas programables disponen de una seriede marcas del sistema o marcas especiales. Existe una de ellas que está activa durante el primerciclo de programa y desactiva en los restantes.

Page 48: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 48/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 43 -

Niveles de Grafcet

A la hora de representar mediante un grafcet el sistema de control es conveniente estructurarlo endos niveles

- Nivel 1 : En este nivel se representa solamente el funcionamiento lógico del sistemaen una terminología próxima al lenguaje corriente, se realiza independientemente de

las decisiones que a posteriori se tomen en cuanto a la tecnología a utilizar, a lanomenclatura y tipo de variables seleccionadas, etc

- Nivel 2 : En este nivel se tienen en cuenta las decisiones tecnológicas tomadas, lanomenclatura y tipo de variables, etc. y se hace referencia a ellas en el diagramagrafcet de este nivel

Ejemplo : Sistema de control de una máquina taladradora

Page 49: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 49/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 44 -

Funcionamiento de la taladradora.

- Existe un pulsador “B’ de inicialízacíón del sistema, con objeto de que el motor

adquiera una velocidad de giro de régimen permanente, que se obtiene accionando M.El taladro posee varias velocidades en el sentido longitudinal del eje, léase bajadalenta del utensilio del taladro BL, bajada rápida BR y subida rápida SR.

- La pieza en la que se va a realizar el taladro se detecta mediante un detector inductivoP, y se sujeta mediante dos sujeciones accionadas por C. La tarea de realizar untaladro sigue la siguiente secuencia: primero se detecta la pieza mediante el detectorinductivo, posteriormente se pulsa el botón “A” de inicio de operación con lo queactúan las sujeciones de la pieza y al mismo tiempo se inicia el descenso rápido de labroca “BR”.

- Antes de empezar a realizar el taladro propiamente dicho a la pieza, el detector “Y”provoca el paso de descenso rápido de la broca a descenso lento “BL”, el cual seinterrumpe cuando se detecta el final de carrera “Z”. Inmediatamente se produce lasubida rápida de la broca hasta alcanzar la posición de reposo “X”.

Grafcet de nivel 1:

Grafcet de nivel 2:

Motor de giro reg. permanente

Pulsador de inicialización

Inicio de operación y detectada pieza

Apresar pieza y descenso rápido de broca

Fin de descenso rápido

Descenso Lento

Final de carrera descendente

Ascenso rápido de la broca

Final de carrera ascendente

0

A . P

Y

Z

M

B

M C BR

M C BL

M C SR

M+

B

C+ BR+

M - SR- C-

A . P

Y

Z

BR- BL+

BL- SR+

Page 50: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 50/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 45 -

Representación de situaciones especiales en Grafcet

Secuencias exclusivas

Temporizadores y contadoresFunción temporización en Grafcet se implementa a través del operador de temporización

El valor de la temporización en seg. min. u hor.Etapa a la cual esta referida la temporización.

Indica la operación de temporización.

Clasificación de las temporizaciones:

- Temporización con retardo: Cada dispositivo de temporización tiene asociada unavariable que en este tipo de temporización permanece en estado bajo “0”, mientrasque se efectúa la operación de temporización.

- Temporización al arranque: Cada dispositivo de temporización tiene asociada unavariable que en este tipo de temporización permanece en estado lógico alto “1”, desdeel mismo comienzo de la temporización, pasando a estado lógico bajo “O” cuando hatranscurrido la temporización establecida. Su funcionamiento es el mismo que latemporización con retardo si la variable asociada al temporizador es complementada,

9

1110

ab’ a’b

t / n / temp

temp

Variable de temporización

Etapa n

Page 51: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 51/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 46 -

por lo tanto este tipo de temporización se denota complementando la notación querepresenta la temporización con retardo.

Incorporación de las temporizaciones al Grafcet:

- Temporización de acciones: Es el caso en el cual se pretende temporizar la ejecuciónde la acción asociada a una etapa, de forma que no se ejecute la acción hasta quetranscurra un cierto instante de tiempo.

- Temporización de la transición de una etapa: Es el caso en el cual la receptividadasociada a una transición depende de que la variable de temporización sea activada.Si se trata de una temporización con retardo esta transición no será superada hastaque transcurra un cierto instante de tiempo.

Contadores- Hay tres tipos, los que realizan la operación cuenta de forma ascendente, descendente

o ambas a la vez.

temp

Variable de temporización

Etapa n

Accion A

Trn

temp

Variable de temporización

Etapa n

A

T r n-1

Trn

t / n / temp

Accion A

temp

Variable de temporización

Etapa n

B

T r n-1

t / n / temp

B = B+1

T r n-1

Trn

B = B-1

T r n-1

Trn

Page 52: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 52/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 47 -

Anteriormente, diagrama Grafcet teniendo en cuenta sólo funcionamiento normal, sin considerarposibles paradas de emergencia, tipos de funcionamiento manual o automático, etc.

Como resulta obvio en todo diseño estructurado existen relaciones de intercambio deinformación y jerarquía entre cada uno de los subsistemas.

- Orden: Seguridad, modos de marcha y funcionamiento normal

Los modos de marcha son los distintos modos de funcionamiento que pueden darse en lossistemas automatizados(se excluye de esta definición todo comportamiento no determinista delsistema).

Funcionamiento normal de un sistema de control es cíclico. Según como se ejecute este ciclo,

CLASIFICACIÓN:- Sistemas que ejecutan el ciclo de funcionamiento indefinidamente a partir de una

autorización del operador.- Sistemas que ejecutan un ciclo y requieren la autorización del operador, para realizar el

siguiente y así consecutivamente.- Sistemas en los que el operador tiene un control permanente sobre la activación de cada

una de las etapas.Con estos modos multitud de combinaciones. Dividir en dos grandes grupos: marchasautomáticas y marchas de intervención.

Es el modo de funcionamiento normal, para el cual el sistema ha sido diseñado.Se puede realizar una clasificación dentro de las marchas automáticas en:

Page 53: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 53/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 48 -

- Funcionamiento semiautomático- Funcionamiento automático

En este modo de funcionamiento cada ciclo necesita la autorización del operador para ejecutarse.- La ejecución de cada uno de los ciclos: mediante la variable CC (Comienzo de ciclo).- Introducida e transición inicial junto con las condiciones iniciales (CI) de inicio de ciclo.

Cuando se ejecuta la orden de comienzo de ciclo(CC), el sistema permanece funcionando deforma ininterrumpida, hasta que se produce una orden de parada, complementaria de la anterior.

- La parada, es este modo de funcionamiento detiene el sistema al final del ciclo en curso,a diferencia de las paradas de emergencia, cuyo objeto es parar de inmediato la ejecucióndel ciclo sea cual sea su situación.

Para implementar este modo de funcionamiento se utiliza una estructura jerarquizada de dosdiagramas Grafcet, donde el de orden superior(maestro), controla el funcionamiento del de orden

inferior ( esclavo).Grafcet, donde el de orden superior (maestro), controla el funcionamiento del de orden inferior(esclavo).

Page 54: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 54/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 49 -

Marchas de intervención

Son modos de funcionamiento especiales, utilizados en los períodos de ajuste delfuncionamiento de los sistemas de control automáticos.

- Una vez implementado un sistema automático, pueden aparecer asincronismos en sufuncionamiento, de difícil previsión a priori, derivados entre otros motivos de la clase detecnología utilizada.

- Además estos asincronismos también pueden aparecer por envejecimiento, deterioro ofalta de mantenimiento de los elementos integrantes del proceso.

“Marchas de ajuste del sistema”

El operador ejerce un control estricto no ya sobre la ejecución de un ciclo, sino sobre laejecución de una etapa o conjunto de ellas en un mismo ciclo.

Es la forma de operación utilizada, sobre todo en los procesos de ajuste y puesta a punto de lossistemas automatizados, mediante el cual se corrigen funcionamientos imprevistos, fallos,averías o correcciones precisas en el funcionamiento de las máquinas o dispositivos de control.

Frecuentemente la parada del sistema, bien sea por inhibición de las acciones asociadas a lasetapas, o bien por congelación del automatismo impidiendo el franqueamiento de determinadas

transiciones.

- Este modo de funcionamiento requiere un conocimiento exhaustivo del sistema, por partedel operador, así como la implementación del sistema mediante una tecnología que hagaposible una fácil Intervención.

Seguridad

Page 55: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 55/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 50 -

El sistema de control diseñado ha de tener en cuenta situaciones imprevistas, averías,emergencias, etc de forma que se garantice el buen funcionamiento del sistema.

- Hay del que asegurar la integridad de los operadores humanos al cargo de los sistemas obien la seguridad de las propias instalaciones industriales donde se ubique el sistema,cuya reparación puede suponer un coste elevado.

Seguridad engloba:- Seguridad: anular el posible peligro para las personas e instalaciones- Disponibilidad: eliminar las paradas como consecuencia de fallos del sistema

El estudio de la seguridad del sistema tiene que abordar tanto el análisis de riesgos(probabilidady gravedad en la aparición), así como el cumplimiento de la normativa legal al respecto.

Tratamiento de alarmas y emergencias

Según el grado en que la alarma pueda afectar al sistema:

- Alarmas locales: son las que afectan sólo parcialmente al sistema.- Alarmas generales: son las que afectan a la totalidad del sistema y por lo general serán

prioritarias.

Implementar mediante la introducción de una nueva variable de la forma siguiente:- Introducción de la variable asociada en las condiciones de desactivación de la función

lógica activadora / desactivadora de etapa.

- Introducción de la variable asociada en las funciones lógicas asociadas a lasreceptividades.

- Introducción de la variable asociada <Orno condición adicional a la ejecución de lasacciones asociadas a las etapas.

Tratamiento de alarmas y emergencias

El tratamiento de las alarmas producidas en el sistema frente a situaciones de emergencia puedeser:

- Sin secuencia de emergencia: ante una situación de alarma, el sistema se imita a detenersu evolución y suspende las operaciones básicas, asociadas a la etapa donde se produce lasuspensión.• Inhibición de acciones

Page 56: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 56/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 51 -

• Congelación del automatismo

- Con secuencia de emergencia:• Alarma deriva hacia la ejecución de una secuencia de emergencia, constituida por

una o más etapas, cuyas acciones están orientadas a situar a los operadores y alproceso mismo en las mejores condiciones posibles, en orden a salvaguardar suintegridad.

Diseño estructurado de un sistema de control.

- Representación separada de los diversos aspectos del modelo del sistema, tales como:• funcionamiento normal• modos de marcha posibles• paradas de emergencia, etc.

- Este diseño se consigue realizar con ayuda de diagramas funcionales parciales, así comolas relaciones existentes entre ellos.

Macro etapas

Page 57: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 57/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 52 -

- Las macroetapas, sustituyen secuencias de etapas, cuya aparición se repite en variasocasiones a la largo del diagrama grafcet. El objetivo que se persigue es la simplicidad ylegibilidad de los diagramas grafcet.

- Reglas:

• La expansión de una macroetapa siempre tendrá una sola etapa de entrada y unasola etapa de salida.• La etapa de entrada (E) se activará cuando se active la macroetapa. La activación

de la etapa de salida (S) implicará la validación de las transicionesinmediatamente posteriores a la macroetapa.

Diagramas Grafcet Jerarquizados- Entre cada uno de estos diagramas grafcet parciales debe haber una relación jerárquica.

Forzado de estados de uno u otro gracet.- La jerarquización debe respetar una serie de reglas:

o Si un grafcet tiene la posibilidad de forzar otro, este no tendrá ninguna posibilidadde forzar al anterior

o En todo instante un grafcet sólo podrá ser forzado por un único grafcet.

Page 58: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 58/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 53 -

Page 59: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 59/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 54 -

CAPITULO 2

COMUNICACIONES EN RED

Cada uno de los dispositivos de la red puede considerarse corno un ,nodo. y cada no de estosnodos está identificado mediante una dirección única. La forma en que se signan estadirecciones varían de un tipo de red a otro, pero en todos los casos la dirección de cadadispositivo debe ser única. para permitir distinguir a ese dispositivo Le cualquier otro. Lasdirecciones son cifras con las cuales los computadores trabajan con facilidad, pero son muydifíciles de recordar para los humanos por lo tanto, algunas redes también proporcionannombres, que son más fáciles de recordar.

Page 60: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 60/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 55 -

Las redes actuales utilizan para la transferencia de datos un concepto conocido como  packet switching. Los datos son encapsulados en paquetes que son transferidos desde el origen hasta eldestino, en donde los datos se van extrayendo de uno o más paquetes para reconstruir el mensajeoriginal.

Aunque el lector deba conocer todos estos parámetros para entender el funcionamiento deuna red, lo cierto es que el concepto de red no es nada difícil, ya que se trata solamente de pasarla información de una maquina a otra, o viceversa: es decir, es semejante a la lectura y escriturade archivos, excepto en que estos archivos están situados en otra máquina remota, y esa maquinaremota puede decidir que es lo que quiere hacer con la información que le llega. Una de lasprincipales características de Java es precisamente su tratamiento de la red. Tanto como esposible. Java abstrae todos los detalles de manejo a bajo nivel de la red. dejándole ese trabajo ala Máquina virtual java. El modelo de programación que se utiliza es el de archivos; de hecho, sepuede comparar una conexión de red (un socket) con un canal. Además, la capacidad de manejode múltiples conexiones a la vez.

SOCKETS

Java proporciona dos formas diferentes de atacar la programación de comunicaciones através de red, al menos en lo que a la comunicación web concierne. Por un lado están las clasesSocket, DatagramSocket y ServerSocket, y por otro lado están las clases URL, URLEncoder yURLConnection.

Los sockets son puntos finales de enlaces de comunicaciones entre procesos. Los procesoslos tratan como descriptores de archivos, de forma que se pueden intercambiar datos con otrosprocesos transmitiendo y recibiendo a través de sockets. El tipo de sockets describe la forma enla que se transfiere información a través de ese socket.

Sockets Stream (TCP)

Son un servicio orientado a conexión, donde los datos se transfieren sin encuadrarlos enregistros o bloques. Si se rompe la conexión entre los procesos, éstos serán informados de talsuceso para que tomen las medidas oportunas.

El protocolo de comunicaciones con streams es un protocolo orientado a conexión, ya quepara establecer una comunicación utilizando el protocolo TCP, hay que establecer en primerlugar una conexión entre un par de sockets. Mientras uno de los sockets atiende peticiones deconexión (servidor), el otro solicita una conexión (cliente). Una vez que los dos sockets esténconectados, se pueden utilizar para transmitir datos en ambas direcciones.

Sockets Datagrama (UDP)

Son un servicio de transporte sin conexión. Son más eficientes que TCP, pero en su utilizaciónno está garantizada la fiabilidad. Los datos se envían y reciben en paquetes, cuya entrega no estágarantizada. Los paquetes pueden ser duplicados, perdidos o llegar en un orden diferente al quese envió.

El protocolo de comunicaciones con datagramas es un protocolo sin conexión, es decir, cada

Page 61: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 61/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 56 -

vez que se envíen datagramas es necesario enviar el descriptor del socket local y la dirección delsocket que debe recibir el datagrama. Como se puede observar, hay que enviar datos adicionalescada vez que se realice una comunicación, aunque tiene la ventaja de que se pueden indicardirecciones globales y el mismo mensaje llegará a un muchas máquinas a la vez.

Sockets Raw

Son sockets que dan acceso directo a l a capa de software de red subyacente o aprotocolos de más bajo nivel. Se utilizan sobre todo para la depuración del códigode los protocolos.

Programación de Sockets

La programación utilizando sockets involucra a dos clases principalmente: Socket yDatagramSocket, a la que se incorpora una tercera no tan empleada, ServerSocket, quesolamente se utiliza para implementar servidores, mientras que las dos primeras se pueden usarpara crear tanto clientes como servidores, representando comunicaciones TCP la primera ycomunicaciones UDP la segunda.

La programación con sockets es una aproximación de bastante bajo nivel para lacomunicación entre dos computadores que van a intercambiar datos. Uno de ellos será el clientey el otro el servidor, como ya se ha repetido en numerosas ocasiones.

Aunque la distinción entre cliente y servidor se va haciendo menos clara cada día, en Javahay una clara diferencia que es inherente al lenguaje. El cliente siempre inicia conversacionescon servidores y los servidores siempre están esperando a que un cliente quiera establecer unaconversación. Ya después, a nivel de aplicación, se determinará lo que sucede una vez que seestablezca la conexión y se inicie la conversación.

El hecho de que dos computadores puedan conectarse no significa que puedan comunicarse,es decir, que además de establecerse la conexión, las dos máquinas deben utilizar un protocoloentendible por ambas para poder entenderse. Por ejemplo, el hecho de que se pueda marcar unnúmero de teléfono de China, no da por sentado que se pueda establecer una comunicación conla persona que descuelgue al otro lado, porque no hay conocimiento del lenguaje chino; o lapersona habla español, o chapurrea inglés, o muy poca comunicación va a poder tener lugaraunque la conexión sea perfecta y la voz de ambos clara y sin distorsiones.

La programación de sockets en el mundo Unix viene desde muy antiguo, Java simplementeencapsula una gran parte de la complejidad de su uso en clases, permitiendo un acercamiento aesa programación mucho mas orientado a objetos de lo que podía hacerse antes. Básicamente, laprogramación de sockets hace Posible que el flujo de datos se establezca en las dos direccionesentre cliente y servidor, por ello lo de comentar que la diferencia entre cliente y servidor, que unavez establecida la conexión, se diluye. El flujo de datos que se intercambian cliente y servidor sepuede considerar de la misma forma que cuando se guardan y recuperan datos de un disco: comoUn conjunto de bytes a través de un canal., y como en todo proceso en el que intervienen datos,el sistema es responsable de llevar esos datos desde su punto de origen al destino, y es

Page 62: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 62/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 57 -

responsabilidad del programador el asignar significado a esos datos.

Y asignar significado tiene una especial relevancia en el caso de la utilización de sockets. Enparticular, como se ha dicho, entre las responsabilidades del progrmador está la implementaciónde un protocolo de comunicaciones que sea mutuamente aceptable entre dos maquinas a nivel deaplicación para hacer que los datos fluyan de forma ordenada. Un  protocolo a nivel de

aplicación es un conjunto de reglas a través de las cuales los programas que se ejecutan en losdos computadores pueden establecer una conversación e intercambiarse datos. Por ejemplo, ellector puede escribir un programa utilizando el protocolo de correo SMTP para enviar unmensaje de correo electrónico a alguien. Aquí también se desarrollarán ejemplos queimplementen de forma muy básica el protocolo HTTP para poder descargar páginas web desdeun servidor de Internet y presentarlas en pantalla, o bien un servidor que soporte el protocoloecho tanto para TCP como para UDP. Cada uno de estos programas involucran la aceptación yuso de un protocolo para poder entender la información que proviene o se envía a la otramáquina.

Programación de URL

La programación de URL se produce a un nivel más alto que la programación de sockets y, almenos en teoría, resulta una idea muy poderosa. Esa teoría dice que, utilizando la clase URL, sepuede establecer una conexión con cualquier recurso que se encuentre en Internet, especificandoun objeto URL y simplemente invocando el método getContent() sobre ese objeto URL. Elcontenido del recurso será descargado y aparecerá en la máquina cliente, incluso aunque requieraun protocolo que no exista cuando el programa fue escrito y ese contenido no fuese entendido enel momento de escribir la aplicación.

Esta descripción puede resultar un poco oscura, pero es concretamente lo que se proclama a loscuatro vientos que se puede hacer. La idea es excelente, pero habrá que esperar un poco más alfuturo para recoger sus frutos. Si estuviese completamente implementada en los navegadores,esta idea significaría poder colocar un material y desconocido en un sitio web junto con losmanejadores de contenido y protocolos. Cuando un navegador bajase este contenido desde elsitio web, se bajaría el manejador del contenido y podría interpretarlo sin necesidad de instalarningún software nuevo.

La cosa varía si de lo que se trata es de una intranet, ya que si se quiere dotar a los clientes de lacapacidad de manejar nuevos contenidos, será necesario proporcionar el adecuado protocolo ymanejador de esos contenidos; y probablemente será necesario que los clientes ejecutenaplicaciones escritas en Java en vez de usar los navegadores estándar para acceder a los datos.

La clase URL también proporciona una forma alternativa de conectar un computador con otro ycompartir datos, basándose en streams. En algún ejemplo se verá esta técnica, que es un tantoredundante con la programación de sockets.

LA CLASE INETADDRESS

Hasta ahora se ha visto la fundamentación te´rica en que se basa la programación decomunicaciones a través de res, asi que ha llegado la hora de presentar código Java que utiliceeste tipo de comunicación. El ejemplo siguiente presenta el uso de la clase InetAddress, y cómo

Page 63: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 63/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 58 -

se emplean varios de sus métodos.

Será necesario estar conectado a Internet a la hora de ejecutarlos para que funcionencorrectamente; en caso contrario, se obtendra una excepción de tipo UnknownHostException.

La salida que se obtiene al ejecutar el programa es la que se reproduce a continuación. Al utilizar un proveedor de Internet, la dirección IP puede ser diferente de una ejecución a otra.

-> Dirección IP de una URL, por nombre

members.es.tripod. de/62 . 52 . 93. 153

-> Nombre a partir de la direccion

members.es tripod de/62 52 93. 153

-> Direccion IP actual de LocalHost

breogan/194.224.37.156

-> Nombre de LocalHost a partir de la direccion

iv156.eintec.es/ 

-> Nombre actual de LocalHost

iv156.eintec.es

-> Direccion IP actual de LocalHost

194 224 37 156

Y el código completo del ejemplo es el que se reproduce a continuación posteriormente secomentará en detalle.import java.net.*;

class java1701 {public static void main( String[ ] args ) {try {

System.out.println("-> Direccion IP de una URL, por nombre" );

InetAddress address =

InetAddress.getByName( "usuarios.tripod.es" );System.out.println( address );

// Extrae la dirección IP a partir de la cadena que se// encuentra a la derecha de la barra /, luego proporciona// esta dirección IP como argumento de llamada al método// getByName()System.out.println(

Page 64: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 64/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 59 -

"-> Nombre a partir de la direccion" );int temp = address.toString().indexOf( '/' );address = InetAddress.getByName(address.toString().substring(temp+1) );

System.out.println( address );

System.out.println("-> Direccion IP actual de LocalHost" );

address = InetAddress.getLocalHost();System.out.println( address );

System.out.println("-> Nombre de LocalHost a partir de la direccion" );

temp = address.toString().indexOf( '/' );address = InetAddress.getByName(address.toString().substring(temp+1) );

System.out.println( address );

System.out.println("-> Nombre actual de LocalHost" );

System.out.println( address.getHostName() );

System.out.println("-> Direccion IP actual de LocalHost" );

// Coge la dirección IP como un array de bytesbyte[ ] bytes = address.getAddress();// Convierte los bytes de la dirección IP a valores sin// signo y los presenta separados por espaciosfor( int cnt=0; cnt < bytes.length; cnt++ ) {int uByte = bytes[cnt] < 0 ? bytes[cnt]+256 : bytes[cnt];System.out.print( uByte+" " );

}System.out.println();

} catch( UnknownHostException e ) {System.out.println( e );System.out.println("Debes estar conectado para que esto funcione bien." );

}}

}Todo el código del programa está en el método principal main( ). La clase InetAdressproporciona objetos que se pueden utilizar para manipular tanto direcciones IP como nombres dedominio; sin embargo, no se pueden instanciar estos objetos directamente. La clase proporcionavarios métodos estáticos que devuelven un objeto de tipo InetAddress.

El método estático getByName() devuelve un objeto InetAddress representando el host que se lepasa como parámetro. Este método se puede utilizar para determinar la dirección IP de un host,

Page 65: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 65/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 60 -

conociendo su nombre; entendiendo por nombre del host  el nombre de la máquina, como“java.sun.com”, o la representación como cadena de su dirección IP, como “206.26.48.100”. Elmétodo getAllByName() devuelve un array de objetos InetAddress, y se puede utilizar paradeterminar todas las direcciones IP asignadas a un host. El método getLocalHost() devuelve unobjeto InetAddress representando el computador local sobre el que se ejecuta la aplicación.

El primer trozo de código interesante es el que obtiene un objeto InetAddress repreesentando undeterminado servidor y presenta esta dirección utilizando el método sobrecargado toString() dela clase InetAddress.

InetAddress address = InetAddress.getByName( members.es.trípod.de );System.out.println( address );

El siguiente trozo de codigo es la acción contraria al anterio, en que se proporciona la direcciónIP para presentar el nombre del host. Como ya se ha indicado, el método getByName( ) puedeaceptar como parámetro de entrada tanto el nombre del host , como su dirección IP en forma decadena. El código, utiliza el resultado de la llamada al método anterior para construir una cadenacon la parte numérica del resultado, que es pasada al método getByName( ).

Int Temp. = address.toString( ).indexof( );Address =InetAdress.getByName( address.toString( ).substring(temp+1) ),

System.out.println( address);

El término localhost se utiliza para describir el computador local, la máquina en la que se estáejecutando la aplicación. Cuando se conecta a una red IP, el computador local debe tener unadirección IP, que se puede conseguir de diferentes formas; no obstante, la siguiente explicaciónse basa en que el computador sobre el cual se ejecuta aplicación se conecta a través de la líneatelefónica con un proveedor de Internet, que es el que abre el acceso a Internet de la máquinalocal.

El proveedor de Internet tiene reservadas una serie de direcciones IP, que puede compartir entretodos sus clientes. Cuando alguien se conecta al proveedor, automáticamente se le asigna unadirección a esa conexión, válida durante todo el tiempo que dure la sesión. Si se produce unadesconexión y luego se vuelve a conectar, lo más seguro es que la dirección IP no sea la mismaque se había asignado a la primera conexión.

Aunque ésa sea la situación más habitual del lector, en otras ocasiones puede ser diferente. Porejemplo, si el computador se encuentra en la red interna de computadores de una empresa, esaempresa puede tener un bloque de direcciones IP reservadas asignar  permanentemente lasdirecciones a los computadores; en cuyo caso, cada que se ejecute el programa, la dirección IPserá siempre la misma. También es posible que el lector disponga de su propia dirección permanente IP y nombre de dominio.

En cualquier caso, el método getLocalHost() se puede utilizar para obtener un objeto de tipoInetAddress que represente al computador en el cual se está ejecutan la aplicación. Eso es justamente lo que muestra el código que aparece a continuación.

Page 66: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 66/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 61 -

address = InetAddress.getLocalHost( );System.out.println( address );

En este caso, la parte numérica que aparece al ejecutar el programa, corresponde la dirección que

el proveedor de Internet ha asignado a la conexión sobre la cual se estaba corriendo el programa.Las líneas de código siguientes realizan la operación contraria a las anteriores; se utiliza elmétodo getByNameQ para determinar el nombre por el cual el servidor de nombres de dominioreconoce a esa dirección numérica.

Temp. = address.toString( ).indexof( );Address =InetAdress.getByName( address.toString( ).substring(temp+1) );

System.out.println(address );

Una vez que se ha obtenido el objeto InetAddress, hay otra serie de métodos de la claseInetAdress que se pueden utilizar par invocar a este objeto; por ejemplo, las siguientes líneas decódigo muestran la invocación del método gerHostName( ), para obtener el nombre de lamáquina.

System.out.println( address.gerHostName( ) );

De forma semejante, el siguiente fragmento de código utiliza la invocación del métodogetAddress() para obtener un array de bytes conteniendo la dirección IP de la máquina.

byte[] bytes = address.getAddress(); // Convierte los bytes de la dirección IP a valores sin // signo y los presenta separados por espaciosfor( int cnt=O; cnt < bytes.length; cnt++ ) {int uByte = bytes[cnt] < O ? bytes[cnt]+256 bytes[cnt];system.out.print( uByte+);}

Como no existe nada parecido a un byte sin signo en Java, la conversión del array de bytes enalgo que se pueda presentar en pantalla requiere una cierta manipulación de los bytes, tal comose hace en el bucle for del código anterior.

LA CLASE URLLa clase URL contiene constructores y métodos para la manipulación de URL (Universal

 Resource Locator): un objeto o servicio en Internet. El protocolo TCP, como ya se ha indicado,necesita dos tipos de información: la dirección IP y el número de puerto. A continuación seexpone la forma en que se recibe pues la página Web principal de uno de los buscadores alteclear:

Page 67: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 67/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 62 -

http://www.yahoo.com

En primer lugar, Yahoo tiene registrado su nombre, permitiendo que se use yahoo.com como sudirección IP, o lo que es lo mismo, cuando se indica  yahoo.com es como si se hubieseespecificado 205.216.146.71, su dirección IP real.

La verdad es que la cosa es un poco más complicada que eso, al intervenir el servicio DNS(Domain Name Service) , que traslada wwwyahoo.com a 205.216.146.71, que es realidad lo quepermite teclear www.yahoo.com, en lugar de tener que recordar su dirección IP.

Como se ha visto al tratar la clase InetAddress, si se quiere obtener la dirección IP real de la reden que se está ejecutando una aplicación, se pueden realizar llamadas a los métodosgerLocalHost( ) y getAddress( ). Primero, getLocalHost( ) devuelve un objeto InerAddress, quesi se usa con getAddress( ) generara un array con la dirección IP.

Una cosa interesante en este punot es que una red puede mapear muchas direcciones IP. Estopuede ser necesario para un Servidor Web. Como Yahoo, que tiene que soportar grandescantidades de tráfico y necesita mas de una dirección IP para poder atender todo ese tráfico. Elnombre interno para la dirección 205.216.146.71, por ejemplo es www7.yahoo.com. el DNSpuede trasladar una lista de direcciones IP asignadas a Yahoo en www.yahoo.com.esto es unacualidad útil, pero abre un agujero en cuestion de seguridad.

Se conoce pues la dirección IP, falta el número del puerto. Si no se indica nada, se utilizará elque se haya definido por defecto en el archivo de configuración de los servicios del sistema. EnUnix se indican en el archivo /etc/services, en WindowsNT en el archivo services y en otrossistemas puede ser diferente.

El puerto habitual de los servicios Web es el 80, así que, si no se indica un puerto específico, laentrada en el servidor de Yahoo se realiza por el puerto 80. Si se teclea la URL siguiente en unnavegador:

http://www.yahoo.com: 80

también se recibirá la página principal de Yahoo. No hay nada que impida cambiar el puerto enel que residirá el servidor Web; sin embargo, el uso del puerto 80 es casi estándar, porqueelimina pulsaciones en el teclado y, además, las direcciones URL son lo suficientemente difícilesde recordar como para añadirle encima el número del puerto.

Si se necesita otro protocolo, como:

ftp: //ftp.sun .comel puerto a utilizar se derivará de ese protocolo. Así el puerto FTP de Sun es el 21, según suarchivo services. La primera parte, antes de los dos puntos, de la URL, indica el protocolo que sequiere utilizar en la conexión con el servidor. El protocolo HTTP (HyperText Transmission

Protocol), es el utilizado para manipular documentos Web. Y si no se especifica ningúndocumento, muchos servidores están configurados para devolver un documento de nombreindex.html.

Page 68: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 68/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 63 -

Con todo esto, Java permite los siguientes cuatro constructores para la clase URL:

public URL( String spec )public URL( String protocol,String host,int port,Striflg file )

public URL( string protocol,String host,String file )throws Mal formedURLException;public URL( URL context,Striflg spec )

así se podrían especificar todos los components de una dirección URL como en:

URL( http, www.yahoo.com, 80index.html );

O dejar que los sistemas utilicen los valores por defecto definidos, como en:

URL( http://www.yahoo.com );

Y en los dos casos se obtendría la visualización de la página principal de Yahoo en el navegador desde el cual se ha invocado.

El siguiente ejemplo muestra cómo se utilizan los cuatro constructores de la clase URL y losmétodos que proporciona dicha clase.

import java.net.*;

class java1702{public static void main( String[] args ) {

java1702 obj = new java1702();

try {System.out.println("Constructor simple para URL principal" );

obj.display( new URL( "http://usuarios.tripod.es" ) );

System.out.println("Constructor de cadena para URL + directorio" );

obj.display( new URL( "http://usuarios.tripod.es/froufe" ) );

System.out.println("Constructor con protocolo, host y directorio" );

obj.display( new URL("http","usuarios.tripod.es","/froufe" ) );

System.out.println("Constructor com protocolo, host, puerto y directorio" );

obj.display( new URL("http","usuarios.tripod.es",80,"/froufe" ) );

Page 69: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 69/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 64 -

System.out.println("Construye una direccion absoluta a partir de la \n"+"direccion del Host y una URL relativa" );

URL baseURL = new URL("http://usuarios.tripod.es/froufe/index.html");

obj.display( new URL( baseURL,"/froufe/introduccion/indice.html" ) );

System.out.println("Uso de URLEncoder para crear una cadena x-www-form-url" );

System.out.println( URLEncoder.encode("http://espacio .tilde~.mas+.com","ISO-8859-1" ) );

} catch( Exception e ) {System.out.println( e );}

}

// Método para poder presentar en la pantalla partes de una// dirección URLvoid display( URL url ) {System.out.print( url.getProtocol()+" " );System.out.print( url.getHost()+" " );System.out.print( url.getPort()+" " );System.out.print( url.getFile()+" " );System.out.println( url.getRef() );

// Presentamos la dirección completa como una cadenaSystem.out.println( url.toString() );System.out.println();}

}

 //------------------------------------------ Final del fichero java1702.java

El último método que aparece en código del ejemplo, dispay()>, es aquel que ilustra el uso dealgunos de los métodos de la clase URL, y también sirve como forma práctica de ver lainformación que contiene un objeto URL. Este método recibe un objeto URL como parámetro ypresenta todos sus componentes separados por un espacio en blanco; finalmente, utiliza elmétodo sobrescrito toString() de la clase URL para presentar el contenido del objeto URL comoun solo objeto String.

Como se puede observar, hay un método para obtener cada una de las partes que componen unadirección URL, exceptuando el método getFile() que devuelve el directorio y el nombre delarchivo combinados.

Page 70: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 70/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 65 -

El resto del código de la clase se encuentra en el método main(). El primer fragmento de códigointeresante es el que ilustra la instanciación de un objeto de tipo URL utilizando la versión delconstructor que espera recibir la dirección URL como una cadena.

La primera línea de código es la instanciación de un objeto de control de la clase para poder

acceder al métododisplay().

Luego se instancia un nuevo objeto URL utilizando la versión queadmite como parámetro una cadena, y se le pasa al método display(), que va a presentar todossus componentes en pantalla. La salida de este fragmento de código en pantalla es la siguiente:

http members.es.tripod.de -1 / nullhttp:/members.es.tripod.de/ 

El -1 que aparece es para indicar que no se ha especificado el puerto, y null es para indicar queno se ha indicado ninguna página o archivo en el constructor del objeto URL.

El programa presenta a continuación otras forma de construir el objeto URL, que no tienenmayor trascendencia, excepto uno de ellos, que resulta muy interesante, y es el constructor quenecesita dos parámetros: una dirección URL y una cadena y su interés radica en que permiteconstruir tanto una dirección URL absoluta como relativa. Asúmase que el interés se centra enescribir un método para presentar archivos HTML para que sean interpretados pur un navegador,en vez de presentarlos como simples archivos de texto. Es normal que estos archivos contenganenlaces a direcciones URL relativas, es decir, el enlace que se proporciona toma como referenciala dirección URL base en donde reside el archivo HTML.

El siguiente fragmento de código utiliza ese constructor para combinar la dirección base URL yla dirección relativa del archivo que se desea para generar una nueva dirección que apuntadirectamente a ese archivo

URL baseURL =new URL( http://members.es.tripod.de/froufe/index.html );obj.display( new URL( baseURL, /froufe/introduccion/indice.html ) );

La salida que generan esas líneas de código se muestra a continuación, en donde se puedecomprobar la construcción de la dirección relativa que se ha indicado para convertirla en ladirección absoluta de la página, es perfecta.

http mernbers.es.tripo.de -1 /froufe/introduccion/indice.html nullhttp: //members.es.tripod.de/froufe/introduccion/indice. html

Y las últimas líneas de código interesantes son las finales, en que se utiliza la claseURLEncoder. Esta clase intenta ayudar al programador en todos los problemas que causan losespacios, caracteres especiales, caracteres no-alfanuméricos, etc., que utilizan algunos sistemasoperativos y que pueden hacer que los nombres de archivos no lleguen a convertirse en unadirección URL válida.

Page 71: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 71/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 66 -

Si se desea crear un objeto URL utilizando una cadena URL que tiene los problemas que se hanindicado, primero es necesario utilizar el método encode() de la clase URLEncoder, paraconvertirla a una cadena URL ya entendible. Lo que hace este método estático encode() esconvertir la cadena que se le pasa a un formato llamado  x-www-from-urlencoded y la devuelvecomo un objeto String.

Para realizar la conversión, todos los caracteres se van examinando uno a uno, de izquierda aderecha. Los caracteres ASCII de la ‘a’ a la ‘z’, de la ‘A’ a la ‘Z’ y del ‘0’ al ‘9’, permanecenigual. Los espacios en blanco ‘ ‘se convierten a un signo más, ‘+‘, El resto de los caracteres seconvierten a una cadena de 3 caracteres de la forma “%xy”donde xy son dos dígitos enhexadecimal que representan los 8 bits mas significativos del carácter.

El siguiente fragmento de código muestra cómo se realiza esta conversión:

System.out . println(URLEncoder.encode( “http://espacio .tilde~.mas+.com” ) );

En la pantalla, la cadena en el formato que se ha descrito aparecerá como:

http%3ª%F%2Fespacio+.tilde%7E.mas%2B.com

Como bien puede observar el lector, los caracteres especiales han sido sustituidos por su valorhexadecimal precedido del signo del tanto por ciento, excepto el espacio que se ha sustituido porel signo más y el carácter más, que se ha sustituido por su valor hexadecimal, %2B.

El ejemplo que se presenta a continuación, javal7O3 .java, muestra cómo se utiliza un objetoURL para conectarse a una dirección URL y leer un archivo desde esa dirección a través de uncanal de entrada de tipo stream. Tenga en cuenta el lector, que esto es más ilustrativo que otracosa, porque se puede conseguir lo mismo utilizando sockets, como ya se verá.

La salida por pantalla del programa es la presentación del código HTML del archivo prueba0l.html, cuyo contenido se reproduce a continuación:

<!doctype html public -//w3c//dtd html 4.0 transitional//en><html><head>

<meta http-equiv=content-Type content=text/html;charset=iso-8859-1><meta name=GENERATOR content= Mozilla/4.51 [en](x11; I; Linux 2.2.5-15 i686) [Netscape]>

</head><body>

<center><h3>Fichero de pruebas</h3></center>Este es un programa de prueba utilizado, de comunicaciones por red.<p><b><i>Agust&iacute;nFroufe ,<i></b><br>

Page 72: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 72/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 67 -

<a href=mailto:froufe arrakis.es>[email protected]</a>,<a href=http://members.es.tripod.de/froufe/ >http: //members.es.tripod.de/froufe/</a></i ><br>&nbsp;</body>

<html>

El listado completo del ejemplo es el que se aparece en las siguientes líneas de código. De nuevoes el método main() el que contiene todo el programa, para evitar que resulte demasiadofarragoso el código e ir directamente al manejo de las clases que interesan .

import java.net.*;import java.io.*;

class java1703 {public static void main( String[] args ) {String cadena;

try {// Creamos un objeto de tipo URLURL url = new URL(

"http://usuarios.tripod.es/froufe/clases/prueba01.html" );

// Abrimos una conexión hacia esa URL, que devolverá un canal de// entrada por el cual se podrá leer todo lo que llegueBufferedReader paginaHtml =

new BufferedReader( new InputStreamReader(url.openStream() ) );

// Leemos y presentamos el contenido del fichero en pantalla// línea a líneawhile( (cadena = paginaHtml.readLine()) != null ) {System.out.println( cadena );

}} catch( UnknownHostException e ) {e.printStackTrace();System.out.println("Debes estar conectado para que esto funcione bien." );

} catch( MalformedURLException e ) {e.printStackTrace();

} catch( IOException e ) {e.printStackTrace();}

}}

Page 73: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 73/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 68 -

Como ya se ha visto en el ejemplo javal7O2 .  java, la clase URL tiene diferentes constructores,que se diferencian en la forma en que se le pasa la dirección URL. La siguiente línea de códigomuestra cómo se crea el objeto URL en este caso, donde se utiliza la versión del constructor dela clase URL que admite la dirección URL completa como una sola cadena. La dirección que sepasa apunta al archivo prueba 01.html, de la cuenta del autor en el servidor gratuito del

proveedortripod.

La cadena que especifica la dirección URL no contiene la indicación delpuerto porque se usa el de defecto, el puerto 80, para el protocolo  HTTP.

Una vez que se dispone del objeto URL. se pueden hacer muchas cosas con él, unas muyinteresantes y otras no tanto. Una de las cosas que se puede hacer es abrir streams de entrada ysalida que se conectarán con el puerto del servidor que está monitorizando la conexión. Esto noes demasiado interesante, ya que es una duplicidad de la capacidad que proporcionan los sockets,

pero es muy ilustrativo de lo que se puede hacer y por eso se muestra.

BufferedReader paginaHtml =new BufferedReader( new InputStreamReader( url.openStream() ) );

Esta línea de código abre una conexión con la dirección URL descrita por el objeto URL ydevuelve un objeto stream como canal de entrada para la lectura de datos provenientes de esaconexión. Tenga en cuenta que solamente la llamada al método openStrea() es la que hace elprocesado de la dirección, el resto de la sentencia es compleja por la utilización de las nuevasclases de lectura y escritura incorporadas al JDK.

El código que muestran las líneas siguientes es mucho más simple. La información se lee línea alínea y se va presentando según se lee. El método readLine() devuelve null cuando ya no haymás datos que leer, haciendo que el programa termine.

while( (cadena = paginaHtml.readLine()) != null ) {System.out.println( cadena );

 }

El resto del código del ejemplo consiste en el tratamiento de las excepciones.

LA CLASE URLCONNECTION

Es una clase abstracta que puede ser extendida, con un constructor protegido que admite unobjeto URL como parámetro. Tiene unas ocho variables que contienen información muy útilsobre la conexión que se haya establecido y cerca de cuarenta métodos que se pueden utilizarpara examinar y manipular el objeto que se crea con la instanciación de la clase.

Si el lector pretende utilizar la clase URL por las capacidades de alto nivel que proporciona, y suintención es escribir manejadores de protocolos o cosas así, es muy probable que tenga queconocer en profundidad esta clase. Pero el objetivo que se pretende aquí no es llegar a eseextremo, sino simplemente que el lector tenga conocimiento de la existencia de esta clase y dealguno de sus métodos.

Page 74: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 74/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 69 -

El ejemplo java17O4. java muestra cómo se realiza la conexión a una dirección URL y se creaun objeto de tipo URLConnection. El programa usa entonces ese objeto para obtener ypresentar en pantalla algunos de los aspectos de alto nivel de la dirección URL, como son el tipode contenido, la fecha de la última modificación o la propia dirección URL. Por ejemplo, laúltima ejecución del programa realizada por el autor generó la siguiente salida por pantalla:

% java javal7O4http //members.es.tripod.de/froufe/clases/prueba0l.htmlSun Jul 23 10:22:10 GMT+1:OO 1999text/html

El código completo del ejemplo es el que se reproduce a continuación.

import java.net.*;import java.io.*;import java.util.*;

class java1704 {public static void main( String[] args ) {String cadena;

try {// Creamos un objeto de tipo URLURL url = new URL(

"http://usuarios.tripod.es/froufe/clases/prueba01.html" );// Se abre una conexión hacia la dirección recogiendola en un// objeto de tipo URLConnectionURLConnection conexion = url.openConnection();

// Se utiliza la conexión para leer y presentar la direcciónSystem.out.println( conexion.getURL() );

// Se utiliza la conexión para leer y presentar la fecha de// última modificaciónDate fecha = new Date( conexion.getLastModified() );System.out.println( fecha );

// Se utiliza la conexión para leer y presentar el tipo de// contenidoSystem.out.println( conexion.getContentType() );

// Se utiliza la conexión para conesguir un objeto de tipo// InputStream, que luego se emplea para instanciar un// objeto DataInputStreamBufferedReader paginaHtml =new BufferedReader( new InputStreamReader(url.openStream()) );

Page 75: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 75/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 70 -

// Se utiliza el objeto DataInputStream para leer y// presentar el fichero línea a líneawhile( (cadena = paginaHtml.readLine()) != null ) {System.out.println( cadena );

}} catch( UnknownHostException e ) {e.printStackTrace();System.out.println("Debes estar conectado para que esto funcione bien." );

} catch( MalformedURLException e ) {e.printStackTrace();

} catch( IOException e ) {e.printStackTrace();}

}}

la clase URLConnection, como se ha indicadom es abstracta, por lo que no se puede instanciardirectamente, pero sí se uede extender. Una forma habitual de conseguir un objeto de tipoURLConnection es invocar un método sobre un objeto URL que devuelva un objeto de unasubclase de la clase URLConnection.

URL url = new URL (  http://members.es.tripod.de/froufe7clases7prueba01.html );

El primer trozo de código que merece la pena, representado en la línea anterior, es lainstanciación de un objeto URL. Lalínea de código que se muestra ahora crea un objeto de tipoURLConnection invocando al método openConection() del objeto que se ha instanciado antes.

URLConnection conexión = url.openConnection();Solamente queda como interesante el fragmento de código que se usa para invocar a tres de losmétodos de la clase URLConnection. Sobre el objeto instanciado, para obtener la infomación dealto nivel que muestra la dirección URL, la última fecha en que se ha modificado y el tipo dearchivo del contenido al que apunta esa dirección URL.

System.out.println( conexión.getURL() ) ;

Date fecha = new Date( conexión.getLasModified() ) ,System.out. println( fecha ) ;

System.out. println( conexion.getContentType() );

La verdad es que la información puede no ser demasiado fiable a veces, porque la impresión queda es que, por ejemplo, el tipo de contenido está basado en la extensión del archivo, y la fecha deúltima modificación corresponde a la capacidad que pueda tener el sistema operativo paramostrar la fecha a la hora de requerir el contenido de un directorio. No obstante, este tipo de

Page 76: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 76/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 71 -

información puede ser útil para mantener una utilización correcta del archivo apuntado por ladirección URL. De nuevo, se recuerda al lector que la clase URLConnection dispone de másmétodos para proporcionar información relevante a la conexión que se haya establecido.

LA CLASE SOCKET

La programación de sockets proporciona un mecanismo de muy bajo nivel para la comunicacióne intercambio de datos entre dos computadores, uno considerado como cliente, que es el queinicia la conexión con el otro, servidor, que está a la espera de conexiones de clientes.

El protocolo de comunicación entre ambos, determinará lo que suceda tras el establecimiento dela conexión. Para que las dos máquinas puedan entenderse, ambas deben implementar unprotocolo conocido por las dos. En la programación de sockets, la comunicación es full-duplex,

en ambos sentidos a la vez, entre cliente y servidor; siendo responsabilidad del sistema elllevar los datos de una máquina a otra, dejando al programador el proporcionarsignificado a esos datos. Parte de la información que fluye entre las dos máquinas es, pues, paraimplementar el protocolo, y el resto son los propios datos que se quieren transferir.

Es muy sencilla la utilización de sockets para establecer la comunicación entre cliente y servidor;en realidad, no es más complicada que lo que pueda serlo el escribir datos en un archivo. Enviary recoger los datos que se intercambian es la parte fácil del asunto; porque más allá de esto ya seencuentra el protocolo de comunicación que debe ser entendido por cliente y servidor, en casode ser necesario implementarlo, se convierte en algo verdaderamente complicado.

Cliente Eco

El primer ejemplo de programación de sockets que presentamos java1705.java, implementa un

cliente que realiza una prueba de eco con un servidor, enviándole una línea de texto por el puerto7 del servidor. Destinado a estos menesteres.

Para poder ejecutar este programa es necesario estar conectado en una red, o a interner, aunquees posible que tambien pueda hacerse sobre el mismo computador si el lector usa un sistemaoperativo que lo soporte, Linux por ejemplo; en cualquier otro caso, el resultado de la ejecucióndel ejemplo será una triste UnknownHostException.

El programa comienza instanciando un objeto de tipo String que contiene el nombre del servidorque se va a utilizar, seguido por la declaración e inicialización de la variable que guarda elnúmero del puerto, que en el caso del servidor estándar de echo es el 7. A continuación se abren

los canales de entrada y salida desde el socket que se mapean en las clases Reader y Writer.Una vez que se ha establecido la conexión y los canales de entrada y salida están listos para serusados, el programa envía una línea de texto al puerto de eco del servidor. Esto hace que elservidor reenvíe esa misma línea de vuelta al cliente, y el programa la leerá y presentará enpantalla.

El código completo del ejemplo es el que se muestra a continuacion.

Page 77: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 77/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 72 -

import java.net.*;import java.io.*;import java.util.*;

class java1705 {

public static void main( String[] args ) {String servidor = "www.fie.us.es";int puerto = 7; // puerto echo

try {// Abrimos un socket conectado al servidor y al// puerto estándar de echoSocket socket = new Socket( servidor,puerto );

// Conseguimos el canal de entradaBufferedReader entrada =

new BufferedReader( new InputStreamReader(socket.getInputStream() ) );

// Conseguimos el canal de salidaPrintWriter salida =new PrintWriter( new OutputStreamWriter(socket.getOutputStream() ),true );

// Enviamos una línea de texto al servidorsalida.println( "Prueba de Eco" );// Recogemos la línea devuelta por el servidor y la// presentamos en pantallaSystem.out.println( entrada.readLine() );

// Cerramos el socketsocket.close();

} catch( UnknownHostException e ) {e.printStackTrace();System.out.println("Debes estar conectado para que esto funcione bien." );

} catch( IOException e ) {e.printStackTrace();}

}}

En caso de que se seleccione un servidor que no tenga soporte para el protocolo echo en elpuerto 7, la salida que generará el programa será diferente de la que cabría esperar. Por ejemplo,si el lector intenta ejecutar este programa contra el servidor ‘www.whitehouse.net”, la respuestaque obtendrá será un rechazo de la conexión, algo así como ‘ connection refused.”.

Page 78: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 78/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 73 -

Como se puede ver en el listado, el método main() es el que contiene todo el código de la clase,porque es muy sencillo y no merece la pena desglosarlo. Las dos primeras líneas que hay que verdel ejemplo son las que contienen las variables a las que se asigna el nombre del servidor al quese va a conectar y el número del puerto de ese servidor que se va a atacar.

String servidor= 

www.fie.us.es;int puerto = 7; 7/ puerto echo

El resto del programa se encuentra englobado en un bloque try-catch para tratar las excepciones.La línea siguiente es la clave del programa, en ella se establece una conexión con el puertoindicado del servidor que se ha designado para instanciar un nuevo objeto de tipo Socket

Socket socket = new Socket( server,port );

Una vez que este objeto existe, es posible realizar la comunicación con el servidor utilizando elprotocolo que tenga predefinido para el servicio que proporciona a través de ese puerto. Losiguiente a destacar en el código del ejemplo es el uso de las clases Reader y Writer.

 // conseguimos el canal de entradaBufferedReader entrada =

new BufferedReader( new InputStreamReader(socket.getlnputStream() ) );

 //Conseguimos el canal de salidaPrintwriter salida =

new Printwriter( new OutputStreamwriter(socket.getoutputStream() ) ,true );

El parámetro true de la última línea hace que el canal de salida realice una descarga o limpiezade su contenido automáticamente. La realización de esta descarga o vaciado automático de los

canales, es algo de vital importancia a la hora de la programación con sockets.

Lo que resta del código es solamente el uso del canal de salida para enviar la línea de texto alservidor de eco, la recogida de su respuesta a través del canal de entrada y el cierre del socket;una vez presentada la cadena devuelta por el servidor.

Salida.println( Prueba de Eco ;System.out.println( entrada.readLine( ) ),Socket.close( );

Y esto es todo lo que hay sobre sockets desde el punto de vista de la parte cliente, no piense quela complejidad es mucho mayor, se haga lo que se haga, tal como podrá comprobar en lo

ejemplos siguientes. Ahora bien, sí que la programación de sockets se puede complicar, perotodos los problemas van a venir asociados a la necesidad de implementar un protocolo a nivel de

aplicación para comunicarse correctamente con el servidor, no del uso en sí de los sockets.

Page 79: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 79/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 74 -

Cliente Fecha

El ejemplo javal7O6. java también implementa un cliente, pero en este caso para atacar el puertoque proporciona el día y la hora sobre un servidor que dé soporte a este protocolo. El ejemplo esincluso más sencillo que el ejemplo javal7O5 .java, ya que no es necesario enviar nada al

servidor para obtener respuesta, todo lo que hay que hacer es establecer la conexión. El códigopor tanto es bien simple, tal como se muestra en el listado completo del programa.

import java.net.*;import java.io.*;import java.util.*;

class java1706 {public static void main( String[] args ) {

String servidor = "www.whitehouse.net";int puerto = 13; // puerto de daytime

try {// Abrimos un socket conectado al servidor y al// puerto estándar de echoSocket socket = new Socket( servidor,puerto );System.out.println( "Socket Abierto." );

// Conseguimos el canal de entradaBufferedReader entrada = new BufferedReader(

new InputStreamReader( socket.getInputStream() ) );

System.out.println( "Hora actual en www.whitehouse.net:" );System.out.println( "\t"+entrada.readLine() );System.out.println( "Hora Actual en Sevilla, Spain:" );System.out.println( "\t"+new Date() );

// Cerramos el socketsocket.close();

} catch( UnknownHostException e ) {System.out.println( e );System.out.println("Debes estar conectado para que esto funcione bien." );

} catch( IOException e ) {System.out.println( e );}

}}

El programa recoge y presenta la hora del servidor “www.whitehouse.net” , y luego presenta lafecha y hoara donde reside el autor ( o donde el lector esté ejecutando el programa), por motivosde comparación solamente. La salida que se obtiene, por ejemplo puede ser:

Page 80: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 80/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 75 -

% java java1706socket abierto.Hora actual en www.whitehouse.net:

Sun Jan 19 23:10:22 1999

Hora actual en sevilla, Spain:Sun Jan 20 05:10:23 GMT+01:00 1999

Como se puede comprobar, hay diferencia en el día debido a las zonas en que se está obteniendola fecha. También se puede ver que hay una diferencia de un segundo entre una hora y otra, elautor sincronizó el reloj de su ordenador con el servidor de tiempo de bernina.ethz.ch, así queesa diferencia solamente puede ser atribuible a la duración de la transmisión entre el servidor y elcliente.

La filosofía del programa es muy similar a la del ejemplo del cliente de eco. Se comienza con lainstanciación de un objeto String para contener el nombre del servidor que va a servir la fecha, yla declaración de inicialización de la variable que va a contener el número del puerto de eseservidor que se va a atacar, en este caso el puerto 13, que es el puerto estándar para el serviciodaytime.

Luego el programa se agencia un canal de entrada a través de la conexión socket que haestablecido previamente y ya está listo, porque en este caso, la sola conexión es suficiente paraque el servidor envíe la fecha y la hora. Así que todo lo que hay que hacer es leer la línea deentrada que contiene esa fecha y hora enviada por el servidor. El programa la presenta y tambiénpresenta la fecha y hora actuales de la máquina en que se está ejecutando el programa, paraestablecer una comparación con la que se ha llegado a través del socket.

Como no hay diferencias significativas con el ejemplo javal7OS .java que vayan más allá del usodel método System.out.printlnO), no merece la pena detenerse a contar nada del programa, essuficiente con que el lector lea los comentarios del código.

Cliente HTTP

El ejemplo que se va a ver ahora, javal7O7 .  java es un navegador extremadamente simple; omás correctamente, el programa es un cliente HTTP muy simple, implementado mediantesockets. El programa implementa el suficiente protocolo HTTP para poder recoger un ficherodesde cualquier servidor Web. Si el lector desea realizar un navegador mas util, tambien tendraque invertir mucho mas tiempo, pero para ver el funcionamiento, es suficiente con lo que semuestra este ejemplo, cuyo codigo fuente se muestra a continuación.

import java.net.*;import java.io.*;

class java1707 {public static void main( String[] args ) {

String servidor = "usuarios.tripod.es"; // servidorint puerto = 80; // puerto

Page 81: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 81/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 76 -

try {// Crea un socket, conectado al servidor y al puerto// que se indicaSocket socket = new Socket( servidor,puerto );// Crea el canal de entrada desde el socket

BufferedReader entrada = new BufferedReader(new InputStreamReader( socket.getInputStream() ) );// Crea el canal de salidaPrintWriter salida = new PrintWriter(new OutputStreamWriter( socket.getOutputStream() ),true );

// Envía un comando GET al servidorsalida.println(

"GET /froufe/clases/prueba01.html" );

// En esta cadena se va a ir leyendo el ficheroString linea = null;// Bucle para leer y presentar la líneas hasta que se// reciba un nullwhile( (linea = entrada.readLine()) != null )

System.out.println( linea );

// Se cierra el socketsocket.close();

} catch( UnknownHostException e ) {e.printStackTrace();System.out.println("Debes estar conectado para que esto funcione bien." );

} catch( IOException e ) {e.printStackTrace();}

}}

El programa se inicia definiendo el servidor y el puerto con el que se va a establecer lacomunicación, abriendo a continuación un socket sobre ese puerto. Al igual que en los ejemplosanteriores, el programa crea canales de entrada y salida para la transferencia de informaciónentre la parte del cliente y la parte del servidor.

El programa envía un comando GET, actuando como cliente, al servidor indicándole el archivoque desea recibir. Este comando forma parte del protocolo HTTP, que provoca la búsqueda en elservidor del archivo indicado y su envió al cliente. Si el servidor esta montado sobre el puertocon el que se ha establecido la conexión siempre enviara algo, si encuentra el archivo enviara sucontenido, y si no lo encuentra o hay algún otro problema siempre envía un mensaje de errorindicando la circunstancia por la cual el archivo no ha podido ser transferido al cliente.

Page 82: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 82/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 77 -

El programa lee el texto que recibe por el canal de entrada y lo presenta en el dispositivoestándar de salida, por lo que se vera el código HTML que forma la pagina, es decir se veracomo texto normal.

Si el lector revisa el código del programa Java, recordará de ejemplos anteriores toda la parte

inicial de declaración de variables para determinar el servidor y puerto al que conectarse y laapertura de sockets para los canales de entrada y salida. Así que la primera parte de código querealmente merece la pena revisar es el envío de comandos HTTP al servidor.

salida. println ( “GET/froufe/clases/prueba0l. html” );

Observe el lector que el árbol de directorios que se indica al servidor para que consiga localizarel archivo es relativo a su pseudoraíz, es decir, relativo al nivel inicial en que se encuentran losdocumentos HTML. La petición se realiza simplemente escribiendo el comando en el canal desalida.

Si el comando GET ha sido enviado correctamente, hay que esperar siempre una respuesta delservidor, aunque se trate de un mensaje de error. El siguiente fragmento de código va leyendotexto del canal de entrada, presentándolo a continuación en la pantalla, cerrando el socket cuandoya no hay más datos que leer.

String linea = null;while( (linea = entrada.readLine()) 1= null )System.out.println( linea );socket.close();El resto del código es ya la parte conocida de control de las excepciones. Si el lector deseaincorporar más características a este ejemplo, a fin de convertirlo en un navegador útil; se lesugiere que revise las especificaciones HTML y escriba un método de presentación al estilo quenormalmente se asocia a las página web. E incluso puede englobar todo el ejemplo en AWT,proporcionando una interfaz gráfica mediante un área de texto, TextArea, para la parte depresentación de la página y un campo de texto TextFill, para especificar la dirección del archivodel servidor que se desea visualizar.

La Clase de ServerSocket

La clase de ServerSocket es la que se utiliza a la hora de crear servidores, al igual que, como yase ha visto, la clase socket se utilizaba para crear clientes.El ejemplo java1709.java utiliza sockets para implementar dos sockets diferentes sobre una red

IP. Desde luego el programa es solamente ilustrativo, por lo que si el lector decide utilizarlo enalguno de sus propósitos el autor declina toda reponsabilidad, siendo el lector el que asúme elriesgo de su uso. El porqué de esta advertencia reside en el uso del agente de seguridad que seimplementa en éste, y algunos más, de los ejemplos que se van a presentar, que no es nadarestrictivo, y puede permitir el acceso no deseado a la máquina en que se ejecuten estosprogramas de ejemplo. El control realizado se limita a no permitir la navegación por encima deldirectorio actual; pero esto es más como ejemplo para que el lector pueda probar el envío demensaje de error al cliente, que un verdadero método de seguridad.

Page 83: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 83/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 78 -

Este programa implementa dos servidores operando sobre dos puertos diferentes del computadorque está ejecutando el programa. Uno de los servidores es un servidor “echo” que estáimplementado a través de una tarea que monitoriza el puerto 7. Este servidor devuelve la cadenaque reciba por el puerto 7 al mismo cliente que la ha enviado. El otro servidor es un servidor

HTTP abreviado, que se ha implementado a través de una tarea que monitoriza el puerto 80,puerto estándar para el protocolo HTTP. En este servidor se ha implementado la respuesta alcomando GET, que devuelve al cliente el contenido del archivo que haya solicitado, o unmensaje de error en caso de no encontrarlo.

Si el lector ejecuta los ejemplos en entorno Windows, es suficiente con que arranque losejemplos como cualquier otro programa Java, antes de lanzar la parte cliente, o al menos antes deque la parte cliente solicite algo al servidor. Sin embargo, si la ejecución se realiza en entornosSolaris, Linux, etc. probablemente se encuentre con que no hay permiso para utilizar los puertosque se asignan en los ejemplos. Esto es debido a que los puertos por debajo del 1024 estánreservados para uso del sistema; no obstante, el lector puede cambiar el número de puerto ~iantoen el servidor como en el cliente y ejecutarlos.

Los ejemplos javal7l0.java y java17ll.java son clientes implementados para probar los dosservidores que se crean en este ejemplo. La parte del servidor de Eco se puede probar utilizandoel primero de los ejemplos, javal7l0. java, y el otro ejemplo permite probar la parte HTTP.También puede el lector comprobar el funcionamiento del agente de seguridad, solicitandoarchivos no válidos al servidor. El código completo del programa es el que se muestra, que luegose revisará detalladamente.

import java.net.*;import java.io.*;import java.util.*;

public class java1709 {public static void main( String[] args ) {

// Se instancia el controlador de seguridad propio nuestroSystem.setSecurityManager( new MiSecurityManager() );// Se instancia un objeto servidor para escuchar el puerto 80ServidorHttp servidorHttp = new ServidorHttp();// Se instancia un objeto servidor para escuchar el puerto 7ServidorEco servidorEcho = new ServidorEco();}

}

 // Esta clase se utiliza para instanciar un controlador de seguridad que // solamente permita descargar los ficheros que se encuentren en el // directorio actual o en cualquier subdirectorio de ese directorio. // Evidentemente, no instalar este servidor en una red, sin antes haber // hecho cambios para que el control sea más exhaustivo, porque aquí // se ha dejado muy abierto, ya que solamente se pretende utilizar para

Page 84: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 84/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 79 -

 // pruebasclass MiSecurityManager extends SecurityManager {

// Este método sobreescrito es el que controla que el servidor solamente// permita descargar los ficheros del directorio actual y sus ramas,// es decir, que no permite navegar hacia arriba en el árbol, ni

// permite la descarga de una dirección absoluta, pero tiene// muchos agujeros de seguridad, así que no debe utilizarse a no ser// que se complete adecuadamente, y además se implemente la respuesta// que se va a dar en los demás métodos del controlador de Seguridadpublic void checkRead( String str ) {if( new File(str).isAbsolute() || (str.indexOf("..") != -1 ) )

throw new SecurityException( "\n"+str+": Acceso denegado.");}

// Ahora se sobreescriben los demás métodos, que es lo que hace que el// tema de seguridad quede totalmente abierto.public void checkAccept( String s,int i ){}public void checkAccess( Thread t ){}public void checkAccess( ThreadGroup g ){}public void checkAwtEventQueueAccess(){}public void checkConnect( String s,int i ){}public void checkConnect( String s,int i,Object o ){}public void checkCreateClassLoader(){}public void checkDelete( String s ){}public void checkExec( String s ){}public void checkExit( int i ){}public void checkLink( String s ){}public void checkListen( int i ){}public void checkMemberAccess( Class c,int i ){}public void checkMulticast( InetAddress a ){}public void checkPackageAccess( String s ){}public void checkPackageDefinition( String s ){}public void checkPrintJobAccess(){}public void checkPropertiesAccess(){}public void checkPropertyAccess( String s ){}public void checkRead( FileDescriptor f ){}// public void checkRead( String s ){} // Este es el único sobreescritopublic void checkRead( String s,Object o ){}public void checkSecurityAccess( String s ){}public void checkSetFactory(){}public void checkSystemClipboardAccess(){}public boolean checkTopLevelWindow( Object o ) {return true;}

public void checkWrite( FileDescriptor f ){}public void checkWrite( String s ){}}

Page 85: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 85/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 80 -

 // Esta es la clase que se utiliza para instanciar un hilo de ejecución // para el servidor que se encarga de escuchar el puerto 7, que es el // definido como estándar para el protocolo de "echo"class ServidorEco extends Thread {

// ConstructorServidorEco() {// Arrancamos el hilo e invocamos al método run() para que empiece// a correrstart();}

public void run() {try {// Se instancia un objeto sobre el puerto 7ServerSocket socket = new ServerSocket( 7 );System.out.println( "Servidor escuchando el 7" );// Entramos en bucle infinito ecuchando el puerto. Cuando se// produce una llamada, se lanza un hilo de ejecución de// ConexionEcho para atenderlawhile( true )

// Nos quedamos parados en el accept(), y devolvemos un socket// cuando se recibe la llamada. Este socket es el que se pasa// como parámetro al nuevo hilo de ejecución que se creanew ConexionEcho( socket.accept() );

} catch( IOException e ) {e.printStackTrace();}

}}

 // Esta clase se utiliza la lanzar un hilo de ejecución que atienda // la llamada recibida a través del puerto 7, el puerto de ecoclass ConexionEcho extends Thread {Socket socket;

// ConstructorConexionEcho( Socket socket ) {

System.out.println( "Recibida una llamada en el puerto 7" );this.socket = socket;// Trabajamos por debajo de la prioridad de los otros puertossetPriority( NORM_PRIORITY-1 );// Se arranca el hilo y se pone a correrstart();}

public void run() {

Page 86: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 86/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 81 -

System.out.println( "Lanzado el hilo de atencion del puerto 7" );BufferedReader entrada = null;PrintWriter salida = null;

try {

// Conseguimos un canal de entrada desde el socketentrada = new BufferedReader( new InputStreamReader(socket.getInputStream() ) );

// Conseguimos un canal de salida hacia el socket. El canal es// con liberación automática (autoflush)salida = new PrintWriter( new OutputStreamWriter(socket.getOutputStream()),true );

// Recogemos la cadena que llegue al puerto y la devolvemos en// el mismo instanteString cadena = entrada.readLine();salida.println( cadena );System.out.println( "Recibido: "+cadena );socket.close();System.out.println( "Socket cerrado" );

} catch( IOException e ) {e.printStackTrace();}

}}

 // Esta es la clase que se utiliza para instanciar un hilo de ejecución // para el servidor que se encarga de escuchar el puerto 80, que es el // definido como estándar para el protocolo de "http"class ServidorHttp extends Thread {// ConstructorServidorHttp() {// Arrancamos el hilo e invocamos al método run() para que empiece// a correrstart();}

public void run(){try {// Se instancia un objeto sobre el puerto 80ServerSocket socket = new ServerSocket( 80 );System.out.println( "Servidor escuchando el puerto 80" );// Entramos en bucle infinito ecuchando el puerto. Cuando se// produce una llamada, se lanza un hilo de ejecución de// ConexionHttp para atenderlawhile( true )

Page 87: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 87/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 82 -

// Nos quedamos parados en el accept(), y devolvemos un socket// cuando se recibe la llamada. Este socket es el que se pasa// como parámetro al nuevo hilo de ejecución que se creanew ConexionHttp( socket.accept() );

} catch( IOException e ) {

e.printStackTrace();}}

}

 // Esta clase se utiliza la lanzar un hilo de ejecución que atienda // la llamada recibida a través del puerto 80, el puerto de httpclass ConexionHttp extends Thread {Socket socket;BufferedReader entrada = null;PrintWriter salida = null;DataOutputStream pagina = null;

// ConstructorConexionHttp( Socket socket ) {System.out.println( "Recibida una llamada en el puerto 80" );this.socket = socket;// Trabajamos por debajo de la prioridad de los otros puertossetPriority( NORM_PRIORITY-1 );// Se arranca el hilo y se pone a correrstart();}

public void run() {System.out.println( "Lanzado el hilo de atencion al puerto 80" );try{// Conseguimos un canal de entrada desde el socketentrada = new BufferedReader( new InputStreamReader(

socket.getInputStream() ) );

// Conseguimos un canal de salida hacia el socket. El canal es// con liberación automática (autoflush)salida = new PrintWriter( new OutputStreamWriter(socket.getOutputStream() ),true );

// Ahora conseguimos un canal de salida para enviar el contenido// del ficero que haya solicitado el usuariopagina = new DataOutputStream( socket.getOutputStream() );

// Recogemos la cadena que llegue al puertoString peticion = entrada.readLine();System.out.println( "Recibida peticion: "+peticion );

Page 88: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 88/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 83 -

// Analizamos esa petición e intentamos responder. Solamente se// contesta a las peticiones GET, cualquier otra no tiene// respuesta algunaStringTokenizer st = new StringTokenizer( peticion );if( ( st.countTokens() >= 2 )

&& st.nextToken().equals("GET") ) {System.out.println( "Primer tag GET, correcto" );if( (peticion = st.nextToken()).startsWith("/") ) {

System.out.println("Siguiente toque que empieza por /, se le quita" );

peticion = peticion.substring( 1 );}

if( peticion.endsWith("/") || peticion.equals("") ) {System.out.println( "Peticion terminada en / o blanco, "+"se le incorpora: index.html" );

peticion = peticion + "index.html";System.out.println( "Peticion modificada: "+peticion );}

System.out.println( "Intento de desacarga de: "+peticion );FileInputStream fichero = new FileInputStream( peticion );// Se instancia un array de bytes igual al número de bytes que// se pueden leer del canal de entrada sin bloquearlo.// Y luego se rellena con los datosbyte[] datos = new byte[fichero.available()];fichero.read( datos );

// Se envía el array de datos al clientepagina.write( datos );pagina.flush();

} else// La petición que se ha hecho no es un GETsalida.println( "<HTML><BODY><P>400 Petici&oactute;n "+"Err&oacute;nea<P></BODY></HTML>" );

socket.close();System.out.println( "Socket cerrado" );

}catch( FileNotFoundException e ) {salida.println("<HTML><BODY><P>404 No Encontrado<P></BODY></HTML>" );

try {socket.close();System.out.println( "Socket cerrado" );

}catch( IOException evt ) {evt.printStackTrace();}

}catch( SecurityException e ){e.printStackTrace();

Page 89: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 89/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 84 -

salida.println("<HTML><BODY><P>403 Acceso denegado<P></BODY></HTML>" );

salida.println( e );try {

socket.close();

System.out.println( "Socket cerrado" );}catch( IOException evt ) {evt.printStackTrace();}

}catch( IOException e ) {e.printStackTrace();try {

socket.close();System.out.println( "Socket cerrado" );

}catch( IOException evt ) {System.out.println(evt);

}}

}}

Como el lector puede comprobar, el programa dispone de un agente de seguridad, sin embargo,se trata de una aplicación java, no de un applet. La parte principal de la aplicación se muestra enel método main(), conteniendo las tres sentencias que permiten el uso de las clases queimplementan el objetivo concreto de la creación de los servidores y del agente de seguridad

public static void main( String [ ] args){System.setSecurityManager (new MiSecurityManager() );ServidorHttp servidorHttp = new ServidorHttp();ServidorEco servidorEcho = new ServidorEco();

}

La primera sentencia establece el agente de seguridad que va a utilizar la aplicación. La segundasentencia instancia un objeto servidor que monitoriza el puerto 80; este servidor implemefltaparte del protocolo HTTP y permite la descarga de archivos a navegadores. Y, la tercerasentencia instancia un objeto servidor que monitoriza el puerto 7; este servidor devuelve alcliente TCP/IP la misma cadena que haya enviado al servidor. Estos dos servidores seimplementafl en tareas diferentes para que puedan funcionar en paralelo de forma asíncrona.

Agente de seguridad

Normalmente cuando se ejecuta una aplicación Java, no hay ningún agente de seguridad, o encaso de que lo haya, no funciona de la forma restrictiva en que se hace en el ejemplo. Sinembargo, cuando se establece un agente de seguridad para una aplicación, mediante la llamada almétodo setSecurityManagerO, lo contrario es cierto. Es decir, cuando se coloca un agente deseguridad en una aplicación, a ese código se le prohíbe hacer cualquier cosa; la aplicación deja

Page 90: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 90/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 85 -

de tener privilegios, y es el programador, como diseñador del sistema de seguridad, el que decidequé privilegios va a tener disponibles y qué cosas van a estar prohibidas a esa aplicación.Esto es un proceso tedioso y complicado. Aunque no es difícil hacer que un privilegio estédisponible una vez que se haya decidido que va a estarlo, el llegar a esa conclusión requiere ungran conocimiento de cómo se relacionan los privilegios con las operaciones que se pueden

realizar; por que hay ocaciones en que esta relación entre privilegio y operación no es tan obvia asimple vista. Para crear un agente de seguridad propio, hay que extender la claseSecurityManager, que contiene alrededor de una treintena de métodos que comienzan con lapalabra check, como checkAccept(). Esos métodos son los que controlan el acceso a lospriviliegios; cada uno de los métodos controla el acceso a un privilegio que generalmentecoincide con lo que indica la segunda parte del nombre.

La versión que se instaura por defecto de cada uno de estos métodos es la deshabilitación delprivilegio que controla. Para poner disponible ese privilegio, hay que sobreescribir el método,bien con un método vacío, o con un método que implemente una versión propia de eseprivilegio. En este ejemplo, se han sobrescrito todos los métodos, excepto uno, con un métodovacío, haciendo que los privilegios asociados a esos métodos estén disponibles, sin restricciónalguna.

El método checkReadO) está sobrescrito para modificar el privilegio asociado, de forma que elservidor HTTP solamente pueda enviar archivos situados en su directorio pseudo-raíz y encualquiera de los subdirectorios a partir de él. El código que se proporciona para esta versión delmétodo se muestra en las siguientes líneas.

public void checkRead( String str ) {if( new File(str).isAbsolute() I I (str.indexof(..) 1= -1) )

throw new SecurityException(  \n+str+: Acceso denegado.);}

Como se puede comprobar, se controla que no se pueda invocar un archivo directamenteindicando el camino absoluto en donde se encuentra en el disco, ni que se pueda realizar lallamada a un archivo del directorio padre del actual, que se indica con dos puntos (. .); en caso deque se intente cualquiera de los dos métodos de acceso, se lanzará la excepción de seguridad.Tenga en cuenta el lector que esto es solamente para probar y que no debe utilizarlo seriamenteni en algo en que tenga interés, porque hay muchas circunstancias que no se controlan.

El resto de los métodos se sobrescriben con un método vacío, deshabilitando las operaciones quese realizan por defecto y, dejando totalmente disponibles los privilegios que comprueban cadauno de esos métodos.

Servidor Eco

La siguiente parte interesante del código del programa es la clase que implementa el servidor delprotocolo  Echo, que es el más simple de los dos que se muestran en el ejemplo. En general, losdos servidores funcionan del mismo modo, corriendo cada uno de ellos en su propia tarea, yescuchando el puerto que corresponde a su protocolo, en espera de conexiones de clientes.

Page 91: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 91/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 86 -

Mientras un servidor se encuentra en este estado de espera de conexiones, estará bloqueado paraconsumir el mínimo de recursos del sistema.

Cuando un cliente requiere una conexión en cualquiera de los dos puertos, el servidor lanza otratarea para manejar las necesidades del cliente y luego vuelve para seguir escuchando el puerto en

su propia tarea. Las tareas para dar soporte a los clientes se lanzan con prioridad mínima, deforma que estas tareas no interfieran la capacidad asignada a los servidores de reconocer yresponder a cualquier otro cliente que esté solicitando una conexión. Si hay muchos clientessolicitando conexiones, el servidor que atiende al puerto lanzara una tarea por cada una de esasconexiones (dentro de las capacidades del sistema); de forma que puede haber muchas tareasejecutándose simultáneamente, atendiendo cada una de ellas a las necesidades de un clienteespecífico.

La primera sentencia interesante del servidor de eco es el constructor, que simplemente invoca asu propio método start() que iniciará el arranque de su propia tarea.

Start();

La clave del funcionamiento de un servidor en Java se encuentra en el método accept() de laclase ServerSocket. Antes, hay que construir un objeto de esa clase y, como se puede ver en elsiguiente trozo de código, el constructor de ServerSocket tiene solamente un parámetro: elnúmero del puerto que va a ser monitorizado por el servidor que construye.

ServerSocket socket = new serverSocket( 7 );system.out.println( Servidor escuchando el 7 );

Y acto seguido se puede realizar la llamada al método accept() para recoger las conexiones queestablezcan los clientes con el servidor a través del puerto que está monitorizando ese servidor.Las líneas siguientes muestran cómo se hace esto en el ejemplo.

while( true )new ConexionEcho( socket.acceptO );

Cuando se instancia un objeto de tipo ServerSocket y se invoca el método accept() sobre eseobjeto, este método bloquea el servidor y se queda a la espera hasta que se produce una conexiónde un cliente en el puerto que controla. Cuando esto sucede, se instancia automáticamente unobjeto Socket que es devuelto por el método accept().

Observamos que hay muchos conceptos que se están repitiendo, y que si va leyendo condetenimiento, se vuelve sobre ellos una y otra vez. Esto está hecho deliberadamente, ya que hayuna serie de conceptos y métodos muy simples en los que se basa todo el funcionamiento de lascomunicaciones en red con Java, y que son los que verdaderamente tienen que quedar arraigadosen la mente. Por ello aun a pesar de resultar un poco ladrillo, es preferible recaer una vez sobreotra en los conceptos que el autor considera fundamentales, para que una vez concluida la lecturadel capítulo, al menos esos conceptos hayan quedado lo suficientemente claros y grabados en elconocimiento del lector.

Page 92: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 92/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 87 -

El objeto Socket devuelto por el método accept() se conecta automáticamente con el objetoSocket utilizado por el cliente que ha establecido la conexión, y se puede utilizar para establecerla comunicación con el cliente. Esto es muy importante, así que hay que detenerse un poco enello.

No hay ninguna transferencia de datos por el hecho de disponer de un objeto de tipoServerSocket. Es en el momento en que el cliente solicita una conexión cuando se instanciaautomáticamente un objeto Socket que se conecta con el Socket del cliente que ha pedido laconexión. Este nuevo socket es el devuelto por el método accept() para poder establecer lacomunicación con el socket del cliente.

En el trozo de código anterior, se observa que cuando se recibe una conexión, se lanza una tareadel tipo ConexionEcho que atiende al cliente que ha solicitado esa conexión. Al constructor dela clase que maneja este nueva tarea, se le pasa como parámetro el objeto Socket que el métodoacceptO) devuelve, que ya está conectado con el cliente, y a través del cual el protocolo decomunicaciones para el servicio, echo en este caso, puede comunicarse con el cliente.

Observe el lector que la tarea en la cual está corriendo el objeto ServidorEco se encuentra enmedio de un bucle infinito. Luego una vez que la tarea ConexionEcho haya sido lanzada conéxito, el objeto ServidorEco volverá a su función inicial de seguir esperando a la conexión deotro cliente a través del puerto de eco.

El siguiente trozo de código en que merece la pena detenerse es el constructor de la claseConexionEcho. Los objetos de esta clase son creados a raíz de la petición de conexión de algúncliente al servidor. No obstante, estos objetos no saben nada de clientes y servidores, lo únicoque conocen es que hay un socket TCP/IP conectado con otro socket en otra máquina, o con otroproceso de la misma máquina.

ConexionEcho( Socket socket ) {system.out.println( Recibida una llamada en el puerto 7 ); this.socket = socket;setpriority( NORM..PRI0RITY-l );startQ;}

Como puede observar el lector, tras guardar el parámetro en una variable de instancia, elconstructor fija la prioridad de la tarea. Esto es para que las tareas que están monitorizando lospuertos no se vean interrumpidas por las tareas que están atendiendo a las conexiones yaestablecidas. Una vez ajustada la prioridad, solamente resta invocar al método start() para que latarea se levante y empiece a correr. Como es habitual, el método start() invocará al método run()

de esta tarea.

El método run() de esta tarea es similar al código que ya se ha presentado en ejemplos anterioresal programar la parte cliente. Por referenciar algo, se reproducen las líneas de código en donde selee la cadena recibida del cliente y se devuelve a ese cliente, exactamente igual que se harecibido. Una vez hecho esto, se cierra el socket de conexión con el cliente y la tarea se muere.

string cadena = entrada.readLine();

Page 93: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 93/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 88 -

salida.println( cadena );System.out.println( Recibido: +cadena );socket.close();System.out.println( Socket cerrado );

Con esto se concluye el repaso al código que implementa el servidor Eco en el programa y sepasa a discutir la clase que atiende a las conexiones con el puerto estándar del protocolo HTTP.

Servidor HTTP

Este servidor HTTP es realmente simple, y solamente responde al comando GET del protocoloHTTP, cualquier otro comando será ignorado y el cliente obtendrá como respuesta un mensajede error.

En el método main() se instancia un objeto de la clase ServidorHttp, que monta una tarea queinstancia un objeto de tipo ServerSocket para atender al puerto estándar del protocolo HTTP, elpuerto 80.

ServerSocket socket = new ServerSocket( 80 );System.out.prifltln( Servidor escuchando el puerto 80 );

El método accept(), tal como muestran las líneas de código siguientes, se invoca sobre esteobjeto dentro de un bucle infinito para bloquear y monitorizar el puerto 80, esperandoconexiones de clientes. Cuando esto ocurre, el método accept() instancia y devuelve un objetoSocket, que estará conectado con la máquina cliente.

while( true )new ConexionHttp( socket.acceptQ );

Este objeto Socket, se pasa como parámetro al constructor de un nuevo objeto de tipoConexionHttp, que lanzará una tarea específica para atender a la conexión que se ha establecidocon el cliente, a través de la versión abreviada del protocolo HTTP que se ha implementado enesta clase.

El constructor es similar al visto para el servidor de Eco; así que, en aras de la brevedad no seincluye aquí. Si el lector sigue el código del ejemplo, no encontrará nada nuevo hasta llegar a latransmisión de información al cliente, que en este caso se hace enviando un array de bytes. El

siguiente fragmento de código muestra la creación del canal de salida que va a permitir este tipode comunicación.

pagina = new DataOutputStreafll( socket.getOutputStream () );

Esto se ecncuentra dentro del método run(), corazón de la tarea que esta atendiendo a laconexión. A continuación, lo que se espera es la conexión del cliente, para lo que se utiliza elmétodo readLine() sobre el canal de entrada que lee las peticiones y alma-cena esa petición enun objeto String.

Page 94: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 94/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 89 -

String peticion = entrada.readLineQ;

Lo siguiente que hay que hacer es el análisis de la petición que ha realizado el cliente paracomprobar si es posible atenderla o no, teniendo en cuenta que solamente se responde alcomando GET. Para realizar este análisis se utiliza un objeto StringTokenizer, que indicará si

hay o no un comandoGET

en la petición realizada por el cliente.Stringiokenizer st = new Stringiokenizer( peticion );if( ( st.countiokens() >= 2 )&& st.nextloken().equals( GET) ) {

En caso de que no sea una petición GET, se creará una página dentro del código para devolver elmensaje de error al cliente. Si la petición sí corresponde a un comando GET, lo que se intenta escomprobar el nombre del archivo que ha solicitado el cliente y enviárselo; y en caso de que nosolicite ninguno, completar el camino que haya indicado con el archivo index.html, que es elarchivo estándar que utilizan casi todos los navegadores como archivo de defecto en caso de noespecificar una página determinada en el acceso a un sitio Internet. Las siguiente línea de códigoelimina la posibilidad de que la petición contenga barras “/” extra.

if( (peticion = st.nextiokenQ).startswith( ) ) {

Si la petición termina con una barra “/” o es una cadena vacía, se supone que el cliente quieredescargar el archivo index.html; así que, en este caso, se añade este nombre de archivo a lacadena que contiene la petición realizada por el cliente.

if( peticion.endswith() II peticion.equals() ) {System.out.println( Peticion terminada en / o blanco, +

  se le incorpora: index.html );peticion = peticion + index.html;System.out.println( Peticion modificada: +peticion );

}

Llegados a este punto, ya se sabe cuál es el archivo que hay que enviarle al cliente comorespuesta a su petición, así que se intenta abrir un objeto de tipo FilelnputStream con esenombre de archivo y en el camino que se indique. Si no se puede conseguir, se lanzará unaexcepción que será procesada en el bloque try-catch del final del programa. Si el archivo sí sepuede leer, se creará un array de bytes igual al contenido del archivo y se leerá ahí esecontenido.

FilelnputStream fichero = new FílelnputStream( petícion ); // Se instancia un array de bytes igual al número de bytes que //  se pueden leer del canal de entrada sin bloquearlo.byte[] datos = new byte[tichero.ava1 fabIeUj;fichero.read( datos );

Page 95: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 95/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 90 -

Una vez que se ha identificado, localizado y leído el archivo en un array en memoria, el siguientepaso consiste en el uso del canal de salida que se había creado anteriormente para transmitir elcontenido del array al cliente; concluyendo con la liberación forzada de todo el contenido delarray, tal como se muestra en las siguientes líneas de código.

pagina.write( datos );pagina.flush();El siguiente fragmento de código se ejecuta en el caso de que el cliente no envíe una peticiónGET, en cuyo caso se crea un documento sobre la marcha conteniendo el mensaje de error queindica tal circunstancia y se le envía como respuesta al cliente.

} elsesalida.println( <HTML><BODY><P>400 Petici&oactute;n +

  Err&oacute ; nea<P></BODY></HTML> );socket.closeü;

Esta última sentencia cierra el socket y permite que la tarea termine normalmente, siempreasumiendo que no se ha lanzado ninguna excepción mientras; porque en el caso de que sehubiese generado alguna excepción, hay varios controladores para recoger estas excepciones, eincluso algunos, como el lector podrá observar en el código del ejemplo, generan páginas sobrela marcha que se envían al cliente, indicando la circunstancia que ha provocado el lanzamientode la excepción que controlan.

Quizá merezca la pena detenerse en el controlador de la última excepción, la de tipoIOExcepction, que se muestra en el siguiente trozo de código.

}catch( IOException e ) {e.printStacklrace();try {

socket.cl ose ();System.out.println( Socket cerrado );

}catch( IoException evt ) {System.out.println(evt);}

Es especial porque es necesario cerrar el socket  dentro del controlador de la excepción. Laverdad es que el autor no sabe a ciencia cierta cómo se puede forzar una excepción de tipoIOException, dentro del manejador de una excepción de tipo IOException lanzadaanteriormente, pero vamos; es de suponer que funciona.

LA CLASE DATAGRAMPACKET

La clase DatagramPacket, junto con la clase DatagramSocket, es la que se utiliza para laimplementación del protocolo UDP (User Datagram Protocol).

En este protocolo, a diferencia de lo que ocurría en el protocolo TCP, en el cual si un paquete sedañaba durante la transmisión se reenviaba ese paquete, para asegurar una comunicación segura

Page 96: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 96/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 91 -

entre cliente y servidor; con UDP no hay garantía alguna de que los paquetes lleguen en el ordencorrecto a su destino y, ni tan siquiera hay seguridad de que lleguen todos los paquetes que sehayan enviado. Sin embargo, los paquetes que consiguen llegar, lo hacen mucho másrápidamente que con TCP y, en algunos casos, la velocidad de transmisión es mucho másimportante que el que lleguen todos los paquetes; por ejemplo, si lo que se están transmitiendo

son señales de sensores en tiempo real para la presentación en pantalla, la velocidad es másimportante que la integridad, porque si un paquete no llega o no puede recomponerse, en elinstante siguiente llegará otro.

La programación para uso del protocolo UDP se diferencia de la programación del protocoloTCP en que no existe el concepto de ServerSocket para los datagramas y que es el programadorel que debe construirse los paquetes a enviar por UDP.

Para enviar datos a través de UDP, hay que construir un objeto de tipo DatagramPacket yenviarlo a través de un objeto DatagramSocket, y al revés para recibirlos, es decir, a través deun objeto DatagramSocket se recoge el objeto DatagramPacket. Toda la información respectoa dirección, puerto y datos está contenida en el paquete.

Para enviar un paquete, primero se construye ese paquete con la información que se deseatransmitir, luego se almacena en un objeto DatagramSocket y, finalmente se invoca el métodosend() sobre ese objeto. Para recibir un paquete, primero se construye un paquete vacío y luegose le presenta a un objeto DatagramSocket para que almacene allí el resultado de la ejecución delmétodo receiveO) sobre ese objeto.

Hay que tener en cuenta que la tarea encargada de todo esto estará bloqueada en el métodoreceive() hasta que un paquete físico de datos se reciba a través de la red; este paquete físico seráel que se utilice para rellenar el paquete vacío que se había creado.

También hay que tener cuidado cuando se pone a escuchar a un objeto DatagramSocket en unpuerto determinado, porque va a recibir los datagramas enviados por cualquier cliente. Es decir,que si los mensajes enviados por los clientes están formados por múltiples paquetes; en larecepción pueden llegar paquetes entremezclados de varios clientes y es responsabilidad de laaplicación el ordenarlos.

Para la clase DatagramPacket se dispone de dos constructores. uno utilizado cuando se quierenenviar paquetes y el otro se usa cuando se quieren recibir paquetes. Ambos requieren que se lesproporcione un array de bytes y la longitud que tiene. En el caso de la recepción de datos, no esnecesario nada más, los datos que se reciban se depositarán en el array; aunque en el caso de quese reciban más datos físicos de los el exceso de informaci´n se perderá y se lanzará unaexcpciónde tipo IllegalArgumentExceptio, que a pesar de que no sea necesaria su captura,siempre es bueno recogerla.

Cuando se construye el paquete a enviar, es necesario colocar los datos en el array antes dellamar al método send(); además de eso, hay que incluir la longitud de ese array, y también sedebe proporcionar un objeto de tipo InetAddress indicando la dirección de destino del paquete yel número del puerto de ese destino en el cual estará escuchando el receptor del mensaje. Es

Page 97: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 97/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 92 -

decir, que la dirección de destino y el puerto de escucha deben ir en el paquete, al contrario de loque pasaba en el caso de TCP que se indicaba en el momento de construir el objeto Socket.

El tamaño ftsico máximo de un datagrama es 65535 bytes, y teniendo en cuenta que hay queincluir datos de cabecera, esa longitud nunca está disponible para datos de usuario, sino que

siempre es algo menor.La clase DatagramPacket proporciona varios métodos para poder extraer los datos que lleganen el paquete recibido. La información que se obtiene con cada método coincide con el propionombre del método, aunque hay algunos casos en que es necesario saber interpretar lainformación que proporciona ese mismo método.

El método getAddress() devuelve un objeto de tipo InetAddress que contiene la dirección delhost remoto. El saber cuál es el computador de origen del envío depende de la forma en que sehaya obtenido el datagrama. Si ese datagrama ha sido recibido a través de Internet, la direcciónrepresentará al computador que ha enviado el datagrama (el origen del datagrama); pero si eldatagrama se ha construido localmente, la dirección representará al computador al cual se intentaenviar el datagrama (el destino del datagrama).

De igual modo, el método getPort() devuelve el puerto desde el cual ha sido enviado eldatagrama, o el puerto a través del cual se enviará, dependiendo de la forma en que se hayaobtenido el datagrama.

El método getData() devuelve un array de bytes que contiene la parte de datos del datagrama, yaeliminada la cabecera con la información de encaminamiento de ese datagrama. La forma deinterpretar ese array depende del tipo de datos que contenga. Los ejemplos que se ven en esteTutorial utilizan exclusivamente datos de tipo String, pero esto no es un requerimiento, y sepueden utilizar datagramas para intercambiar cualquier tipo de datos, siempre que se puedancolocar en un array de bytes en un computador y extraerlos de ese array en la parte contraria. Esdecir, que la responsabilidad del sistema se limita al desplazamiento del array de bytes de uncomputador a otro. y es responsabilidad del programador el asignar significado a esos bytes.

El método getLength() devuelve el número de bytes que contiene la parte de datos deldatagrama, y el método getOffset() devuelve la posición en la cual empieza el array de bytesdentro del datagrama completo.

LA CLASE DATAGRAMSOCKET

Un objeto de la clase DatagramSocket puede utilizarse tanto para enviar como para recibir undatagrama.

La clase tiene tres constructores. Uno de ellos se conecta al primer puerto libre de la máquinalocal; el otro permite especificar el puerto a través del cual operará el socket; y el tercero permiteespecificar un puerto y una dirección para identificar a una máquina concreta.

Independientemente del constructor que se utilice, el puerto desde el cual se envía el datagramasiempre se incluirá en la cabecera del paquete. Normalmente, la parte del servidor utilizará el

Page 98: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 98/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 93 -

constructor que permite indicar el puerto concreto a usar, ya que si no, la parte cliente no tendríaforma de conocer el puerto por el cual le van a llegar los datagramas.

La parte cliente puede utilizar cualquier constructor, pero por flexibilidad, lo mejor es utilizar elconstructor que deja que el sistema seleccione uno de los puertos disponibles. El servidor deberíaentonces comprobar cuál es el puerto que se está utilizando para el envío de datagramas y enviarla respuesta por ese puerto.

A diferencia de esta posibilidad de especificar el puerto, o no hacerlo, no hay ninguna otradistinción entre los sockets datagrama utilizados por cliente y servidor. Si el lector se encuentraun poco perdido, no desespere, porque en los ejemplos todo esto que es muy difícil explicar conpalabras, se ve mucho más claramente al intuir el funcionamiento físico de la comunicación entrecliente y servidor.

Para enviar un datagrama hay que invocar al método send() sobre un socket datagrama existente,pasándole el objeto paquete como parámetro. Cuando el paquete es enviado, la dirección ynúmero de puerto del computador origen se coloca automáticamente en la porción de cabeceradel paquete, de forma que esa información pueda ser recuperada en el computador destino delpaquete.

Para recibir datagramas, hay que instanciar un objeto de tipo DatagramSocket, conectarse a unpuerto determinado e invocar al método receive() sobre ese socket. Este método bloquea la tareahasta que se recibe un datagrama, por lo que si es necesario hacer alguna cosa durante la espera,hay que invocar al método receive() en su propia tarea.

Si se trata de un servidor, hay que conectarse con un puerto específico. Si se trata de un clienteque está esperando respuestas de un servidor, hay que escuchar en el mismo puerto que fueutilizado para enviar el datagrama inicial. Si se envía un datagrama a un puerto anónimo, sepuede mantener el socket abierto que fue utilizado en el envío del primer datagrama y utilizar esemismo socket para esperar la respuesta.

Tamabien se puede invocar al método getLocalPort()sobre el socket antes de cerrarlo de formaque se pueda saber y guardar el número del puerto que se ha empleado; de este modo se puedecerrar el socket original y abrir otro en el mismo puerto en el momento en que se necesite.

Para responder a un datagrama, hay que obtener la dirección del origen y el número de puerto através del cual fue enviado el datagrama, de la cabecera del paquete y luego, colocar estainformación en el nuevo paquete que se construya con la información a enviar como respuesta.Una vez pasada esta información a la parte de datos del paquete, se invoca al método send()

sobre el objeto DatagramSocket existente, pasándole el objeto paquete como parámetro.

Es importante tener en en cuenta que los números de puerto TCP y UDP no están relacionados.Se puede utilizar el mismo número de puerto en dos procesos si uno se comunica a través deprotocolo TCP y el otro lo hace a través de protocolo UDP. Es muy común que los servidoresutilicen el mismo puerto para proporcionar servicios similares a través de los dos protocolos enalgunos servicios estándar, como puede ser el eco.

Page 99: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 99/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 94 -

Cliente Eco

Esta aplicación no es más que una actualización del ejemplo javal7OS . java, al que se le incluyeademás el protocolo UDP. El ejemplo javalll2 . java realiza dos pruebas del servicio Echo contrael mismo servidor, enviando una línea de texto al puerto estándar de este servicio, el puerto 7. Enla primera prueba utiliza el protocolo TCP/IP y en la segunda emplea un datagrama UDP.

import java.net.*;import java.io.*;import java.util.*;

class java1712 {public static void main( String[] args ) {String servidor = "www.fie.us.es"; // servidorint puerto = 7; // puerto ecoString cadTcp = "Prueba de Eco TCP";String cadUdp = "Prueba de Eco UDP";

// Primero realizamos el test de Eco con TCP/IPtry {

// Abrimos un socket conectado al servidor y al// puerto estándar de echoSocket socket = new Socket( servidor,puerto );

// Conseguimos el canal de entradaBufferedReader entrada = new BufferedReader(

new InputStreamReader( socket.getInputStream() ) );

// Conseguimos el canal de salida, con liberación automáticaPrintWriter salida = new PrintWriter(new OutputStreamWriter( socket.getOutputStream() ),true );

// Envía la línea de texto del mensaje al servidorsalida.println( cadTcp );// Y recoge la respuesta del servidor, presentándola en pantallaSystem.out.println( entrada.readLine() );

// se cierra el socket TCPsocket.close();

// Ahora se realiza la prueba con datagramas sobre el mimso// puerto del mismo servidor// Convertimos el mensaje en un array de bytes

Page 100: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 100/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 95 -

byte[] mensajeUdp = cadUdp.getBytes();// Obtenemos la dirección IP del servdorInetAddress dirIp = InetAddress.getByName( servidor );// Creamos el paquete que se va a enviar al puetoDatagramPacket paquete =

new DatagramPacket( mensajeUdp,mensajeUdp.length,dirIp,puerto );// Abrimos un socket datagrama para enviarle el mensajeDatagramSocket socketDgrama = new DatagramSocket();// Y lo enviamossocketDgrama.send( paquete );

// Sobreescrimos el mensaje en el paquete para confirmar que el// eco es realmente lo que llegabyte[] arrayDatos = paquete.getData();for( int cnt=0; cnt < paquete.getLength(); cnt++ )

arrayDatos[cnt] = (byte)'x';// Escribimos esta versión del mensajeSystem.out.println( new String( paquete.getData() ) );// Ahora recibimos el eco en ese mismo paquete, de forma que// sobreescriba las "x" que se habían colocadosocketDgrama.receive( paquete );// Presentamos en pantalla el ecoSystem.out.println( new String( paquete.getData() ) );

// Se cierra el socketsocketDgrama.close();

} catch( UnknownHostException e ) {e.printStackTrace();System.out.println("Debes estar conectado para que esto funcione bien." );

} catch( SocketException e ) {e.printStackTrace();

} catch( IOException e ) {e.printStackTrace();}

}}

En el programa se instancian dos objetos de tipo String, para utilizr uno deferente en dadaprotocolo. Luego está la parte correspondiete a la prueba de eco a través de TCP, sobre la que nose insiste más. Una vez cerrado el socket TCP, comienza la prueba de eco a través de UDP.

En primer lugar se convierte el mensaje que se ha de enviar por UDP a un array de bytes. Hayque instanciar un objeto de tipo InetAddress que contenga la dirección del servidor con el que seva a realizar la conexión y el envío del datagrama con el array de bytes recién creado.

Page 101: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 101/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 96 -

Se crea un objeto de tipo DatagramPacket que contenga el array de bytes de la cadena a enviar, junto con la dirección del servidor y el puerto al que hay que conectarse. Se crea ahora un objetode tipo DatagramSocket que será utilizado para enviar el paquete al servidor. Sin embargo, hayque recordar que el protocolo UDP no garantiza que el paquete llegue íntegro al servidor, o quetan siquiera llegue.

Solamente resta invocar al método send() sobre el objeto DatagramSocket, pasánsole el objetoDatagramPacket como parámetro. Esto hace que la dirección local y el número de puerto seincorporen en el paquete y éste sea enviado a la dirección y número de puerto que se haencapsulado en el objeto DatagramPacket en el momento de su creación.

Los mismos objetos DatagramSocket y DatagramPacket serán los utilizados para recibir elpaquete de respuesta del servidor (siempre que la suerte acomrañe). Se usa un bucle parasobreescribir los datos en el paquete con una letra para poder comprobar que una vez recibido elpaquete de respuesta del servidor de eco, los datos son nuevos y no simplemente el residuo delmensaje que se había colocado originalmente en el paquete.

Luego se invoca el método receive() sobre el objeto DatagramSocket, pasánsole el objetoDatagramPacket como parámetro. Esto hace que la tarea se bloquee en el mismo puerto por elque se ha enviado el paquete, hasta que llegue una respuesta. En el momento en que un paquetefísico llegue desde el servidor, se extraen los datos y se colocan en el objeto DatagramPacket quese le ha proporcionado como parámetro. Una vez hecho esto, la tarea se desbloquea y el flujo decontrol de la aplicación sigue por la sentencia que muestra el contenido del paquete.

Finalmente, se cierra el socket y el programa termina.

Como el ejemplo es una simple actualización de otro de los ejemplos del Tutorial, gran parte delcódigo ya está más que visto; y es exactamente igual al del ejemplo javal7OS .  java. Así quesolamente se van a repasar a continuación algunas de las líneas de código más interesantes de laparte que se aporta nueva en este ejemplo, que corresponderá, evidentemente, a laimplementación del intercambio de mensajes con el servidor a través del puerto del servicio Eco,

pero con protocolo UDP.

El primer fragmento en que hay que detenerse es justo en la declaración del método mamo, endonde se declaran e inicializan algunas variables importantes.

public static void main( string[] args ) {string servidor www.fie.us.es ; // servidorint puerto = 7; // puerto ecostring cadlcp =  prueba de Eco TCP;string cadudp =  prueba de Eco UDP;

Luego esta todo el código referente al protocolo TCP, que en este caso no resulta interesante, yya se alcanza el punto del programa en el que se convierte el mensaje en un array de bytes, y seinstancia un objeto que identifique al servidor. Se utiliza el método getBytes() de la clase Stringpara convertir el mensaje a un array de bytes.

Page 102: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 102/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 97 -

byte[] mensajeUdp = cadudp.getBytes(); // Obtenemos la dirección IP del servidorInetAddress dirIp = InetAddress.getByName ( servidor );

La siguiente línea de código importante es la que instancia un objeto de tipo DatagramPacketpara llevar toda la información del mensaje y del servidor, como es el array de bytes creado

antes, su longitud, y la dirección y puerto del servidor.

DatagramPacket paquete = new oatagramPacket( mensajeudp,mensajeudp.length,dirlp,puerto );

A continuación, se instancia un objeto DatagramSocket anónimo. Esto de anónimo puederesultar confuso al lector. El objeto es anónimo porque el número de puerto no está especificado.En algún sitio anteriormente se ha indicado que los objetos anónimos son aquellos que no tienenuna variable de referencia asignada; que no es el caso que se produce aquí. Este objeto se usapara enviar el datagrama al servidor invocando al método send() sobre el objetoDatagramSocket.

Datagramsocket socketDgrama = new DatagramSocket();socketDgrama.send( paquete );

Las siguientes líneas de código son las que sobreescriben los datos del mensaje con una letra,para el propósito que se ha indicado antes de comprobar que el mensaje que se recibe no es enrealidad el resto del que se ha mandado. Este fragmento de código también muestra al lectorcómo acceder a la parte de datos de un objeto DatagramPacket en caso de que lo necesite paracualquier otro propósito.

byte[] arrayDatos = paquete.getoata()for( int cnt=O; cnt < paquete.getLength(); cnt++ )

arrayDatos[cnt] = (byte) ;

A partir de este punto, se asume que habrá una respuesta del servidor, así que se invoca elmétodo receive() sobre el mismo objeto DatagramSocket que se ha utilizado para enviar elmensaje original al servidor. Esto bloquea la tarea, quedando a la espera de respuesta. Aunque nose ha indicado en ningún sitio, es posible utilizar el método setTimeout() para indicar la cantidadde tiempo que el método receiveO estará a la espera y bloqueando, lo cual permite colocar unaprotección al programa para que no se quede colgado esperando una respuesta que no llegue jamás.

socketDgrama.receive( paquete );

Y el resto del código del ejemplo es la presentación en pantalla del mensaje recibido delservidor, que debe coincidir con el enviado, y el código de manejo de excepciones.

Servidor UDP

Page 103: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 103/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 98 -

En el ejemplo javal7l3.java se utiliza como base el ejemplo javal7O9.java, para actualizarlo yhacer que soporte el protocolo UDP. Además, esta aplicación se completa con el ejemplo javal7l4. java, que es un programa que permite comprobar su funcionamiento, constituyendo laparte cliente del servidor que se implementa.

Como el programa es una actualización del ejemplo  j aval7O9 .  java, el lector deberá tener encuenta las mismas advertencias que se realizaban al respecto de ese ejemplo, en lo que se refiereal agente de seguridad, en caso de que decida utilizar el ejemplo para sus propios propósitos.Aquí solamente se muestra como ilustración de lo que se puede hacer, no para que se haga usode él para cualquier otro menester.

En el ejemplo se implementan tres servidores. Uno de ellos es un servidor  Eco UDP

implementado a través de una tarea que monitoriza un DatagramSocket sobre el puerto 7. Esteservidor devuelve el array de bytes que llegue en cada datagrama que reciba, enviando esos datosde regreso al cliente que haya originado el mensaje.

El segundo servidor es un servidor Eco TCP implementado a través de una tarea que monitorizaun ServerSocket sobre el puerto 7. Este servidor también devuelve los datos que recibe al clienteque haya realizado la conexión.

El tercer servidor es un servidor HTTP muy simple implementado a través de una tarea TCP quemonitoriza el puerto 80. Este servidor solamente responde al comando GET que se envíe desdeun navegador, devolviendo un archivo como un stream de bytes. La inclusión de estos tres tiposde servidores es para mostrar al lector la forma en que se pueden utilizar las tareas para darservicio a múltiples puertos, haciendo además una mezcla de protocolos TCP y UDP.

La parte del servidor HTTP se puede comprobar a través de un navegador indicando local hostcomo nombre del servidor, y los otros servidores se pueden chequear mediante el ejemplo javal7l4 .  java, pensado específicamente para probar los servidores Eco instalados en la propiamáquina en que se ejecuten cliente y servidor.

El código completo del ejemplo es el que se muestra a continuación.

import java.net.*;import java.io.*;import java.util.*;

public class java1713 {public static void main( String[] args ) {

// Se instancia el controlador de seguridad propio nuestroSystem.setSecurityManager( new MiSecurityManager() );// Se instancia un objeto servidor para escuchar el puerto 80ServidorHttp servidorHttp = new ServidorHttp();// Se instancia un objeto servidor para escuchar el puerto 7ServidorEco servidorEcho = new ServidorEco();// Se instancia un objeto servidor UDP para escuchar el puerto 7

Page 104: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 104/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 99 -

ServidorEcoUdp servidorEchoUdp = new ServidorEcoUdp();}

}

 // Esta clase se utiliza para instanciar un controlador de seguridad que // solamente permita descargar los ficheros que se encuentren en el // directorio actual o en cualquier subdirectorio de ese directorio. // Evidentemente, no instalar este servidor en una red, sin antes haber // hecho cambios para que el control sea más exhaustivo, porque aquí // se ha dejado muy abierto, ya que solamente se pretende utilizar para // pruebasclass MiSecurityManager extends SecurityManager {

// Este método sobreescrito es el que controla que el servidor solamente// permita descargar los ficheros del directorio actual y sus ramas,// es decir, que no permite navegar hacia arriba en el árbol, ni// permite la descarga de una dirección absoluta, pero tiene// muchos agujeros de seguridad, así que no debe utilizarse a no ser// que se complete adecuadamente, y además se implemente la respuesta// que se va a dar en los demás métodos del controlador de Seguridadpublic void checkRead( String str ) {if( new File(str).isAbsolute() || (str.indexOf("..") != -1 ) )

throw new SecurityException( "\n"+str+": Acceso denegado.");}

// Ahora se sobreescriben los demás métodos, que es lo que hace que el// tema de seguridad quede totalmente abierto.public void checkAccept( String s,int i ){}public void checkAccess( Thread t ){}public void checkAccess( ThreadGroup g ){}public void checkAwtEventQueueAccess(){}public void checkConnect( String s,int i ){}public void checkConnect( String s,int i,Object o ){}public void checkCreateClassLoader(){}public void checkDelete( String s ){}public void checkExec( String s ){}public void checkExit( int i ){}public void checkLink( String s ){}public void checkListen( int i ){}public void checkMemberAccess( Class c,int i ){}public void checkMulticast( InetAddress a ){}public void checkPackageAccess( String s ){}public void checkPackageDefinition( String s ){}public void checkPrintJobAccess(){}public void checkPropertiesAccess(){}public void checkPropertyAccess( String s ){}public void checkRead( FileDescriptor f ){}

Page 105: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 105/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 100 -

// public void checkRead( String s ){} // Este es el único sobreescritopublic void checkRead( String s,Object o ){}public void checkSecurityAccess( String s ){}public void checkSetFactory(){}public void checkSystemClipboardAccess(){}

public boolean checkTopLevelWindow( Object o ) {return true;}

public void checkWrite( FileDescriptor f ){}public void checkWrite( String s ){}}

 // Esta es la clase que se utiliza para instanciar un hilo de ejecución // para el servidor Udp que se encarga de escuchar el puerto 7, que es // el definido como estándar para el protocolo de "echo"class ServidorEcoUdp extends Thread {// ConstructorServidorEcoUdp() {// Arrancamos el hilo e invocamos al método run() para que empiece// a correrstart();}

public void run() {try {// Se instancia un objeto sobre el puerto 7DatagramSocket socketDgrama = new DatagramSocket( 7 );System.out.println( "Servidor Udp escuchando el 7" );// Entramos en bucle infinito ecuchando el puerto. Cuando se// produce una llamada, se lanza un hilo de ejecución de// ConexionEchoUdp para atenderlawhile( true ) {

// Limitamos la cadena de eco a 1024 bytesDatagramPacket paquete = new DatagramPacket( new byte[1024],1024 );// Nos quedamos parados en el receive(), y devolvemos un socket// cuando se recibe la llamada. Este socket es el que se pasa// como parámetro al nuevo hilo de ejecución que se crreasocketDgrama.receive( paquete );new ConexionEcoUdp( paquete );

}} catch( IOException e ) {e.printStackTrace();}

}}

 // Esta clase se utiliza la lanzar un hilo de ejecución que atienda

Page 106: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 106/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 101 -

 // la llamada recibida a través del puerto 7, el puerto de ecoclass ConexionEcoUdp extends Thread {

DatagramPacket paquete;

// Constructor

ConexionEcoUdp( DatagramPacket paquete ) {System.out.println( "Recibida una llamada en el puerto 7" );this.paquete = paquete;// Trabajamos por debajo de la prioridad de los otros puertossetPriority( NORM_PRIORITY-1 );// Se arranca el hilo y se pone a correrstart();}

public void run() {System.out.println( "Lanzado el hilo UDP de atencion del puerto 7" );

// Se crea el paquete de eco basándonos en los datos del paquete// que se ha recibido como parámetroDatagramPacket paqueteEnvio = new DatagramPacket(paquete.getData(),paquete.getLength(),paquete.getAddress(),paquete.getPort() );

// Declaramos el socket datagramaDatagramSocket socketDgrama = null;

try {// Abrimos un socket datagramasocketDgrama = new DatagramSocket();// Se utiliza el nuevo socket datagrama para enviar el mensaje// y cerrar el socketsocketDgrama.send( paqueteEnvio );socketDgrama.close();System.out.println("Socket UDP cerrado." );

}catch( UnknownHostException e ) {socketDgrama.close();System.out.println("Socket UDP cerrado." );e.printStackTrace();

}catch( SocketException e ) {socketDgrama.close();System.out.println("Socket UDP cerrado." );e.printStackTrace();

}catch( IOException e ) {socketDgrama.close();System.out.println("Socket UDP cerrado." );e.printStackTrace();}

}

Page 107: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 107/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 102 -

}

 // Esta es la clase que se utiliza para instanciar un hilo de ejecución // para el servidor que se encarga de escuchar el puerto 7, que es el

 // definido como estándar para el protocolo de "echo"class ServidorEco extends Thread {// ConstructorServidorEco() {// Arrancamos el hilo e invocamos al método run() para que empiece// a correrstart();}

public void run() {try {// Se instancia un objeto sobre el puerto 7ServerSocket socket = new ServerSocket( 7 );System.out.println( "Servidor escuchando el 7" );// Entramos en bucle infinito ecuchando el puerto. Cuando se// produce una llamada, se lanza un hilo de ejecución de// ConexionEcho para atenderlawhile( true )

// Nos quedamos parados en el accept(), y devolvemos un socket// cuando se recibe la llamada. Este socket es el que se pasa// como parámetro al nuevo hilo de ejecución que se creanew ConexionEcho( socket.accept() );

} catch( IOException e ) {e.printStackTrace();}

}}

 // Esta clase se utiliza la lanzar un hilo de ejecución que atienda // la llamada recibida a través del puerto 7, el puerto de ecoclass ConexionEcho extends Thread {Socket socket;

// ConstructorConexionEcho( Socket socket ) {

System.out.println( "Recibida una llamada en el puerto 7" );this.socket = socket;// Trabajamos por debajo de la prioridad de los otros puertossetPriority( NORM_PRIORITY-1 );// Se arranca el hilo y se pone a correrstart();}

Page 108: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 108/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 103 -

public void run() {System.out.println( "Lanzado el hilo de atencion del puerto 7" );BufferedReader entrada = null;PrintWriter salida = null;

try {// Conseguimos un canal de entrada desde el socketentrada = new BufferedReader( new InputStreamReader(

socket.getInputStream() ) );// Conseguimos un canal de salida hacia el socket. El canal es// con liberación automática (autoflush)salida = new PrintWriter( new OutputStreamWriter(socket.getOutputStream()),true );

// Recogemos la cadena que llegue al puerto y la devolvemos en// el mismo instanteString cadena = entrada.readLine();salida.println( cadena );System.out.println( "Recibido: "+cadena );socket.close();System.out.println( "Socket cerrado" );

} catch( IOException e ) {e.printStackTrace();}

}}

 // Esta es la clase que se utiliza para instanciar un hilo de ejecución // para el servidor que se encarga de escuchar el puerto 80, que es el // definido como estándar para el protocolo de "http"class ServidorHttp extends Thread {// ConstructorServidorHttp() {// Arrancamos el hilo e invocamos al método run() para que empiece// a correrstart();}

public void run(){try {// Se instancia un objeto sobre el puerto 80ServerSocket socket = new ServerSocket( 80 );System.out.println( "Servidor escuchando el puerto 80" );// Entramos en bucle infinito ecuchando el puerto. Cuando se

Page 109: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 109/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 104 -

// produce una llamada, se lanza un hilo de ejecución de// ConexionHttp para atenderlawhile( true )

// Nos quedamos parados en el accept(), y devolvemos un socket// cuando se recibe la llamada. Este socket es el que se pasa

// como parámetro al nuevo hilo de ejecución que se creanew ConexionHttp( socket.accept() );} catch( IOException e ) {e.printStackTrace();}

}}

 // Esta clase se utiliza la lanzar un hilo de ejecución que atienda // la llamada recibida a través del puerto 80, el puerto de httpclass ConexionHttp extends Thread {Socket socket;BufferedReader entrada = null;PrintWriter salida = null;DataOutputStream pagina = null;

// ConstructorConexionHttp( Socket socket ) {System.out.println( "Recibida una llamada en el puerto 80" );this.socket = socket;// Trabajamos por debajo de la prioridad de los otros puertossetPriority( NORM_PRIORITY-1 );// Se arranca el hilo y se pone a correrstart();}

public void run() {System.out.println( "Lanzado el hilo de atencion al puerto 80" );try{// Conseguimos un canal de entrada desde el socketentrada = new BufferedReader( new InputStreamReader(

socket.getInputStream() ) );

// Conseguimos un canal de salida hacia el socket. El canal es// con liberación automática (autoflush)salida = new PrintWriter( new OutputStreamWriter(socket.getOutputStream() ),true );

// Ahora conseguimos un canal de salida para enviar el contenido// del ficero que haya solicitado el usuariopagina = new DataOutputStream( socket.getOutputStream() );

Page 110: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 110/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 105 -

// Recogemos la cadena que llegue al puertoString peticion = entrada.readLine();System.out.println( "Recibida peticion: "+peticion );// Analizamos esa petición e intentamos responder. Solamente se

// contesta a las peticiones GET, cualquier otra no tiene// respuesta algunaStringTokenizer st = new StringTokenizer( peticion );if( ( st.countTokens() >= 2 )

&& st.nextToken().equals("GET") ) {System.out.println( "Primer tag GET, correcto" );if( (peticion = st.nextToken()).startsWith("/") ) {

System.out.println("Siguiente toque que empieza por /, se le quita" );

peticion = peticion.substring( 1 );}

if( peticion.endsWith("/") || peticion.equals("") ) {System.out.println( "Peticion terminada en / o blanco, "+"se le incorpora: index.html" );

peticion = peticion + "index.html";System.out.println( "Peticion modificada: "+peticion );}

System.out.println( "Intento de desacarga de: "+peticion );FileInputStream fichero = new FileInputStream( peticion );// Se instancia un array de bytes igual al número de bytes que// se pueden leer del canal de entrada sin bloquearlo.// Y luego se rellena con los datosbyte[] datos = new byte[fichero.available()];fichero.read( datos );

// Se envía el array de datos al clientepagina.write( datos );pagina.flush();

} else// La petición que se ha hecho no es un GETsalida.println( "<HTML><BODY><P>400 Petici&oactute;n "+"Err&oacute;nea<P></BODY></HTML>" );

socket.close();System.out.println( "Socket cerrado" );

}catch( FileNotFoundException e ) {salida.println("<HTML><BODY><P>404 No Encontrado<P></BODY></HTML>" );

try {socket.close();System.out.println( "Socket cerrado" );

}catch( IOException evt ) {

Page 111: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 111/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 106 -

evt.printStackTrace();}

}catch( SecurityException e ){e.printStackTrace();salida.println(

"<HTML><BODY><P>403 Acceso denegado<P></BODY></HTML>" );salida.println( e );try {

socket.close();System.out.println( "Socket cerrado" );

}catch( IOException evt ) {evt.printStackTrace();}

}catch( IOException e ) {e.printStackTrace();try {

socket.close();System.out.println( "Socket cerrado" );

}catch( IOException evt ) {System.out.println(evt);

}}

}}

Ahora llega el turno a la revisión de las partes más interesantes del ejemplo, que en este caso selimitan a las líneas de código que se han incorporado nuevas al ejemplo javal7O9. java, paraimplementar el servidor  Eco a través de UDP. Cada uno de los servidores se implementamediante tareas, así que los tres servidores actúan concurrente y asíncronamente en diferentestareas. Además, siempre que un objeto servidor necesite proporcionar un servicio a un cliente,lanzará otra tarea a una prioridad más baja, para dar servicio a ese cliente, siguiendo a la escuchade otros posibles clientes que requieran su atención.

Dejando a un lado la parte ya vista en el ejemplo base, el primer trozo de código en que hay quedetenerse es la implementación del servidor UDP.

ServidorEcoudp servidorEchoudp = new ServidorEcoudp();

Lo siguiente es el propio constructor de esa clase que se utiliza para instanciar el objeto que va aproporcionar los servicios UDP de Eco a através del puerto 7. Este constructor, como se muestra,se limita a invocar a su propio método start() para levantarse y empezar a correr. El métodostart() invoca al método run().

Servi dorEcoudp() {startQ}

Page 112: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 112/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 107 -

La siguiente línea de código muesta la instanciación del objeto DatagramSocket sobre el puerto7, que se encuentra dentro de la acción del método runü, es decir, es el comienzo de la tarea.

Datagramsocket socketDgrama = new Datagramsocket ( 7 );

Solamente queda el corazón de la tarea, que está formado por el bucle infinito que instancia enprimer lugar un objeto DatagramPacket vacío, para invocar al método receive() sobre elDatagramSocket, pasándole el objeto DatagramPacket como parámetro.

Observe el lector que se ha limitado a 1024 byes los datos de entrada, por lo que no va a poderrecibir mensajes de longitud mayor que ésa. Si es necesaria una longitud mayor, es suficientecon indicar el valor al constructor.

while( true )DatagramPacket paquete = new DatagramPacket( new byte[1024],1024 );socketDgrama.receive( paquete );new conexionEcoudp( paquete );}

El método receive() bloquea la tarea y se queda a la espera de que llegue un paquete datagrama.Cuando esto suceda, se rellenará el objeto DatagramPacket vacío y se instanciará una nuevatarea de tipo ConexionEcoUdp para atender la petición del cliente, pasándole también comoparámetro el objeto DatagramPacket, pero en este caso relleno con los datos recibidos en elpaquete enviado por el cliente.

Una vez satisfecho el requerimiento del cliente, la tarea vuelve al inicio del bucle, instanciandoun nuevo objeto DatagramPacket vacío y bloqueando la tarea a la espera de la llegada del

siguiente paquete datagrama.

Ese objeto es guardado por el constructor para usarlo más tarde, a continuación fija la prioridadpor debajo del nivel de las tareas que están monitorizando los puertos, de forma que la actividadde la tarea correspondiente a ConexionEchoUdp no interfiera con otras tareas que puedanlanzarse para atender a las peticiones recibidas por esos puertos. Y, por fin, se invoca el métodostartO, que a su vez invoca al método run() y la tarea se pone en marcha. Todo esto es lo que sehace en el código que se muestra.

conexionEchoudp( DatagramPacket paquete ) {System.out.pnintln( Recibida una llamada en el puerto 7 );this.paquete = paquete;// irabajamos por debajo de la prioridad de los otros puertossetPriorlty( NORM_PRIORITY-1 );// Se arranca el hilo y se pone a correrstart()

}

Page 113: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 113/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 108 -

La misión encargada a esta tarea se limita al envío de una copia de los datos que le llegan en elpaquete recibido, de vuelta al cliente que se lo ha enviado. La dirección y puerto de este clienteestán incluidos en el paquete, donde el DatagramSocket del cliente los colocó antes de enviarlo.

El objeto DatagramPacket es casi directamente enviable de vuelta al cliente, pero para mostrarel uso de algunos de los métodos de la clase DatagramPacket, se construye un nuevo objetopara enviar de regreso al cliente, lo cual suele suceder más a menudo en servidores que realicentareas más complejas. El código siguiente es el que permite extraer la información necesaria paragenerar un nuevo objeto.

El último código en que merece la pena detenerse en este ejemplo es la instanciación del nuevoobjeto DatagramSocket que se va a utilizar para enviar el nuevo objeto DatagramPacket creado,invocando al método send() del socket, de regreso al cliente. El resto del código es el cierre delsocket y el tratamiento de las excepciones.

socketDgrama = new DatagramSocket(); // se utiliza el nuevo socket datagrama para enviar el mensaje // y cerrar el socketsocketDgrama.send( paqueteEnvio );socketDgrama.close ();

Page 114: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 114/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 109 -

CAPITULO 3

Page 115: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 115/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 110 -

Conclusiones:

Después de conocer tanto el funcionamiento del PLC, como de los Sockets, hemos

dedicado tiempo a buscar la forma de tener comunicación en modo freeport. Para lograr esto

hemos revisado varios ejemplos en los que se puede trabajar en modo freeport, tanto para

transmisión como para recepción, logrando tener uno que nos permite transmitir y recibir en un

mismo programa, a través de una rutina de interrupción, y trabajando con los bytes de marcas:

SM0.1, SMB30; que son necesarios para configurar el puerto, y el SMB2, que contiene todos los

bits recibidos, y nos permite hacer una comparación, entre lo que recibimos por el puerto y lo

que queremos que encuentre.

Las marcas especiales (SM) ofrecen una serie de funciones de estado y control. Sirven

para intercambiar informaciones entre la CPU y el programa, pudiéndose utilizar en formato debits, bytes, palabras o palabras dobles. SMB0: SMB0 contiene ocho bits de estado que la CPU

S7-200 actualiza al final de cada ciclo.

BBiittss ddeemmaarrccaass

Descripción

SM0.0 Este bit siempre está activado.

SM0.1 Este bit se activa en el primer ciclo. Se utiliza p.ej. para llamar una subrutina deinicialización.

SM0.2 Este bit se activa durante un ciclo si se pierden los datos remanentes. Se puedeutilizar como marca de error o como mecanismo para llamar a una secuencia especialde arranque.

SM0.3 Este bit se activa durante un ciclo cuando se pasa a modo RUN tras conectarse laalimentación. Se puede utilizar durante el tiempo de calentamiento de la instalaciónantes del funcionamiento normal.

SM0.4 Este bit ofrece un reloj que está activado durante 30 segundos y desactivado durante30 segundos, siendo el tiempo de ciclo de 1 minuto. Ofrece un retardo fácil de utilizaro un tiempo de reloj de 1 minuto.

SM0.5 Este bit ofrece un reloj que está activado durante 0,5 segundos y desactivado durante0,5 segundos, siendo el tiempo de ciclo de 1 segundo. Ofrece un reloj que está

activado durante 0,5 segundos y desactivado durante 0,5 segundos, siendo el tiempode ciclo de 1 minuto.

SM0.6 Este bit es un reloj de ciclo que está activado en un ciclo y desactivado en el ciclosiguiente. Se puede utilizar como entrada de conteo de ciclos.

SM0.7 Este bit indica la posición del selector de modos de operación (OFF = TERM; ON =RUN). Si el bit se utiliza para habilitar el modo Freeport cuando el selector esté enposición RUN, se podrá habilitar la comunicación normal con la unidad de

Page 116: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 116/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 111 -

programación cambiando el selector a TERM.

SMB2: Es el búfer de recepción de caracteres en modo Freeport. Cada carácter recibido en dicho

modo se deposita en este búfer, accesible fácilmente desde el programa KOP

BByyttee ddeemmaarrccaass

DDeessccrriippcciióónn

SMB2 Este byte contiene todos los caracteres recibidos de los interfaces 0 ó 1en modo Freeport

SMB30 Controla la comunicación Freeport SMB30 son marcas de lectura y escritura. Dichos

bytes configuran la comunicación Freeport en los respectivos interfaces y permiten seleccionar si

se debe asistir el modo Freeport o el protocolo de sistema.

IInntteerrf f aaccee 00 Descripción

Formato de SMB30 MSB LSB7 0 Byte de control del modo Freeportp p d b b b m m

SM30.6 y SM30.7 pp Selección de paridad00 = sin paridad01 = paridad par10 = sin paridad11= paridad impar

SM30.5 d Bits por carácter0 = 8 bits por carácter1 = 7 bits por carácter

SM30.2 a SM30.4 bbb Velocidad de transferencia000 = 38.400 bits/s (para la CPU 212: = 9.200 bits/s)001 = 19.200 bits/s010 = 9.600 bits/s011 = 4.800 bits/s100 = 2.400 bits/s101 = 1.200bits/s

110 = 600 bits/s111 = 300 bits/s

SM30.0 y SM30.1 mm Selección de protocolo00 = Protocolo de interface punto a punto PPI/modo esclavo)01 = Protocolo Freeport10 = PPI/modo maestro11 = Reservado (estándar: PI/modo esclavo)

Realizamos un circuito de prueba que se muestra a continuación:

Page 117: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 117/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 112 -

MAIN (PROGRAMA PRINCIPAL)NETWORK 1Activa el modo freeport y define el área de memoria a transmitir

Primer_ciclo corresponde a la marca SM0.1Config_0 corresponde a la marca SMB30

Se transfiere el binario 1001 al byte de marcasSMB30, que es el registro de control delmodo freeport, esta combinación binaria

configura el puerto de comunicación a9600 bits, 8 bits por carácter y sin paridad

Transferir la constante 1 al byte VB100de la memoria de variables para indicar

la longitud del mensaje(de un carácter ASCII).

Transferir el valor hexadecimal 41 al byte VB101de la memoria de variables para indicar que

el carácter ASCII es "A" (en el código ASCII“A” = "41" en la notación hexadecimal).

NETWORK 2Asociar y habilitar rutina de interrupción para recibir

Cargar marca especial SM0.1correspondiente a Pprimer_ciclo

para procesar este segmento sólo enel primer ciclo.

Asociar el evento de interrupción 8a la rutina de interrupción INT_0

NETWORK 3Transmitir

Cargar la entrada E0.1.Si hay un flanco positivo

Config_0

Mov_B

EN ENO

IN OUT9

Mov_B

EN ENO

IN OUT1

Mov_B

EN ENO

IN OUT16#41

VB100

VB101

Primer _ ciclo

INT_0

ATCH

8

( ENI )

EN ENO

IN

Primer _ ciclo

EVNT

E0.1

EN ENO

TBLVB100

PORT

P

XMT

0

Page 118: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 118/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 113 -

en la entrada, transmitir por elpuerto 0 el búfer de datos

que comienza en el byte VB100de la memoria de variables.

NETWORK 4

Fin del programa principal

RUTINA DE INTERRUPCIÓN

NETWORK 1Comienza rutina de interrupción

NETWORK 2Confirmar carácter recibido

Caract_rec corresponde al byte de marcas SMB2.Carácter_A corresponde a la salida Q0.1.

El byte de marcas SMB2 contiene cada carácter recibido del

puertos 0 durante la comunicación Freeport. Compara elcarácter en SMB2 con el valor hexadecimal 41 ("A" en código

ASCII = "41" en la notación hexadecimal). Si elcarácter contenido en SMB2 es "A", se activa la salida Q0.1.

NETWORK 3Fin de la rutina de interrupción INT0

==B

Caract_rec

16#41( S )Carácter_A

1

Page 119: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 119/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

- 114 -

Este circuito fue probado en el laboratorio, tomando como receptor el hyperterminal,

previamente configurado a 9600 bits/s 8 bits de datos y sin paridad (al transmitir por el PLC) , y

como transmisor (al recibir por el PLC).

De esta forma teniendo ya la comunicación entre el PLC y la máquina, Se puede realizar

la programación de la interfaz gráfica, la cual puede ser diseñada en diversos programas, como

Java, y después intereactuar con los sockets antes vistos, para lograr una perfecta comunicación

entre el software, y el PLC.

Pensamos que el programa deberá tener una tabla mayor a la del ejercicio realizado, la cual

dependerá de la cantidad de puertas que se deseen monitorear.

Cuando una de las puerta se abra, se observara en la máquina como es que se abre la puerta, y

además se indicara cual es la que se abrió, esta misma puerta podrá ser cerrada, vía remota,

desde donde se realiza el monitoreo, al transmitir al PLC la indicación de cierre de puerta, por 

medio de teclado.

Durante la realización de este proyecto, nos enfrentamos a varios retos, debido a que las ideas

no eran muy claras en un principio, pero poco a poco fuimos dándonos cuenta de la importancia

de un sistema automatizado de control como lo es el PLC, algo que nos pareció sumamente

importante y eficiente.

Desafortunadamente, la ultima parte falta por concluirla, esperando que con la información

obtenida y los ejemplos propuestos, sean de gran utilidad para quien este interesado en continuar

con el proyecto.

Estamos seguros que habrá muchas personas interesadas en él, Les deseamos toda la Suerte para

que en un futuro próximo logren terminar con un Proyecto Tan importante.

Page 120: Automatas Plc Grafcet

5/17/2018 Automatas Plc Grafcet - slidepdf.com

http://slidepdf.com/reader/full/automatas-plc-grafcet 120/120

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA CASA ABIERTA AL TIEMPO

115

De la misma forma esperamos que el material aportado sea de utilidad para el desarrollo de otros

Proyectos en la utilización de PLC.

BIBLIOGRAFÍA

Agustín Froufe. “Java 2 Manual de usuario y tutorial”, Alfaomega, 2ª Edición, 2002, cap, 17.

Autómatas Programables, ISA-UMH, TDOC 99

Simens, Simatic, “Manual del Usuario Visualizador de textos TD 200”K, 2000

www.iespana.es/automatizacion

www.plcs.net

www.olmo.pntic.mec.es/jmarti50/automatizacion

www.siemens.com.mx