Académique Documents
Professionnel Documents
Culture Documents
DIEGO LUIS ARISTIZBAL RAMREZ M.Sc. en Fsica Profesor Asociado de la Escuela de Fsica
24 de julio de 2008
Agradecimientos
e mis pdres quienes me infundieron l ti y el rigor que gun mi trnsitr por l vidF e mi espos trii y mi hij gmil por su omprensin durnte este o que le dediqu este trjoF e l niversidd xionl de golomi que me h permitido reer profesionlmenteF v llevo muy dentro de mF e mis omperos de l isuel de psi que relizron prte de mi lor doente durnte este o stioF
Lo ms valioso que posee un hombre es la vida. Se le da una sola vez y por eso debe aprovecharla.
xioli hvstrosky
Enorgullecerse del conocimiento, es estar ciego con luz.
fenjmin prnklin
Un excelente crtico sera un artista con mucha ciencia y gusto, sin perjuicio y sin envidia. Esto es difcil de encontrar.
Resumen
vs redes inlmris @wirelessA estn en onstnte reimiento de tl form que d d vn reemplzndo l tenolog de redes leds dds su )exiilidd y fil instlinF u desrrollo y tenolog h sido pz de integrr en sts pequeos dispositivos llmdos sensoresF isto nos llev onoer un tenolog reienteD innovdorD pz de soluionr prolems de form rpid y on(leF v pidd de monitorer y mnipulr elementos o fenmenos fsios present enormes posiiliddes pr si ulquier disiplin ient(F epliiones interesntes son el monitoreo mientl y l griultur de preisinY est ltim on el (n de ontriuir l desrrollo de nuestro ps el ul tiene grndes poteniliddes en ste setorF v pltform hrdwreEsoftwre que se dise e implement en ests nots soi los sensores instrumentos virtules uy omuniin @trnsfereni de dtosA emple los protoolos igfee y PQPF v instrumentin virtul @sA es un onepto introduido por l omp xtionl snstruments on su softwre vortory irtul snstrument ingineering orkenh @vsiAY l s permite utilizr l omputdor personl @gA omo un instrumento pr relizr mediionesF esD el onepto de s se onie omoD un instrumento que no es relD se ejeut en un omputdor y tiene sus funiones de(nids por softwreF v pltform desrrolld se puede dptr on peques modi(iones otrs pliiones tles omo l utomtizin distriuidF in ls dos primers uniddes se desrrolln los instrrumentos virtules omo entes denomindos tvfensD que son lses espeiles onstruids on el lenguje de progrmin tv y que dn grn funionliddY en ls uniddes tres y utro se desrrolln tvfens visulizdores de tls U
de dtos y de gr(sF in l unidd ino se disuten ls ides sis sore redes inlris igfee de sensores y se desrie el desrrollo del hrdwre pr tl pltformF in l unidd seis se implementn ls lses que proveen l omuniin seril @PQPAF in l unidd siete se omplet l implementin del softwre que dministr l red inlmri de sensores y que tmin permite l interin del usurio on stF
ndice general
1. LA INSTRUMENTACIN VIRTUAL
21
IFIF sntroduin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IFPF snstrumentin virtul vs instrumentin rel F F F F F F F F F F F F F F F F F F F IFQF il softwre F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IFRF equerimiento en onoimiento F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IFSF elne de ls nots F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
2. JAVABEAN: INSTRUMENTO VIRTUAL
PI PQ PR PS PS
27
PFIF grterstis de un tvfen F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F PFPF ropieddes del tvfen F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F PFQF hisendo e implementndo el tvfen F F F F F F F F F F F F F F F F F F F F F F F F F PFQFIF hesripin de tvfen y su diseo F F F F F F F F F F F F F F F F F F F F F F F PFQFPF gontruyendo un tvfens on el xetfens F F F F F F F F F F F F F F F F F F F PFQFQF gompletr el digo del tvfen F F F F F F F F F F F F F F F F F F F F F F F F PFQFRF histriuin del tvfen F F F F F F F F F F F F F F F F F F F F F F F F F F F F F PFQFSF smplementndo un proyeto que use el tvfen F F F F F F F F F F F F F F F F
3. JAVABEAN: GRAFICADOR
PU PV QH QH QP RH RW SH
61
TI TP
TW
81
RFIF sntroduin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F RFPF ropieddes del tvfen l F F F F F F F F F F F F F F F F F F F F F F F F F F F F F RFQF grein del tvfens l F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F RFRF hesrrollo de un proyeto que use los tres ens onstruidos F F F F F F F F F F F F F F
5. RED ZigBee DE SENSORES
VI VI VP WH
95
WS WT WT WW
SFPFQF opolog F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHH SFPFRF v trm F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHH SFQF il hrdwre F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHP SFQFIF nidd sensorGemisor F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHQ SFQFPF nidd reeptor F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHR SFQFQF il hip fee F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHR SFQFRF vos sensores F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHR SFQFSF rogrm del sg ITfVUU F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHT SFQFTF lnos de ls js de los iruitos F F F F F F F F F F F F F F F F F F F F F F F F IIH SFQFUF lnos de los iruitos F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIH
6. PAQUETE: COMUNICACIN 121
TFIF sntroduin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPI TFPF il hrdwre PQP F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPI TFPFIF gonexiones desde el hi F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPP TFPFPF gonstruin fsi F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPP TFPFQF grterstis eltris de d iruito F F F F F F F F F F F F F F F F F F F F IPQ IH
TFPFRF he(niin de los iruitos ms omunes en un hfW F F F F F F F F F F F F F F F IPR TFPFSF gle de onexin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPT TFPFTF il hip we PQP F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPT TFPFUF gonstruin le seril pr onetr dos g F F F F F F F F F F F F F F F F F IPU TFPFVF gonversin f eril F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPU TFQF smplementin del pquete com_sensor F F F F F F F F F F F F F F F F F F F F F F F F IPW TFQFIF edeuin del thu F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQH TFQFPF smplementin de com_sensor F F F F F F F F F F F F F F F F F F F F F F F F F IQH
7. APLICACIN: RED de sensores ZigBee 169
UFIF sntroduin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ITW UFPF v estrutur de l pliin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IUH UFPFIF v lse Monitoreo.java F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IUH UFPFPF v lse ColorMethalTheme.java F F F F F F F F F F F F F F F F F F F F F F F IUH UFPFQF v lse TableroControl.java F F F F F F F F F F F F F F F F F F F F F F F F F F IUH UFPFRF v lse DespliegueVistas.java F F F F F F F F F F F F F F F F F F F F F F F F F IUH UFPFSF v lse Datos.java F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IUQ UFQF smplementin de l pliin F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IUQ
II
IP
Lista de Figuras
IFIF IFPF IFQF PFIF PFPF PFQF PFRF PFSF PFTF PFUF PFVF PFWF
Osciloscopio real
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
PP PP PS QI QP QQ QR QR QS QT QU QU QV QV QW QW RH RI RW
Osciloscopio virtual
F F F F F F F F F F F F F F F F F F F F F F F F F F F
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
Ventana de creacin de nueva aplicacin del NetBeans Aspecto actual del panel del proyecto
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
Aspecto del panel Projects con el nuevo paquete mis|underlina beans Creacin de nueva clase con NetBeans
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
F F F F F F F F F F F F F F F F F F F F F F F F F F
correspondiente a la propiedad ValorMinimo del javabean GaugeCircular de la ventana de propiedades para dar color al fondo del GaugeCircular para abrir proyecto
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQ
PFIUF Ventana PFIVF Aspecto PFIWF Abrir PFPHF Creando PFPIF Aspecto PFPPF El
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
SH SI SI SP SQ SQ SR SR SS SS ST SU SU SV SV SW SW TI TP TQ TQ TR TS UH UH UI UI UP UP
la calse TableroInstrumentos
Palette Manager
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
PFPQF egregndo el jens F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F PFPRF Agregando PFPSF Agregando PFPTF Agregando PFPUF Aspecto PFPVF Una PFPWF Cuatro PFQIF Aspecto PFQPF El PFQQF Aspecto QFIF QFPF QFQF QFRF QFSF QFTF QFUF QFVF QFWF
el javabeans el javabeans el javabeans
PFQHF Cambiar
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
poanel Inspector
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
Aspecto del JavaBean que graca el modo XY Ventana para crear una nueva clase
Aspecto del panel Projects despus de crear GracaXY Asignar propiedades Agrregar libreras
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
Aspecto del panel Projects con el proyecto UsarMisBeans de una aplicacin de tipo JFrame
QFIHF Inicio
de la aplicacin TableroInstrumentos
IR
F F F F F F F F F F F F
UQ UR UR US UT UT UU UU UV UV UW VP VQ VR VR VS WH WH WI WP WP WR WT WU WV WW
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
paquetes de JFreeChart
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
formato GridLayout
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
QFPIF Customizar QFPPF Organizar QFPQF Nuevo RFIF RFPF RFQF RFRF RFSF RFTF RFUF RFVF RFWF
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
GUI de una aplicacin de monitoreo y controlF Aspecto del JavaBean que se disear Ventana para crear una nueva claseF
F F F F F F F F F F F F F F F F F F F F F F
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
Aspecto del panel Projects con la clase Tabla.java creadaF Asignar propiedades al JavaBean Tabla. Documentar los beansF
F F F F F F F F F F F F F F F F F F F F F F F F F
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
RFIHF Cambiar
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
Canales ZigBee para la banda de 2.4 GHz. Modelo OSI en las redes ZigBee. Topologa ZigBee Tramas ZigBee
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHI
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHP IS
Estacin de red.
SFIHF Chip SFIIF Tapa SFIPF Tapa SFIQF Caja SFIRF Tapa SFISF tapa SFITF Caja
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHS
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIQ
SFIUF Circuito SFIVF Circuito SFIWF Circuito TFIF TFPF TFQF TFRF TFSF TFTF TFUF TFVF TFWF
de los sensores
Conectores RS232
GUI de la conguracin del puerto serial Ventana inicial del NetBeans 5.5
el paquete com_sensor
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQR
de la clase ParametrosPuertoSerial
F F F F F F F F F F F F F F F F F F F F F F F F IRT
IT
TFIUF Creacin TFIVF Creacin TFIWF Creacin TFPHF Creacin TFPIF Creacin TFPPF Creacin TFPQF Creacin TFPRF Creacin TFPSF Creacin TFPTF Ventana TFPUF Conexin
de la clase ConguracionRS232 de la clase ConguracionRS232 de la clase ConguracionRS232 de la clase ConguracionRS232 de la clase ConguracionRS232 de la clase ConguracionRS232
F F F F F F F F F F F F F F F F F F F F F F F F IRU F F F F F F F F F F F F F F F F F F F F F F F F IRV F F F F F F F F F F F F F F F F F F F F F F F F IRV F F F F F F F F F F F F F F F F F F F F F F F F IRW F F F F F F F F F F F F F F F F F F F F F F F F ISH F F F F F F F F F F F F F F F F F F F F F F F F ISH F F F F F F F F F F F F F F F F F F F F F ITI F F F F F F F F F F F F F F F F F F F F F ITI F F F F F F F F F F F F F F F F F F F F F ITP F F F F F F F F F F F F F F F F F F F F F F ITU F F F F F F F F F F F F F F F F F F F F ITV
F F F F F F F F F F F F F F F F F F F F F F F F F F F F ITT
TFPVF Ubicacin TFPWF Ventana UFIF UFPF UFQF UFRF UFSF UFTF UFUF UFVF UFWF
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F ITU
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IUQ
Creacin de algunas clases e importacin de imgenes Creacin de la clase Datos.java Agregar los JavaBeans
F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IVH
Agregar los componentes a la clase TableroControl Agregar los componentes a la clase TableroControl receptora acoplada al PC por el puerto USB sensoras sensoras
UFIHF Unidad
UFIIF Unidades UFIPF Unidades UFIQF Tablero UFISF Tablero UFIRF Ventana UFITF Ventana
de Control
de Control
IU
UFIUF Ventana
F F F F F F F F F F F F F F F PIP
IV
Lista de Tablas
PR
SFIF ispei(iones del feeEro F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHS TFIF PQP F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPQ TFPF gonexin PQP entre dos g F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPU
IW
20
Captulo
1
instrumentacin virtual
LA INSTRUMENTACIN VIRTUAL
1.1.
Introduccin
ne prtir del uso del omputdor personl @gAD
il onepto de
omo form de reemplzr equipos fsios por softwreF il g se onvierte en un elemento entrl pr otener mediiones de seles omo temperturD presinD udlD luminosiddD etF il usurio intert on l omputdor omo si estuviese utilizndo un instrumento relD y sus iones se ejeutn trvs de un softwre que reliz ls misms funiones que un equipo relF iste onepto fue introduido por l omp xtionl snstruments en el o PHHID trvs de su softwre vE si IF n instrumento virtul es un ominin hrdwre G softwreD entrdo en el segundo y v ms ll de l simple mediin de orriente o voltjeY involur el proesmientoD nlisisD lmenmientoD distriuin y despliegue de los dtos e informin reliondos on l mediin de un o vris selesD interfz homreEmquinD visulizinD monitoreo remoto del proesoD l omuniin on otros equiposD et PF gomo ejemplo pinsese en el osilosopio trdiionl que tiene un funionlidd y prede(nid desde l fri donde lo disenD produen y ensmlnF is deirD l funionlidd de este tipo de instrumento es de(nid por el frinte del equipoD y no por el usurio mismoF il
osciloscopio virtual
se puede dptr medinte un ominin propid de hrdwreGsoftwre pr desemper l funin de osilosopioY sin emrgo el softwreD de(ne su funionlidd y prieni y por ello se die que se virtuliz el osilosopioD y que su funionlidd puede ser de(nid un y otr vez por PI
22
CAPTULO 1.
LA INSTRUMENTACIN VIRTUAL
el usurio y no por el frinte @ver pigur IFI y pigur IFPAF il instrumento virtul es de(nido
pigur IFIX
Osciloscopio real
pigur IFPX
Osciloscopio virtual
entones omo un p de softwre y hrdwre que se le greg un g en tl form que permite los usurios intertur on el omputdor omo si estuviesen utilizndo su propio instrumento eletrnio 4heho l medid4F
23
1.2.
in l instrumentin virtulD el g es utilizdo pr relizr mediiones de fenmenos fsios representdos en seles de orriente on rngos entre REPH me yGo de voltje on rngos entre HES dF r onstruir un instrumento virtulD se requerir de un gD de un trjet de dquisiin de dtos y el softwre propidoF e vees es neesrio un ondiiondor de selesD dependiendo de l sel yGo pliinD y que se puede o no requerir mpli(inD tenuinD (ltrjeD islmientoD etF i l sel est en el rngo de los CGE S d y no se requiere de islmiento o (ltrjeD l mism puede ser onetd diretmente l trjet de dquisiin de dtosF in el instrumento virtulD el softwre es l lve del sistemD difereni del instrumento trE diionlD donde l lve es el hrdwreF gon el sistem indido nteriormenteD se podr onstruir un osilosopio personlizdoD on l interfz gr( que uno deseeD gregndole inlusive ms funE ionliddX visulizr l ond y simultnemente su espetro de poteniF es mismoD este sistem puede tmin ser utilizdo en l mediin de temperturD o en el ontrol de rrnqueGprd de un om entrfugF is ll donde rdi uno de los priniples ene(ios del instrumento virtulD su )exiilidd QF v l IFI indi lguns de ls priniples diferenis entre el instrumento onE venionl o trdiionlD y el instrumento virtulX v )exiiliddD el jo osto de mntenimientoD l reusiliddD l personlizin de d instrumentoD l rpid inorporin de nuevs tenologsD el jo osto por funinD el jo osto por nlD etF son lgunos de los ene(ios que ofree l instrumentin virtulF v instrumentin virtul puede tmin ser implementd en equipos mviles omoX ompuE tdores porttiles @lptopsAD equipos distriuidos en mpo @ERVSAD equipos distni @onetdos v rdioD snternetD etFAD equipos industrilesD omputdores de mno @heX ersonl higitl esE sistntsAD telfonos elulresF ixiste un trjet de dquisiin de dtos pr si ulquier us o nl de omuniin en g @fD seril EPQPGRVSD prleloD etFAD y existe un driver pr si ulquier sistem opertivo @sxhyD hyD nixD vinuxD weg yD etFAF
24
CAPTULO 1.
LA INSTRUMENTACIN VIRTUAL
l IFIX
Instrumento Real
Denido por el fabricante Funcionalidad especca, con conectividad limitada Hardware es la clave Alto costo/funcin
Instrumento Virtual
Denido por el usuario Funcionalidad ilimitada, orientado a aplicaciones, conectividad amplia Software es la clave Bajo costo/funcin, variedad de funciones, reusable
1.3.
El software
il ojetivo de ls presentes nots es enser l p de softwre orrespondiente un instruE mento virtulF r esto se empler el lenguje de progrmin de ltim generinD tv y los omponentes que se desrrollrn sern los denomindos tvfensF n tvfen o en es un omponente heho en softwre que se puede reutilizr y que puede ser mnipuldo visulmente por un herrmient de progrmin en lenguje tvF in l industri eletrni omo en otrs industris se ostumr utilizr omponentes pr onstruir plsD trjetsD etF in el mpo del softwre l ide es l mismF e puede rer un interfz de usurio en un progrm tv on se en omponentesX pnelesD otonesD etiquetsD j de listsD rrs de desplzmientoD dilogosD mensD etF n ejemplo de softwre omeril que permite onstruir instrumentos virtules es el relloheviE eD pigur IFQ y pertenee l empres en ehnologies RD l ul se dedi proveer soluiones de redes que onetn si ulquier dispositivo y equipo eletrnio l red de snternet o itherE net medinte protoolos de estndres iertosF in ests nots se enser desrrollr tvfens
25
pigur IFQX
propios permitiendo el horro de ostos y l implementin de soluiones l medid en proyetos de ingenier donde l instrumentin eletrni est presenteF e h esogido el lenguje de proE grmin tv deido que es de distriuin grtuit SD es rousto y dems multipltformF gomo miente de desrrollo se utiliz el xetfens SFS TD tmin de lire distriuinF emos son de propiedd de un wirosytems UF
1.4.
Requerimiento en conocimiento
r similr el mteril expuesto en ests notsD es neesrio ser progrmr en lenguje tv on el miente de desrrollo @shiA xetfens y tener muy lro los oneptos reliondos on l progrmin orientd ojetosF es mismo deer tener onoimientos sios sore el protoolo de omuniin PQPF
1.5.
vogrr implementr un red inlmri de sensores emplendo instrumentos virtules medinte el uso de l tenolog de los tvfensF
26
CAPTULO 1.
LA INSTRUMENTACIN VIRTUAL
Captulo
2.1.
Caractersticas de un JavaBean
gomo se de(ni en l sein IFQD un tvfen o en es un omponente heho en softwre que se puede reutilizr y que puede ser mnipuldo visulmente por un herrmient de progrmin en lenguje tvF r elloD se de(ne un interfz pr el momento del diseo @design timeA que permite l herrmient de progrmin o shiD interrogr @queryA l omponente y onoer ls propieddes @propertiesA que de(ne y los tipos de suesos @eventsA que puede generr en respuest diverss iones VF eunque los ens individules pueden vrir mplimente en funionlidd desde los ms simples los ms omplejosD todos ellos omprten ls siguientes rterstisX
IntrospeccinX
en
CustomizacinX EventosX
snform l shi de los suesos que puede generr en respuest ls iones del
@ustomiztionAF PU
28 PersistenciaX
CAPTULO 2.
progrmdorD mindo los vlores de sus propieddesF in generlD un en es un lse que oedee ierts reglsX n en tiene que tener un onstrutor por defeto @sin rgumentosAF n en tiene que tener persisteniD es deirD implementr el interfe
SerializableF
n en tiene que tener introspeinF vos shi reonoen ierts puts de diseoD nomres de ls funiones miemros o mtodos y de(niiones de ls lsesD que permiten l herrmient de progrmin mirr dentro del en y onoer sus propieddes y su ondutF
2.2.
n propiedd es un triuto del tvfen que fet su prieni o su ondutF or ejemploD un otn puede tener ls siguientes propieddesX el tmoD l posiinD el ttuloD el olor de fondoD el olor del textoD si est o no hilitdoD etF vs propieddes de un en pueden exminrse y modi(rse medinte mtodosD que eden dih propieddD y pueden ser de dos tiposX wtodo getxomreropieddX lee el vlor de l propieddF wtodo setxomreropieddX mi el vlor de l propieddF n shi que umpl on ls espei(iones de los tvfens se omo nlizr un en y onoer sus propieddesF edemsD re un representin visul pr d uno de los tipos de propieddesD denomind editor de propieddesD pr que el progrmdor pued modi(rls filmente en el momento del diseoF gundo un progrmdorD oge un en de l plet de omponentes y lo deposit en un pnelD el shi muestr el en sore el pnelF gundo se seleion el en pree un hoj de propieddesD que es un list de ls propieddes del enD on sus editores soidos pr d un de ellsF il shi llm los mtodos que empiezn por getD pr mostrr en los editores los vlores de ls propieddesF i el progrmdor mi el vlor de un propiedd se llm un mtodo uyo nomre
29
empiez por setD pr tulizr el vlor de dih propiedd y que puede o no fetr l speto visul del en en el momento del diseoF vs espei(iones tvfens de(nen un onjunto de onveniones @design ptternsA que el shi us pr inferir qu mtodos orresponden propieddesX
public void setNumeros(int[ ] nuevoValor){ numeros=nuevoValor; } public int[ ] getNumeros(){ return numeros; } //mtodos get y set para un elemento de array public void setNumeros(int indice, int nuevoValor){ numeros[indice]=nuevoValor; } public int getNumeros(int indice){ return numeros[indice];
30
CAPTULO 2.
vos ojetos de un lse que tiene un propiedd ligd noti(n otros ojetos
@listenersA interesdosD undo el vlor de dih propiedd miD permitiendo estos ojetos reliE zr lgun inF gundo l propiedd miD se re un ojeto @eventA que ontiene informin er de l propiedd @su nomreD el vlor previo y el nuevo vlorAD y lo ps los otros ojetos @listenersA interesdos en el mioF
Restringidas (Constrained)-
los ojetos @listenersA los que se les noti( el mio del vlor de l propiedd tienen l opin de vetr @vetoA ulquier mio en el vlor de dih propieddF in est unidd se rer un tvfens que desplegr el speto visul de un instrumento virtulY slo se signrn propieddes simples que fundmentlmente tendrn que ver on su prieni grE ( @es un en visulAF r esto se empler el shi xetfensY s mismo on el mismo xetfens se relizr un pequeo proyeto que utilie este tvfensF
2.3.
en prinipio se le signrn son ls siguientes @tods simplesAX lor mnimo @winimoA X ipo intF lor mximo @wximoAX tipo intF xmero de divisiones @xumerohivisionesAX ipo intF xmero de sudivisiones @xumeroudivisionesAX ipo intF golor del fondo @golorpondoAX ipo golorF
31
golor de l tp @golorpAX ipo golorF golor del orde @golorfordeAX ipo golorF golor del disply @golorhisplyAX ipo golorF golor de ls letrs @golorvetrsAX ipo golorF golor de ls rys grndes @golorysqrndesAX ipo golorF golor de ls rys peques @golorysequensAX ipo golorF golor del primer terio @golorrimererioAX ipo golorF golor del segundo terio @goloregundoerioAX ipo golorF golor del terer terio @golorerererioAX ipo golorF niddes @niddesAX ipo tringF vetur @veturAX ipo douleF
pigur PFIX
32
CAPTULO 2.
gd propiedd tendr signd un variable de instanciaD un mtodo set y un mtodo getY por ejemplo pr el olor de l guj @goloregujAX
public Color getColorAguja() { return this.colorAguja; } public void setColorAguja(Color colorAguja) { this.colorAguja = colorAguja; }
erir el shi xetfens SFSF il estdo de l ventn es el de l pigur PFPF erir el proyetoX rer li en pile bxew rojetF F F y se rir l ventn de l pigur PFQF ilegir GeneralbJava Application y Next y se desplieg l ventn de l pigur PFRF in el mpo Project Name esriir MisBeans @o el nomre desedo del proyetoAY en el
Paso 2F
Paso 3F
Paso 4F
mpo Project Location elegir el diretorio donde uir este proyetoF hestivr los hekox y her li en FinishF il pnel Projects del shi dee tener el speto de l pigur PFS @ver reE tngulo rojoAF
33
pigur PFPX
pigur PFQX
34
CAPTULO 2.
pigur PFRX
pigur PFSX
35
pigur PFTX
Paso 6F
pigur PFVF
36
CAPTULO 2.
pigur PFUX
Paso 8F
in el mpo Class NameD esriir GaugeCircular @este ser el nomre del tvfens onstruirAF il speto del shi es el de l pigur PFIHF yservr que dems pree el digo generdo en el pnel derehoF
Bean Patterrns
Paso 9F
irse en el nodo
plegr un popmen @er pigur PFIPA Y esoger Add y her li en Property y se desplegr l ventn de l pigur PFIQF
r implementr l propiedd ValorMinimo llenr los mpos tl y omo preen en l piguE r PFIQF in el digo fuente de l lse GaugeCircular.java dee preer ls lnes de digo orrespondiente est propiedd @pigur PFIRX pnel dereho del shiAF r implementr l propiedd ColorFondo se sigue el mismo pso W pero en l ventn se llenn
37
pigur PFVX
pigur PFWX
38
CAPTULO 2.
pigur PFIHX
pigur PFIIX
39
pigur PFIPX
pigur PFIQX
40
CAPTULO 2.
pigur PFIRX
los mpos tl y omo se ilustr en l pigur PFISF es se sigue proediendo hst ompletr tods ls propieddes desedsF
41
pigur PFISX
42
CAPTULO 2.
public GaugeCircular() { //tamao preferido this.setPreferredSize(new Dimension(250,250)); //Valores por defecto maximo=200; minimo=0; lectura=0.0; numeroDivisiones=50;//Requisito:(maximo-minimo)/numero_divisiones debe ser entero numeroSubdivisiones=5; //paso; //Colores por defecto colorFondo=new Color(228,109,0); colorBorde=new Color(255,152,60); colorAguja=Color.orange; colorLetras=Color.orange; colorRayasPequenas=new Color(255,164,109); colorRayasGrandes=Color.orange; //unidades unidades="mm de Hg"; //Colores de los alios colorPrimerTercio=new Color(0,170,0,180); colorSegundoTercio=new Color(0,210,0,180); colorTercerTercio=new Color(230,230,120,180); colorDisplay=new Color(50,50,50); }
43
44
CAPTULO 2.
calculos(); //Contexto grfico en java 2 Graphics2D g2 = (Graphics2D) g; //Mejora la calidad del dibujo con el antialising de java 2 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.translate((int)(0.1*ancho),(int)(0.1*ancho)); //dibujemos el fondo del marco g2.setPaint(colorFondo); g2.fill(new Arc2D.Double(0,0,ancho,ancho,0,360,Arc2D.OPEN)); //dibujando las rayas mediante una transformacin afin de rotacin //inicia for for(int i=0;i<numeroDivisiones+1;i=i+1){ /*calculo local del ngulo que se debe rotar (esta es una transformacin afn la lnea para dibujarla*/ double teta=Math.toRadians(-120+paso*i); //Hacer la rotacin (transformacin afn) g2.rotate(teta,radio,radio); //Calibre de las rayas g2.setStroke(new BasicStroke((float)(ancho/200.0))); if((i%numeroSubdivisiones)==0){//i es mltiplo del numero_rayas_divisiones //rayas grandes g2.setColor(colorRayasGrandes); g2.draw(new Line2D.Double(radio,0,radio,0.15*ancho)); //marcar en las rayas garndes //calculemos el tamao de este tipo de letra en el dibujo //tipo letra int tamano_letra=(int)(ancho/20); Font tipo_letra= new Font("NewTimes", Font.PLAIN,tamano_letra);
45
g.setFont(tipo_letra); //Medidor de tamao de letra FontMetrics medidor_dimensiones_letra=g2.getFontMetrics(tipo_letra); int alto_letra= medidor_dimensiones_letra.getHeight(); int ancho_letra= medidor_dimensiones_letra.stringWidth(""+i); int b=(int)(alto_letra/4.0); int a=(int)(ancho_letra/2.0); //marcar en el rango entre min y max double valor_division=(1.0*(maximo-minimo))/numeroDivisiones; g2.setColor(colorLetras); g2.drawString(""+(int)(i*valor_division+minimo),(int)(radio-0.5*ancho_letra), (int)(0.20*ancho)); else{ //rayas pequeas g2.setColor(colorRayasPequenas); g2.draw(new Line2D.Double(radio,0,radio,0.1*ancho)); } /*Regresa al estado inicial:Devuelve la rotacin (Repite la transformacin afn al revs*/ g2.rotate(-teta,radio,radio); }//fin for //dibujemos el borde marco g2.setPaint(colorBorde); g2.draw(new Arc2D.Double(0,0,ancho,ancho,0,360,Arc2D.OPEN)); //dibujemos la aguja g2.translate(radio,radio); g2.rotate(desplazamiento_aguja_en_radianes); //grosor de la aguja g2.setStroke(new BasicStroke((float)(ancho/200.0))); }
46
CAPTULO 2.
g2.setPaint(colorAguja); GeneralPath aguja=new GeneralPath(); aguja.moveTo(-0.02*ancho,0); aguja.lineTo(0,0.40*ancho); aguja.lineTo(0.02*ancho,0); aguja.closePath(); g2.fill(aguja); g2.fill(new Arc2D.Double(-0.025*ancho,-0.025*ancho,0.05*ancho,0.05*ancho, 0,360,Arc2D.OPEN)); g2.rotate(-desplazamiento_aguja_en_radianes); g2.translate(-radio,-radio); //marcar las unidades y cosntruccin del display int tamano_letra=(int)(ancho/20); //Medidor de tamao de letra Font tipo_letra= new Font("NewTimes", Font.PLAIN,tamano_letra); g.setFont(tipo_letra); FontMetrics medidor_dimensiones_letra=g2.getFontMetrics(tipo_letra); int alto_letra= medidor_dimensiones_letra.getHeight(); //ancho del String de las unidades int ancho_letra= medidor_dimensiones_letra.stringWidth(unidades); //ancho del string del display //redondear a un slo a un decimal de la lectura double lectura_redondeada=(Math.round(lectura*Math.pow(10,1)))/(Math.pow(10,1)); int ancho_numeros_display= medidor_dimensiones_letra.stringWidth(""+lectura_redondeada); //a y b ayudarn a ubicar la posicin del String de la unidades int b=(int)(0.5*ancho_letra); int a=(int)(ancho/5);//(int)(ancho_letra*2.0); //b_b y a ayudarn a ubicar la posicin del String de los nmeros del display
47
int b_b=(int)(0.5*ancho_numeros_display); g2.translate(radio,radio); //String de las unidades g2.setPaint(colorLetras); g2.drawString(unidades,-b,a); //display: MEJOR HacerJavaBean aparte NUMEROS g2.setPaint(colorDisplay); double b_1=0.2*ancho; g2.fill(new Rectangle2D.Double(-b_1,a+0.3*alto_letra, 2*b_1, 1.2*alto_letra)); g2.setPaint(colorLetras);//nmeros en el display g2.drawString(""+lectura_redondeada,-b_b,a+(int)(1.2*alto_letra)); g2.translate(-radio,-radio); //Alios float grosor=(float)(ancho/150.0); //coloreemos sectores de medida //primer tercio g2.setPaint(colorPrimerTercio);//debe ser con transparencia double ancho_sector_circular_externo=((ancho-2*grosor)); double ancho_sector_circular_interno=(ancho-2*(8*grosor)); Arc2D.Double sector_circular_externo_1 =new 210,-80,Arc2D.PIE); Arc2D.Double sector_circular_interno_1 =new Arc2D.Double (8*grosor,8*grosor,ancho_sector_circular_interno,ancho_sector_circular_interno, 210,-80,Arc2D.PIE); Area area_1_1 = new Area(sector_circular_externo_1); Area area_2_1 = new Area(sector_circular_interno_1); area_1_1.subtract(area_2_1); g2.fill(area_1_1); Arc2D.Double (grosor,grosor,ancho_sector_circular_externo,ancho_sector_circular_externo,
48
CAPTULO 2.
//segundo tercio g2.setPaint(colorSegundoTercio);//debe ser con transparencia Arc2D.Double sector_circular_externo_2 =new Arc2D.Double (grosor,grosor,ancho_sector_circular_externo,ancho_sector_circular_externo, 130,-80,Arc2D.PIE); Arc2D.Double sector_circular_interno_2 =new Arc2D.Double (8*grosor,8*grosor,ancho_sector_circular_interno,ancho_sector_circular_interno, 130,-80,Arc2D.PIE); Area area_1_2 = new Area(sector_circular_externo_2); Area area_2_2 = new Area(sector_circular_interno_2); area_1_2.subtract(area_2_2); g2.fill(area_1_2); //tercer tercio g2.setPaint(colorTercerTercio);//debe ser con transparencia Arc2D.Double sector_circular_externo_3 =new Arc2D.Double (grosor,grosor,ancho_sector_circular_externo,ancho_sector_circular_externo,50, -80,Arc2D.PIE); Arc2D.Double sector_circular_interno_3 =new Arc2D.Double (8*grosor,8*grosor,ancho_sector_circular_interno,ancho_sector_circular_interno,50, -80,Arc2D.PIE); Area area_1_3 = new Area(sector_circular_externo_3); Area area_2_3 = new Area(sector_circular_interno_3); area_1_3.subtract(area_2_3); g2.fill(area_1_3); g2.translate(-(int)(0.1*ancho),-(int)(0.1*ancho)); }
49
pigur PFITX
r PFIUF
Paso 2F
NextF
50
CAPTULO 2.
pigur PFIUX
isriir en el mpo Class NameD TableroInstrumentos y her li en FinishF il shi tom l form de l pigur PFPIF
Paso 5F Adicionar el JavaBean al IDE
her li derehoF e desplieg el popmen de l pigur PFPPF rer li en lete wngerF F F se desplieg l ventn de l pigur PFPQF
Paso 6F
51
pigur PFIVX
pigur PFIWX
52
CAPTULO 2.
pigur PFPHX
pigur PFPIX
53
pigur PFPPX
El Palette Manager
54
CAPTULO 2.
pigur PFPRX
Agregando el javabeans
rer li en Next y se desplieg l ventn de l pigur PFPSF rer li en Finish y se desplieg l ventn de l pigur PFPTF rer li en CloseF in el pnel Palette del shi pree el tvfens GaugeCircular disponile @pigur PFPUD retngulo rojoAF
Paso 7F Usarlo en el proyecto
del proyeto UsarGaugeCircularF in el pnel Project en Libraries pree hor Misy en el JFrame TableroInstrumentos pree hor insertdo un instni del tE
Beans.jar
55
pigur PFPSX
Agregando el javabeans
pigur PFPTX
Agregando el javabeans
56
CAPTULO 2.
pigur PFPUX
pigur PFPVX
57
el tprme instrumentos sgnele omo dministrdor de diseo un qridvyout de P (ls y P olumE ns y rrstre desde el pnel Palette del shi otrs tres instnis del tvfen GaugeCircularF iste tprme tendr hor el speto de l pigur PFPWF
pigur PFPWX
rer li sore el instrumento de l esquin superior izquierdX se desplieg el pnel PropertiesD pigur PFQHD que permite mir ls propieddes de est instni del tvfen @oloresDF F F AF is deir permite ustomizr l instni respetivF riendo mios en ls utro instnis se oE tuvo el tlero de l pigur PFQIF
Paso 10 X
en el pnel snspetor por los seldos en l pigur PFQPF gompilr l pliin y ejeutrlF e otiene l ventn ilustrd en l pigur PFQQF
58
CAPTULO 2.
pigur PFQHX
pigur PFQIX
59
pigur PFQPX
El poanel Inspector
pigur PFQQX
60
CAPTULO 2.
Captulo
JA VABEAN: GRAFICADOR
3.1.
Introduccin
n omponente de softwre muy importnte en un sistem de monitoreo y ontrol es un gr(E dorF in est unidd se onstruir un jven que se responsilie de est treY su elorin tomr omo se el pquete tpreeghrt W que es de lire distriuin y que permite gr(r todo tipo de dtos en diferentes tipos de vists @en modo de rrD de pstelD linelD et Epigur QFIEAF
pigur QFIX
TI
62
CAPTULO 3.
JAVABEAN: GRAFICADOR
pigur QFPX
3.2.
iste tvfens hr prte del pquete mis ens que se empez rer en l unidd PF
Paso 1F Paso2F
in el shi NetBeans rir el proyeto MisBeans de l unidd PF egregr un lse en el pquete mis beans denomind GracaXYF r logrr estoD
uir el ursor en el nodo del proyeto @MisBeansAD her li dereho y en el popmen desplegdo esoger NewbJava Class F F F y se desplegr l ventn de l pigur QFQF in el mpo Class Name esriir GracaXY y her li en el otn FinishF il speto del pnel Projects es hor el de l pigur QFRF
Paso 3F
golor del ponfo @golorpondoAX ipo golorF golor del pondo de l qr( @golorpondoqr(AX ipo golorF golor de l lne @golorvineAX ipo golorF golor de l lne de diujo @golorvinehiujoAX ipo golorF golor de los nmeros de ije @golorxumerosijeAX ipo golorF
63
pigur QFQX
pigur QFRX
64
CAPTULO 3.
JAVABEAN: GRAFICADOR
r esto uir el ursor en el nodo Bean Patterns de l lse GracaXY.javaD pigur QFSEeF rer li dereho y en el popmen desplegdo elegirD AddbProperty y se desplegr l ventn de l pigur QFSEfF in el mpo xme esriir golorpondo y en el mpo ype esriir golorF se
pigur QFSX
Asignar propiedades
le greg l propiedd simple golorpondo l tvfen qr(F epetir este pso pr ls dems propieddesF
Paso 4F Agregar las libreras necesarias de JFreeChart para construir esl javaBean Gra-
caXYF
ir el ursor en el nodo Libraries del proyeto MisBeansD her li dereho en Add JAR/Flder F F F D pigur QFTEeF se desplegr un ventn que le permite uir los rhivos desedosF egregrX
jfreechart-1.0.0-rc1.jar
pigur QFTEfF
Paso 5
import java.io.Serializable;
65
pigur QFTX
Agrregar libreras
import javax.swing.*; import org.jfree.data.*; import org.jfree.chart.*; import org.jfree.chart.plot.*; import org.jfree.data.xy.XYSeries; import java.awt.image.*; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.chart.JFreeChart; import org.jfree.data.xy.XYDataset; import org.jfree.chart.title.LegendTitle; import org.jfree.ui.RectangleEdge; import org.jfree.chart.axis.*; import org.jfree.chart.renderer.category.CategoryItemRenderer; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.renderer.xy.XYItemRenderer;
66
CAPTULO 3.
JAVABEAN: GRAFICADOR
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
SerializableF
de este tvfensF
67
colorNumerosEjeY=Color.GREEN; }
fensF
68
CAPTULO 3.
JAVABEAN: GRAFICADOR
//eje y NumberAxis y = (NumberAxis)plot.getRangeAxis(); y.setTickLabelsVisible(true); y.setTickMarksVisible(true); y.setAxisLineVisible(true); y.setNegativeArrowVisible(false); y.setPositiveArrowVisible(true); y.setVisible(true); y.setLabelFont(new Font("Dialog", Font.PLAIN, 8)); y.setTickLabelFont(new Font("Dialog", Font.PLAIN, 8)); y.setLabelPaint(Color.green); y.setTickLabelPaint(colorNumerosEjeY); //eje x NumberAxis x = (NumberAxis)plot.getDomainAxis(); x.setTickLabelsVisible(false); x.setTickMarksVisible(false); x.setAxisLineVisible(true); x.setNegativeArrowVisible(false); x.setPositiveArrowVisible(true); x.setVisible(true); //color de la lnea para dibujar final XYItemRenderer renderer = plot.getRenderer(); renderer.setSeriesPaint(0, colorLineaDibujo); BufferedImage image = chart.createBufferedImage(ancho,ancho); return image; } //mtodo para pintar la imagen en pantalla. public void paintComponent(Graphics g) { //Contexto grfico en java 2
69
ancho=this.getWidth(); Graphics2D g2 = (Graphics2D) g; //Mejora la calidad del dibujo con el antialising de java 2 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); grafica = this.crearImagen((int)(0.8*ancho)); g2.drawImage(grafica,(int)(0.1*ancho),(int)(0.1*ancho),null); }
ir el ursor en el nodo del proyetoD MisBeansD y her li derehoF in el popmen desplegdo her li en Build ProjectF hirigirse l rpet dist del diretorio donde se enuentr lojdo el proyeto y se enontrr el rhivo MisBeans.jarF iste rhivo ontiene los dos ens que hst hor se hn onstruidoX GaugeCircular y GracaXYF iste rhivo es el que se distriuye pr ser usdo en los proyetosF
3.3.
Paso 1 X
se desplegr l ventn de l pigur QFUF isoger GeneralbJava AplicattionD heer li en Next y se desplegr l ventn de l pigur QFVF in el mpo Project Name esriir UsarMisBeansY destivr los hekox y her li en FinishF il speto del pnel rojets del shi es el de l pigur QFWF
Paso 2F
esoger NewbJFrame Form F F F D pigur QFIHF e desplegr l ventn de l pigur QFIIF in el mpo Class Name esriir TableroInstrumentos y her li en FinishF il pnel Projects del shi dopt l form de l pigur QFIPF
70
CAPTULO 3.
JAVABEAN: GRAFICADOR
pigur QFUX
pigur QFVX
71
pigur QFWX
pigur QFIHX
72
CAPTULO 3.
JAVABEAN: GRAFICADOR
pigur QFIIX
pigur QFIPX
73
pigur QFIQX
Paso 4F
in el pnel Palette her li dereho sore ens y se desplegr el popmen de l piguE isoger beans bAdd from JAR F F F e desplegr un ventn que le permitir inorporr
el pquete MisBeans.JarF hespus de este pso el pnel Palette deer tener l form de l piE gur QFISD en donde preen los dos ens inorpordos l shi @GaugeCircular y GracaXYAF
Paso 6 X Adicionar los paquetes que usa los javabeans de MisBeansF
en el nodo virries del proyeto UsarMisBeansD her li dereho en Add JAR/FlderF F F D pigur QFITEeF y se desplegr un ventn que le permite uir los rhivos desedosF egregrX
jfreechart-1.0.0-rc1.jar
74
CAPTULO 3.
JAVABEAN: GRAFICADOR
pigur QFIRX
Palette Manager
pigur QFISX
75
pigur QFITEfF
Paso 7 X Usar los beansF
pigur QFITX
in el pnel Inspector @pigur QFIUA uir el ursor en el nodo JFrameD her li dereho y en el popmenu desplegdo @pigur QFIVA elij Set LayoutbGridlayoutF iste gridlyout tmelo de R olumns y P (lsF
Paso 8 X
errstre desde Palette hi el JFrameD R instnis del en GaugeCircular y R insE e d unos de los V omponentes diionrles ordes mrdos omo lo ilustr l in d uno de los ens de los medidores mir ls propieddes de enomre el nomre de ls instnis de
tnis del en GracaXY de tl form que el JFrame dquier l form de l pigur QFIWF
Paso 9 XAliosF
pigur QFPHF
Paso 10 XCustomizacinF
ListoF
76
CAPTULO 3.
JAVABEAN: GRAFICADOR
pigur QFIUX
pigur QFIVX
77
pigur QFIWX
pigur QFPHX
78
CAPTULO 3.
JAVABEAN: GRAFICADOR
pigur QFPIX
pigur QFPPX
79
pigur QFPQX
80
CAPTULO 3.
JAVABEAN: GRAFICADOR
Captulo
JA VABEAN:TABLA DE DATOS
4.1.
Introduccin
n form de visulizr dtos es desplegndolos en un tlF v lirer jvxFswing de tv posee l lse tle que permite relizr estoY sin emrgo l in repetitiv @es deirD si es neesrio her uso de vris tlsA es engorros pr el progrmdorF r filitr est in se onstruir un tvfen que permit usr tls de mner senillF or ejemplo en l pigur RFI se ilustr un pliin que desplieg utro tlsF iss tls son instnis @utro en este soA del tvfen que se explir su implementin en l presente uniddF
4.2.
il tvfen h implementr se denominr lFjv y sus propieddes ustomizles sern @pigur RFPAX golor del fondo @golorpondoAX ipo golorF golor de los nmeros @golorxumerosAX ipo golorF golor de ls grills @golorqrillsAX ipo golorF xomre de l olumn x @xomregolumnAX ipo tringF VI
82
CAPTULO 4.
JAVABEAN:TABLA DE DATOS
pigur RFIX
xomre de l olumn y @xomregolumnAX ipo tringF wostrr ls lnes horizontles @wostrrvinesrorizontlesAX ipo oolenF wostrr ls lnes vertiles @wostrrvinesertilesAX ipo oolenF wostrr ls grills @wostrrqrilsAX ipo oolenF
4.3.
iste tvfens hr prte del pquete mis ens que se empez rer en l unidd P y se ontinu en l unidd QF
Paso 1F Paso2F
uir el ursor en el nodo del proyeto @MisBeansAD her li dereho y en el popmen desplegdo esoger NewbJava ClassF F F y se desplegr l ventn de l pigur RFQF in el mpo Class Name
83
pigur RFPX
esriir Tabla y her li en el otn FinishF il speto del pnel Projects es hor el de l pigur RFRF
Paso 3F
golor del fonfo @golorpondoAX ipo golorF golor de los nmeros @golorxumerosAX ipo golorF golor de ls grills @golorqrillsAX ipo golorF xomre de l olumn x @xomregolumnAX ipo tringF xomre de l olumn y @xomregolumnAX ipo tringF wostrr ls lnes horizontles @wostrrvinesrorizontlesAX ipo oolenF wostrr ls lnes vertiles @wostrrvinesertilesAX ipo oolenF wostrr ls grills @wostrrqrilsAX ipo oolenF r esto uir el ursor en el nodo Bean Patterns de l lse Tabla.javaD pigur RFSEeF rer li dereho y en el popmen desplegdo elegirD AddbProperty y se desplegr l ventn de l pigur RFSEfF in el mpo Name esriir ColorFondo y en el mpo Type esriir ColorF se le greg l propiedd simple ColorFondo l tvfen TablaF epetir este pso pr ls dems propieddesF
84
CAPTULO 4.
JAVABEAN:TABLA DE DATOS
pigur RFQX
pigur RFRX
85
pigur RFSX
Paso 4 X
egregr l lse Tabla.java el digo que import los pquetes neesrios pr l onsE
egregr el digo que extiende l lse JPanel y que implement l interfe SerializableD
86
CAPTULO 4.
JAVABEAN:TABLA DE DATOS
de este tvfensD
fensD
87
modelo.addColumn(nombreColumnaX); modelo.addColumn(nombreColumnaY); tabla.setModel(modelo); } /** * Asigna los valores (x,y) para la tabla de datos */ public void setValoresTabla(double x, double y){ //incremetar dinmicamente el nmero de filas necesario contador=contador+1; Object [] fila = new Object[3]; fila [0]=""+contador; fila [1]=""+x; fila[2]=""+y; modelo.addRow(fila); } /** * Borra todos los datos de la tabla */ public void borrarDatos(){ while ( modelo.getRowCount() > 0 ) { modelo.removeRow(0); } contador=0; }
del enX
88
CAPTULO 4.
JAVABEAN:TABLA DE DATOS
89
public void setMostrarLineasHorizontales(boolean mostrarLineasHorizontales) { this.mostrarLineasHorizontales = mostrarLineasHorizontales; tabla.setShowHorizontalLines(mostrarLineasHorizontales); } public void setMostrarLineasVerticales(boolean mostrarLineasVerticales) { this.mostrarLineasVerticales = mostrarLineasVerticales; tabla.setShowVerticalLines(mostrarLineasVerticales); } public void setColorGrillas(Color colorGrillas) { this.colorGrillas = colorGrillas; tabla.setGridColor(colorGrillas); }
er li derehoF in el popmen desplegdo her li en Build ProjectF hirigirse l rpet dist del diretorio donde se enuentr lojdo el proyeto y se enontrr el rhivo MisBeans.jarF iste rhivo ontiene los tres ens que hst hor se hn onstruidoX GaugeCircularD GracaXY y
TablaF
iste rhivo es el que se distriuye pr ser usdo en los proyetosF r filitr el uso por tereros del pquete mis ens es neesrio herle l doumenE
Paso 11F
tin on javadocF r esto esoger BuildbGenerate Javadoc for MisBeans @pigur RFTA y se generr l doumentin respetiv l ul se uir en l rpet dist en un surpet denomind javadocF v doumentin mejorr en l medid que se greguen yuds en los oE mentrios de los ensD por ejemploX iste mtodo sirve pr mir el nomre de l olumn F F F F in de(nitiv en l distriuin de los ens se entregr tod l rpet distF
90
CAPTULO 4.
JAVABEAN:TABLA DE DATOS
pigur RFTX
4.4.
Paso 1
unidd nteriorF r esto rir el proyeto MisBeans que se desrroll en l sein es sein y vuelv importr MisBeans en Libraries @pigur RFUAF in este so MisBeans.jar ontendr los tres ens desrrolldos en ests notsX GaugeCircular.javaD GracaXY.java y Tabla.javaF
Paso 2 X
pigur RFUX
Paso 3
gregr utro instnis del en TablaX pr esto proed omo lo ilustr l pigur RFWF
91
pigur RFVX
gmir los nomres ls vriles que se re(eren ests instnis del en tl y omo lo ilustr l pigur RFIHF
Paso 4F
lerosnstrumentosFjvX
92
CAPTULO 4.
JAVABEAN:TABLA DE DATOS
pigur RFWX
pigur RFIHX
93
tabla_iluminancia.setValoresTabla(245,6); tabla_iluminancia.setValoresTabla(345,47); tabla_iluminancia.setValoresTabla(409,8); tabla_iluminancia.setValoresTabla(522,16); tabla_iluminancia.setValoresTabla(545,162); tabla_iluminancia_fotosintetica.setValoresTabla(10,108); tabla_iluminancia_fotosintetica.setValoresTabla(22,148); tabla_iluminancia_fotosintetica.setValoresTabla(45,47); tabla_iluminancia_fotosintetica.setValoresTabla(109,8); tabla_iluminancia_fotosintetica.setValoresTabla(122,106); tabla_iluminancia_fotosintetica.setValoresTabla(245,6); tabla_iluminancia_fotosintetica.setValoresTabla(345,47); tabla_iluminancia_fotosintetica.setValoresTabla(409,8); tabla_iluminancia_fotosintetica.setValoresTabla(522,16); tabla_iluminancia_fotosintetica.setValoresTabla(545,162); tabla_temperatura.setValoresTabla(10,28); tabla_temperatura.setValoresTabla(22,26); tabla_temperatura.setValoresTabla(45,27); tabla_temperatura.setValoresTabla(109,28); tabla_temperatura.setValoresTabla(122,26); tabla_temperatura.setValoresTabla(245,26); tabla_temperatura.setValoresTabla(345,27); tabla_temperatura.setValoresTabla(409,28); tabla_temperatura.setValoresTabla(522,26); tabla_temperatura.setValoresTabla(545,22); tabla_humedad_relativa.setValoresTabla(10,68); tabla_humedad_relativa.setValoresTabla(22,66); tabla_humedad_relativa.setValoresTabla(45,67); tabla_humedad_relativa.setValoresTabla(109,68);
94
CAPTULO 4.
JAVABEAN:TABLA DE DATOS
los olores @pigur RFIIAF gompile y ejeute l pliinF heer preer un ventn omo l ilustrd en l pigur RFIF visto3
pigur RFIIX
Captulo
5.1.
Introduccin
vs tenologs inlmris @wirelessA se estn imponiendo sore ls tenologs lmris y hy diferentes rzones por ls ules suede estoX el lto osto de los les y de mno de orD el jo tiempo de implementin de los sistems wireless y su eso limpioD senillo y rto serviios y redes de eleomuniinF in los ltimos osD en prlelo l despliegue de l elefon mvil de terer generinD w @niversl woile elephone ervieAD se hn estndrizdo y desrrolldo un grn nmero de nuevs tenologs inlmrisX ls redes inlmris personles omo
Bluetooth
rey dns y noruego rrld fltnd uy trduin l ingls ser rrold fluetoothD onoido por uen omunidor y por uni(r ls trius noruegsD sues y dnessY es el protoolo siii VHPFISFIA y
ZigBee
@su nomre proviene deX zumido de ls ejsY es el protoolo siii VHPFISFRAD ls redes @Worldwide Interoperility Mirowve AessY es el protoolo siii VHPFITAF
loles omo WiFi @Wireless FidelityY es el protoolo siii VHPFIIA y ls redes metropolitns omo
WiMAX
in l pigur SFI se ilustr un omprin en unto usos entre vris de ests tenologsF i se oservD igfee es l idel pr empler en un red inlmri de senosres pr efetos de monitoreo y ontrolD y que en este tipo de pliiones l trnsmisin de dtos no requieren un grn nho de ndD pero si un mnimo onsumo energtio y un j lteniF iste es el tipo de red que interes en ls presentes notsF in l pigur SFP se ilustr diferentes pliiones que se pueden WS
96
CAPTULO 5.
pigur SFIX
5.2.
ZigBee
5.2 ZigBee
97
pigur SFPX
Aplicaciones ZigBee
98
CAPTULO 5.
que los que siguen los estndres fluetooth o ipiF esD en entornos gresivos rdioeltrimenteD omo es l muy sturd nd de PFR qrzD igfee se omport muho mejorF v ond eletromgnti portdor en este protoolo orresponde un de ls siguientes ndsX PFR qrzX IT nles y veloidd de trnsmisin de dtos igul PSH kpsF gonoid omo nds sw @sndustrilD ienti( nd wedilX PFRHSEPFRVH qrzAF il nho de nd de los nles es S wrzF er pigur SFQF VTVFQ wrz X un nl y veloidd de trnsmisin de dtos igul PH upsFil nho de nd del nl es P wrzF WHPEWPV wrzX IH nles y veloidd de trnsmisin de dtos igul RH upsF il nho de nd de los nles es de P wrzF
pigur SFQX
v myor de frintes optn por l primer nd @PFR qrzAD y que puede ser usd en todo el mundoD mientrs que ls dos ltims slo se plin en istdos nidos y iuropD respetivmenteF il lne es del orden de IH m @l tenolog de l red igfee implementd en ests nots permiten lnes del orden de IHH m
indoor
y de IFS km
outdoor AF
gomo interfz igfee utiliz l tni h @Diret SequeneSpred SpetrumA on distints modulionesX fu @Binry Phse Shift KeyingA pr ls freuenis VTV y WIS y yEu @O'set
Qudrture Phse Shift KeyingA
5.2 ZigBee
99
pigur SFRX
100
CAPTULO 5.
5.2.3. Topologa
v p de red @xuA une o sepr dispositivos trvs del ontroldor de redD implement seguriddD y enmin trms sus respetivos destinosF edemsD l p de red del ontroldor de red es responsle de rer un nuev red y signr direiones los dispositivos de l mism IHF v p de red soport mltiples on(guriones de red inluyendo estrellD rolD y mllD omo se muestr en l pigur SFSFn red igfee puede eslr hst TSFSQT nodos @216 AD grupdos en suredes de hst PSS nodos @fluetooth solo dmite V nodosAD lo que l he ms que su(iente pr urir ulquier neesiddF in ulquier de ls suredes siempre existe un nio nodo oordindor entrl @que puede tur omo un hu o un routerAD enrgdo de l dquisiin de dtos y gestin de ruts entre dispositivosF stos pueden tener funionlidd omplet o reduidF in este so durnte l myor prte del tiempoD mntienen el trnseiver igfee dormido on ojeto de reduir el onsumo l mnimoD pudiendo psr l estdo tivo en menos de IS milisegundosF il ojetivo es que un sensor equipdo on est tenolog pued ser limentdo on dos pils ee un periodo de entre seis meses y dos osD unque en l prti se h veri(do que se podrn onseguir si ino os de durin en ls pliiones de domti y seguriddF gomo se puede oservr en l pigur SFS igfee tiene tres tipos de dispositivosX il oordindor de redD que mntiene en todo momento el ontrol del sistemF is el ms so(stido de los tipos de dispositivosD requiere memori y pidd de omputinF il dispositivo de funin omplet @pphA pz de reiir mensjes del estndr VHPFISFRF iste puede funionr omo un oordindor de redF v memori diionl y l pidd de omputrD lo hen idel pr her ls funiones de outer o pr ser usdo en dispositivos de red que ten de interfe on los usuriosF il dispositivo de funin reduid @phA de pidd y funionlidd limitds @espei(d en el estndrA pr el jo oste y simpliiddF on los sensoresGtudores de l redF
5.2.4. La trama
v p fsi inluye diionlmente sistems de detein de energ reiid ih @inergy hetetionAD de indiin de l lidd del enle vs @vink ulity snditionA y de explorin de
5.2 ZigBee
101
Topologa ZigBee
oport tnto direiones de TR its @propuest de siiiA omo direiones orts de IT itsD que permiten el direionmiento de TSFSQT @216 A dispositivosD dems de posiilitr l soiin y disoiin de redesF r operrD el estndr oper on utro tipos o estruturs de trmX rm de lizdo pr l trnsmisin de lizs @feon frmesAF rms de dtosF rms de sentimiento pr on(rmr l reepin @eknowledgement frmeAF rms de omndos wegF xo vmos entrr en el detlle de tods ls trmsD mxime undo result similr otros protoolos de trnsmisin de dtos on on(rmin @eguAF xo ostnteD es importnte prrnos un momento en el primer tipo de trm desritoF in efetoD medinte ls supertrms on liz @Superframes with beaconA se permite l sinE ronizin de todos los dispositivos de un red sin neesidd que estn permnentemente en
102
CAPTULO 5.
pigur SFTX
Tramas ZigBee
modo de esuhD on el importntsimo horro de energ que esto representF vos nodos solo despiertn undo se provo un rodst de un supertrmY si l direin no oinide on l del nodoD se vuelv l estdo dormidoF in l pigur SFT se represent el formto de un supertrmF e estlee priori un perodo entre lizsD que osil entre ISDQV msegF y PSP msegF il oorE dindor estlee en ese intervlo IT espios de tiempo o slots idntiosD por lo que el eso l nl es sin ontiendF il eso l nl individulD sin emrgoD est sdo en ontiendF in emrgoD el nodo oordindorD que de(niremos on posterioriddD siempre reserv U slots de d intervlo pr tr(o grntizdo @q gurnteed timed slotsA pr segurr un mejor liddF
5.3.
El hardware
v red que se implement en ests nots est ompuest por vris estionesD d un de ls ules posee vris uniddes sensorsGemisors igfeeD tl y omo se ilustr en l pigur SFUF n unidd reeptor igfee reoge ls seles @dtosA y los entreg un omputdor personl v el puerto seril PQPF e ontinuin se hr un desripin de los omponentes sios del hrdwre de l redF
5.3 El hardware
103
pigur SFUX
Estacin de red.
pigur SFVX
104
CAPTULO 5.
pigur SFWX
P de luminosidd @VT43N1
I de infrrrojo @OP593
5.3 El hardware
105
pigur SFIHX
Chip XBee-Pro
frecuencia
Potencia Indoor Outdoor Rata de transmisin Nmero de canales Tamao Topologa de red Tipo espectro Voltaje Sensibilidad de recepcin Encriptacin
2.4 GHz
60 mW (18 dBm) 100 m 1.5 Km 250 Kps 12 2.438 cm X 3.294 cm peer-peer, punto-punto y punto-multipunto DSSS 2.8-3.4 V -100 dBm 128-bit AES
106
de Optek technology .inc A
CAPTULO 5.
de AUPAX
#use rs232(baud=9600, xmit=pin_c6,rcv=pin_c7) #include <sht11.h> int pp=3; long lectura_adc[4]; void lectura_sht11(); void mostrar_temp_hum(); void ADC(); unsigned int8 temp_actual, humedad_actual; typedef union { int16 i; float f; } valor; valor humedad, temperatura; byte errorsht11,checksum; void main()
5.3 El hardware
107
{ setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); sht11_hard_reset(); while(true) { output_b(32); delay_ms(30); output_b(16); delay_ms(30); output_b(8); delay_ms(30); output_b(4); delay_ms(30); output_b(2); delay_ms(30); output_b(1); lectura_sht11(); ADC(); mostrar_temp_hum(); DELAY_MS(1000);
108
CAPTULO 5.
} } /*Funcion que se encarga de la lectura del sensor Humedad y Temperatura*/ void lectura_sht11(void) { errorsht11=0; //measure humidity errorsht11+=sht11_medicion((byte*) &humedad.i, &checksum, HUMI); //measure temperature errorsht11+=sht11_medicion((byte*) &temperatura.i, &checksum, TEMP); //in case of an error: connection reset if(errorsht11!=0) { printf("\n\rerror:%U", errorsht11); sht11_hard_reset(); } else { //converts integer to float humedad.f=(float)humedad.i; //converts integer to float temperatura.f=(float)temperatura.i; //calculate humidity, temperature sht11_calculos(&humedad.f, &temperatura.f); temp_actual = temperatura.f; humedad_actual = humedad.f; } }
5.3 El hardware
109
/** funcion que envia por el serial los datos */ void mostrar_temp_hum(void) { printf("%c",'A'); printf("%uA",1); printf("%c",'B'); printf("%uB",1); printf("%c",'C'); printf("%LuC",lectura_adc[0]); printf("%c",'C'); printf("%uC",temp_actual); printf("%c",'C'); printf("%uC",humedad_actual); FOR(pp=2;pp<4;pp++){ printf("%c",'C'); printf("%u",0); printf("%c",'C'); } pp=0; printf("%c",'\n'); delay_ms(500);
110
CAPTULO 5.
} /*funcion que hace las lecturas ADC*/ void ADC(){ setup_adc(ADC_CLOCK_INTERNAL); setup_adc_ports(ALL_ANALOG); set_adc_channel(0); delay_us(10); lectura_adc[0]=read_adc(); setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); }
5.3 El hardware
111
pigur SFIIX
112
CAPTULO 5.
pigur SFIPX
5.3 El hardware
113
pigur SFIQX
Caja sensora
114
CAPTULO 5.
pigur SFIRX
5.3 El hardware
115
pigur SFISX
116
CAPTULO 5.
pigur SFITX
Caja receptora
5.3 El hardware
117
pigur SFIUX
118
CAPTULO 5.
pigur SFIVX
5.3 El hardware
119
pigur SFIWX
120
CAPTULO 5.
Captulo
PAQUETE: COMUNICACIN
6.1.
Introduccin
EPQP @tmin onoido omo iletroni sndustries elline EPQPgA es un protoolo de oE muniin pr el intermio en serie de dtos inrios entre un hi @Dt Terminl EquipmentA y un hgi @Dt Communition EquipmentAF in osiones interes onetr otro tipo de equiE pmientosD omo pueden ser omputdoresF ividentementeD en el so de interonexin entre los mismosD se requerir l onexin de un hi on otro hiF in est unidd se implementr el pquete de omuniin PQP @com_sensorA el ul se emE pler pr ls omuniiones de los sensoresF in l sein TFQ se hr est implementinF in l siguiente sein se hr un reve desripin del hrdwre soido este protoolo de omuE niin @PQPAF
6.2.
El hardware RS232
il EPQP onsiste en un onetor tipo hfEPS @de PS pinesAD unque es norml enontrr l versin de W pines @hfEWAD ms rto e inluso ms extendido pr ierto tipo de perifrios @omo el rtn serie del gAD pigur TFIF IPI
122
CAPTULO 6.
PAQUETE: COMUNICACIN
pigur TFIX
Conectores RS232
123
Seal
Carrier Detect Received Data Transmit Data Data Terminal Ready System Ground Data Set Ready Request to Send Clear to Send Ring Indicator CD RXD TXD DTR GND DSR RTS CTS RI
PIN DB9
1 2 3 4 5 6 7 8 9
Direccin
l TFIX PQP de )ujo tl que l dispositivo ms lento le de tiempo de proesr l informinF vs lnes de 4hnd shking4que permiten her este ontrol de )ujo son ls lnes y gF vos disedores del estndr no oniieron ests lnes pr que funionen de este modoD pero dd su utilidd en d interfz posterior se inluye este modo de usoF
124
CAPTULO 6.
PAQUETE: COMUNICACIN
v impedni de rg tendr un resisteni hg de menos de UHHH l medir on un voltje plido de entre Q PS pero myor de QHHH undo se mid on un voltje de menos de PS F gundo l resisteni de rg del termindor enuentr los requerimientos de l regl R nE teriormente dihD y el voltje del termindor de iruito ierto est H D l mgnitud del potenil de ese iruito on respeto ignl qround estr en el rngo de S IS F il driver de l interfz mntendr un voltje entre ES EIS reltivos l sel de Signal
Ground
de entre S IS reltivos Signal Ground pr simolizr un sel de iegsyF ysrvese que est regl junto on l egl QD permite P de mrgen de ruidoF in l prtiD se utilizn EIP y IP respetivmenteF il driver mir el voltje de slid hst que no se exedn QH V /sD pero el tiempo requerido l sel pr psr de EQ CQ de l regin de trnsiin no podr exeder I msD o el 4 % del tiempo de un itF v desviin de pitni del termindor no exeder los PSHH pF D inluyendo l piE tni del leF ysrvese que undo se est usndo un le norml on un pitni de RH SH pF/pie de longitudD esto limit l longitud de le un mximo de SH piesD @IS mAF n pitni del le inferior permitir reorridos de le ms lrgosF v impedni del driver del iruito estndo pgdo deer ser myor que QHH F
st es l sel por
medio del ul el hgi inform l hi que tiene un portdor entrnteF uede ser usdo por el hi pr determinr si el nl est desoupdoD y que el hi pued pedir un F elgunos his deen tener un hgh entrnte ntes que ellos puedn operrF in este soD est sel dee ser trd desde el hgiD o proved @pF ejF desde hA por un ortoD lolmente l hiF
125
los dtos se envn desde el hgi l hiF ist lne dee estr presente si los dtos deen vijr en es direin en un momento ddoF
3 TXD, Transmit Data, Datos de transmisin.
del ul los dtos se envn desde el hi l hgiF iste iruito dee estr presente si los dtos deen vijr en es direin en ulquier momentoF
4 DTR, Data Terminal Ready, Terminal de datos listo.
que inform l hgi que el hi est vivo y ienF is normlmente puest yx por el hi l enenderse esteF n hgi tpio deer tener un h entrnte (n de desemperse normlmenteF ist sel deer ser trd desde el hiD o provedo por un orto lolmente l hgi si no existe @pF ejF desde hAF ore el ldo del hiD est sel est si siempre presenteD y puede volverse trs @pF ejF hD g o hghA pr stisfer ls selesD @pF ejF hnd shkingA requeridsD uy funin tmpoo est implementdF
5 CG, Chassis Ground, Tierra del chasis.
ms del udroA es un menismo pr segurr que los hsis de los dos dispositivos estn l mismo potenilD y pr impedir un desrg eltri l operdorF iste iruito no es usdo omo refereni por ningn otro voltje y es opttivoF i se usD deer tomrse lgun preuin pr no rer ules de tierrF is l tierr de seguridd del sistemF
6 DSR, Data Set Ready, Datos prepadados.
que el hgi est vivo y ienF is normlmente puest yx por el hgi l enenderse esteF n hi tpio deer tener un h entrnte (n de desemperse normlmenteF i no existe est lneD dee ser trd desde el hgiD o provist por un orto lolmente l hi @por ejemplo desde hAF ore el hgiD est sel est si siempre presenteD y puede volverse trs @ h o A pr stisfer ls seles requerids uy funin no est implementdF
7 RTS, Request To Send, Peticin de envo.
hi dese envir dtos l hgiD @ningun otr lne est disponile pr l direin opuestD de qu en delnte el hi dee estr siempre listo pr eptr dtosAF in operin normlD
126
CAPTULO 6.
PAQUETE: COMUNICACIN
l lne de estr yppD @I lgio o wegeAF n vez que el hi tiene los dtos pr envirD y hn determindo que el nl no est oupdoD olor yxD @H lgio o iegsyAD y esperr un estdo yx en el g desde el hgiD l tiempo que puede entones omenzr envirF n vez que el hi ulmino el envoD vuelve (jr yppD @I lgio o wegeAF ore un nl full duplex o simplexD est sel puede olorse yx un vez en l iniilizin y quedr en est ondiinF elgunos hgis deen tener un entrnte (n de poder trnsmitirD @unque esto no sigue estritmente el estndrAF in este soD est sel deer ser trd desde el hiD o proved por un ortoiruito @pF ejF desde hAD lolmente l hgiF
8 CTS, Clear To Send, Limpieza de envo.
est preprdo pr eptr dtos desde el hiF in operin normlD l lne g estr en l ondiin yppF gundo el hi on(rm D el hgi hr lo que se neesrio pr permitir que los dtos sen envidosD @pF ejF un mdem lzr l portdorD y esperr hst que se estilieAF in este momentoD el hgi olor g l ondiin yxD que permitir entones l hi envir dtosF gundo l lne desde el hi retorn l ondiin yppD el hgi desrg el nl @pF ejF un mdem jr l portdorAD y entones g restur l ondiin yppF n hi tpio dee tener un g entrnte ntes que pued trnsmitirF i no existe est selD deer ser trd desde el hgiD o proved por un ortoiruito lolmente l hi @pF ejF desde hAF
127
Conexin RS 232 a PC
DB9 PC2
3 2 6+1 5 4 8 7
rnsmit ht eeive ht ht et edy C grrier hetet ystem qround ht erminl edy gler to end equest to end
+ Carrier Detect
6+1 7 8
128
CAPTULO 6.
PAQUETE: COMUNICACIN
pigur TFQX
pigur TFRX
129
ltimos porttilesAF v eletrni de l onexin se loj en el onetor hfWFhe diseo senillo y ompto en un solo leD pigur TFSF
pigur TFSX
6.3.
e h preferido implementr un pquete de omuniin (com_sensor) pto pr ls oE muniiones de los sensores en lugr de un tvfenF in ests nots slo se implementr l omuniin PQPY sin emrgo on el tiempo se le puede diionr otros protoolosF il pquete com_sensor tendr tres lsesX un que mnejr los prmetros de omuniin seril PQP @veloidd de trnsmisinD its de los dtosD priddDF F F A y se denominr ParametrosPuertoSerial.javaD
permitir l usurio on(gurr los prmetros de omuniin seril PQP y se denominr ConguracionRS232.java
130
CAPTULO 6.
PAQUETE: COMUNICACIN
pigur TFTX
de l x mirosystemsF r esto se deen seguir los siguientes psos @en indowsAX vo primero que se he es otener el es de omuniionesY este se puede jr filmente de snternet y que no oup ms de QHH uF e desempquet el (heroF e opi el (hero inQPomFdll en GjreGinF e opi el rhivo ommFjr en GjreGliGextF e opi jvxFommFproperties en GjreGliF qued list l pltform thu pr her los desrrollosF sgulmenteD undo se distriuyn ls pliiones se deen seguir los mismos psos nteriores en el JRE (Java Runtime Environment)F
131
erir el shi xetfens SFSF il estdo de l ventn es el de l pigur TFUF erir el proyetoX rer li en File b New Project. . . y se rir l ventn de l
Paso 2F
so QF ilegir GeneralbJava Application y Next y se desplieg l ventn de l pigur TFWF F in el mpo Project Name esriir ProyectoPruebaComponenteSerial @o el nomre desedo del proyetoAY en el mpo Project Location elegir el diretorio donde uir este proyetoF in el mpo greate Main Class mir Main por PruebaComopneneteSerial y her li en
FinishF
il speto del shi es el de l pigur TFIHF smplementr l lse ParametrosPuertoSerial ir el ursor en el nodo del proyeto in l ventn desplegd @pigur TFIIA esriir en el mpo Package
Paso 4F
ir el ursor en el nodo com_sensor y her li derehoY se desplieg el popmen de l piguE r TFIQF isoger Java Class. . . y se desplieg l ventn de l pigur TFIRD
132
CAPTULO 6.
PAQUETE: COMUNICACIN
pigur TFVX
133
pigur TFWX
pigur TFIHX
134
CAPTULO 6.
PAQUETE: COMUNICACIN
pigur TFIIX
135
pigur TFIPX
in el mpo Class NameD esriir ParametrosPuertoSerialF il speto del shi es el de l pigur TFISD gompletr el digo de l lse on el siguiente digoD
Esta clase guarda los parmetros para el puerto serial. */ public class ParametrosPuertoSerial { private String nombrePuerto; private int baudiosRata; private int bitsdatos;
136
CAPTULO 6.
PAQUETE: COMUNICACIN
pigur TFIQX
137
pigur TFIRX
138
CAPTULO 6.
PAQUETE: COMUNICACIN
pigur TFISX
139
private int bitsparada; private int paridad; /** Constructor por defecto. Asigna los parmetros al puerto, 9600 baud,datos ded 8 bits, 1 bit de parada, no paridad. */ public ParametrosPuertoSerial () { this("", 9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE ); } /** Constructor con parmetros. */ public ParametrosPuertoSerial(String nombrePuerto, int baudiosRata, int bitsdatos, int bitsparada, int paridad) { this.nombrePuerto = nombrePuerto; this.baudiosRata = baudiosRata; this.bitsdatos= bitsdatos; this.bitsparada = bitsparada; this.paridad = paridad; } /** Asigna nombre al puerto
140
CAPTULO 6.
PAQUETE: COMUNICACIN
*/ public void setNombrePuerto(String nombrePuerto) { this.nombrePuerto = nombrePuerto; } /* Obtiene el nombre del puerto. */ public String getNombrePuerto() { return nombrePuerto; } /** Asigna los baudios. */ public void setBaudiosRata(int baudiosRata) { this.baudiosRata = baudiosRata; } /** Asigna los baudios. */ public void setBaudiosRata(String baudiosRata) { this.baudiosRata = Integer.parseInt(baudiosRata); } /** Obtiene los baudios como un int */ public int getBaudiosRata() { return baudiosRata; } /**
141
Obteiene los baudios como un String */ public String getBaudiosRataString() { return Integer.toString(baudiosRata); } /** Asigna los bits de los datos. */ public void setBitsdatos(int bitsdatos) { this.bitsdatos= bitsdatos; } /** Asigna los bits de los datos. */ public void setBitsdatos(String bitsdatos) { if (bitsdatos.equals("5")) { this.bitsdatos = SerialPort.DATABITS_5; } if (bitsdatos.equals("6")) { this.bitsdatos = SerialPort.DATABITS_6; } if (bitsdatos.equals("7")) { this.bitsdatos = SerialPort.DATABITS_7; } if (bitsdatos.equals("8")) { this.bitsdatos = SerialPort.DATABITS_8; } } /**
142
CAPTULO 6.
PAQUETE: COMUNICACIN
Obtiene los bits de los datos como un int */ public int getBitsdatos() { return bitsdatos; } /** Obtiene los bits de los datos como un String */ public String getBitsdatosString() { switch(bitsdatos) { case SerialPort.DATABITS_5: return "5"; case SerialPort.DATABITS_6: return "6"; case SerialPort.DATABITS_7: return "7"; case SerialPort.DATABITS_8: return "8"; default: return "8"; } } /** Obtiene los bits de parada. */ public void setBitsparada(int bitsparada) { this.bitsparada = bitsparada; } /**
143
Obtiene los bits de parada. */ public void setBitsparada(String bitsparada) { if (bitsparada.equals("1")) { this.bitsparada = SerialPort.STOPBITS_1; } if (bitsparada.equals("1.5")) { this.bitsparada = SerialPort.STOPBITS_1_5; } if (bitsparada.equals("2")) { this.bitsparada = SerialPort.STOPBITS_2; } } /** Obtiene los bits de parada como un int */ public int getBitsparada() { return bitsparada; } /* Obtiene los bits de parada como un string. */ public String getBitsparadaString() { switch(bitsparada) { case SerialPort.STOPBITS_1: return "1"; case SerialPort.STOPBITS_1_5: return "1.5"; case SerialPort.STOPBITS_2:
144
CAPTULO 6.
PAQUETE: COMUNICACIN
return "2"; default: return "1"; } } /** Asigna la paridad */ public void setParidad(int paridad) { this.paridad = paridad; } /** Asigna la paridad */ public void setParidad(String paridad) { if (paridad.equals("None")) { this.paridad = SerialPort.PARITY_NONE; } if (paridad.equals("Even")) { this.paridad = SerialPort.PARITY_EVEN; } if (paridad.equals("Odd")) { this.paridad = SerialPort.PARITY_ODD; } } /** Obtiene la paridad como un int */ public int getParidad() {
145
return paridad; } /** Obtiene la paridad como un string */ public String getParidadString() { switch(paridad) { case SerialPort.PARITY_NONE: return "None"; case SerialPort.PARITY_EVEN: return "Even"; case SerialPort.PARITY_ODD: return "Odd"; default: return "None"; } } /** Metodo para imprimir la configuracin del puerto */ public void print(){ System.out.println(nombrePuerto+", "+baudiosRata+", "+bitsdatos+", "+bitsparada+", "+getParidadString());} }
ilegir JFrame Form. . . y en l ventn desplegd @pigur TFIUA esriir en Class Name
146
CAPTULO 6.
PAQUETE: COMUNICACIN
pigur TFITX
147
pigur TFIUX
ir el ursor en el nodo JFrame del pnel InspectorF ilegir omo dministrdor de diseo
Gridlayout
el pnel jPanel_puerto_serial diionr @sin dministrdor de diseoY o se lire @Free DesignY si se quiere se puede utilizr otroA un etiquet y un j de selein on los nomres y spetos de l (gur TFIWF el pnel jPanel_velocidad_transferencia diionr @sin dministrdor de diseoY o se lire @Free DesignY si se quiere se puede utilizr otroA un etiquet y un j de selein on los nomres y spetos de l (gur TFIWF el jComboBox_velocidad_transferencia gregrles ls opionesX IPHHD RVHHD WTHHD IWVHHD IISPHH y por defeto seleionr WTHHF eguir onstruyendo l qs de tl form que el speto del pnel Inspector teng l form de l pigur TFPHF ener en uent
148
CAPTULO 6.
PAQUETE: COMUNICACIN
pigur TFIVX
pigur TFIWX
149
que l jComboBox_bits_datos se le greg ls opionesX VD UD TY l jComboBox_bits_parada se le greg ls opionesX ID IFSD PY l jComboBox_bits_paridad se le greg ls opionesX xoneD yddD ivenD wrkD peF riendo el Preview de este tprme se otiene un ventn omo l de l pigur TFPIF
pigur TFPHX
egregr hor los eventos los otonesF irse en d otn y her li dereho l rtnF in el popmen desplegdo elegir Events bAction bactionPerformed @pigur TFPPAF eutomtimente se originn los mtodos orrespondientes donde ms delnte se les grgr el digo neesrio pr otener los resultdos desedosF
Completar el cdigoF
150
CAPTULO 6.
PAQUETE: COMUNICACIN
pigur TFPIX
pigur TFPPX
151
public ConfiguracionRS232() { this.setSize(400,290); this.setResizable(false); jComboBox_velocidad_transferencia.setSelectedItem("9600"); //Asignacin de valores para el jComboBox de seleccion de puerto listPortChoices(); this.setEstadoConfiguracion(false); }
//Metodo encargado de listar todos los puertos seriales que posee el PC //donde se ejecuta el programa private void listPortChoices() { System.out.println("Lista de puertos");
152
CAPTULO 6.
PAQUETE: COMUNICACIN
CommPortIdentifier portId=null; Enumeration en = CommPortIdentifier.getPortIdentifiers(); // iterate through the ports. while (en.hasMoreElements()) { portId = (CommPortIdentifier) en.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { jComboBox_puerto_serial.addItem(portId.getName()); }} //si no hay puerto disponible if(portId==null ){ jComboBox_puerto_serial.addItem("No hay Puerto disponible"); } }//fin de listPortChoices //Mtodo encargado de Transformar el valor seleccionado del jComboBox a un valor //int cuando es requerido private int getJComboBoxIntValue(JComboBox jCombo){ return new Integer((String)jCombo.getSelectedItem()).intValue(); }//fin de getJComboBoxIntValue /** Fija los parametros de la configuraci?n del puerto * @return Devuelve el valor de los parametros disponibles */ public ParametrosPuertoSerial getParametros(){ return parametros; }//fin de getParametros //Metodo encargado de leer los datos seleccionados en el cuadro de dialogo private void actualizarParametros() { //Esta parte es la encargada de crear el objeto con los valores // de configuracion del puerto serial parametros = new ParametrosPuertoSerial(
153
//"COM3", (String)jComboBox_puerto_serial.getSelectedItem(), getJComboBoxIntValue(jComboBox_velocidad_transferencia), getJComboBoxIntValue(jComboBox_bits_datos), getJComboBoxIntValue(jComboBox_bits_parada), jComboBox_paridad.getSelectedIndex()); }//fin de actualizarParametros private void setEstadoConfiguracion(boolean nuevoEstado){ estadoConfiguracion = nuevoEstado; } public boolean getEstadoConfiguracion(){ return estadoConfiguracion; }
this.setEstadoConfiguracion(false);
154
CAPTULO 6.
PAQUETE: COMUNICACIN
package com_sensor; import javax.comm.SerialPort; import javax.comm.CommPortIdentifier; import javax.comm.NoSuchPortException; import javax.comm.PortInUseException; import javax.comm.SerialPortEvent; import javax.comm.SerialPortEventListener; import javax.comm.UnsupportedCommOperationException; import java.io.InputStream; import java.io.OutputStream; import java.io.IOException; import java.util.TooManyListenersException; public class ComunicacionPuertoSerial implements SerialPortEventListener,Runnable{ private Thread hilo; public SerialPort port; public CommPortIdentifier portId; private OutputStream out; private InputStream in; private boolean trabajando; /** * Crea una nueva conexion para el puerto RS232 * Este es el constructor por defecto */ public ComunicacionPuertoSerial() { } /** * Contructor que requiere como parametro al nombre del puerto que se * va a utilizar. Este contructor posee una configuracin estandar y * no requiere nada ms para trabajar con el objeto que este crea
155
* @param portName Nombre del puerto que se utilizara * @throws javax.comm.NoSuchPortException Excepcin lanzada si * no se selecciona un puerto adecuado * @throws javax.comm.PortInUseException Excepcin lanzada si el puerto * esta siendo utilizado por otro programa * @throws javax.comm.UnsupportedCommOperationException Excepcion * lanzada cuando se solicita una operacin que el puerto seleccionado no * soporta * @throws java.io.IOException Excepcion general lanzada por un sin numero * de posibles errores en el puerto */ public ComunicacionPuertoSerial(String portName) throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException,IOException { hilo = new Thread(this); CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(portName); port = (SerialPort) portId.open("Red de Sensores", 30000); //Esta captura de la excepcion es necesaria para que el //puerto serial funcione en linux try { port.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); } catch (Exception e) { port.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); } //activar en el puerto el evento de llegada de datos port.notifyOnDataAvailable(true);
156
CAPTULO 6.
PAQUETE: COMUNICACIN
in = port.getInputStream(); out = port.getOutputStream(); trabajando = true; }//fin del constructor /** * Contructor que requiere como parametro al nombre del puerto que se * va a utilizar * @param parametros Objeto que posee todos los parametros de configuracin del * puerto serial * @throws javax.comm.NoSuchPortException Excepcin lanzada si no se selecciona * un puerto adecuado * @throws javax.comm.PortInUseException Excepcin lanzada si el puerto esta * siendo utilizado por otro programa * @throws javax.comm.UnsupportedCommOperationException Excepcion * lanzada cuando se solicita una operacin que el puerto seleccionado no * soporta * @throws java.io.IOException Excepcion general lanzada por un sin numero * de posibles errores en el puerto */ public ComunicacionPuertoSerial(ParametrosPuertoSerial parametros) throws NoSuchPortException,PortInUseException, UnsupportedCommOperationException,IOException { hilo = new Thread(this); System.out.println(parametros.getNombrePuerto()); CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier (parametros.getNombrePuerto()); port = (SerialPort) portId.open("Red de Sensores", 30000); //Esta captura de excepcion es necesaria para que el puerto // serial funcione en linux...
157
try { port.setSerialPortParams(parametros.getBaudiosRata(), parametros.getBitsdatos(), parametros.getBitsparada(), parametros.getParidad()); port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); } catch (Exception e) { port.setSerialPortParams(parametros.getBaudiosRata(), parametros.getBitsdatos(), parametros.getBitsparada(), parametros.getParidad()); port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); } //activar en el puerto el evento de llegada de datos port.notifyOnDataAvailable(true); in = port.getInputStream(); out = port.getOutputStream(); trabajando = true; }//fin del constructor /**Metodo encargado de registrar los eventos que se dan en el puerto *Cuando uno de estos eventos es lanzado, se ejecuta el metodo leerDatos() */ public void serialEvent(SerialPortEvent event) { switch (event.getEventType()) { case SerialPortEvent.DATA_AVAILABLE: leerDatos(); break; } }
158
CAPTULO 6.
PAQUETE: COMUNICACIN
/**Metodo encargado de interpretar los datos que se encuentran *en el input Stream *El caracter A es necesario mientras para reconocer donde finaliza *un dato y *comienza uno nuevo. Esto no es necesario si *la comunicacion se realiza utilizando *objetos, pero esto es imposible entre un pic y JAVA */ public String leerDatos() { // char login = 'A'; char login = '\n'; boolean aceptar; String str = new String(); int newData = 0;//entero correspondiente a los ASCII try {newData = in.read(); } catch (IOException ex) {System.err.println(ex); System.out.println("ERROR EN EL DATO"); return "no dato"; } if (newData != -1) { aceptar=true; while(aceptar){ try { //lee directamente el caracter if ((char)newData==login){aceptar=false; break; } if (newData != -1) str+=""+(char)newData; newData = in.read(); } catch (IOException ex) { System.err.println(ex);
159
return "no dato"; } }//fin while } return str; } /**Metodo encargado de gobernar al hilo (esta clase) que esta constantemente *esperando que exista un nuevo dato en el buffer del puerto serial. *Para no cargar al equipo, este hilo se ejecuta cada n segundos leyendo todo *lo que hasta ese momento llego al puerto. */ public void run() { try { port.addEventListener(this); } catch (TooManyListenersException ex) { ex.printStackTrace(); } while (trabajando) { try { hilo.sleep(100); } catch (InterruptedException ex) { ex.printStackTrace(); } } } public void setTrabajando(boolean valor){ trabajando = valor; } public boolean getTrabajando(){
160
CAPTULO 6.
PAQUETE: COMUNICACIN
return trabajando; } public void cerrarPuerto(){ try { port.close(); in.close(); out.close(); } catch (IOException ex) { ex.printStackTrace(); } } }
pror diho pqueteF grer un lse de tipo tprme en el pquete ProyectoPruebaComponenteSerial @pigur TFPQAD denomind InstrumentoVirtualRS232F smportr el pquete MisBeans y diionr un instni del tvfen GaugeCircularF e l lse
InstrumentoVirtualRS232
el her un Preview de est lse tendr el speto de l pigur TFPSF egregr los eventos los otones OND OF y RS232F vuego se le implementr el digoF egregr hor el siguiente digo despus de l instruin pkgeF isto on el (n de importr pquetes neesriosF
161
pigur TFPQX
pigur TFPRX
162
CAPTULO 6.
PAQUETE: COMUNICACIN
pigur TFPSX
163
while(hilo != null){ try{ //leer los datos del puerto String cadena_dato=puerto.leerDatos(); //convertir la cadena a double double dato=convertirDato(cadena_dato); gauge_circular.setLectura(dato);
164
CAPTULO 6.
PAQUETE: COMUNICACIN
gauge_circular.repaint(); //dormir el hilo 500 milisegundos Thread.sleep(500); }//fin try catch(InterruptedException e){}//fin catch }//fin while } private double convertirDato(String cadena_dato){ double dato=0.0; int primera_posicion_c=cadena_dato.indexOf('C'); int proxima_posicion_c=cadena_dato.indexOf('C',primera_posicion_c+1); String cadena_numero_dato=cadena_dato.substring(primera_posicion_c+1, proxima_posicion_c); try{ dato=new Integer(cadena_numero_dato).intValue(); }catch(NumberFormatException ex){ System.out.println(cadena_numero_dato); System.out.println("La cadena del nmero del dato No es un nmero"); return dato; }
165
166
CAPTULO 6.
PAQUETE: COMUNICACIN
intre ls A est l den que represent el nmero de l estin en l ul est uid l unidd sensorD entre ls B est l den del nmero que represent el nmero de l unidd sensor dentro de su estin de monitoreo y entre ls C estn ls dens que representn los vlores de ls mgnitudes fsis sensds y orgnizds respetivmente por nles @nl ID nl PDF F F y nl SAF gomo se menion trs en el nl I est onetdo el sensor de luminosiddF in l siguiente unidd se omprender mejor l topolog de l red de sensoresD plnted en ests nots @istinD mduloD nlAF or ultimo gregr l mtodo prinipl @minA de l lse PruebaComponenteSerial el digo que permit rer un instni de InstrumentoVirtualRS232F
new InstrumentoVirtualRS232().setVisible(true);
pigur TFPTX
e ontinuin se pror l omuniin serilF e onet el mdulo reeptor l g @pigur TFPUA en un puerto seril @o f on dptdor
167
serilA y se ui el mdulo sensor @pigur TFPVA en l regin donde se dese monitorer ls vriles fssF
pigur TFPUX
pigur TFPVX
en un rhivo .jar y doumentrlo on su respetivo javadocF v form de her esto on xetfens SFS es l siguienteX
168
CAPTULO 6.
PAQUETE: COMUNICACIN
pigur TFPWX
erir un nuevo proyeto denomindo com_sensorF gopir el pquete com_sensor del proyeto nterior @PruebaComponenteSerialA en el nodo Source PackagesF gon el ursor uido en el proyeto com_sensorD ir l men y seleionr en BuildbGenerate
Javadoc for com_sensorF BuildbBuild Main Project
y listoF
Captulo
7.1.
Introduccin
in est unidd se implementr un pliin de monitoreo de un red de sensores on proE toolo de omuniin inlmrioD igfeeF v red tendr l rquitetur propuest en l sein SFQX vrios mdulos sensores onformrn un estin de monitoreo y todos ellos se omuniE rn on un mdulo reeptor el ul su vez estr opldo un omputdor por un puerto seril @o fAF v estrutur de los dtos envidos por ls uniddes sensors l reeptor esD e5ef5fg5gg5gg5gg5gg5gY entre ls A est l den que represent el nmero de l esE tin en l ul est uid l unidd sensorD entre ls B est l den del nmero que represent el nmero de l unidd sensor dentro de su estin de monitoreo y entre ls C estn ls dens que representn los vlores de ls mgnitudes fsis sensds y orgnizds respetivmente por nles @nl ID nl PDF F F y nl SAF gomo se menion trs en el nl I se onetr el sensor de luminosiddD por el nl P el sensor de temperturD por el tres el de humedd reltivY los otros dos se dejrn liresF
ITW
170
CAPTULO 7.
7.2.
La estructura de la aplicacin
v pliin estr ompuest por ino lses que se denominrnX wonitoreoFjvD golorwetE hlhemeFjvD lerogontrolFjvD hespliegueistsFjv y htosFjvD on ls responsiliddes desrits ontinuinF
171
pigur UFIX
172
CAPTULO 7.
pigur UFPX
173
pigur UFQX
Estructura de datos
7.3.
Implementacin de la aplicacin
grer el proyeto denomindo edigfee e importr los pquetes que preen en el
Paso 1F
grer ls lses ColorMetalTheme.javaD DespliegueVistas.java @es un tprmeAD Mo@es un tprmeA tl omo se ilustr en el pnel projects en
nitoreo.javaD TableroControl.java
el nodo <default package>D pigur UFRF smportr tmin ls imgenes que se le vn diionr omo ionos los otonesF
Paso 3F
174
CAPTULO 7.
pigur UFRX
pigur UFSX
175
pigur UFTX
Paso 4F
import javax.swing.plaf.metal.*; public class ColorMetalTheme extends DefaultMetalTheme{ //verde private final ColorUIResource primary1 = new ColorUIResource(51, 102, 51); private final ColorUIResource primary2 = new ColorUIResource(102, 153, 102); private final ColorUIResource primary3 = new ColorUIResource(153,204,153);//(200,125,60)153, 204, 153); private final ColorUIResource secondary1 = new ColorUIResource( 111, 111, 111);
private final ColorUIResource secondary2 = new ColorUIResource(153, 204, 153); private final ColorUIResource secondary3 = new ColorUIResource(231, 215, 183); protected ColorUIResource getPrimary1() { return primary1; } protected ColorUIResource getPrimary2() { return primary2; }
176
CAPTULO 7.
protected ColorUIResource getPrimary3() { return primary3; } protected ColorUIResource getSecondary1() { return secondary1; } protected ColorUIResource getSecondary2() { return secondary2; } protected ColorUIResource getSecondary3() { return secondary3; } /** Creates a new instance of GreenMetalTheme */ public ColorMetalTheme() { } }
import javax.swing.plaf.metal.*; /** Creates a new instance of Monitoreo */ public Monitoreo() { } /** * @param args the command line arguments */ public static void main(String[] args) { //decoracin JDialog.setDefaultLookAndFeelDecorated(true); JFrame.setDefaultLookAndFeelDecorated(true); try { MetalLookAndFeel.setCurrentTheme(new ColorMetalTheme()); UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); } catch(Exception e) { e.printStackTrace();
177
public class Almacen_RAM_Datos { //Datos actuales de todos los sensores de la red en un muestreo //(muestreo actual) //estacion_de_la_red,unidad_sensora,numero_sensor public static double dato_actual_sensores[][][]=new double[13][13][8]; //Constructor public Almacen_RAM_Datos(){ } //la clase ComunicacionPuertoSerial se encarga de enviar los datos de una //unidad sensora de //una estacin a travs de este mtodo public static void setDatoSensoresUnidadSensora(int numero_estacion, int numero_unidad_sensora,int numero_sensor,double dato){ //meter el dato al arreglo tridimensional:numero_estacion-numero_unidad_sensora//numero_sensor dato_actual_sensores[numero_estacion][numero_unidad_sensora][numero_sensor] =getDatoCalibrado(numero_sensor,dato);
178
CAPTULO 7.
} private static double getDatoCalibrado(int numero_sensor,double dato){ double dato_calibrado=0.0; //S numero_sensor=1, luminosidad if(numero_sensor==1){ dato_calibrado=getDatoCalibradoLuminosidadUno(dato); } //S numero_sensor=2, temperatura if(numero_sensor==2){ dato_calibrado=getDatoCalibradoTemperatura(dato); } //S numero_sensor=3, humedad`relativa if(numero_sensor==3){ dato_calibrado=getDatoCalibradoHumedadRelativa(dato); } //S numero_sensor=4, Campo magntico if(numero_sensor==4){ dato_calibrado=getDatoCalibradoIntensidadCampoMagnetico(dato); } //S numero_sensor=5, Infrarrojo if(numero_sensor==5){ dato_calibrado=getDatoCalibradoLuminosidadDos(dato); } //Se pueden agregar ms sensores return dato_calibrado; } //mtodos de calibracin private static double getDatoCalibradoTemperatura(double dato){ double dato_calibrado_temperatura=0.0;
179
//Aqu va el cdigo de la expresin de calibracin dato_calibrado_temperatura=dato; return dato_calibrado_temperatura; } private static double getDatoCalibradoLuminosidadUno(double dato){ double dato_calibrado_luminosidad_uno=0.0; //Aqu va el cdigo de la expresin de calibracin dato_calibrado_luminosidad_uno=dato; return dato_calibrado_luminosidad_uno; } private static double getDatoCalibradoHumedadRelativa(double dato){ double dato_calibrado_humedad_relativa=0.0; //Aqu va el cdigo de la expresin de calibracin dato_calibrado_humedad_relativa=dato; return dato_calibrado_humedad_relativa; } private static double getDatoCalibradoIntensidadCampoMagnetico(double dato){ double dato_calibrado_intensidad_campo_magnetico=0.0; //Aqu va el cdigo de la expresin de calibracin dato_calibrado_intensidad_campo_magnetico=dato; return dato_calibrado_intensidad_campo_magnetico; } private static double getDatoCalibradoLuminosidadDos(double dato){ double dato_calibrado_luminosidad_dos=0.0; //Aqu va el cdigo de la expresin de calibracin dato_calibrado_luminosidad_dos=dato; return dato_calibrado_luminosidad_dos; } }//fin de la clase
180
CAPTULO 7.
gdigo de l lse DespliegueVistas.java y TablaA y drles los nomres ilustrdos en el pnel Inspector de l pigur UFUF
pigur UFUX
e implementron ino instnis de los ens GaugeCircularD GracaXY y TablaF in emrgo slo se usrn sensores pr los ens de temperturD luminosidd y humedd reltivF egregrle hor l lse l instruin pr imortrDGG
import datos.*;
181
public void actualizarTablero(int tiempo,int numero_estacion, int numero_unidad_sensora){ gaugeCircular_luminosidad.setLectura(Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][1]); graficaXY_luminosidad.setDato(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][1]); gaugeCircular_luminosidad.repaint(); graficaXY_luminosidad.repaint(); tabla_luminosidad.setValoresTabla(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][1]); gaugeCircular_luminosidad_fotosintetica.setLectura(Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][2]);
182
CAPTULO 7.
graficaXY_luminosidad_fotosintetica.setDato(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][2]); gaugeCircular_luminosidad_fotosintetica.repaint(); graficaXY_luminosidad_fotosintetica.repaint(); tabla_luminosidad_fotosintetica.setValoresTabla(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][2]); gaugeCircular_temperatura.setLectura(Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][3]); graficaXY_temperatura.setDato(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][3]); gaugeCircular_temperatura.repaint(); graficaXY_temperatura.repaint(); tabla_temperatura.setValoresTabla(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][3]); gaugeCircular_humedad_relativa.setLectura(Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][4]); graficaXY_humedad_relativa.setDato(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][4]); gaugeCircular_humedad_relativa.repaint(); graficaXY_humedad_relativa.repaint(); tabla_humedad_relativa.setValoresTabla(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion]
183
[numero_unidad_sensora][4]); gaugeCircular_x.setLectura(Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][5]); graficaXY_x.setDato(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][5]); gaugeCircular_x.repaint(); graficaXY_x.repaint(); tabla_x.setValoresTabla(tiempo,Almacen_RAM_Datos. dato_actual_sensores[numero_estacion] [numero_unidad_sensora][5]); this.setTitle("Estacin " } public void borrarDatos(){ graficaXY_luminosidad.borrarDatos(); graficaXY_luminosidad_fotosintetica.borrarDatos(); graficaXY_temperatura.borrarDatos(); graficaXY_humedad_relativa.borrarDatos(); graficaXY_x.borrarDatos(); tabla_luminosidad.borrarDatos(); tabla_luminosidad_fotosintetica.borrarDatos(); tabla_temperatura.borrarDatos(); tabla_humedad_relativa.borrarDatos(); tabla_x.borrarDatos(); "+numero_estacion+ Mdulo "+numero_unidad_sensora);
184
CAPTULO 7.
erir el pnel Design pr l lse TableroControl.javaF egregr los omponentes que se indin en el pnel Inspector de l pigur UFV y drles los mismos nomresF
pigur UFVX
e los tpnel jPanel_abajo_izquierdo y jPanel_abajo_derecho gregrles los omponentes ilustrdos en el pnel InspectorDpigur UFWF henominrlos on los mimos nomresF egregr el digo pr importr pquetesD
import com_sensor.ComunicacionPuertoSerial;
185
pigur UFWX
import com_sensor.ConfiguracionRS232; import java.io.IOException; import javax.comm.NoSuchPortException; import javax.comm.PortInUseException; import javax.comm.UnsupportedCommOperationException; import java.awt.*; import javax.swing.*; import datos.*;
186
CAPTULO 7.
private ImageIcon imagen_icono_boton_monitoreo_empezar, imagen_icono_boton_monitoreo_terminar,imagen_icono_boton_serial, imagen_icono_boton_uno_1,imagen_icono_boton_dos_1, imagen_icono_boton_tres_1,imagen_icono_boton_cuatro_1, imagen_icono_boton_cinco_1,imagen_icono_boton_seis_1, imagen_icono_boton_siete_1,imagen_icono_boton_ocho_1, imagen_icono_boton_nueve_1,imagen_icono_boton_diez_1, imagen_icono_boton_once_1,imagen_icono_boton_doce_1, imagen_icono_boton_uno,imagen_icono_boton_dos, imagen_icono_boton_tres,imagen_icono_boton_cuatro, imagen_icono_boton_cinco,imagen_icono_boton_seis, imagen_icono_boton_siete,imagen_icono_boton_ocho, imagen_icono_boton_nueve,imagen_icono_boton_diez, imagen_icono_boton_once,imagen_icono_boton_doce, imagen_icono_boton_uno_amarillo, imagen_icono_boton_dos_amarillo, imagen_icono_boton_tres_amarillo, imagen_icono_boton_cuatro_amarillo, imagen_icono_boton_cinco_amarillo, imagen_icono_boton_seis_amarillo, imagen_icono_boton_siete_amarillo, imagen_icono_boton_ocho_amarillo, imagen_icono_boton_nueve_amarillo, imagen_icono_boton_diez_amarillo, imagen_icono_boton_once_amarillo, imagen_icono_boton_doce_amarillo,
187
imagen_icono_salir; private DespliegueVistas vistas; private int numero_estacion=1; private int numero_unidad_sensora=1; public ComunicacionPuertoSerial puerto; private int tiempo=0; //hilo de animacin private Thread hilo; public ConfiguracionRS232 conf;
jButton_unidad_uno.setBackground(new Color(254,115,80)); imagen_icono_boton_monitoreo_empezar = new ImageIcon (TableroControl.class.getResource("comunicacion_sensores_empezar.JPG")); imagen_icono_boton_monitoreo_terminar = new ImageIcon (TableroControl.class.getResource("comunicacion_sensores_terminar.jpg")); imagen_icono_boton_serial = new ImageIcon (TableroControl.class.getResource("serial.JPG")); //numeros imagen_icono_boton_uno_amarillo=new ImageIcon (TableroControl.class.getResource("uno_amarillo.gif")); imagen_icono_boton_dos_amarillo=new ImageIcon (TableroControl.class.getResource("dos_amarillo.gif")); imagen_icono_boton_tres_amarillo=new ImageIcon (TableroControl.class.getResource("tres_amarillo.gif"));
188
CAPTULO 7.
imagen_icono_boton_cuatro_amarillo=new ImageIcon (TableroControl.class.getResource("cuatro_amarillo.gif")); imagen_icono_boton_cinco_amarillo=new ImageIcon (TableroControl.class.getResource("cinco_amarillo.gif")); imagen_icono_boton_seis_amarillo=new ImageIcon (TableroControl.class.getResource("seis_amarillo.gif")); imagen_icono_boton_siete_amarillo=new ImageIcon (TableroControl.class.getResource("siete_amarillo.gif")); imagen_icono_boton_ocho_amarillo=new ImageIcon (TableroControl.class.getResource("ocho_amarillo.gif")); imagen_icono_boton_nueve_amarillo=new ImageIcon (TableroControl.class.getResource("nueve_amarillo.gif")); imagen_icono_boton_diez_amarillo=new ImageIcon (TableroControl.class.getResource("diez_amarillo.gif")); imagen_icono_boton_once_amarillo=new ImageIcon (TableroControl.class.getResource("once_amarillo.gif")); imagen_icono_boton_doce_amarillo=new ImageIcon (TableroControl.class.getResource("doce_amarillo.gif")); imagen_icono_boton_uno = new ImageIcon (TableroControl.class.getResource("uno.gif")); imagen_icono_boton_uno_1 = new ImageIcon (TableroControl.class.getResource("uno_1.gif")); imagen_icono_boton_dos = new ImageIcon (TableroControl.class.getResource("dos.gif")); imagen_icono_boton_dos_1 = new ImageIcon (TableroControl.class.getResource("dos_1.gif")); imagen_icono_boton_tres = new ImageIcon (TableroControl.class.getResource("tres.gif")); imagen_icono_boton_tres_1 = new ImageIcon
189
(TableroControl.class.getResource("tres_1.gif")); imagen_icono_boton_cuatro = new ImageIcon (TableroControl.class.getResource("cuatro.gif")); imagen_icono_boton_cuatro_1 = new ImageIcon (TableroControl.class.getResource("cuatro_1.gif")); imagen_icono_boton_cinco = new ImageIcon (TableroControl.class.getResource("cinco.gif")); imagen_icono_boton_cinco_1 = new ImageIcon (TableroControl.class.getResource("cinco_1.gif")); imagen_icono_boton_seis = new ImageIcon (TableroControl.class.getResource("seis.gif")); imagen_icono_boton_seis_1 = new ImageIcon (TableroControl.class.getResource("seis_1.gif")); imagen_icono_boton_siete = new ImageIcon (TableroControl.class.getResource("siete.gif")); imagen_icono_boton_siete_1 = new ImageIcon (TableroControl.class.getResource("siete_1.gif")); imagen_icono_boton_ocho = new ImageIcon (TableroControl.class.getResource("ocho.gif")); imagen_icono_boton_ocho_1 = new ImageIcon (TableroControl.class.getResource("ocho_1.gif")); imagen_icono_boton_nueve = new ImageIcon (TableroControl.class.getResource("nueve.gif")); imagen_icono_boton_nueve_1 = new ImageIcon (TableroControl.class.getResource("nueve_1.gif")); imagen_icono_boton_diez = new ImageIcon (TableroControl.class.getResource("diez.gif")); imagen_icono_boton_diez_1 = new ImageIcon (TableroControl.class.getResource("diez_1.gif"));
190
CAPTULO 7.
imagen_icono_boton_once = new ImageIcon (TableroControl.class.getResource("once.gif")); imagen_icono_boton_once_1 = new ImageIcon (TableroControl.class.getResource("once_1.gif")); imagen_icono_boton_doce = new ImageIcon (TableroControl.class.getResource("doce.gif")); imagen_icono_boton_doce_1 = new ImageIcon (TableroControl.class.getResource("doce_1.gif")); imagen_icono_salir=new ImageIcon (TableroControl.class.getResource("salir.GIF")); jButton_empezar_monitoreo.setIcon (imagen_icono_boton_monitoreo_empezar); jButton_terminar_monitoreo.setIcon (imagen_icono_boton_monitoreo_terminar); jButton_cerrar.setIcon(imagen_icono_salir); jButton_estacion_uno.setIcon(imagen_icono_boton_uno_amarillo); jButton_estacion_dos.setIcon(imagen_icono_boton_dos); jButton_estacion_tres.setIcon(imagen_icono_boton_tres); jButton_estacion_cuatro.setIcon(imagen_icono_boton_cuatro); jButton_estacion_cinco.setIcon(imagen_icono_boton_cinco); jButton_estacion_seis.setIcon(imagen_icono_boton_seis); jButton_estacion_siete.setIcon(imagen_icono_boton_siete); jButton_estacion_ocho.setIcon(imagen_icono_boton_ocho); jButton_estacion_nueve.setIcon(imagen_icono_boton_nueve); jButton_estacion_diez.setIcon(imagen_icono_boton_diez); jButton_estacion_once.setIcon(imagen_icono_boton_once); jButton_estacion_doce.setIcon(imagen_icono_boton_doce); jButton_unidad_uno.setIcon(imagen_icono_boton_uno_amarillo); jButton_unidad_dos.setIcon(imagen_icono_boton_dos_1);
191
jButton_unidad_tres.setIcon(imagen_icono_boton_tres_1); jButton_unidad_cuatro.setIcon(imagen_icono_boton_cuatro_1); jButton_unidad_cinco.setIcon(imagen_icono_boton_cinco_1); jButton_unidad_seis.setIcon(imagen_icono_boton_seis_1); jButton_unidad_siete.setIcon(imagen_icono_boton_siete_1); jButton_unidad_ocho.setIcon(imagen_icono_boton_ocho_1); jButton_unidad_nueve.setIcon(imagen_icono_boton_nueve_1); jButton_unidad_diez.setIcon(imagen_icono_boton_diez_1); jButton_unidad_once.setIcon(imagen_icono_boton_once_1); jButton_unidad_doce.setIcon(imagen_icono_boton_doce_1); jButton_configurar_comunicacion.setIcon(imagen_icono_boton_serial); jButton_empezar_monitoreo.setEnabled(false); jButton_terminar_monitoreo.setEnabled(false); this.setResizable(false); vistas=new DespliegueVistas();
192
CAPTULO 7.
while(hilo != null){ tiempo=tiempo+1; try{ //dormir el hilo 50 milisegundos String cadena_dato=puerto.leerDatos(); almacenarDatoRam(cadena_dato); vistas.actualizarTablero(tiempo,numero_estacion,numero_unidad_sensora); Thread.sleep(500); }//fin try catch(InterruptedException e){}//fin catch }//fin while } private void almacenarDatoRam(String str) { int numero_estacion=0; int numero_modulo=0; int numero_sensores=5; //para 10 sensores por mdulo int[] numero_datos=new int[numero_sensores+1]; int numero_sensor=0; boolean es_numero_estacion=true; boolean es_numero_modulo=true; boolean es_numero_dato=true; //subcadena que contiene el nmero de la estacin int primera_posicion_a=str.indexOf('A'); int proxima_posicion_a=str.indexOf('A',primera_posicion_a+1); String cadena_numero_estacion=str.substring(primera_posicion_a+1, proxima_posicion_a); //solo si el dato es vlido
193
try{ numero_estacion=new Integer(cadena_numero_estacion).intValue(); }catch(NumberFormatException ex){ es_numero_estacion=false; } //subcadena que contiene el nmero del mdulo int primera_posicion_b=str.indexOf('B'); int proxima_posicion_b=str.indexOf('B',primera_posicion_b+1); String cadena_numero_modulo=str.substring(primera_posicion_b+1, proxima_posicion_b); //solo si el dato es vlido try{ numero_modulo=new Integer(cadena_numero_modulo).intValue(); }catch(NumberFormatException ex){ es_numero_modulo=false; } //subcadenas que contienen los nmeros de los datos int primera_posicion_c=0; int proxima_posicion_c=0; primera_posicion_c=str.indexOf('C'); for(int i=1;i<numero_sensores+1;i++){ //primera_posicion_c=str.indexOf('C'); proxima_posicion_c=str.indexOf('C',primera_posicion_c+1); String cadena_numero_dato=str.substring(primera_posicion_c+1,proxima_posicion_c); //solo si el dato es vlido try{ numero_sensor=numero_sensor+1; numero_datos[numero_sensor]=new Integer(cadena_numero_dato).intValue(); }catch(NumberFormatException ex){
194
CAPTULO 7.
es_numero_dato=false; } primera_posicion_c= proxima_posicion_c+1; //Exportar los datos al almacn if(es_numero_dato==true&&es_numero_estacion==true&&es_numero_modulo==true){ Almacen_RAM_Datos.setDatoSensoresUnidadSensora (numero_estacion,numero_modulo,numero_sensor,numero_datos[numero_sensor]); } }//fin for } private void colorOriginalBotonesUnidad(){ jButton_unidad_uno.setIcon(imagen_icono_boton_uno_1); jButton_unidad_dos.setIcon(imagen_icono_boton_dos_1); jButton_unidad_tres.setIcon(imagen_icono_boton_tres_1); jButton_unidad_cuatro.setIcon(imagen_icono_boton_cuatro_1); jButton_unidad_cinco.setIcon(imagen_icono_boton_cinco_1); jButton_unidad_seis.setIcon(imagen_icono_boton_seis_1); jButton_unidad_siete.setIcon(imagen_icono_boton_siete_1); jButton_unidad_ocho.setIcon(imagen_icono_boton_ocho_1); jButton_unidad_nueve.setIcon(imagen_icono_boton_nueve_1); jButton_unidad_diez.setIcon(imagen_icono_boton_diez_1); jButton_unidad_once.setIcon(imagen_icono_boton_once_1); jButton_unidad_doce.setIcon(imagen_icono_boton_doce_1); } private void colorOriginalBotonesEstacion(){ jButton_estacion_uno.setIcon(imagen_icono_boton_uno); jButton_estacion_dos.setIcon(imagen_icono_boton_dos);
195
jButton_estacion_tres.setIcon(imagen_icono_boton_tres); jButton_estacion_cuatro.setIcon(imagen_icono_boton_cuatro); jButton_estacion_cinco.setIcon(imagen_icono_boton_cinco); jButton_estacion_seis.setIcon(imagen_icono_boton_seis); jButton_estacion_siete.setIcon(imagen_icono_boton_siete); jButton_estacion_ocho.setIcon(imagen_icono_boton_ocho); jButton_estacion_nueve.setIcon(imagen_icono_boton_nueve); jButton_estacion_diez.setIcon(imagen_icono_boton_diez); jButton_estacion_once.setIcon(imagen_icono_boton_once); jButton_estacion_doce.setIcon(imagen_icono_boton_doce); }
private void jButton_cerrarActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: System.exit(0); } private void jButton_unidad_doceActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_doce.setIcon (imagen_icono_boton_doce_amarillo); numero_unidad_sensora=12; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero
196
CAPTULO 7.
(tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_onceActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_once.setIcon (imagen_icono_boton_once_amarillo); numero_unidad_sensora=11; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_diezActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_diez.setIcon (imagen_icono_boton_diez_amarillo); numero_unidad_sensora=10; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); }
197
private void jButton_unidad_nueveActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_nueve.setIcon (imagen_icono_boton_nueve_amarillo); numero_unidad_sensora=9; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_ochoActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_ocho.setIcon (imagen_icono_boton_ocho_amarillo); numero_unidad_sensora=8; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_sieteActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here:
198
CAPTULO 7.
colorOriginalBotonesUnidad(); jButton_unidad_siete.setIcon (imagen_icono_boton_siete_amarillo); numero_unidad_sensora=7; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_seisActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_seis.setIcon (imagen_icono_boton_seis_amarillo); numero_unidad_sensora=6; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_cincoActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_cinco.setIcon (imagen_icono_boton_cinco_amarillo);
199
numero_unidad_sensora=5; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_cuatroActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_cuatro.setIcon (imagen_icono_boton_cuatro_amarillo); numero_unidad_sensora=4; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_tresActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_tres.setIcon (imagen_icono_boton_tres_amarillo); numero_unidad_sensora=3; vistas.borrarDatos(); tiempo=0;
200
CAPTULO 7.
vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_doceActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_doce.setIcon (imagen_icono_boton_doce_amarillo); numero_estacion=12; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_onceActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_once.setIcon (imagen_icono_boton_once_amarillo); numero_estacion=11; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); }
201
private void jButton_estacion_diezActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_diez.setIcon (imagen_icono_boton_diez_amarillo); numero_estacion=10; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_nueveActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_nueve.setIcon (imagen_icono_boton_nueve_amarillo); numero_estacion=9; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_ochoActionPerformed (java.awt.event.ActionEvent evt) {
202
CAPTULO 7.
// TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_ocho.setIcon (imagen_icono_boton_ocho_amarillo); numero_estacion=8; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_sieteActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_siete.setIco (imagen_icono_boton_siete_amarillo); numero_estacion=7; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_seisActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_seis.setIcon
203
(imagen_icono_boton_seis_amarillo); numero_estacion=6; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_cincoActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_cinco.setIcon (imagen_icono_boton_cinco_amarillo); numero_estacion=5; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_cuatroActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_cuatro.setIcon (imagen_icono_boton_cuatro_amarillo); numero_estacion=4; vistas.borrarDatos();
204
CAPTULO 7.
tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_tresActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_tres.setIcon (imagen_icono_boton_tres_amarillo); numero_estacion=3; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_configurar_comunicacionActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: jButton_configurar_comunicacion.setEnabled(false); jButton_empezar_monitoreo.setEnabled(true); conf=new ConfiguracionRS232(); conf.setVisible(true); } private void jButton_terminar_monitoreoActionPerformed
205
(java.awt.event.ActionEvent evt) { // TODO add your handling code here: jButton_empezar_monitoreo.setEnabled(true); jButton_terminar_monitoreo.setEnabled(false); detener(); } private void jButton_empezar_monitoreoActionPerformed (java.awt.event.ActionEvent evt) { try { // TODO add your handling code here: this.puerto = new ComunicacionPuertoSerial(conf.parametros); } catch (NoSuchPortException ex) { ex.printStackTrace(); } catch (UnsupportedCommOperationException ex) { ex.printStackTrace(); } catch (PortInUseException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } jButton_empezar_monitoreo.setEnabled(false); jButton_terminar_monitoreo.setEnabled(true); vistas.setVisible(true); arrancar(); } private void jButton_unidad_dosActionPerformed (java.awt.event.ActionEvent evt) {
206
CAPTULO 7.
// TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_dos.setIcon (imagen_icono_boton_dos_amarillo); numero_unidad_sensora=2; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_unidad_unoActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesUnidad(); jButton_unidad_uno.setIcon (imagen_icono_boton_uno_amarillo); numero_unidad_sensora=1; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_dosActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_dos.setIcon
207
(imagen_icono_boton_dos_amarillo); numero_estacion=2; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); } private void jButton_estacion_unoActionPerformed (java.awt.event.ActionEvent evt) { // TODO add your handling code here: colorOriginalBotonesEstacion(); jButton_estacion_uno.setIcon (imagen_icono_boton_uno_amarillo); numero_estacion=1; vistas.borrarDatos(); tiempo=0; vistas.actualizarTablero (tiempo,numero_estacion,numero_unidad_sensora); }
l g por un puerto seril @o fA pigur UFIHF vs uniddes sensors uirls en donde se dese sensrD pigur UFII y pigur UFIPF
208
CAPTULO 7.
pigur UFIHX
pigur UFIIX
Unidades sensoras
pigur UFIPX
Unidades sensoras
209
pigur UFIQX
Tablero de Control
rer li en el otn del toollr orrspondiente l omuniin RS232 @izquierdo superiorAF e desplieg l ventn de l pigur UFIRF in ell on(gure l omuniin RS232 y her li en
aceptarF
de senores tivdo @segundo otn del toolrDpigur UFISAF rer li en ese otn y se desplieg l ventn de monitoreoD pigur UFITF
in l ventn de l (gur UFIS se peude esoger l unidd sensor pr monitorerFin l pigur UFIU
210
CAPTULO 7.
pigur UFIRX
pigur UFISX
Tablero de Control
211
pigur UFITX
212
CAPTULO 7.
pigur UFIUX
FIN.
Bibliografa
I xtionl snstrumentsF
Our History
if httpXGGwwwFniFomGompnyGhistoryFhtm ltimo
ein
edggiDolF IID xoF IDppF UREVRD PHHPF Q xtionl snstrumentsF PHHUF R ixe igrxyvyqsiF septiemre PHHUF S vF vemy F T xetensF PHHUF U x wsgyiwF PHHUF V eF prnoF
Introduccin a los JavaBeans SUN Aprendiendo Java 2 en 21 dasF HelloDevice IDEF Qu es la Instrumentacin VirtualF
if httpXGGdigitlFniFomG worldE
ersonD IWWWF
IDE Netbeans
if httpXGGwwwFsFehuFesGsweG(siG ursotE
214
BIBLIOGRAFA
JFreeChart
if httpXGGwwwFjfreeForgGjfreehrtGltimo eesoD
if httpXGGwwwFexitFesGexitGpGexitFphpG doGedesEigfeeE
if httpXGGwwwFdigiFomGprodutsGwirelessGpointEmultipointG xeeE
if httpXGGwwwFierootisFomG