apéndice b códigos de programación

50
Ap´ endice B odigos de programaci´ on B.1. odigo del PLC La configuraci´ on y programaci´ on del PLC se ha realizado mediante el software suministra- do por Modicon Telemecanique. El programa crea 5 archivos de extensi´ on, .FEF, .SCY, .ST, .TAB y .PL7, que contienen la configuraci´ on del PLC y el programa de ejecuci´ on. Dado que la informaci´ on que contin´ uen dichos archivos resulta redundante se ha cre´ ıdo oportuno incluir tan solo los fragmentos del programa y las variables del PLC. Para mayor informaci´ on se incluyen todos los archivos en el CD del proyecto. B.1.1. Programa del PLC (*Programa realizado por Daniel Gasa Fonollosa*) (* y Ignacio Garrido Gir´ on*) (*Las variables llamadas Marca a lo largo del *) (*programa han sido utilizadas como etodo de depuraci´ on *) (*para saber en que parte la*) (*aplicaci´ on dejaba de funcionar*) (*Inicializaci´ on de tablas y variables!! En este*) (*bloque se realiza la inicilizaci´ on de todos las *) (*variables que participan en*) (*la aplicaci´ on. Este bloque est´ a controlado por*) (*un par de variables seg´ un el estado de estas se*) (*podr´ a acceder o no. La variables son Ini*) (*y Play. Siempre la primera vez que se pone en*) (*marcha el PLC se entra en este bloque, por lo tanto*)

Upload: vuongduong

Post on 06-Jan-2017

229 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Apéndice B Códigos de programación

Apendice B

Codigos de programacion

B.1. Codigo del PLC

La configuracion y programacion del PLC se ha realizado mediante el software suministra-

do por Modicon Telemecanique. El programa crea 5 archivos de extension, .FEF, .SCY,

.ST, .TAB y .PL7, que contienen la configuracion del PLC y el programa de ejecucion.

Dado que la informacion que continuen dichos archivos resulta redundante se ha creıdo

oportuno incluir tan solo los fragmentos del programa y las variables del PLC. Para mayor

informacion se incluyen todos los archivos en el CD del proyecto.

B.1.1. Programa del PLC

(*Programa realizado por Daniel Gasa Fonollosa*)

(* y Ignacio Garrido Giron*)

(*Las variables llamadas Marca a lo largo del *)

(*programa han sido utilizadas como metodo de depuracion *)

(*para saber en que parte la*)

(*aplicacion dejaba de funcionar*)

(*Inicializacion de tablas y variables!! En este*)

(*bloque se realiza la inicilizacion de todos las *)

(*variables que participan en*)

(*la aplicacion. Este bloque esta controlado por*)

(*un par de variables segun el estado de estas se*)

(*podra acceder o no. La variables son Ini*)

(*y Play. Siempre la primera vez que se pone en*)

(*marcha el PLC se entra en este bloque, por lo tanto*)

Page 2: Apéndice B Códigos de programación

102 Maqueta de ascensor para la realizacion de practicas por Internet

(* toda la informacion referente*)

(*a otros grafos queda borrada automaticamente.*)

(*Posteriormente el estudiante tendra la capacidad de*)

(*modificar estas dos variables para*)

(*poder volver a inicializar el PLC. Recordar que*)

(*este proceso es como la simulacion de la Marcha y*)

(*Paro del PLC.*)

SET %M10 ;

IF NOT %M2 THEN (*Inicializacion de variables y

tablas solo si Ini no esta activo (no inicio)*)

%MW500:=0;

%MW507:=0;

%MW501:=0;

%MW502:=0;

%MW505:=0;

%MW0:160 :=0 ;

%MW160:160 :=0 ;

%MW320:160 :=0 ;

%MW480:20 :=0 ;

RESET %M4;

END IF ;

RESET %M10 ;

SET %M11 ;

(*En esta rutina se mantiene la variable*)

(*Ini que impide la Inicializacion mientras *)

(*este la variable play activa*)

IF %M0 THEN

SET %M2;

ELSE

RESET %M2;

END IF ;

RESET %M11 ;

(*Descodificador de entradas fısicas!!En este*)

(*bloque se procesa la entrada fısica que esta *)

(*cableada en el PLC.*)

(*En este proyecto solo se han cableado variables*)

(* digitales por lo tanto no se tendra que *)

(*diferenciar en la entrada*)

(*las variables digitales de las analogicas. *)

Page 3: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 103

(*El proceso es el siguiente: se recogen todos los*)

(*valores en el modulo de*)

(*entradas y todos esos bits se transformana un *)

(*numero decimal que sera procesado por la aplicacion*)

(*para devolver la salida*)

(*y el estado siguiente*)

SET %M12 ;

(*se graba cada entrada fısica a cada bit de *)

(*una palabra de 16 bits que posteriormente se*)

(*utilizara como valor decimal*)

%MW503:X0:=%I1 . 0 ;

%MW503:X1:=%I1 . 1 ;

%MW503:X2:=%I1 . 2 ;

%MW503:X3:=%I1 . 3 ;

%MW503:X4:=%I1 . 4 ;

%MW503:X5:=%I1 . 5 ;

%MW503:X6:=%I1 . 6 ;

%MW503:X7:=%I1 . 7 ;

%MW503:X8:=%I1 . 8 ;

%MW503:X9:=%I1 . 9 ;

%MW503: X10:=%I1 . 1 0 ;

%MW503: X11:=%I1 . 1 1 ;

%MW503: X12:=%MW508:X0 ;

%MW503: X13:=%MW509:X0 ;

%MW503: X14:=%MW510:X0 ;

%MW503: X15:=%MW511:X0 ;

RESET %M12 ;

SET %M13 ;

(*Rutina que identifica un cambio de*)

(*valor en el modulo de entrdas*)

IF %MW506<>%MW503 THEN

%MW506:=%MW503;

%MW507:=0;

SET %M3;

END IF ;

RESET %M13 ;

Page 4: Apéndice B Códigos de programación

104 Maqueta de ascensor para la realizacion de practicas por Internet

(*Busqueda de la primera tabla ’transiciones’!!*)

(*En este bloque hay anidada otra subfuncion SR0*)

(*(el codigo se presenta mas adelante)*)

(*Este bloque realiza la busqueda de la transicion*)

(*que coincida con el estado real, las variables*)

(*de entrada de la busqueda son*)

(*la codificacion de la entrada fısica y la*)

(*variable EstadoActual (donde se guarda el estado*)

(*actual en cada momento), con estas dos*)

(*de entrada se obtendran dos variables de salida*)

(*, el EstadoSiguiente y la Salida*)

(*Este bloque solo se ejecutara cuando en el bloque*)

(*anterior se detecte un cambio en las entradas*)

(*fısicas. Este cambio se reflejara*)

(*en la activacion o desactivacion de la variable*)

(*’Confirmacio’*)

SET %M14 ;

(*Rutina de busqeda dentro de las tablas

introducidas por el estudiante*)

IF %M3 THEN

WHILE NOT %M4 DO

%MW502:=FIND EQWP( %MW160:160,%MW506,%MW507) ;

%MW507:= %MW502;

IF %MW502=−1 THEN

SET %M4;

ELSE

SR0 ;

END IF ;

RESET %M19 ;

RESET %M14 ;

END WHILE;

RESET %M4;

SET %M15 ;

RESET %M3;

END IF ;

RESET %M15 ;

(*En este bloque se busca dentro de la tabla*)

(*de salidas la salida que corresponde al*)

(*estado actual*)

Page 5: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 105

SET %M16 ;

%MW501:=%MW480[ %MW500 ] ;

RESET %M16 ;

(*Codificacion de las Salidas fısicas!!*)

(*Este ultimo bloque serıa el antagonico del*)

(*segundo bloque. En este bloque se realiza*)

(*la codificacion a binario de un numero*)

(*decimal para que las salidas binarias puedan*)

(*representar la salida correspondiente*)

SET %M17 ;

(*Igualacion de una salida fısica a una*)

(*variable de la aplicacion (bit)*)

%Q2.0:= %MW501:X0 ;

%Q2.1:= %MW501:X1 ;

%Q2.2:= %MW501:X2 ;

%Q2.3:= %MW501:X3 ;

%Q2.4:= %MW501:X4 ;

%Q2.5:= %MW501:X5 ;

%Q2.6:= %MW501:X6 ;

%Q2.7:= %MW501:X7 ;

%Q2.8:= %MW501:X8 ;

%Q2.9:= %MW501:X9 ;

%Q2.10:=%MW501: X10 ;

%Q2.11:=%MW501: X11 ;

%Q2.12:=%MW501: X12 ;

%Q2.13:=%MW501: X13 ;

%Q2.14:=%MW501: X14 ;

%Q2.15:=%MW501: X15 ;

RESET %M17 ;

ENDPROGRAM

(*Subrutina Sr0 *)

PROGRAM

(*Comprobacion de Entrada y Estado Correcto!! *)

Page 6: Apéndice B Códigos de programación

106 Maqueta de ascensor para la realizacion de practicas por Internet

(*En esta subfuncion se analiza el valor de la *)

