PROCEDURE EJECUTA; LABEL FIN; CONST IOCONS:CHAR=#251; VAR PULSACURSOR : CHAR; FUERA : CHAR; ERROASIG : BOOLEAN; (**********************************************************) PROCEDURE PROCESO_DE_ERROR(ERROR0:INTEGER); VAR X : BYTE; Y : BYTE; BEGIN X:=WHEREX; Y:=WHEREY; ERROR(ERROR0); GOTOXY(16,20); TEXTBACKGROUND(COLOR5); TEXTCOLOR(COLOR6); WRITE('>>PULSA CUALQUIER TECLA PARA REINTENTAR, ESC. MENU PRINCIPAL'); DESCARGARTECLADO; IOCONS:=READKEY; WINDOW(3,14,78,21);{----------BORRADO PARCIAL DE PANTALLA} CLRSCR; WINDOW(3,2,78,24);{------------RECUPERACION DE LA PANTALLA PRINCIPAL} GOTOXY(X,Y); END; (**********************************************************) {rutina que detecta que no ha sido asignado ningun canal de la PCLAB} PROCEDURE ERROR_DE_ASIGNACION; VAR C : BYTE; D : BYTE; BEGIN ERROASIG:=FALSE; D:=0; FOR C:=0 TO 15 DO IF ASIGNUD[C]=88 THEN D:=D+1; IF D=16 THEN BEGIN ERROASIG:=TRUE; ERROR(32758); FOR C:=1 TO 5 DO BEGIN SOUND(1000); DELAY(100); SOUND(800); DELAY(80); NOSOUND END; GOTOXY(23,21); TEXTBACKGROUND(COLOR5); WRITE(' >>> Pulse cualquier TECLA para repetir, ESCAPE men£'); TEXTCOLOR(COLOR6); FUERA:=READKEY; END END; (**********************************************************) PROCEDURE PRESENTACION_NUDOS; LABEL FIN1; CONST PULSACANAL:STRING=''; VAR VUELTA : BYTE; REALCE : BYTE; LUZ : BYTE; TOCA : BYTE; MAXLONGLINEA : BYTE; FILAS : INTEGER; ERROR20 : INTEGER; MOM : INTEGER; E : INTEGER; MO : INTEGER; PSCANAL1 : CHAR; PSCANAL2 : CHAR; MOMEN : CHAR; BEGIN RAYA_HORIZONTAL(0,77,2,WHITE); GOTOXY(1,1); TEXTCOLOR(COLOR6); WRITELN(' ASIGNACION DE NUDOS Y CANALES PCLAB: SELECCIONE ENTRE LOS PRESENTES NUDOS '); WINDOW(3,4,78,24); FOR TOCA:=0 TO 15 DO ASIGNUD[TOCA]:=88; TOCA:=1; LUZ:=1; CURSOROFF; REPEAT COMODIN:=INICIAL; {-------inicializa el puntero} FILAS:=CUNTAPUNTOYCOMA; IF CUNTAPUNTOYCOMA>17 THEN IF TOCA<17 THEN FILAS:=17 ELSE IF TOCA';' THEN IF NODCHAR<>'#' THEN BEGIN TEXTBACKGROUND(REALCE); IF REALCE=BLACK THEN TEXTCOLOR(WHITE); IF REALCE=WHITE THEN TEXTCOLOR(BLACK); WRITE(NODCHAR); MAXLONGLINEA:=MAXLONGLINEA+1; IF MAXLONGLINEA>60 THEN IF NODCHAR=' ' THEN BEGIN TEXTBACKGROUND(COLOR5); WRITELN; FOR E:=1 TO 6 DO BEGIN WRITE(' '); MAXLONGLINEA:=0 END; TEXTBACKGROUND(REALCE) END END END; IF REALCE=WHITE THEN TEXTCOLOR(WHITE); IF (NODCHAR=';') OR (NODCHAR='#') THEN FOR MO:=0 TO 15 DO IF ASIGNUD[MO]=VUELTA THEN BEGIN TEXTBACKGROUND(COLOR5); TEXTCOLOR(COLOR11); IF MAXLONGLINEA>=50 THEN BEGIN WRITELN; FOR E:=1 TO 5 DO BEGIN WRITE(' '); MAXLONGLINEA:=0 END; WRITE(' ASIGNADO A CANAL: ',MO) END ELSE WRITE(' ASIGNADO A CANAL: ',MO); TEXTCOLOR(COLOR6) END UNTIL (NODCHAR=';') OR (NODCHAR='#'); TEXTBACKGROUND(COLOR5); WRITELN END; REPEAT PULSACURSOR:=READKEY UNTIL (PULSACURSOR=#72) OR (PULSACURSOR=#80) OR (PULSACURSOR=#13) OR (PULSACURSOR=#27); IF PULSACURSOR=#27 THEN BEGIN TEXTCOLOR(COLOR6); GOTOXY(1,1); WRITELN(' ASIGNACION DE NUDOS Y CANALES PCLAB: SELECCIONE ENTRE LOS PRESENTES NUDOS '); WINDOW(3,4,78,24); RAYA_HORIZONTAL(0,77,2,WHITE); TEXTCOLOR(COLOR12); GOTOXY(1,1); WRITELN(' ¨DESEA VISUALIZAR DE NUEVO LA CONFIGURACION? (S/N) '); REPEAT PULSACURSOR:=READKEY; UNTIL PULSACURSOR IN ['S','N','n','s']; IF PULSACURSOR IN ['S','s'] THEN BEGIN PULSACURSOR:='1'; TEXTCOLOR(COLOR6); END ELSE BEGIN ERROR_DE_ASIGNACION; TEXTCOLOR(COLOR6); IF (ERROASIG=TRUE) THEN BEGIN IF FUERA=#27 THEN BEGIN PULSACURSOR:=#27; IOCONS:=#27; TEXTCOLOR(COLOR6) END ELSE BEGIN PULSACURSOR:=#251; TEXTCOLOR(COLOR6) END END ELSE BEGIN PULSACURSOR:=#27; IOCONS:=#251; TEXTCOLOR(COLOR6) END END END; IF PULSACURSOR=#72 THEN IF LUZ=1 THEN BEGIN TOCA:=CUNTAPUNTOYCOMA; LUZ:=TOCA END ELSE BEGIN LUZ:=LUZ-1; TOCA:=LUZ END; IF PULSACURSOR=#80 THEN IF LUZ=CUNTAPUNTOYCOMA THEN BEGIN TOCA:=1; LUZ:=1 END ELSE BEGIN LUZ:=LUZ+1; TOCA:=LUZ END; IF PULSACURSOR=#13 THEN BEGIN WINDOW(3,2,78,24); TEXTCOLOR(COLOR12); GOTOXY(1,1); WRITE('INTRODUZCA EL NUMERO DE CANAL DE LA PCLAB(0 A 15): '); REPEAT CURSORON; PULSACANAL:=''; GOTOXY(53,1); WRITE(' '); PSCANAL1:=READKEY; IF PSCANAL1=#13 THEN PULSACANAL:='88' ELSE BEGIN IF PSCANAL1<>#27 {-----------------------------funci¢n de escape} THEN BEGIN GOTOXY(53,1); WRITE(PSCANAL1); PSCANAL2:=READKEY; IF PSCANAL2<>#27 THEN BEGIN IF (PSCANAL2=#13) THEN PULSACANAL:=PSCANAL1 ELSE BEGIN GOTOXY(54,1); WRITE(PSCANAL2); MOMEN:=READKEY; PULSACANAL:=PSCANAL1+PSCANAL2; END END ELSE PULSACANAL:=#27 END ELSE PULSACANAL:=#27 END; UNTIL (PULSACANAL='0') OR (PULSACANAL='1') OR (PULSACANAL='2') OR (PULSACANAL='3') OR (PULSACANAL='4') OR (PULSACANAL='5') OR (PULSACANAL='6') OR (PULSACANAL='7') OR (PULSACANAL='8') OR (PULSACANAL='9') OR (PULSACANAL='10') OR (PULSACANAL='11') OR (PULSACANAL='12') OR (PULSACANAL='13') OR (PULSACANAL='14') OR (PULSACANAL='15') OR (PULSACANAL=#27) OR (PULSACANAL='88'); CURSOROFF; IF PULSACANAL<>#27 THEN BEGIN IF PULSACANAL='88' THEN BEGIN FOR E:=0 TO 15 DO IF ASIGNUD[E]=TOCA THEN ASIGNUD[E]:=88; END ELSE BEGIN VAL(PULSACANAL,MOM,ERROR20); FOR E:=0 TO 15 DO IF ASIGNUD[E]=TOCA THEN ASIGNUD[E]:=88; IF ASIGNUD[MOM]=88 THEN ASIGNUD[MOM]:=TOCA ELSE BEGIN WRITELN(^g); RAYA_HORIZONTAL(0,77,2,WHITE); GOTOXY(1,1); TEXTCOLOR(COLOR11); WRITELN('CANAL YA ASIGNADO A LOS NUDOS SE¥ALADOS COMO N§ ',ASIGNUD[MOM],' >>>PULSE TECLA...'); PULSACURSOR:=READKEY END END; RAYA_HORIZONTAL(0,77,2,WHITE); TEXTCOLOR(COLOR6); GOTOXY(1,1); WRITELN(' ASIGNACION DE NUDOS Y CANALES PCLAB: SELECCIONE ENTRE LOS PRESENTES NUDOS '); WINDOW(3,4,78,24) END ELSE BEGIN TEXTCOLOR(COLOR6); GOTOXY(1,1); WRITELN(' ASIGNACION DE NUDOS Y CANALES PCLAB: SELECCIONE ENTRE LOS PRESENTES NUDOS '); WINDOW(3,4,78,24); RAYA_HORIZONTAL(0,77,2,WHITE); TEXTCOLOR(COLOR12); GOTOXY(1,1); WRITELN(' ¨DESEA VISUALIZAR DE NUEVO LA CONFIGURACION? (S/N) '); REPEAT PULSACURSOR:=READKEY; UNTIL PULSACURSOR IN ['S','N','n','s']; IF PULSACURSOR IN ['S','s'] THEN BEGIN PULSACURSOR:='1'; TEXTCOLOR(COLOR6); END ELSE BEGIN ERROR_DE_ASIGNACION; TEXTCOLOR(COLOR6); IF (ERROASIG=TRUE) THEN BEGIN IF FUERA=#27 THEN BEGIN PULSACURSOR:=#27; IOCONS:=#27; TEXTCOLOR(COLOR6) END ELSE BEGIN PULSACURSOR:=#251; TEXTCOLOR(COLOR6) END END ELSE BEGIN PULSACURSOR:=#27; IOCONS:=#251; TEXTCOLOR(COLOR6) END END END END; UNTIL (PULSACURSOR=#27); FIN1: END; (**********************************************************) {presentaci¢n de los datos antes de la conexi¢n de la PCLAB} PROCEDURE PRE_ADQUISICION; LABEL FIN2; CONST BASE = $0200; DATOADH = BASE+5; REGCONTROL = BASE+11; REGDISPARO = BASE+12; VAR ASIGNADO : BOOLEAN; FIN_CONVERSION : BYTE; DATO_BAJO : BYTE; DATO_ALTO : BYTE; NODENUDO : BYTE; C : BYTE; D : BYTE; CT : BYTE; NOSLINEA : BYTE; RET : BYTE; CTDOR : INTEGER; BEGIN REPEAT REPEAT REPEAT WINDOW(3,2,78,24); CLRSCR; RAYA_HORIZONTAL(0,77,5,WHITE); GOTOXY(1,1); TEXTCOLOR(COLOR6); WRITELN(' POR FAVOR CONECTE LOS CANALES DE LA PCLAB EN LOS NUDOS SELECIONADOS EN '); GOTOXY(1,2); WRITELN(' LA PLACA DEL CIRCUITO IMPRESO. '); GOTOXY(1,4); TEXTCOLOR(COLOR11+BLINK); WRITELN(' PULSE INTRO CUANDO ESTE PREPARADO'); TEXTCOLOR(COLOR6); GOTOXY(59,4); WRITE('>>>ESC. MENU PPAL.'); GOTOXY(65,2); RAYA_HORIZONTAL(57,77,3,WHITE); GOTOXY(57,4); WRITE(#179); GOTOXY(57,5); WRITE(#193); GOTOXY(57,3); WRITE(#218); TEXTCOLOR(COLOR6); WRITELN; COMODIN:=INICIAL; RET:=0; NOSLINEA:=0; NODENUDO:=0; CT:=0; ASIGNADO:=FALSE; WINDOW(3,7,78,24); REPEAT TEXTCOLOR(COLOR6); IF NOSLINEA=3 THEN BEGIN WRITELN; NOSLINEA:=0 END; IF COMODIN^.CARACTERN<>';' THEN BEGIN WRITE(COMODIN^.CARACTERN); CT:=CT+1; END; COMODIN:=COMODIN^.SIG; IF COMODIN^.CARACTERN=';' THEN BEGIN RET:=RET+1; IF RET=2 THEN RET:=0; NODENUDO:=NODENUDO+1; NOSLINEA:=NOSLINEA+1; RET:=RET+1; IF RET=3 THEN RET:=0; IF CT>9 THEN NOSLINEA:=3; ASIGNADO:=FALSE; FOR C:=0 TO 15 DO IF NODENUDO=ASIGNUD[C] THEN BEGIN ASIGNADO:=TRUE; IF CT>9 THEN CT:=9; FOR D:=0 TO 9-CT DO WRITE(' '); WRITE(':'); TEXTCOLOR(COLOR7); IF C<=9 THEN WRITE('A CANAL ',C) ELSE WRITE('A CANAL ',C); TEXTCOLOR(COLOR6); WRITE(' ; '); END; IF ASIGNADO=FALSE THEN BEGIN IF CT>9 THEN CT:=9; FOR D:=0 TO 9-CT DO WRITE(' '); WRITE(':'); TEXTCOLOR(COLOR11); WRITE('SIN ASIGNAR'); TEXTCOLOR(COLOR6); WRITE(' ; '); END; IF (CT>9) AND (NOSLINEA=2) THEN BEGIN NOSLINEA:=3; WRITELN END; CT:=0; END UNTIL COMODIN^.SIG=NIL; WINDOW(3,2,78,24); IOCONS:=READKEY; IF IOCONS=#27 THEN GOTO FIN2; UNTIL (IOCONS=#13); RAYA_HORIZONTAL(0,77,7,WHITE); GOTOXY(1,4); WRITE(' '); GOTOXY(1,6); TEXTCOLOR(COLOR11); WRITE(' ­ATENCION! : ¨LOS NUDOS ESTAN CORRECTAMENTE CONECTADOS A LA PCLAB? (S/N)'); TEXTCOLOR(WHITE); GOTOXY(57,3); WRITE(' '); GOTOXY(57,4); WRITE(' '); GOTOXY(57,5); WRITE(#196); GOTOXY(57,3); WRITE(' '); REPEAT IOCONS:=READKEY; UNTIL IOCONS IN ['s','S','n','N']; {rutina que detecta si la PCLAB esta o no conectada al ordenador} UNTIL ((IOCONS='S') OR (IOCONS='s')) AND (D<16); TEXTCOLOR(COLOR6); CTDOR:=0; PORT[REGCONTROL]:=1; PORT[REGDISPARO]:=0; REPEAT FIN_CONVERSION:=PORT[DATOADH]; CTDOR:=CTDOR+1; IF CTDOR>=10000 THEN FIN_CONVERSION:=$F UNTIL FIN_CONVERSION<=$F; IF CTDOR>=1000 THEN BEGIN ERROR(32759); TEXTCOLOR(COLOR6); TEXTBACKGROUND(COLOR5); GOTOXY(25,23); TEXTCOLOR(COLOR6); WRITE('>> Pulse cualquier TECLA para repetir, ESCAPE men£'); IOCONS:=READKEY END ELSE IOCONS:=#251; TEXTCOLOR(COLOR6); UNTIL (IOCONS=#27) OR (IOCONS=#251); FIN2: END; (**********************************************************) {rutina de adquisici¢n de datos con pclab} PROCEDURE ADQUISICION_DATOS_PCLAB; CONST BASE = $200; REGCONT1 = BASE+1; REGCONT2 = BASE+2; CONTCONTR = BASE+3; DATOADL = BASE+4; DATOADH = BASE+5; DATODA1L = BASE+4; DATODA1H = BASE+5; DATODA2L = BASE+6; DATODA2H = BASE+7; CLEARINT = BASE+8; CANALMUX = BASE+10; REGCONTROL= BASE+11; REGDISPARO= BASE+12; TENS = 10; MAX = 500; VAR FIN_CONVERSION : BYTE; DATO_BAJO : BYTE; DATO_ALTO : BYTE; A : BYTE; I : INTEGER; J : INTEGER; MUEST : INTEGER; (********) {introducci¢n de los datos del muestreo en men din mica} PROCEDURE OTRAMUESTRA(ND:INTEGER;Vmuest:REAL); BEGIN Vmuest:=TENS+(2*TENS/4095)*(Vmuest-4095); IF PRIMERO=NIL THEN BEGIN NEW(ACTUAL); ACTUAL^.Vmuestras:=Vmuest; ACTUAL^.NUMNUDO:=ND; PRIMERO:=ACTUAL; ACTUAL^.SIG:=NIL; END ELSE BEGIN ANTERIOR:=ACTUAL; NEW(ACTUAL); ACTUAL^.Vmuestras:=Vmuest; ACTUAL^.NUMNUDO:=ND; ANTERIOR^.SIG:=ACTUAL; ACTUAL^.SIG:=NIL; END END; (********) {programacion de la frecuencia de disparo de la PCLAB (10000Hz)} PROCEDURE FRECUENCIA; VAR D1 : LONGINT; D2 : LONGINT; AUX : LONGINT; BEGIN AUX:=2000000 DIV 10000; D1:=ROUND(SQRT(AUX)); D2:=D1; PORT[CONTCONTR]:=$74; PORT[REGCONT1]:=D1 MOD 256; PORT[REGCONT1]:=D1 DIV 256; PORT[CONTCONTR]:=$B4; PORT[REGCONT2]:=D2 MOD 256; PORT[REGCONT2]:=D2 DIV 256; END; (********) {programa principal del procedimiento adquisici¢n_datos_pclab} BEGIN DIBUJARCUADRO(24,10,54,13,COLOR7,COLOR3); GOTOXY(25,11); TEXTCOLOR(BLINK+COLOR6); WRITELN(' CAPTURANDO LOS DATOS '); GOTOXY(25,12); WRITE (' DEL CIRCUITO CON LA PCLAB '); PRIMERO:=NIL; (*-------inicializa el puntero----*) PORT[REGCONTROL]:=0; PORT[REGCONTROL]:=6; FRECUENCIA; FOR A:=0 TO 15 DO BEGIN IF ASIGNUD[A]<>88 THEN FOR I:=0 TO MAX+2 DO BEGIN PORT[CANALMUX]:=A; REPEAT FIN_CONVERSION:=PORT[DATOADH]; UNTIL FIN_CONVERSION<=$F; DATO_BAJO:=PORT[DATOADL]; DATO_ALTO:=PORT[DATOADH] MOD 16; MUEST:=DATO_ALTO*256+DATO_BAJO; {desprecia los 3 primeros valores leidos,} {que pueden dar error} IF I>=3 THEN OTRAMUESTRA(ASIGNUD[A],MUEST); REPEAT FIN_CONVERSION:=PORT[DATOADH]; UNTIL FIN_CONVERSION>$F; END END; DATOS_PCLAB:=TRUE; PORT[REGCONTROL]:=0; END; (**********************************************************) {realiza la comparaci¢n entre el fichero resultado de la simulaci¢n} {en PSPICE y la adquisici¢n de datos con la PCLAB-812, comprobando } {si se ajustan los resultados a la tolerancia} PROCEDURE COMPARACION_Y_PRESENTACION_DE_RESULTADOS_FINALES; VAR PCI : BYTE; CTDOR1 : BYTE; CTDOR2 : BYTE; A1 : BYTE; A2 : BYTE; VALE : BOOLEAN; VALORESPSP : REAL; ERO : INTEGER; VT : DOUBLE; VPSmed : DOUBLE; VPCmed : DOUBLE; MAXpcl : ARRAY[1..10] OF DOUBLE; MINpcl : ARRAY[1..10] OF DOUBLE; MAXpsp : ARRAY[1..10] OF DOUBLE; MINpsp : ARRAY[1..10] OF DOUBLE; (********) {presentacion de los resultados finales de la comparacion} PROCEDURE PRESENTACION_RESULTADO_COMPARACION; VAR COUNT : BYTE; RANGOmed : DOUBLE; CORRECTOmed : BOOLEAN; CORRECTOmax : BOOLEAN; CORRECTOmin : BOOLEAN; MAXIMpcl : DOUBLE; MINIMpcl : DOUBLE; MAXIMpsp : DOUBLE; MINIMpsp : DOUBLE; BEGIN {rutina que controla si el valor leido por la PCLAB est  situado} {dentro del rango de la tolerancia} RANGOmed:=VPSmed*(TOLERANCIA/100); IF (VPCmed<=VPSmed+RANGOmed) AND (VPCmed>=VPSmed-RANGOmed) THEN CORRECTOmed:=TRUE ELSE CORRECTOmed:=FALSE; {rutina que controla si los 10 valores m ximos y 10 m¡nimos leidos} {por la PCLAB estan dentro del margen de tolerancia} MAXIMpcl:=0; MINIMpcl:=0; MAXIMpsp:=0; MINIMpsp:=0; FOR COUNT:=1 TO 10 DO BEGIN MAXIMpcl:=MAXIMpcl+MAXpcl[COUNT]; MINIMpcl:=MINIMpcl+MINpcl[COUNT]; MAXIMpsp:=MAXIMpsp+MAXpsp[COUNT]; MINIMpsp:=MINIMpsp+MINpsp[COUNT] END; MAXIMpcl:=MAXIMpcl/10; MINIMpcl:=MINIMpcl/10; MAXIMpsp:=MAXIMpsp/10; MINIMpsp:=MINIMpsp/10; RANGOmed:=MAXIMpsp*(TOLERANCIA/100); IF (MAXIMpcl<=MAXIMpsp+RANGOmed) AND (MAXIMpcl>=MAXIMpsp-RANGOmed) THEN CORRECTOmax:=TRUE ELSE CORRECTOmax:=FALSE; RANGOmed:=MINIMpsp*(TOLERANCIA/100); IF (MINIMpcl<=MINIMpsp+RANGOmed) AND (MINIMpcl>=MINIMpcl-RANGOmed) THEN CORRECTOmin:=TRUE ELSE CORRECTOmin:=FALSE; COUNT:=1; COMODIN:=INICIAL; WRITE(' '); REPEAT IF ASIGNUD[PCI]=COUNT THEN WRITE(COMODIN^.CARACTERN); IF COMODIN^.CARACTERN=';' THEN BEGIN IF (COMODIN^.CARACTERN=';') AND (ASIGNUD[PCI]=COUNT) THEN BEGIN IF PCI<=9 THEN BEGIN WRITE(' ASIGNADO A CANAL ',PCI,' :'); IF CORRECTOmed=TRUE THEN BEGIN TEXTCOLOR(COLOR7); WRITE(' EVALUACION CORRECTA'); IF CORRECTOmax=TRUE THEN IF CORRECTOmin=TRUE THEN WRITE(' (+/-)') ELSE WRITE(' (+)') ELSE IF CORRECTOmin=TRUE THEN WRITE(' (-)'); TEXTCOLOR(COLOR6); WRITELN; END ELSE BEGIN TEXTCOLOR(COLOR11); WRITE(' PRESENTA ERRORES'); TEXTCOLOR(COLOR6); WRITELN; END END ELSE BEGIN WRITE(' ASIGNADO A CANAL ',PCI,' :'); IF CORRECTOmed=TRUE THEN BEGIN TEXTCOLOR(COLOR7); WRITE(' EVALUACION CORRECTA'); IF CORRECTOmax=TRUE THEN IF CORRECTOmin=TRUE THEN WRITE(' (+/-)') ELSE WRITE(' (+)') ELSE IF CORRECTOmin=TRUE THEN WRITE(' (-)'); TEXTCOLOR(COLOR6); WRITELN END ELSE BEGIN TEXTCOLOR(COLOR11); WRITE(' PRESENTA ERRORES'); TEXTCOLOR(COLOR6); WRITELN END END END; COUNT:=COUNT+1 END; COMODIN:=COMODIN^.SIG; UNTIL COMODIN=NIL END; (********) {programa principal del procedimiento COMPARACION_Y_PRESENTACION...} BEGIN {rutina para limpiar la pantalla y prepararla para el posterior} {informe y diagn¢stico de los nudos} WINDOW(3,2,78,24); TEXTBACKGROUND(COLOR5); TEXTCOLOR(COLOR6); CLRSCR; WRITELN(' RESUMEN Y DIAGNOSTICO DEL ESTADO DE LOS NUDOS VERIFICADOS '); A1:=WHEREX; A2:=WHEREY; TEXTCOLOR (COLOR6+BLINK); GOTOXY(1,22); WRITE(' UN MOMENTO, POR FAVOR'); TEXTCOLOR(COLOR6); GOTOXY(A1,A2); RAYA_HORIZONTAL(0,77,2,WHITE); TEXTCOLOR(COLOR6); {rutina de inicializaci¢n de las variables} VPCmed:=0; VPSmed:=0; FOR CTDOR1:=1 TO 10 DO BEGIN MAXpcl[CTDOR1]:=-10; MAXpsp[CTDOR1]:=-10 END; FOR CTDOR1:=1 TO 10 DO BEGIN MINpcl[CTDOR1]:=10; MINpsp[CTDOR1]:=10 END; {rutina de lectura de las tensiones leidas por la PCLAB} {e introducidas en memoria din mica y transformaci¢n a } {valor medio y eficaz} ACTUAL:=PRIMERO; FOR PCI:=0 TO 15 DO IF ASIGNUD[PCI]<>88 THEN BEGIN REPEAT VALE:=FALSE; {comprueba si el n§ de nudo en memdin se corresponde} IF ACTUAL^.NUMNUDO=ASIGNUD[PCI] THEN BEGIN {rutina que calcula el valor medio del dato PCLAB} VPCmed:=0; REPEAT VPCmed:=VPCmed+ACTUAL^.Vmuestras; {guarda los 10 valores m ximos} IF ACTUAL^.VmuestrasMAXpcl[CTDOR1] THEN BEGIN FOR CTDOR2:=10 DOWNTO CTDOR1+1 DO MAXpcl[CTDOR2]:=MAXpcl[CTDOR2-1]; MAXpcl[CTDOR1]:=ACTUAL^.Vmuestras; CTDOR1:=10 END END ELSE BEGIN FOR CTDOR1:=10 DOWNTO 2 DO MAXpcl[CTDOR1]:=MAXpcl[CTDOR1-1]; MAXpcl[1]:=ACTUAL^.Vmuestras END; {guarda los 10 valores m¡nimos} IF ACTUAL^.Vmuestras>MINpcl[1] THEN BEGIN FOR CTDOR1:=2 TO 10 DO IF ACTUAL^.VmuestrasASIGNUD[PCI]); VPCmed:=VPCmed/500; VALE:=TRUE; {rutina de lectura de las tensiones leidas por la PCLAB} {e introducidas en memoria din mica y transformaci¢n a } {valor medio y eficaz} BEGIN ACTU:=PRIM; VALORESPSP:=0; VPSmed:=0; REPEAT VPSmed:=VPSmed+ACTU^.TENSIONES[ASIGNUD[PCI]]; VALORESPSP:=VALORESPSP+1; {guarda los 10 valores m ximos} IF ACTU^.TENSIONES[ASIGNUD[PCI]]MAXpsp[CTDOR1] THEN BEGIN FOR CTDOR2:=10 DOWNTO CTDOR1+1 DO MAXpsp[CTDOR2]:=MAXpsp[CTDOR2-1]; MAXpsp[CTDOR1]:=ACTU^.TENSIONES[ASIGNUD[PCI]]; CTDOR1:=10 END END ELSE BEGIN FOR CTDOR1:=10 DOWNTO 2 DO MAXpsp[CTDOR1]:=MAXpsp[CTDOR1-1]; MAXpsp[1]:=ACTU^.TENSIONES[ASIGNUD[PCI]] END; {guarda los 10 valores m¡nimos} IF ACTU^.TENSIONES[ASIGNUD[PCI]]>MINpsp[1] THEN BEGIN FOR CTDOR1:=2 TO 10 DO IF ACTU^.TENSIONES[ASIGNUD[PCI]]>>Pulse la tecla R para REPETIR (con identica conf. de nudos y canales)'); GOTOXY(4,23); WRITE('>>>Pulse CUALQUIER TECLA para ir al MENU PRINCIPAL (se pierde la conf.)'); IOCONS:=READKEY; {rutina de disposicion de la memoria din mica utilizada en este} {procedimiento} IF (DATOS_PCLAB=TRUE) AND (NOT(IOCONS IN ['R','r'])) THEN BEGIN ACTUAL:=PRIMERO; REPEAT ANTERIOR:=ACTUAL^.SIG; DISPOSE(ACTUAL); ACTUAL:=ANTERIOR; UNTIL ACTUAL=NIL; DATOS_PCLAB:=FALSE END END; (**********************************************************) {programa principal ejecuta} BEGIN WINDOW(1,1,80,25); TEXTBACKGROUND(COLOR5); CLRSCR; DIBUJARCUADRO(2,1,79,25,WHITE,COLOR5); TEXTCOLOR(COLOR6); WINDOW(3,2,78,24); PRESENTACION_NUDOS; IF IOCONS=#27 THEN GOTO FIN; REPEAT PRE_ADQUISICION; IF IOCONS=#27 THEN GOTO FIN; ADQUISICION_DATOS_PCLAB; COMPARACION_Y_PRESENTACION_DE_RESULTADOS_FINALES UNTIL (IOCONS<>'r') OR (IOCONS<>'R'); FIN: END;