(*entrda y estado entrados por el usuario para

(*certificar que esta transicion existe en la *)

(*tabla suministrada*)

SET %M20 ;

IF %MW0[ %MW502]=%MW500 THEN

SET %M18 ;

%MW500:= %MW320[ %MW502 ] ;

%MW507:= %MW502+1;

RESET %M18 ;

SET %M19 ;

SET %M4;

RESET %M3;

RETURN;

ELSE

SET %M19 ;

%MW507:= %MW502+1;

RETURN;

END IF ;

RESET %M20 ;

RETURN;

ENDPROGRAM

Page 7: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 107

B.1.2. Listado de variables del PLC

(*El formato es: ’Nombre de Variable’ AT ’Direccion PLC’

: ’tipo de variable’*)

(*Tabla con las variables de ’EstadoActual’:

Solo se muestran las 5 primeras variables

de la tabla.*)

Estats AT %MW0 : WORD;

Estats1 AT %MW1 : WORD;

Estats2 AT %MW2 : WORD;

Estats3 AT %MW3 : WORD;

Estats4 AT %MW4 : WORD;

(*Tabla con las variables de ’Entradas’:

Solo se muestran las 5 primeras variables

de la tabla.*)

Entrades AT %MW160 : WORD;

Entrades1 AT %MW161 : WORD;

Entrades2 AT %MW162 : WORD;

Entrades3 AT %MW163 : WORD;

Entrades4 AT %MW164 : WORD;

(*Tabla con las variables de ’EstadoSiguiente’:

Solo se muestran las 5 primeras variables

de la tabla.*)

Esta t s s eguent s AT %MW320 : WORD;

Esta t s s eguent s1 AT %MW321 : WORD;

Esta t s s eguent s2 AT %MW322 : WORD;

Esta t s s eguent s3 AT %MW323 : WORD;

Esta t s s eguent s4 AT %MW324 : WORD;

(*Tabla con las variables de ’Salidas’:

Solo se muestran las 5 primeras variables

de la tabla.*)

So r t i d e s AT %MW480 : WORD;

So r t i d e s 1 AT %MW481 : WORD;

So r t i d e s 2 AT %MW482 : WORD;

Page 8: Apéndice B Códigos de programación

108 Maqueta de ascensor para la realizacion de practicas por Internet

So r t i d e s 3 AT %MW483 : WORD;

So r t i d e s 4 AT %MW484 : WORD;

(*Variables utilizdas por el PLC:*)

Esta tac tua l AT %MW500 : WORD;

So r t i daa c tua l AT %MW501 : WORD;

Index AT %MW502 : WORD;

Entradaseguent1 AT %MW503 : WORD;

Entradaseguent2 AT %MW504 : WORD;

Crc AT %MW505 : WORD;

Entradesac tua l s AT %MW506 : WORD;

Simllamada0 AT %MW508 : WORD;

Simllamada1 AT %MW509 : WORD;

Simllamada2 AT %MW510 : WORD;

Simllamada3 AT %MW511 : WORD;

Nuevoestado1 AT %MW0:X0 : BOOL;

Nuevoestrado2 AT %MW0:X1 : BOOL;

Play AT %M0 : EBOOL;

Paro AT %M1 : EBOOL;

I n i AT %M2 : EBOOL;

Conf irmacio AT %M3 : EBOOL;

END VAR

Page 9: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 109

B.2. Codigos de Java

El Applet que se ha creado y que realiza las funciones de envio, recepcion, visualizacion

y SCADA del sistema, se llama FinalApplet. Para realizar cada una de la funciones es-

pecificas, se han creado diferentes clases de Java que facilitan la comprension del codigo

y la programacion de la aplicacion. Aunque en el apendice B.3 se incluye toda la docu-

mentacion necesaria en formato HTML para la comprension de la estructura del Applet

y sus funciones, se ha creıdo oportuno incluir el codigo fuente y un pequeno esquema de

las diferentes clases. En el esquema tambien se representa la herencia de cada una de las

clases creadas.

class java.lang.Object

• class javax.swing.table.AbstractTableModel

◦ class DataModel1

◦ class DataModel2

◦ class DataModel3

◦ class DataModel4

◦ class DataModel5

class java.awt.Component

• class javax.swing.Container.JComponent

◦ class javax.swing.JPanel

� class PanelAscensor

• class java.awt.Panel

• class java.applet.Applet

◦ class javax.swing.JApplet

� class FinalApplet

class Estructura

class FinalApplet.AnadirSalidas actionPerformed

class FinalApplet.AnadirTransiciones actionPerformed

class FinalApplet.BorrarTabla actionPerformed

class FinalApplet.BorrarUnaTransicion actionPerformed

Page 10: Apéndice B Códigos de programación

110 Maqueta de ascensor para la realizacion de practicas por Internet

class FinalApplet.EnvioTablaPLC actionPerformed

class FinalApplet.LeerBoton actionPerformed

class FinalApplet.MostrarHTML actionPerformed

class FinalApplet.MyValueListener

class FinalApplet.RegistrarMarcas actionPerformed

class PanelAscensor.Cabina

class PanelAscensor.Leds

class PanelAscensor.Puertas

Para facilitar la comprension del codigo se han distribuido las distintas clases en distintos

capıtulos en funcion del archivo origen. Ası pues, en cada seccion se ha incluido el codigo de

un solo archivo. Tambien se han subrayado las palabras clave ası como todas las variables

de la clases. De este modo es mas sencillo hacer un seguimiento del codigo.

B.2.1. FinalApplet.java

import com . schne iderautomat ion . f a c t o r y c a s t . ∗ ;

import javax . swing . ∗ ;

import javax . swing . border . Border ;

import javax . swing . t ab l e . TableColumn ;

import java . awt . ∗ ;

import java . awt . event . ActionEvent ;

import java . awt . event . Act i onL i s t ene r ;

import java . beans . PropertyChangeEvent ;

import java . beans . PropertyChangeListener ;

import java . net .URL;

/**

* <p>Tıtulo: Maqueta de ascensor per a la realitzacion de

practicas por internet

</p>

* <p>Descripcion: Applet para interconectar a un

* usuario con un PLC. SCADA que ayuda a introducir

Page 11: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 111

* un diagrama de estados a un PLC y visualizar los

* resultados </p>

*

* @see Estructura

* @see DataModel1

* @see DataModel2

* @see DataModel3

* @see DataModel4

* @see DataModel5

* @see <a href="http://java.sun.com/j2se/1.4.2/docs/">

* J2SE Documentation</a>

* @see <a href="http://www.awl.com/cp/javaseries/jcl1_2.html">

* Reference: The Java Class Libraries (update file)</a>

* @see <a href="http://java.sun.com/api//"> Apis de Java</a>

*

* @since JDK 1.4

* @author Ignacio Garrido Giron

* @version 1.0 27.7.03

*/

public f ina l class FinalApplet

extends JApplet {

/**

* Varible que nos indica las transiciones que hemos

* a~nadido a las tablas.

* Se incrementa a cada transicion

*

* @see A~nadirTransiciones_actionPerformed

*/

private int count = 0 ;

/**

* Establece la conexion con el PLC mediante la

* direccion que se le suministra.

*

*@see com.schneiderautomation.factorycast.SetInt

*@see com.schneiderautomation.factorycast.GetInt

*@see com.schneiderautomation.factorycast.MonitorInt

*@see com.schneiderautomation.factorycast.SetBool

*/

private CommBean comm;

Page 12: Apéndice B Códigos de programación

112 Maqueta de ascensor para la realizacion de practicas por Internet

/**

* Envia los 500 valores reales al PLC en funcion

* del host obtenido en {@link #comm}, de la direccion,

* por ejemplo marca %MW203, de la cantidad de valores

* que queremos enviar y del tipo de valor.

*

*@see com.schneiderautomation.factorycast.SetInt

*@see com.schneiderautomation.factorycast.SetBool

*/

private f ina l Set Int [ ] s e t t e r = new Set Int [ 5 0 0 ] ;

/**

* Envia un Int al PLC para modificar una variable y

* simular una llamada a un nivel.

*

*@see com.schneiderautomation.factorycast.SetInt

*@see com.schneiderautomation.factorycast.SetBool

*/

private Set Int valorEnviado = new Set Int ( ) ;

/**

* Envia los valores booleanos al PLC en funcion

* del host obtenido en {@link #comm}, de la

* direccion, por ejemplo marca %M2, de la

* cantidad de valores que deseamos enviar y

* del tipo de valor.

*

* @see CommBean

* @see com.schneiderautomation.factorycast.SetInt

* @see com.schneiderautomation.factorycast.SetBool

*/

private SetBool i n i c i a l i z a r V a r i a b l e s = new SetBool ( ) ;

/**

* Lee los 500 valores reales del PLC en funcion

* del host obtenido en {@link #comm},de la direccion

* y de la cantidad de datos que queremos recibir.

*

* @see CommBean

* @see MonitorInt

*/

private f ina l GetInt [ ] g e t t e r = new GetInt [ 5 0 0 ] ;

/**

Page 13: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 113

* Establece un lectura en tiempo real de la variable

* que escojamos. A partir de la direccion de la variable

* en el PLC y del hot obtenido en {@link #comm}, nos avisa

* de cualquier cambio en las propiedades de los datos.

*

* @see com.schneiderautomation.factorycast.CommBean

*/

private MonitorInt monitor = new MonitorInt ( ) ;

/**

* Almacena los valores de las tablas de transicion en

* 3 columnas.

*

* @see Estructura

*

*/

private f ina l Estructura [ ] v a l o r e sT ran s i c i on e s =

new Estructura [ 1 6 0 ] ;

/**

* Almacena las marcas que estan associadas a cada

* posicion de las tablas de transicione.

*

* @see Estructura

*

*/

private f ina l Estructura [ ] marcasTrans ic iones =

new Estructura [ 1 6 0 ] ;

/**

* Almacena la marcas associadas a la tabla de las

* se~nales de salida.

*/

private f ina l int [ ] marcasSa l idas = new int [ 2 0 ] ;

/**

* Almacena los valores de la tabla de las

* se~nales de salida.

*/

private f ina l int [ ] v a l o r e s S a l i d a = new int [ 2 0 ] ;

/**

* Tabla de transiciones segun el modelo de

* tablas {@link DataModel1}.

Page 14: Apéndice B Códigos de programación

114 Maqueta de ascensor para la realizacion de practicas por Internet

*

* @see DataModel1

* @see JTable

*/

private f ina l JTable t ab l aTran s i c i one s1 =

new JTable (new DataModel1 ( ) ) ;

/**

* Tabla de transiciones segun el modelo de

* tablas {@link DataModel1}.

*

* @see DataModel1

* @see JTable

*/

private f ina l JTable t ab l aTran s i c i one s2 =

new JTable (new DataModel1 ( ) ) ;

/**

* Tabla de transiciones segun el modelo

* de tablas {@link DataModel2}.

*

* @see DataModel2

* @see JTable

*/

private f ina l JTable t ab l aTran s i c i one s3 =

new JTable (new DataModel2 ( ) ) ;

/**

* Tabla de transiciones segun el modelo

* de tablas {@link DataModel3}.

*

* @see DataModel3

* @see JTable

*/

private f ina l JTable t ab l aTran s i c i one s4 =

new JTable (new DataModel3 ( ) ) ;

/**

* Tabla de transiciones para visualizar

* valores del PLC segun el

* modelo de tablas {@link DataModel1}.

*

* @see DataModel1

* @see JTable

*/

Page 15: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 115

private f ina l JTable t ab l aV i s ua l i z a c i on1 =

new JTable (new DataModel1 ( ) ) ;

/**

* Tabla de transiciones para visualizar

* valores del PLC segun el

* modelo de tablas {@link DataModel1}.

*

* @see DataModel1

* @see JTable

*/

private f ina l JTable t ab l aV i s ua l i z a c i on2 =

new JTable (new DataModel1 ( ) ) ;

/**

* Tabla de transiciones para visualizar

* valores del PLC segun el

* modelo de tablas {@link DataModel2}.

*

* @see DataModel2

* @see JTable

*/

private f ina l JTable t ab l aV i s ua l i z a c i on3 =

new JTable (new DataModel2 ( ) ) ;

/**

* Tabla de transiciones para visualizar

* valores del PLC segun el

* modelo de tablas {@link DataModel3}.

*

* @see DataModel3

* @see JTable

*/

private f ina l JTable t ab l aV i s ua l i z a c i on4 =

new JTable (new DataModel3 ( ) ) ;

/**

* Tabla de Entradas del PLC para visualizar

* los valores en tiempo real.

* El modelo de tablas {@link DataModel4}.

*

* @see DataModel4

* @see JTable

*/

Page 16: Apéndice B Códigos de programación

116 Maqueta de ascensor para la realizacion de practicas por Internet

private f ina l JTable tablaEntradas =

new JTable (new DataModel4 ( ) ) ;

/**

* Tabla de Salidas del PLC para visualizar

* los valores en tiempo real.

* El modelo de tablas {@link DataModel5}.

*

* @see DataModel5

* @see JTable

*/

private f ina l JTable t ab l aSa l i d a s =

new JTable (new DataModel5 ( ) ) ;

/**

* JtabbedPane que almacena todas las capas que

* se muestran en el Applet. Este elemento gestiona

* que todas las capas que se muestran, se

* visualizen correctamente.

*

* @see JTabbedPane

*/

private f ina l JTabbedPane so l apa s = new JTabbedPane ( ) ;

/**

* Panel para alamacenar todos los elementos para

* la definicion los diagramas de estados.

*/

private f ina l JPanel capa1 = new JPanel ( ) ;

/**

* Panel para alamacenar todos los elementos para

* la visualizacion de la tabla de transiciones.

*/

private f ina l JPanel capa2 = new JPanel ( ) ;

/**

* Panel para alamacenar todos los elementos

* para la visualizacion de los valores del PLC.

*/

private f ina l JPanel capa3 = new JPanel ( ) ;

/**

* Panel para visualizar el Scada del ascensor.

*/

private f ina l PanelAscensor pane la s censo r =

Page 17: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 117

new PanelAscensor ( ) ;

/**

* JCombobox que ayuda a introducir el diagrama

* de estados en el PLC.

* Selecciona el estado actual de la transicion.

*/

private f ina l JComboBox jComboBox1 = new JComboBox ( ) ;

/**

* JCombobox que ayuda a introducir el diagrama de

* estados en el PLC. Selecciona el estado siguiente

* de la transicion.

*/

private f ina l JComboBox jComboBox2 = new JComboBox ( ) ;

/**

* JCombobox que ayuda a introducir el diagrama

* de estados en el PLC.

* Selecciona el estado actual de la tabla

* de salida.

*/

private f ina l JComboBox jComboBox3 = new JComboBox ( ) ;

/**

* JCombobox que ayuda a introducir el diagrama

* de estados en el PLC.

* Este elemento controla el numero de estados

* de nuestro diagrama de estados. Mediante este

* elemento se controla

* las filas que hay que enviar al PLC

* de la tabla de salidas.

*/

private f ina l JComboBox jComboBoxnumeroestados =

new JComboBox ( ) ;

/**

* JCombobox que ayuda a introducir el

* diagrama de estados en el PLC.

* Este elemento controla el numero de

* transiciones de nuestro diagrama de estados.

* Mediante este elemento

* se controla las filas que hay que enviar al PLC

* de la tabla transiciones.

*/

Page 18: Apéndice B Códigos de programación

118 Maqueta de ascensor para la realizacion de practicas por Internet

private f ina l JComboBox jComboBoxnumeroTransicones =

new JComboBox ( ) ;

/**

* Gestor para gestionar la colocacion de los

* componentes en el Applet.

*/

private f ina l FlowLayout f lowLayout1 = new FlowLayout ( ) ;

private f ina l FlowLayout f lowLayout2 = new FlowLayout ( ) ;

private f ina l JLabel joo = new JLabel ( ) ; //para pruebaaaaa

/**

* Entradas posibles del ascensor.

*/

private f ina l St r ing [ ] entradas = {

” Fina l de Carrera c i e r r e de Puerta en n i v e l 3” ,

” Fina l de Carrera apertura de Puerta en n i v e l 3” ,

” Sensor Cabina en n i v e l 3” ,

” Fina l de Carrera c i e r r e de Puerta en n i v e l 2” ,

” Fina l de Carrera apertura de Puerta en n i v e l 2” ,

” Sensor Cabina en n i v e l 2” ,

” Fina l de Carrera c i e r r e de Puerta en n i v e l 1” ,

” Fina l de Carrera apertura de Puerta en n i v e l 1” ,

” Sensor Cabina en n i v e l 1” ,

” Fina l de Carrera c i e r r e de Puerta en n i v e l 0” ,

” Fina l de Carrera apertura de Puerta en n i v e l 0” ,

” Sensor Cabina en n i v e l 0” ,

” Simulac i on llamada n i v e l 0” ,

” Simulac i on llamada n i v e l 1” ,

” Simulac i on llamada n i v e l 2” ,

” Simulac i on llamada n i v e l 3” } ;

/**

* Salidas posibles del ascensor.

*/

private f ina l St r ing [ ] s a l i d a s = {

”Motor de Ascensor Ascendiendo” ,

”Motor de Ascensor Descendiendo” ,

”Led v i a j e r o en n i v e l 3” ,

”Led v i a j e r o en n i v e l 2” ,

”Led v i a j e r o en n i v e l 1” ,

”Led v i a j e r o en n i v e l 0” ,

Page 19: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 119

”Motor c i e r r e de Puerta en n i v e l 3” ,

”Motor apertura de Puerta en n i v e l 3” ,

”Motor c i e r r e de Puerta en n i v e l 2” ,

”Motor apertura de Puerta en n i v e l 2” ,

”Motor c i e r r e de Puerta en n i v e l 1” ,

”Motor apertura de Puerta en n i v e l 1” ,

”Motor c i e r r e de Puerta en n i v e l 0” ,

”Motor apertura de Puerta en n i v e l 0” ,

”Led v i a j e r o ascendiendo ” ,

”Led v i a j e r o descendiendo ” } ;

/**

* Numero de estados del sistema.

*/

private f ina l St r ing [ ] numeroEstados = {

”0” , ”1” , ”2” ,

”3” , ”4” , ”5” ,

”6” , ”7” , ”8” ,

”9” , ”10” , ”11” ,

”12” , ”13” , ”14” ,

”15” , ”16” , ”17” ,

”18” , ”19” } ;

/**

* Numero de estados del sistema.

*/

private f ina l St r ing [ ] numeroEstados1 = {

”1” , ”2” ,

”3” , ”4” , ”5” ,

”6” , ”7” , ”8” ,

”9” , ”10” , ”11” ,

”12” , ”13” , ”14” ,

”15” , ”16” , ”17” ,

”18” , ”19” , ”20” } ;

/**

* Numero de transiciones del sistema.

*/

private f ina l St r ing [ ] numeroTransic iones =

new St r ing [ 1 6 0 ] ;

/**

* Gestiona los elementos que hay que mostrar en el

* {@link #jList1}

*/

Page 20: Apéndice B Códigos de programación

120 Maqueta de ascensor para la realizacion de practicas por Internet

private f ina l DefaultListModel e l ementosL i s t1 =

new DefaultListModel ( ) ;

/**

* Muestra las entradas disponibles del ascensor.

* Mediante los elementos seleccionados

* se determina la se~nal de entrada para cada transicion.

*/

private f ina l JL i s t j L i s t 1 = new JL i s t ( e l ementosL i s t1 ) ;

/**

* Gestiona los elementos que hay que mostrar en el

* {@link #jList2}

*/

private f ina l DefaultListModel e l ementosL i s t2 =

new DefaultListModel ( ) ;

/**

* Muestra las salidas disponibles del ascensor.

* Mediante los elementos seleccionados

* se determina la se~nal de salida para cada estado.

*/

private f ina l JL i s t j L i s t 2 = new JL i s t ( e l ementosL i s t2 ) ;

/**

* Borde utilizado en todos los elementos del Applet.

*

* #@see Border

*/

private Border border2 ;

/**

* Boton para a~nadir una transicion seleccionada en

* {@link #jList1} a la tabla de transiciones. El

* estado actual y el estdo siguiente se selecionant

* mediante {@link #jComboBox1} y{@link #jComboBox2}.

*/

private f ina l JButton botonTrans i c iones =

new JButton ( ”Anadir Trans i c i on a l a Tabla” ) ;

/**

* Boton para a~nadir la salida seleccionada en el

* {@link #jList2} en la tabla de salidas.

*/

private f ina l JButton botonSa l idas =

new JButton ( ”Anadir S e l e c c i o n a l a Tabla de Sa l i d a s ” ) ;

Page 21: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 121

/**

* Boton para visualizar los valores almacenados en el PLC.

* Se visualizan el numero de transiciones seleccionadas

* en {@link #jComboBoxnumeroTransicones} en

* la tabla de Visualizacion.

*/

private f ina l JButton bo tonV i sua l i z a rVar i ab l e s =

new JButton ( ” V i s u a l i z a r v a r i a b l e s ” ) ;

/**

* Boton para enviar la tabla de transiciones y

* la tabla de salidas al PLC.

*/

private f ina l JButton botonEnvioPlc =

new JButton ( ”Enviar va l o r e s PLC” ) ;

/**

* Boton para registrar 2 marcas del PLC. Registramos

* la marca de entradas y salidas del PLC.

*/

private f ina l JButton botonRegi s t ro =

new JButton ( ” V i s u a l i z a r va l o r e s en tiempo r e a l ” ) ;

/**

* Boton que muestra la web de las camaras.

*/

private f ina l JButton botonMostrarCamaras =

new JButton ( ” V i s u a l i z a r r e s u l t ado s mediante e l ” +

” s i s tema de camaras” ) ;

/**

* Boton para borrar una transicion de la tabla de transiciones.

*/

private f ina l JButton bo tonBor ra r t r an s i c i one s =

new JButton ( ”Borrar Toda l a Tabla de Trans i c i one s ” ) ;

/**

* Boton para borrar toda la tablas de transiciones.

*/

private f ina l JButton botonBorrarUnaTransic ion =

new JButton ( ”Borrar 1 Trans i c i on de tab la ” ) ;

/**

* Boton para simular la llamada al nivel 0 en el ascensor.

* Envia un 1 siempre y cuando las marcas del PLC

* esten registradas. De esta manera se puede hacer

* un seguimiento de la se~nal que enviamos al PLC.

Page 22: Apéndice B Códigos de programación

122 Maqueta de ascensor para la realizacion de practicas por Internet

*

*

* @see JButton

*/

private f ina l JButton cb0 =

new JButton ( ” Simulac i on llamada n i v e l 0” ) ;

/**

* Boton para simular la llamada al nivel 1en el ascensor.

* Envia un 1 siempre y cuando las marcas del PLC

* esten registradas. De esta manera se puede hacer

* un seguimiento de la se~nal que enviamos al PLC.

*

* @see JButton

*/

private f ina l JButton cb1 =

new JButton ( ” Simulac i on llamada n i v e l 1” ) ;

/**

* Boton para simular la llamada al nivel 2 en el ascensor.

* Envia un 1 siempre y cuando las marcas del PLC

* esten registradas. De esta manera se puede hacer

* un seguimiento de la se~nal que enviamos al PLC.

*

* @see JButton

*/

private f ina l JButton cb2 =

new JButton ( ” Simulac i on llamada n i v e l 2” ) ;

/**

* Boton para simular la llamada al nivel 3 en el ascensor.

* Envia un 1 siempre y cuando las marcas del PLC

* esten registradas. De esta manera se puede hacer

* un seguimiento de la se~nal que enviamos al PLC.

*

* @see JButton

*/

private f ina l JButton cb3 =

new JButton ( ” Simulac i on llamada n i v e l 3” ) ;

/**

* Contador para que el boton de simulacion de llamada

* no envie un 1 continuamente a la se~nal de entrada. Se

* controla el boton como si fuera un biestable.

*/

Page 23: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 123

private int contadorcb0 ;

/**

* Contador para que el boton de simulacion de llamada

* no envie un 1 continuamente a la se~nal de entrada. Se

* controla el boton como si fuera un biestable.

*/

private int contadorcb1 ;

/**

* Contador para que el boton de simulacion de llamada

* no envie un 1 continuamente a la se~nal de entrada. Se

* controla el boton como si fuera un biestable.

*/

private int contadorcb2 ;

/**

* Contador para que el boton de simulacion de llamada

* no envie un 1 continuamente a la se~nal de entrada. Se

* controla el boton como si fuera un biestable.

*/

private int contadorcb3 ;

/*

* Contador para que los botones de simulacion de llamada solo

funciones cuando se hayan registrado las marcas

* del PLC.

*/

private boolean act ivarScada ;

private f ina l JLabel jLabe l1 = new JLabel ( ) ;

private f ina l JLabel jLabe l2 = new JLabel ( ) ;

private f ina l JLabel jLabe l3 = new JLabel ( ) ;

private f ina l JLabel jLabe l4 = new JLabel ( ) ;

private f ina l JLabel jLabe l5 = new JLabel ( ) ;

private f ina l JLabel jLabe l6 = new JLabel ( ) ;

private f ina l JLabel jLabe l7 = new JLabel ( ) ;

private f ina l JLabel jLabe l8 = new JLabel ( ) ;

private f ina l JLabel jLabe l9 = new JLabel ( ) ;

private f ina l JLabel jLabe l10 = new JLabel ( ) ;

/**

* Constructor del Applet

*/

Page 24: Apéndice B Códigos de programación

124 Maqueta de ascensor para la realizacion de practicas por Internet

public FinalApplet ( ) {

}

/**

* Se llama cuando se crea el Applet. Conecta con el PLC y

* inicializa los valores.

*

* @see JApplet

*/

public void i n i t ( ) {

/**

* Definimos el grosor de cada columna para todas

* las Tablas.

*/

TableColumn column = null ;

for ( int i = 0 ; i < 3 ; i ++) {

column = tab l aTrans i c i one s1 . getColumnModel ( ) .

getColumn ( i ) ;

i f ( ( i == 1 ) | | ( i == 3)) {

column . setPre ferredWidth ( 1 8 ) ;

//sport column is bigger

} else {

column . setPre ferredWidth ( 5 0 ) ;

}

}

for ( int i = 0 ; i < 3 ; i ++) {

column = tab l aTrans i c i one s2 . getColumnModel ( ) .

getColumn ( i ) ;

i f ( ( i == 1 ) | | ( i == 3)) {

column . setPre ferredWidth ( 1 8 ) ;

//sport column is bigger

} else {

column . setPre ferredWidth ( 5 0 ) ;

}

}

for ( int i = 0 ; i < 3 ; i ++) {

column = tab l aTrans i c i one s3 . getColumnModel ( ) .

getColumn ( i ) ;

Page 25: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 125

i f ( ( i == 1 ) | | ( i == 3)) {

column . setPre ferredWidth ( 1 8 ) ;

//sport column is bigger

} else {

column . setPre ferredWidth ( 5 0 ) ;

}

}

for ( int i = 0 ; i < 3 ; i ++) {

column = tab l aV i s ua l i z a c i on1 . getColumnModel ( ) .

getColumn ( i ) ;

i f ( ( i == 1 ) | | ( i == 3)) {

column . setPre ferredWidth ( 1 8 ) ;

//sport column is bigger

} else {

column . setPre ferredWidth ( 5 0 ) ;

}

}

for ( int i = 0 ; i < 3 ; i ++) {

column = tab l aV i s ua l i z a c i on2 . getColumnModel ( ) .

getColumn ( i ) ;

i f ( ( i == 1 ) | | ( i == 3)) {

column . setPre ferredWidth ( 1 8 ) ;

//sport column is bigger

} else {

column . setPre ferredWidth ( 5 0 ) ;

}

}

for ( int i = 0 ; i < 3 ; i ++) {

column = tab l aV i s ua l i z a c i on3 . getColumnModel ( ) .

getColumn ( i ) ;

i f ( ( i == 1 ) | | ( i == 3)) {

column . setPre ferredWidth ( 1 8 ) ;

//sport column is bigger

} else {

column . setPre ferredWidth ( 5 0 ) ;

}

}

for ( int i = 0 ; i < 2 ; i ++) {

column = tablaEntradas . getColumnModel ( ) .

getColumn ( i ) ;

i f ( ( i == 1)) {

Page 26: Apéndice B Códigos de programación

126 Maqueta de ascensor para la realizacion de practicas por Internet

column . setPre ferredWidth ( 1 8 ) ;

//sport column is bigger

} else {

column . setPre ferredWidth ( 2 0 0 ) ;

}

}

for ( int i = 0 ; i < 2 ; i ++) {

column = tab l aSa l i d a s . getColumnModel ( ) .

getColumn ( i ) ;

i f ( ( i == 1)) {

column . setPre ferredWidth ( 1 8 ) ;

//sport column is bigger

} else {

column . setPre ferredWidth ( 2 0 0 ) ;

}

}

/**

* Introducimos las entradas y las salidas en la primera

* columna de las tablas correspondiente.

*/

for ( int i = 0 ; i < entradas . l ength ; i ++) {

tablaEntradas . setValueAt ( entradas [ i ] , i , 0 ) ;

}

for ( int i = 0 ; i < s a l i d a s . l ength ; i ++) {

t ab l aSa l i d a s . setValueAt ( s a l i d a s [ i ] , i , 0 ) ;

}

/**

* Introducimos los valores guardados en las varibles

* numeroEstados en los JComboBox1, JComboBox2,

* JComboBox3.

*/

for ( int i = 0 ; i < numeroEstados . l ength ; i ++) {

jComboBox1 . addItem ( numeroEstados [ i ] ) ;

jComboBox2 . addItem ( numeroEstados [ i ] ) ;

jComboBox3 . addItem ( numeroEstados [ i ] ) ;

jComboBoxnumeroestados . addItem ( numeroEstados1 [ i ] ) ;

}

Page 27: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 127

for ( int i = 0 ; i < numeroTransic iones . l ength ; i ++) {

numeroTransic iones [ i ] = St r ing . valueOf ( i + 1 ) ;

jComboBoxnumeroTransicones . addItem ( numeroTransic iones [ i ] ) ;

}

/**

* Introducimos los valores guardados en {@link #entradas}.

*/

for ( int i = 0 ; i < entradas . l ength ; i ++) {

e l ementosL i s t1 . addElement ( entradas [ i ] ) ;

}

/**

* Introducimos los valores guardados en {@link #salidas}.

*/

for ( int i = 0 ; i < s a l i d a s . l ength ; i ++) {

e l ementosL i s t2 . addElement ( s a l i d a s [ i ] ) ;

}

/**

* Consigue el host del PLC

*/

f ina l St r ing host = getCodeBase ( ) . getHost ( ) ;

/**

* Creamos los ’Comm Beans’ para el PLC comm. Se suministra al

* CommBean el host del PLC.

*/

comm = new CommBean( ge tLoca l e ( ) ) ;

/**

* Creamos los comm Beans de las variables para escribir

* los datos en el PLC.

*/

for ( int i = 0 ; i < s e t t e r . l ength ; i ++) {

s e t t e r [ i ] = new Set Int (comm. ge tSe rve r ( ) ) ;

}

valorEnviado = new Set Int (comm. ge tSe rve r ( ) ) ;

Page 28: Apéndice B Códigos de programación

128 Maqueta de ascensor para la realizacion de practicas por Internet

/**

* Creamos los comm Beans de la variable booleana para

* escribir en las marcas booleanas.

*/

i n i c i a l i z a r V a r i a b l e s = new SetBool (comm. ge tSe rve r ( ) ) ;

/**

* Creamos los comm Beans de las variables para leer los

* datos del PLC.

*/

for ( int i = 0 ; i < g e t t e r . l ength ; i ++) {

g e t t e r [ i ] = new GetInt (comm. ge tSe rve r ( ) ) ;

}

/**

* Registramos la variable de entrada y salida del PLC,para

* controlar los cambios de cualquier bit.

*/

monitor = new MonitorInt (comm. getAdaptor ( ) ) ;

/**

* A~nadimos un oyente para hacer un seguimiento de las

* marcas registradas.

*/

monitor . addPropertyChangeListener (new MyValueListener ( ) ) ;

/**

* Inicializamos las marcas del PLC asignando el valor

* correspondiente a cada posicion de la tabla de 160 filas

* y 3 columnas

*/

for ( int i = 0 ; i < marcasTrans ic iones . l ength ; i ++) {

marcasTrans ic iones [ i ] = new Estructura ( ) ;

marcasTrans ic iones [ i ] . a s i gnarVa lo r ( i , i + 160 , i + 320) ;

}

/**

* Inicializamos las marcas de salida del PLC asignando

* el valor correspondiente a la tabla de salida.

*/

for ( int i = 0 ; i < marcasSa l idas . l ength ; i ++) {

marcasSa l idas [ i ] = 480 + i ;

}

for ( int i = 0 ; i < va l o r e sT ran s i c i on e s . l ength ; i ++) {

va l o r e sT ran s i c i on e s [ i ] = new Estructura ( ) ;

}

Page 29: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 129

act ivarScada = fa l se ;

/**

* Establecemos la conexion con el PLC.

*/

try {

comm. connect ( host , fa l se ) ;

comm. s t a r t ( ) ;

} catch ( Exception e ) {

e . pr intStackTrace ( ) ;

/**

* Desactibamos los botones del

* Applet en caso de que la conexion no

* se establezca correctamente.

*/

botonTrans i c iones . setEnabled ( fa l se ) ;

botonSa l idas . setEnabled ( fa l se ) ;

botonEnvioPlc . setEnabled ( fa l se ) ;

bo tonV i sua l i z a rVar i ab l e s . setEnabled ( fa l se ) ;

botonRegi s t ro . setEnabled ( fa l se ) ;

bo tonBor ra r t r an s i c i one s . setEnabled ( fa l se ) ;

botonBorrarUnaTransic ion . setEnabled ( fa l se ) ;

}

try {

j b I n i t ( ) ;

} catch ( Exception e ) {

e . pr intStackTrace ( ) ;

}

}

/**

* Inicializacion de componentes para mostrarlos en el applet

*

Page 30: Apéndice B Códigos de programación

130 Maqueta de ascensor para la realizacion de practicas por Internet

*/

private void j b I n i t ( ) {

/**

* Realizamos la simulacion de llamada

* de nivel mediante la llamada al metodo

* "llamada". Asignamos el valor que suministramos

* al metodo a la marca %MW508, %MW509..etc.

*

*/

cb0 . addAct ionLis tener (new Act ionL i s t ene r ( ) {

public void act ionPerformed ( f ina l ActionEvent e ) {

i f ( ( contadorcb0 == 0) && act ivarScada ) {

l lamada ( ( 5 0 8 ) , 1 ) ;

contadorcb0 = 1 ;

} else {

}

;

}

} ) ;

cb1 . addAct ionLis tener (new Act ionL i s t ene r ( ) {

public void act ionPerformed ( f ina l ActionEvent e ) {

i f ( ( contadorcb1 == 0) && act ivarScada ) {

l lamada ( ( 5 0 9 ) , 1 ) ;

contadorcb1 = 1 ;

} else {

}

;

}

} ) ;

cb2 . addAct ionLis tener (new Act ionL i s t ene r ( ) {

public void act ionPerformed ( f ina l ActionEvent e ) {

i f ( ( contadorcb2 == 0) && act ivarScada ) {

l lamada ( ( 5 1 0 ) , 1 ) ;

contadorcb2 = 1 ;

} else {

}

Page 31: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 131

;

}

} ) ;

cb3 . addAct ionLis tener (new Act ionL i s t ene r ( ) {

public void act ionPerformed ( f ina l ActionEvent e ) {

i f ( ( contadorcb3 == 0) && act ivarScada ) {

l lamada ( ( 5 1 1 ) , 1 ) ;

contadorcb3 = 1 ;

} else {

;

}

}

} ) ;

border2 = BorderFactory .

c reateL ineBorder ( SystemColor . windowText , 1 ) ;

/**

* Establecemos la posicion y el tama~no de cada uno de los

* botones del Applet.

*/

botonEnvioPlc . setBounds (

new Rectangle ( 1 3 5 , 6 3 0 , 1 5 5 , 2 5 ) ) ;

bo tonV i sua l i z a rVar i ab l e s . setBounds (

new Rectangle ( 1 3 5 , 6 6 0 , 1 5 9 , 2 5 ) ) ;

botonSa l idas . setBounds (

new Rectangle ( 6 1 3 , 4 7 0 , 2 6 3 , 2 5 ) ) ;

botonTrans i c iones . setBounds (

new Rectangle ( 1 3 5 , 4 7 0 , 2 2 9 , 2 5 ) ) ;

botonRegi s t ro . setBounds (

new Rectangle ( 3 1 0 , 7 2 0 , 2 2 0 , 2 5 ) ) ;

botonBorrarUnaTransic ion . setBounds (

new Rectangle ( 1 3 5 , 5 0 0 , 2 2 9 , 2 5 ) ) ;

bo tonBor ra r t r an s i c i one s . setBounds (

new Rectangle ( 1 3 5 , 5 3 0 , 2 8 5 , 2 5 ) ) ;

botonMostrarCamaras . setBounds (

new Rectangle ( 3 1 0 , 7 5 0 , 3 5 2 , 2 5 ) ) ;

botonMostrarCamaras . setText (

” V i s u a l i z a r r e s u l t ado s mediante e l s i s tema de camaras” ) ;

Page 32: Apéndice B Códigos de programación

132 Maqueta de ascensor para la realizacion de practicas por Internet

/**

* Establecemos la posicion y el tama~no de cada uno de los

* JcomboBox del Applet.

*/

jComboBox2 . setBounds (

new Rectangle ( 3 9 , 2 0 4 , 5 1 , 2 5 ) ) ;

jComboBox1 . setBounds (

new Rectangle ( 3 9 , 7 1 , 5 1 , 2 5 ) ) ;

jComboBox3 . setBounds (

new Rectangle ( 5 4 0 , 8 5 , 5 1 , 2 5 ) ) ;

jComboBoxnumeroestados . setBounds (

new Rectangle ( 6 4 5 , 6 1 0 , 5 1 , 2 5 ) ) ;

jComboBoxnumeroTransicones . setBounds (

new Rectangle ( 6 4 5 , 7 1 0 , 5 1 , 2 5 ) ) ;

/**

* Establecemos la posicion y el tama~no de cada uno de las

* etiquetas del Applet.

*/

jLabe l1 . setText ( ”Estado ac tua l ” ) ;

jLabe l1 . setBounds (new Rectangle ( 1 9 , 3 6 , 1 0 4 , 2 0 ) ) ;

jLabe l2 . setBounds (new Rectangle ( 1 1 , 1 6 8 , 1 2 1 , 2 0 ) ) ;

jLabe l2 . setToolTipText ( ”” ) ;

jLabe l2 . setText ( ”Estado s i g u i e n t e ” ) ;

jLabe l3 . setBounds (new Rectangle ( 1 3 5 , 1 7 , 1 8 1 , 2 0 ) ) ;

jLabe l3 . setText ( ”Entrada que ac t i va l a t r a n s i c i o n ” ) ;

jLabe l4 . setBounds (new Rectangle ( 8 2 0 , 1 6 4 , 7 6 , 2 0 ) ) ;

jLabe l5 . setText ( ” S e l e c c i ona r estado ” ) ;

jLabe l5 . setBounds (new Rectangle ( 4 6 1 , 5 4 , 1 3 2 , 2 1 ) ) ;

jLabe l6 . setText ( ” Sa l i d a s p o s i b l e s para cada estado ” ) ;

jLabe l6 . setBounds (new Rectangle ( 6 1 4 , 1 0 , 3 2 1 , 2 2 ) ) ;

jLabe l7 . setText ( ”Numero t o t a l de Estados de l s i s tema ” ) ;

jLabe l7 . setBounds (new Rectangle ( 6 4 5 , 5 8 0 , 2 2 6 , 2 3 ) ) ;

jLabe l8 . setText ( ”Tabla de Entradas ” ) ;

jLabe l8 . setBounds (new Rectangle ( 7 2 5 , 3 0 , 2 6 3 , 2 1 ) ) ;

Page 33: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 133

jLabe l9 . setText ( ”Tabla de Sa l i d a s ” ) ;

jLabe l9 . setBounds (new Rectangle ( 7 2 5 , 3 7 0 , 2 6 3 , 2 1 ) ) ;

jLabe l10 . setText (

”Numero t o t a l de Trans i c i one s de l s i s tema ” ) ;

jLabe l10 . setBounds (

new Rectangle ( 6 4 5 , 6 7 0 , 2 6 3 , 2 3 ) ) ;

/**

*Establece la posicion y el tama~no de los

* botones de simulacion de llamada.

*/

cb3 . setBounds (new Rectangle ( 5 0 , 1 2 5 , 2 0 0 , 2 5 ) ) ;

cb2 . setBounds (new Rectangle ( 5 0 , 2 5 0 , 2 0 0 , 2 5 ) ) ;

cb1 . setBounds (new Rectangle ( 5 0 , 3 7 5 , 2 0 0 , 2 5 ) ) ;

cb0 . setBounds (new Rectangle ( 5 0 , 5 0 0 , 2 0 0 , 2 5 ) ) ;

/**

* Definimos el tama~no del Applet.

*/

this . s e t S i z e (new Dimension ( 1 4 9 0 , 9 0 0 ) ) ;

this . getContentPane ( ) . add ( so l apa s , BorderLayout .NORTH) ;

so l apa s . setBackground ( Color . l i ghtGray ) ;

s o l apa s . setForeground ( Color . b lack ) ;

s o l apa s . setAlignmentY ( ( f loat ) 0 . 5 ) ;

/**

* A~nadimos cada una de las capas del JTabbedPane

*/

s o l apa s . add ( capa1 , ” De f i n i r Diagrama de es tados ” ) ;

s o l apa s . add ( capa2 , ”Tabla de Trans i c i one s ” ) ;

s o l apa s . add ( capa3 ,

” V i s ua l i z a c i o n de va l o r e s en e l PLC” ) ;

s o l apa s . add ( pane la s censo r ,

” Moni tor i zac i on mediante Scada” ) ;

/**

* Asignamos a cada una de las capas el gestor para

* mostrar los elementos.

Page 34: Apéndice B Códigos de programación

134 Maqueta de ascensor para la realizacion de practicas por Internet

*/

capa1 . setLayout ( null ) ;

capa2 . setLayout ( f lowLayout1 ) ;

capa3 . setLayout ( f lowLayout2 ) ;

pane la s c enso r . setLayout ( null ) ;

/**

* Definimos a cada boton del Appplet la accion

* que ejecuta cuando es pulsado. Cada boton tiene

* definido una clase que representa la accion que

* realiza.

*/

botonTrans i c iones . addAct ionLis tener (

new Anad i rTrans i c iones act ionPer formed ( ) ) ;

botonSa l idas . addAct ionLis tener (

new Anad i rSa l idas act ionPer fo rmed ( ) ) ;

botonEnvioPlc . addAct ionLis tener (

new EnvioTablaPLC actionPerformed ( ) ) ;

bo tonV i sua l i z a rVar i ab l e s . addAct ionLis tener (

new LeerBoton act ionPerformed ( ) ) ;

botonRegi s t ro . addAct ionLis tener (

new Regis t rarMarcas act ionPer formed ( ) ) ;

botonMostrarCamaras . addAct ionLis tener (

new MostrarHTML actionPerformed ( ) ) ;

bo tonBor ra r t r an s i c i one s . addAct ionLis tener (

new BorrarTabla act ionPer formed ( ) ) ;

botonBorrarUnaTransic ion . addAct ionLis tener (

new BorrarUnaTrans ic ion act ionPer formed ( ) ) ;

/**

* Creamos los bordes de los componentes tablas

*/

t ab l aTran s i c i one s1 . setBorder ( border2 ) ;

t ab l aTran s i c i one s2 . setBorder ( border2 ) ;

t ab l aTran s i c i one s3 . setBorder ( border2 ) ;

t ab l aTran s i c i one s4 . setBorder ( border2 ) ;

t ab l aV i s ua l i z a c i on1 . setBorder ( border2 ) ;

t ab l aV i s ua l i z a c i on2 . setBorder ( border2 ) ;

t ab l aV i s ua l i z a c i on3 . setBorder ( border2 ) ;

t ab l aV i s ua l i z a c i on4 . setBorder ( border2 ) ;

tablaEntradas . setBorder ( border2 ) ;

Page 35: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 135

t ab l aSa l i d a s . setBorder ( border2 ) ;

/**

* Creamos el borde de los componentes Jlist.

*/

j L i s t 1 . setBorder ( BorderFactory . createEtchedBorder ( ) ) ;

j L i s t 1 . setBackground ( SystemColor . act iveCapt ionBorder ) ;

j L i s t 2 . setBorder ( BorderFactory . createEtchedBorder ( ) ) ;

j L i s t 2 . setBackground ( SystemColor . act iveCapt ionBorder ) ;

/**

* Definimos el tama~no de las tablas.

*/

t ab l aTran s i c i one s1 . s e tP r e f e r r e dS c r o l l a b l eV i ewpo r tS i z e (

new Dimension ( 2 9 0 , 8 0 0 ) ) ;

t ab l aTran s i c i one s2 . s e tP r e f e r r e dS c r o l l a b l eV i ewpo r tS i z e (

new Dimension ( 2 9 0 , 8 0 0 ) ) ;

t ab l aTran s i c i one s3 . s e tP r e f e r r e dS c r o l l a b l eV i ewpo r tS i z e (

new Dimension ( 2 9 0 , 8 0 0 ) ) ;

t ab l aTran s i c i one s4 . s e tP r e f e r r e dS c r o l l a b l eV i ewpo r tS i z e (

new Dimension ( 1 8 0 , 8 0 0 ) ) ;

t ab l aV i s ua l i z a c i on1 . s e tP r e f e r r e dS c r o l l a b l eV i ewpo r tS i z e (

new Dimension ( 2 9 0 , 8 0 0 ) ) ;

t ab l aV i s ua l i z a c i on2 . s e tP r e f e r r e dS c r o l l a b l eV i ewpo r tS i z e (

new Dimension ( 2 9 0 , 8 0 0 ) ) ;

t ab l aV i s ua l i z a c i on3 . s e tP r e f e r r e dS c r o l l a b l eV i ewpo r tS i z e (

new Dimension ( 2 9 0 , 8 0 0 ) ) ;

t ab l aV i s ua l i z a c i on4 . s e tP r e f e r r e dS c r o l l a b l eV i ewpo r tS i z e (

new Dimension ( 1 8 0 , 8 0 0 ) ) ;

/**

* A~nadimos a cada una de las tablas un JCrollPane para

* poder desplazarnos por la tabla en caso que no haya

* espacio suficiente.

*/

f ina l JScro l lPane jSc ro l l paneL i s t aEnt rada s =

new JScro l lPane ( j L i s t 1 ) ;

f ina l JScro l lPane j S c r o l l p a n eL i s t a S a l i d a s =

new JScro l lPane ( j L i s t 2 ) ;

f ina l JScro l lPane j S c r o l l p an e t ab l a 1 =

Page 36: Apéndice B Códigos de programación

136 Maqueta de ascensor para la realizacion de practicas por Internet

new JScro l lPane ( t ab l aTran s i c i one s1 ) ;

f ina l JScro l lPane j S c r o l l p an e t ab l a 2 =

new JScro l lPane ( t ab l aTran s i c i one s2 ) ;

f ina l JScro l lPane j S c r o l l p an e t ab l a 3 =

new JScro l lPane ( t ab l aTran s i c i one s3 ) ;

f ina l JScro l lPane j S c r o l l p an e t ab l a 4 =

new JScro l lPane ( t ab l aTran s i c i one s4 ) ;

f ina l JScro l lPane j S c r o l l p an e t ab l aV i s u a l i z a c i o n 1 =

new JScro l lPane ( t ab l aV i s ua l i z a c i on1 ) ;

f ina l JScro l lPane j S c r o l l p an e t ab l aV i s u a l i z a c i o n 2 =

new JScro l lPane ( t ab l aV i s ua l i z a c i on2 ) ;

f ina l JScro l lPane j S c r o l l p an e t ab l aV i s u a l i z a c i o n 3 =

new JScro l lPane ( t ab l aV i s ua l i z a c i on3 ) ;

f ina l JScro l lPane j S c r o l l p an e t ab l aV i s u a l i z a c i o n 4 =

new JScro l lPane ( t ab l aV i s ua l i z a c i on4 ) ;

f ina l JScro l lPane jSc ro l l pane tab l aEnt rada s =

new JScro l lPane ( tablaEntradas ) ;

f ina l JScro l lPane j S c r o l l p a n e t a b l a S a l i d a s =

new JScro l lPane ( t ab l aSa l i d a s ) ;

/**

* Definimos la posicion y el tama~no de cada

* uno de los ScrollPane.

*/

j S c r o l l p a n eL i s t a S a l i d a s . setBounds (

new Rectangle ( 6 1 3 , 5 0 , 3 0 0 , 4 0 0 ) ) ;

j S c r o l l paneL i s t aEnt rada s . setBounds (

new Rectangle ( 1 3 1 , 5 0 , 3 0 0 , 4 0 0 ) ) ;

j S c r o l l paneL i s t aEnt rada s . s e tP r e f e r r e dS i z e (

new Dimension ( 3 0 0 , 4 0 0 ) ) ;

j S c r o l l p a n eL i s t a S a l i d a s . s e tP r e f e r r e dS i z e (

new Dimension ( 3 0 0 , 4 0 0 ) ) ;

j S c ro l l pane tab l aEnt rada s . s e tP r e f e r r e dS i z e (

new Dimension ( 4 2 5 , 2 8 0 ) ) ;

j S c r o l l p a n e t a b l a S a l i d a s . s e tP r e f e r r e dS i z e (

new Dimension ( 4 2 5 , 2 8 0 ) ) ;

j S c ro l l pane tab l aEnt rada s . setBounds (

new Rectangle ( 7 0 5 , 5 5 , 4 2 5 , 2 8 0 ) ) ;

j S c r o l l p a n e t a b l a S a l i d a s . setBounds (

Page 37: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 137

new Rectangle ( 7 0 5 , 4 0 0 , 4 2 5 , 2 8 0 ) ) ;

/**

* A~nadimos todos los componente que debe

* estar en la primera

* lengueta a la capa1.

*/

capa1 . add ( jLabe l1 , null ) ;

capa1 . add ( jLabe l2 , null ) ;

capa1 . add ( jComboBox1 ) ;

capa1 . add ( jLabe l4 , null ) ;

capa1 . add ( bo tonV i sua l i z a rVar i ab l e s ) ;

capa1 . add ( botonEnvioPlc ) ;

capa1 . add ( jComboBoxnumeroestados ) ;

capa1 . add ( jLabe l7 , null ) ;

capa1 . add ( jS c ro l l paneL i s t aEnt rada s ) ;

capa1 . add ( jLabe l3 , null ) ;

capa1 . add ( jComboBox3 ) ;

capa1 . add ( botonTrans i c iones ) ;

capa1 . add ( j S c r o l l p a n eL i s t a S a l i d a s ) ;

capa1 . add ( jLabe l6 , null ) ;

capa1 . add ( botonSa l idas ) ;

capa1 . add ( jLabe l5 , null ) ;

capa1 . add ( jComboBox2 ) ;

capa1 . add ( bo tonBor ra r t r an s i c i one s ) ;

capa1 . add ( botonBorrarUnaTransic ion ) ;

capa1 . add ( jComboBoxnumeroTransicones ) ;

capa1 . add ( jLabe l10 ) ;

/**

* A~nadimos todos los componente que debe estar en

* la segunda lengueta a la capa2.

*/

capa2 . add ( j S c r o l l p an e t ab l a 1 ) ;

capa2 . add ( j S c r o l l p an e t ab l a 2 ) ;

capa2 . add ( j S c r o l l p an e t ab l a 3 ) ;

capa2 . add ( j S c r o l l p an e t ab l a 4 ) ;

/**

* A~nadimos todos los componente que debe estar en

* la tercera lengueta a la capa3.

*/

capa3 . add ( j S c r o l l p an e t ab l aV i s u a l i z a c i o n 1 ) ;

Page 38: Apéndice B Códigos de programación

138 Maqueta de ascensor para la realizacion de practicas por Internet

capa3 . add ( j S c r o l l p an e t ab l aV i s u a l i z a c i o n 2 ) ;

capa3 . add ( j S c r o l l p an e t ab l aV i s u a l i z a c i o n 3 ) ;

capa3 . add ( j S c r o l l p an e t ab l aV i s u a l i z a c i o n 4 ) ;

/**

* A~nadimos todos los componente que debe

* estar en el Scada a la capa panelascensor.

*/

pane la s censo r . add ( botonRegi s t ro ) ;

pane la s c enso r . add ( botonMostrarCamaras ) ;

pane la s c enso r . add ( jSc ro l l pane tab l aEnt rada s ) ;

pane la s c enso r . add ( j S c r o l l p a n e t a b l a S a l i d a s ) ;

pane la s c enso r . add ( jLabe l8 ) ;

pane la s c enso r . add ( jLabe l9 ) ;

pane la s c enso r . add ( cb0 ) ;

pane la s c enso r . add ( cb1 ) ;

pane la s c enso r . add ( cb2 ) ;

pane la s c enso r . add ( cb3 ) ;

}

/**

* Se llama cuando el applet se inicia.

* Conexion con el PLC.

*

* @see JApplet

*/

public void s t a r t ( ) {

try {

comm. resume ( ) ;

} catch ( Exception e ) {

e . pr intStackTrace ( ) ;

}

}

/**

* Se llama cuando el applet se detiene. Suspende la

* conexion comm con el PLC.

*

Page 39: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 139

* @see JApplet

*/

public void stop ( ) {

try {

comm. suspend ( ) ;

} catch ( Exception e ) {

e . pr intStackTrace ( ) ;

}

}

/**

* Se llama cuando el applet se destruye.

* Desconecta con el PLC.

* @see JApplet

*/

public void dest roy ( ) {

try {

comm. d i s connec t ( ) ;

} catch ( Exception e ) {

e . pr intStackTrace ( ) ;

}

}

/**

* Retorna el complemento a dos

* de los elementos seleccionados

* en el Jlist.

*

* @param i JList que deseamos calcular

* el valor complemento a 2

* @return int en Complemento a 2 de

* los valores selecionados en el Jlist

*

* @see JList

* @since JDK 1.4

*/

private stat ic int valorComplemento2 ( f ina l JL i s t i ) {

int var1 = 0 ;

i f ( i . i s S e l e c t ed Ind ex ( 0 ) ) {

Page 40: Apéndice B Códigos de programación

140 Maqueta de ascensor para la realizacion de practicas por Internet

var1 = var1 + 1 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 1 ) ) {

var1 = var1 + 2 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 2 ) ) {

var1 = var1 + 4 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 3 ) ) {

var1 = var1 + 8 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 4 ) ) {

var1 = var1 + 16 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 5 ) ) {

var1 = var1 + 32 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 6 ) ) {

var1 = var1 + 64 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 7 ) ) {

var1 = var1 + 128 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 8 ) ) {

var1 = var1 + 256 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 9 ) ) {

var1 = var1 + 512 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 1 0 ) ) {

var1 = var1 + 1024 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 1 1 ) ) {

var1 = var1 + 2048 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 1 2 ) ) {

var1 = var1 + 4096 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 1 3 ) ) {

var1 = var1 + 8192 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 1 4 ) ) {

Page 41: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 141

var1 = var1 + 16384 ;

}

i f ( i . i s S e l e c t ed Ind ex ( 1 5 ) ) {

var1 = var1 − 32768 ;

}

return var1 ;

}

/**

* Cambia el primer bit de las Marcas del PLC en funcion

* del JCheckBox seleccionado. El {@link #cb0} cambia

* el bit de la Marca %MW508,el {@link #cb1} el de

* la %MW509, el {@link #cb2} el de la %MW510, y el

* de {@link #cb3} el de la marca %MW511. La varibale

* marca contiene la direccion en el PLC que hay que

* modificar. Si el JCheckBox esta activado el bit

* vale 1, por contra, si no lo esta, el bit vale 0;

*

*

* @param marca Contiene la direccion de la marca

* que hay que

* modificar para simular una llamada al ascensor.

* @param j

* @see com.schneiderautomation.factorycast.CommBean

* @see GetInt

* @see SetInt

* @see JCheckBox

*

* @since JDK 1.4

*/

private void l lamada ( f ina l int marca , f ina l int j ) {

valorEnviado . setAddress ( ” %MW” + Str ing . valueOf (marca ) ) ;

valorEnviado . setValue ( Short .

parseShort ( S t r ing . valueOf ( j ) ) ) ;

try {

valorEnviado . sendValues ( ) ;

} catch ( Exception e ) {

e . pr intStackTrace ( ) ;

}

Page 42: Apéndice B Códigos de programación

142 Maqueta de ascensor para la realizacion de practicas por Internet

}

/**

* Envia los valores del estado y la salida seleccionados

* en el JComboBox y el Jlist. El {@link #jComboBox3}

* selecciona el estado y la {@link #jList2} las

* salidas associadas a este estado.

* La clase a~nade un transicion en la tabla de salidas

* cada vez que es llamada.

*

* @see ActionEvent

* @see ActionListener

* @see JComboBox

* @see JList

* @see JTable

* @see Estructura

* @see <a href="http://java.sun.com/docs/books/

* tutorial/post1.0/ui/eventmodel.html">

* Tutorial: Java 1.1 Event Model</a>

* @see <a href="http://www.awl.com/cp/

* javaseries/jcl1_2.html">

* Reference: The Java Class Libraries (update file)</a>

*

* @author Ignacio Garrido

* @version 1.0 25.7.03

* @since JDK 1.4

*/

public f ina l class Anad i rSa l idas act ionPer fo rmed

implements Act ionL i s t ene r {

/**

* Se ejecuta cuando ocurre la accion

* @see ActionEvent

* @param evt

*/

public void act ionPerformed ( f ina l ActionEvent evt ) {

f ina l St r ing [ ] i i = new St r ing [ 2 ] ;

/**

* Obtenemos el valor seleccionado en JcomBox3,

* que selecciona el estado actual, y las

* salidas marcadas en jList2. Enviamos los

* valores a la tabla de salidas.

Page 43: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 143

*

*/

i i [ 0 ] = St r ing . valueOf ( jComboBox3 . ge tSe l e c t ed I t em ( ) ) ;

i i [ 1 ] = St r ing . valueOf ( valorComplemento2 ( j L i s t 2 ) ) ;

for ( int i = 0 ; i < i i . l ength ; i ++) {

t ab l aTran s i c i one s4 . setValueAt ( i i [ i ] ,

jComboBox3 . ge tSe l e c t ed Index ( ) , i ) ;

}

/**

* Se almacena los valores

* de en "valoresSalida" para facilitar

* el trabajo.

*/

va l o r e s S a l i d a [ jComboBox3 . ge tSe l e c t ed Index ( ) ] =

In t eg e r . pa r s e In t ( i i [ 1 ] ) ;

}

} // Final de la class A~nadirSalidas_actionPerformed

/**

* Envia los valores de los estados y las entradas

* seleccionados en los {@link #jComboBox1},

* {@link #jComboBox2} y en la {@link #jList1} a

* las tablas de transiciones. El primer JComboBox,

* {@link #jComboBox1}, selecciona el estado actual,

* el Jlist las entradas asociadas a la transicion, y

* el segundo {@link #jComboBox2} el estado

* siguiente. El {@link #jList1} nos determina

* las entradas para cada transicion

* La classe distribuye las 160 transiciones en funcion

* de las tablas que se dispone. Se muestran en 3 trablas.

*

*

* @see ActionEvent

* @see ActionListener

* @see javax.swing.JComboBox

* @see javax.swing.JList

* @see javax.swing.JTable

* @see Estructura

* @see <a href="http://java.sun.com/docs/books/

* tutorial/post1.0/ui/

* eventmodel.html">

* Tutorial: Java 1.1 Event Model</a>

Page 44: Apéndice B Códigos de programación

144 Maqueta de ascensor para la realizacion de practicas por Internet

* @see <a href="http://www.awl.com/cp/javaseries/jcl1_2.html">

* Reference: The Java Class Libraries (update file)</a>

*

* @author Ignacio Garrido

* @version 1.0 25.7.03

* @since JDK 1.4

*/

f ina l class Anad i rTrans i c iones act ionPer formed

implements Act ionL i s t ene r {

/**

* Se ejecuta cuando ocurre la accion

* @see ActionEvent

* @param evt

*/

public void act ionPerformed ( f ina l ActionEvent evt ) {

/**

* Obtenemos el valor de la seleccion de los 2 combos y

* la lista

*/

f ina l St r ing [ ] i i = new St r ing [ 3 ] ;

i i [ 0 ] = St r ing . valueOf ( jComboBox1 . ge tSe l e c t ed I t em ( ) ) ;

/**

* El indice seleccionado es uno menos que el

* estado elegido

*/

i i [ 1 ] = St r ing . valueOf ( valorComplemento2 ( j L i s t 1 ) ) ;

i i [ 2 ] = St r ing . valueOf ( jComboBox2 . ge tSe l e c t ed I t em ( ) ) ;

i f ( count < 54) {

for ( int j = 0 ; j < i i . l ength ; j ++) {

t ab l aTran s i c i one s1 . setValueAt ( i i [ j ] , count , j ) ;

}

//asigno a valoresTransiciones el

//valor de la transicion

va l o r e sT ran s i c i on e s [ count ] . a s i gnarVa lo r (

In t eg e r . pa r s e In t ( i i [ 0 ] ) ,

I n t eg e r . pa r s e In t ( i i [ 1 ] ) ,

I n t eg e r . pa r s e In t ( i i [ 2 ] ) ) ;

Page 45: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 145

} else i f ( ( count >= 54) && ( count < 108) ) {

for ( int j = 0 ; j < i i . l ength ; j ++) {

t ab l aTran s i c i one s2 . setValueAt ( i i [ j ] ,

count − 54 , j ) ;

}

va l o r e sT ran s i c i on e s [ count ] . a s i gnarVa lo r (

In t eg e r . pa r s e In t ( i i [ 0 ] ) ,

I n t eg e r . pa r s e In t ( i i [ 1 ] ) ,

I n t eg e r . pa r s e In t ( i i [ 2 ] ) ) ;

} else i f ( ( count >= 108) && ( count < 160) ) {

for ( int j = 0 ; j < i i . l ength ; j ++) {

t ab l aTran s i c i one s3 . setValueAt ( i i [ j ] ,

count − 108 , j ) ;

}

va l o r e sT ran s i c i on e s [ count ] . a s i gnarVa lo r (

In t eg e r . pa r s e In t ( i i [ 0 ] ) ,

I n t eg e r . pa r s e In t ( i i [ 1 ] ) ,

I n t eg e r . pa r s e In t ( i i [ 2 ] ) ) ;

} else i f ( count > 160) {

//Error no se puede lincarse mas marcas.

j oo . setText (

”No es po s i b l e a nad i r mas t r a n s i c i o n e s ” ) ;

}

count++;

}

}// Final de la class A~nadirTransiciones_actionPerformed

/**

* Lee los valores que hay en el PLC en funcion de las

* transiciones que se hayan seleccionado en el

* {@link #jComboBoxnumeroTransicones} y en

* {@link #jComboBoxnumeroestados}.

* Los valores se a~naden a las tablas en el lugar

* correspondiente.

Page 46: Apéndice B Códigos de programación

146 Maqueta de ascensor para la realizacion de practicas por Internet

*

* @see com.schneiderautomation.factorycast.CommBean

* @see com.schneiderautomation.factorycast.GetInt

* @see ActionEvent

* @see ActionListener

* @see JCheckBox

* @see Estructura

* @see <a href="http://java.sun.com/docs/

* books/tutorial/post1.0/ui/eventmodel.html">

* Tutorial: Java 1.1 Event Model</a>

* @see <a href="http://www.awl.com/cp/

* javaseries/jcl1_2.html">

* Reference: The Java Class Libraries (update file)</a>

*

* @author Ignacio Garrido

* @version 1.0 25.7.03

* @since JDK 1.4

*/

public f ina l class LeerBoton act ionPerformed

implements Act ionL i s t ene r {

/**

* Se ejecuta cuando ocurre la accion

* @see ActionEvent

* @param evt

*/

public f ina l void act ionPerformed ( f ina l ActionEvent evt ) {

/**

* Lee los valores almacenados en el PLC en funcion del

* jComboBoxnumeroTransicones. Lee tantas transiciones

* como se hayan seleccionado.

*/

for ( int i = 0 ; i < (

jComboBoxnumeroTransicones . g e tSe l e c t ed Index ( ) + 1 ) ;

i ++) {

for ( int j = 0 ; j < 3 ; j ++) {

/**

* Enviamos las marcas que queremos observar

*/

g e t t e r [ marcasTrans ic iones [ i ] . v a l o r I nd i c e ( j ) ] .

Page 47: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 147

setAddress ( ” %MW” +

Str ing . valueOf ( marcasTrans ic iones [ i ] .

v a l o r I nd i c e ( j ) ) ) ;

g e t t e r [ marcasTrans ic iones [ i ] . v a l o r I nd i c e ( j ) ] .

setQuant i ty (

Short . parseShort ( ”1” ) ) ;

try {

/**

* Obtenemos el valor de la marcas.

*/

g e t t e r [ marcasTrans ic iones [ i ] .

v a l o r I nd i c e ( j ) ] . readValues ( ) ;

} catch ( Exception e ) {

e . pr intStackTrace ( ) ;

}

/**

* Asignamos los valores obtenidos

* a las tablas de salida y transicion.

*/

i f ( i < 54) {

t ab l aV i s ua l i z a c i on1 . setValueAt (

St r ing . valueOf ( g e t t e r [

marcasTrans ic iones [ i ] .

v a l o r I nd i c e ( j ) ] . getValue ( ) ) ,

i , j ) ;

} else i f ( ( i >= 54) && ( i < 108) ) {

t ab l aV i s ua l i z a c i on2 . setValueAt (

St r ing . valueOf ( g e t t e r [

marcasTrans ic iones [ i ] .

v a l o r I nd i c e ( j ) ] . getValue ( ) ) ,

i − 54 , j ) ;

} else i f ( ( i >= 108) && ( i < 160) ) {

t ab l aV i s ua l i z a c i on3 . setValueAt (

St r ing . valueOf ( g e t t e r [

marcasTrans ic iones [ i ] .

v a l o r I nd i c e ( j ) ] . getValue ( ) ) ,

i − 108 , j ) ;

} else i f ( i > 160) {

// no puede lincarse mas marcas.

j oo . setText (

”No es po s i b l e a nad i r mas t r a n s i c i o n e s ” ) ;

}

Page 48: Apéndice B Códigos de programación

148 Maqueta de ascensor para la realizacion de practicas por Internet

}

}

;

/**

* Lee los valores almacenados en el PLC en funcion del

* jComboBoxnumeroestados. Lee los valores

* almacenados en la tabla de salidas del PLC.

*/

for ( int i = 0 ; i <

jComboBoxnumeroestados . g e tSe l e c t ed Index ( )+ 1 ;

i ++) {

g e t t e r [ i + 480 ] . setAddress ( ” %MW” +

Str ing . valueOf ( marcasSa l idas [ i ] ) ) ;

g e t t e r [ i + 480 ] . setQuant i ty ( Short . parseShort ( ”1” ) ) ;

try {

g e t t e r [ i + 480 ] . readValues ( ) ;

} catch ( Exception e ) {

e . pr intStackTrace ( ) ;

}

t ab l aV i s ua l i z a c i on4 . setValueAt ( St r ing . valueOf ( i + 1 ) ,

i , 0 ) ;

t ab l aV i s ua l i z a c i on4 . setValueAt (

St r ing . valueOf ( g e t t e r [ i + 480 ] .

getValue ( ) ) , i , 1 ) ;

}

;

}

}// Final de la class LeerBoton_actionPerformed

/**

* Registra la Marca %M501, %MW502 y %MW503 para poder

* observar en tiempo real los cambios en las salidas

* y entradas del PLC.

*

* @see com.schneiderautomation.factorycast.CommBean

* @see com.schneiderautomation.factorycast.MonitorInt

* @see ActionEvent

* @see ActionListener

* @see javax.swing.JCheckBox

* @see Estructura

Page 49: Apéndice B Códigos de programación

Capıtulo B: Codigos de programacion 149

* @see <a href="http://java.sun.com/docs/books/

* tutorial/post1.0/ui/eventmodel.html">

* Tutorial: Java 1.1 Event Model</a>

* @see <a href="http://www.awl.com/cp/

* javaseries/jcl1_2.html">

* Reference: The Java Class Libraries (update file)</a>

*

* @author Ignacio Garrido

* @version 1.0 25.7.03

* @since JDK 1.4

*/

f ina l class Regis t rarMarcas act ionPer formed

implements Act ionL i s t ene r {

/**

* Se ejecuta cuando ocurre la accion

* @see ActionEvent

* @param evt

*/

public f ina l void act ionPerformed (

f ina l ActionEvent evt ) {

act ivarScada = true ;

/**

* Enviamos el valor de la marca que

* queremos registrar.

*/

monitor . setAddress ( ” %MW501” ) ;

/**

* La cantidad de marcas que queremso registrar.

*/

monitor . setQuant i ty ( Short . parseShort ( ”3” ) ) ;

/**

* Registramos las marcas anteriomente

* seleccionadas.

*/

monitor . r e g i s t e r ( ) ;

}

} // Final de la class RegistrarMarcas_actionPerformed

/**

* Envia las tablas de transiciones registradas en el Applet

Page 50: Apéndice B Códigos de programación

150 Maqueta de ascensor para la realizacion de practicas por Internet

* al PLC. Hay que selecionar el numero de transiciones

* que tenemos en el sistema mediante

* {@link #jComboBoxnumeroTransicones} para la tabla

* de transiciones. Para la tabla de salidas hay

* que seleccionar el numero de estados del diagrama

* de estados mediante y el {@link #jComboBoxnumeroestados}

* estados que tenemos en el sistema mediante el

* jComboBoxnumeroestados. En funcion del valor selecionado

* envia mas o menos transiciones al PLC.

* Envia 8 transiciones por estado seleccionado.

*

* @see com.schneiderautomation.factorycast.CommBean

* @see com.schneiderautomation.factorycast.SetInt

* @see ActionEvent

* @see ActionListener

* @see javax.swing.JCheckBox

* @see Estructura

* @see <a href="http://java.sun.com/docs/books/tutorial/

* post1.0/ui/eventmodel.html">

* Tutorial: Java 1.1 Event Model</a>

* @see <a href="http://www.awl.com/cp/javaseries/jcl1_2.html">

* Reference: The Java Class Libraries (update file)</a>

*

* @author Ignacio Garrido

* @version 1.0 25.7.03

* @since JDK 1.4

*/

public f ina l class EnvioTablaPLC actionPerformed

implements Act ionL i s t ene r {

/**

* Se ejecuta cuando ocurre la accion

* @see ActionEvent

* @param evt

*/

public f ina l void act ionPerformed ( f ina l ActionEvent evt ) {

/**

* Inicializamos todas las variables que hay en el PLC

* mediante la variable INI( %Mm2).Ponemos esta variable

* a durante un instante, lo suficiente para que el PLC

* tenga tiempo de poner a zero todas las variables del

* sistema.

*/