p4. 131, r-pi X1STOKNXERXA I "TMOS DI TESIS PREVIA A LA OBTENCIÓN DEL TITULO DE INGENIERO EN ELECTRÓNICA Y CONTROL PATRICIO RAÚL FUSXILLOS PROA£50 MARZO,1994 1. M A N U A L DEL U S U A R I O DEL P R O G R A M A INSTRU- EXE. 2. M A N U A L DEL U S U A R I O DEL P R O G R A M A CONTROL.EXE. 3. 3.1 3.2 ESTRUCTURA DE LOS P R O G R A M A S . ' LISTADO DEL PROGRAMA INSTRU.EXE. LISTADO DEL P R O G R A M A CONTROL.EXE 1. MANUAL DEL USUARIO DEL PROGRAMA INSTRU-EXE El programa se Magitronix del directorio llamado encuentra laboratorio de C:\DDC instalado control (Digital en computador automático, Direct principales archivos del programa son: el en Control). un Los el archivo de ejecución INSTRU.EXE, archivos para manejo de modo gráfico (#.BGI) y para tipos de letras (&.CHR). Está también un archivo muy importante llamado CQNFIGU.SYS, configuración del donde menú se encuentra del programa, guardada la última que sumamente es importante ya que sin él no logrará trabajar. Para ingresar al programa se debe escribir en la linea de comandos de DOS INSTRU.EXE y presionar ENTER. Inmediatamente se presenta el menú principal con una caja de diálogo en el centro de la pantalla fecha en que indicando 1 de la siguiente página. Para la última cerrar esta de diálogo e iniciar el trabajo con el programa basta con presionar ENTER, ESC cuadro del programa, se realisó cambios y el autor, la misma puede ser vista en la figura caja el titulo o posicionar el pequeño de la esquina superior cursor del mouse en el isquierda de la caja de diálogo y presionar el botón izquierdo del mouse o con el mouse en el botón OK de la caja de diálogo, ingresando al menú principal de trabajo que se puede observar en la figura 2 de la siguiente página. En general el ambiente y manejo de los menús es familiar a la mayoría de programas existentes en el mercado y será brevemente explicado. En la parte inferior del menú principal se encuentra una barra de opciones llamada StatusLine, en donde-está la - 3= Adquisición Generación A l g o r i t m o Opciones de GráücoB Pórtico —IMSTRUHEHTACimi= 16/10/93 Por: Patricio F u s t i l l o s Alt-X S a l i r Fl Adquisición F2 Generar Seno F3 Generar Rectan R A l g o r i t m o Figura 1, Caja de diálogo al ingresar al programa. = Adquisición Generación Algoritmo Opciones de Gráficos Pórtico Alt-X Salir Fl Adquisición F2 Generar Seno F3 Generar Rectan F4 Algoritmo Figura 2. Menú Principal. información de las teclas de accionar rápido (HotKeys), es decir al presionar la secuencia de teclas o la tecla de función indicada, predefinidas se por ejecuta tina secuencia el programador; por de ejemplo: instrucciones Alt-X Salir, indica que manteniendo presionado la tecla Alt y luego la tecla — 4 ~ X se sale inmediatamente cualquiera de llevando el del las HotKeys programa. también con cursor sobre la etiqueta constitutiva del menú Se puede el mouse, activar simplemente y presionando el botón isquierdo. Otra parte (DeskTop), cuya única es utilidad es la pantalla de proporcionar un lugar donde se despliegen las ventanas del menú principal. En la parte superior de la pantalla está fondo la barra de en menú (MenuBar), en la que se organisa las ventanas en una estructura de que archiveros, siendo la barra el menú principal. Los nombres aparecen en él son los submenús, por ejemplo: Adquisición, Generación. Al opciones tenemos acceder a cualquiera internas llamados subitems, etc. figura 3 en la de ellas Ítems, existen Esta casos estructura se siguiente página. Para ir se abre las en los que puede ver en ingresando en la los submenús, Ítems o subitems se puede optar por cualquiera de los siguientes pasos : > - Se puede presionado activar cualquiera la tecla ALT y la de los inicial negrilla en el menú. En ese instante se submenús manteniendo que se encuentra en desplegará una ventana mostrando los Ítems disponibles dentro de cada menú. - Presionando la tecla FIO se activa la barra de menú. Con las teclas de cursor nos desplazamos hasta el submenú que se desee ingresar, y presionando enter se despliega los Ítems del menú. - La última forma para desplegar un submenú es el acceso con el mouse. Colocando el cursor del mismo sobre la opción requerida y presionando el botón izquierdo. - 5 = Adquisición Generación Algoritmo Opciones de Gráficos pórtico Pantalla Amplitud Alt-h Divisiones ^divisiones AU-D fllt-Y Ar YdivisionEs AH-X Salir Fi Adquisición F2 Generar Bsno F3 Generar Rectan F4 Algoritmo Figura 3 . Despliege de opciones . Existen otro que tipo de cajas se abren al Opciones para de diálogo para escoger algún Ítem el cambio de ingreso de datos, o subitem parámetros como: periodo de e j ecución , existe una linea de ingresos de datos, en la que se escribe el valor deseado y se indica el esta caj a de mué st reo , tiempo nuevo etc ; en del submenú de valor de dialogo con el que antiguamente operaba el programa. Los nuevos valores ingresados pueden ser aceptados o rechasados con los botones Un ejemplo de una linea de ingreso de OK o CANCEL. datos lo podemos encontrar en la figura 4 de la siguiente página. Se puede mover el cursor entre el la linea de entrada de datos y los botones con tabulador y escogerlos con las teclas resaltadas o con con el mouse . Existe otro botón a activarlo misma la derecha de la linea de con el mouse que presenta despliega la pantalla una lista anteriormente, de los cuales se forma de activar de ingreso, que al de historia. La valores utilizados puede escoger ciialquiera. Otra la linea de historia es con el cursor linea de ingreso y presionando la linea de movimiento en la - 6Adquisición Generación Aigoritfno Opciones de Gráficos Pórtico =Período= Período de Muestren (insegí D 50 -Botón History -Input Line Cancel Alt-X Salir Fl Adquisición F2 Generar Seno F3 Generar Rectan R Algoritmo Figura 4. Caja de ingreso parámetros. de cursor hacia abajo. En la figura 5 se puede ver la ventana de historia- = Adquisición Generación Algoritmo Opciones de Gráficos Pórtico =( ) 50 20 Período^ Caja History A l t - X Salir Fl Adquisición F2 Generar Seno F3 Generar Rectan F4 Algoritmo Figura 5. Ejemplo de una linea de history. Cuando existe algún error tipográfico en el ingreso de valores, _ y „ este será reportado por una caja de dialogo de error, permaneciendo almacenado el último valor correcto. A continuación se procederá a una descripción de los submenús: Dentro de este submenú se puede escoger cualquiera de los siguientes Ítems Información,Calculadora,Salir. ~\Información: Despliega en indicando el pantalla una caja de titulo del programa, la fecha del información, último cambio realizado en él y el autor del mismo. =\Calculadora: Despliega para realizar en pantalla operaciones división y tanto por ventana es presionando con de suma, ciento. La el una calculadora resta, única forma mouse en básica, multiplicación, de cerrar la esquina esta superior izquierda. -\Salir: Opción para salir del programa. Opciones de Gráficos: Al escoger este submenú se presenta una serie de Ítems, de los cuales dos tienen subitems Pantalla y Generación. Opciones de Gráficos\Pantalla\Amplitud: Cambia el valor amplitud del osciloscopio de pantalla, el valor se lo de la ingresa directamente en voltios, el máximo valor es 100 V. Opciones de Gráficos\\\: Cambia el valor del número de divisiones en la escala osciloscopio de pantalla. del tiempo del - 8Opciones de Gráficos\\\: Cambia el valor del número de divisiones en la escala del voltaje del osciloscopio de pantalla. de Gráficos\\: Cambia el valor de Opciones la amplitud de la onda a ser generada. Opciones de Gráficos\\: Cambia el valor de la frecuencia de la onda a ser generada. Opciones de Gráficos\\: Cambia el valor de la componente continua de la onda a ser generada. Opciones de Gráficos\: Cambia el valor del factor multiplicativo con el que se manipula la señal adquirida en el SubMenú Algoritmo. Opciones de Gráficos\: Cambia el valor del tiempo máximo del osciloscopio de pantalla, es el mismo tiempo que dura un algoritmo cuando se escoge operación definida. Opciones de Gráficos\: Cambia el valor del muestreo para adquisición, generación periodo de o manipulación de señales, este valor puede ser mínimo de 10 milisegundos. Opciones de Gráficos\: Cambia el nombre del archivo ASCII en el que se guardarán los datos adquiridos o manipulados cuando se escoga la opción de guardar en un archivo la operación de adquisición o manipulación. Pórticos: Este Submenú cambia la dirección de salida de datos. los pórticos de entrada y ™ q _ Pórticos\Pórtico Entrada: Cambia el valor de la dirección del pórtico de entrada, debe ser ingresado en decimal. Pórticos\Portico Salida: Cambia el valor de la dirección del pórtico de salida, debe ser ingresado en decimal. Adquisición: Escogiendo cualquiera de los Ítems de este Submenú se despliega el osciloscopio de pantalla, para ver los datos adquiridos. Para detener una operación de adquisición se presiona cualquier tecla. Adquisición\Adquisición Definida : Realiza adquisición de datos durante un tiempo escogido en la opción tiempo. Adquisición\Adquisición Definida-Archivo : La única diferencia con la opción anterior es que los datos adquiridos también son guardados en un archivo ASCII. Adquisición\Adquisición Indefinida : Se realiza adquisición datos durante tiempo indefinido, los que se muestran de en el osciloscopio de pantalla mediante refrescos que duran el tiempo escogido en la opción tiempo. Adquisición\Adquisición Indefinida-Archivo : Además de hacer lo mismo que en la opción anterior guarda los resultados en un archivo ASCII. Generación: Este submenú genera con valores formas de onda senoidales de amplitud, frecuencia, y o rectangulares componente continua ingresadas en el menú Opciones de Gráficos\Generación. Generación\Senoidal Definida: Genera una onda senoidal, durante - 10 tiempo definido. Generación\Senoidal Indefinida: Genera una onda senoidal durante tiempo indefinido, Generación\Rectangular • Definida: Genera una onda rectangular durante tiempo definido. Generación\Rectangular Indefinida: Genera una onda rectangular durante tiempo indefinido, Algoritmo: Para manipulación de por un señales. Se multiplica un factor multiplicativo pórtico de salida. y sacando Esta operación dato adquirido el resultado puede ser por un apreciada en el osciloscopio de pantalla. Algoritmo\Algoritmo Definido : Dura un tiempo definido. Algoritmo\Algoritmo Definido-Archivo : Además guarda los resultados en un archivo ASCII. Algoritmo\Algoritmo Indefinido : Dura un tiempo indefinido. • Algoritrno\Algoritmo Inde finido-Archivo resultados en un archivo ASCII. i El despliege de los diferentes menús es: Información,., Calculadora Salir Alt X : Ademas guarda los Adquisición Adquisición Adquisición Adquisición Adquisición Definida Fl Definida-Archivo Shift-Fl Indefinida Ctrl-Fl Indefinida-Archivo Alt-Fl Generación Senoidal Senoidal Senoidal Senoidal Definida F2 Definida-Archivo Shift-F2 Indefinida Ctrl-F3 Indefinida-Archivo Alt~F3 Algoritmo Algoritmo Algoritmo Algoritmo Algoritmo Definido F2 Definido-Archivó Shift-F2 Indefinido Ctrl F3 Indefinido-Archivo Alt-F3 Opciones de Gráficos Generacióii Algoritmo Tiempo Periodo Archivo i\mplitud 3 Alt-M Alt-R Alt T Alt-E Alt-H Ydivisiones Alt-Y Amplitud Alt-P Frecuencia Alt-F Continua Alt-C Pórticos Pórtico Pórtico Entrada Salida F4 F5 2. MANUAL DEL USUARIO DEL PROGRAMA CONIROL.EXE El programa está en el directorio C:\DDC y CONTROL.EXE. Utiliza los se ejecuta con mismos manejadores de modo tipos de letras del programa anterior. En este de configuración es CONFICON.SYS. gráfico y caso el archiva - 12 - El movimiento a través de osciloscopio de pantalla y el al todo el menú, el manejo del cambio de parámetros es idéntico del programa INSTRU.EXE. Por lo que se explicará solamente las nuevas opciones. Los submenús del programa son: -. Igual al del programa INSTRU.EXE. Opciones de Gráficos, Igual al del programa INSTRU.EXE Pórticos. Igual al del programa INSTRU.EXE. PID. Para realisar control en tiempo real el ingreso de Kp,Ki,Kd y el valor tipo PID, por lo que pide de referencia. En este submenú se encuentran cuatro Ítems: PID\PID definido: para realisar control tipo PID sólo por un tiempo determinado. PID\PID definido-archivo: para realisar control PID en tiempo determinado y guardar* los resultados a un archivo ASCII. PID\PIE> indefinido: realisa control PID durante tiempo indefinido. PID\PID Indefinido-archivo: realiza control indefinido guardando los resultados en un archivo ASCII. REDES. Para realisar control diferencias, para lo cual de la ecuación de en tiempo diferencias. Al o indefinido, con ecuaciones pide el ingreso de los anteriores, se puede escoger el definido real grabando igual que los REDES\REDES definido-archivo. REDES\REDES indefinido. REDES\REDES indefinido-archivo. en los casos tiempo resultados en archivo ASCII, mediante escoger uno de los Ítems; REDES\REDES Definido. coeficientes realisar el control en o no de un - 13 Otros. Se puede realisar control ON-OFF o control DAHLINS, cada uno en forma definida o indefinida, con resultados a un archivo ASCII o no. Para control ON-OFF pide el ingreso de Umax, y el ingreso de Umin. que puede variar cumplirse que Umax > Umin y entre O y 10V. Pero que Umín sea siempre debe menor que el valor referencial. El sitema de menús está estructurado de la siguiente forma: Información... Calculadora Salir Alt X PID PID PID PID PID Fl Shift-Fl Ctrl-Fl Alt-Fl Definido Definido-Archivo Indefinido Indef inido-Archivo 13EDES REDES REDES REDES REDES F2 Definido Definido-Archivo Shift-F2 Indefinido Ctrl-F2 Indef inido-Archivo Alt-F2 Otros ON-OFF— DAHLINS ON-OFF ON-OFF ON-OFF ON-OFF DAHLINS DAHLINS DAHLINS DAHLINS definido F3 definido-archivo Shift-F3 indefinido Ctrl-F3 indefinido-archivo Alt-F3 definido F4 definido-archivo Shift-F4 indefinido Crtl-F4 indefinido-archivo Alt-F4 - 14 Opciones de Gráficos Pantalla Generación Algoritmo Tiempo Período Archivo Amplitud Alt-M Divisiones • Xdivisiones Alt-D Ydivisiones Alt-Y Alt-R Alt-T Alt-E Alt-H Amplitud Alt-P Frecuencia Alt-51 Continua Alt-C i L IlL Pórticos Pórtico Pórtico Entrada Salida 3 ESTRUCTURA DE LOS PROGRAMAS. Los dos forma un I F5 programas está echos proyecto, el uno de tal manera se llama INSTRU.PRJ CONTROL.PRJ, cada uno de ellos tiene diferentes cada encuentran módulo se las que cada uno funciones y el otro módulos, y en de aplicación distribuidas por sus objetivos comunes. La estructura es la siguiente que presentan los dos proyectos principales y lo que cada uno contiene es la siguiente: INSTRU.PRJ CALC.CPP: Contiene las funciones principales para el manejo de la calculadora. Propia de Turvo Vision. FUMC.CPP: Contiene las funciones de aplicación principal como de gráficos, toma de tiempo, etc. Realizada en esta tesis. 'tipos de control. FUNC.CPP GRAPHAPP *• INGCONTR.CPP: mismo módulo de INSTRü.CPP. .1 lngreso • el MENUCON.CPP- Controla Contri = el i manejo del menú para CONTROL.EXE. - 16 Igual existen los siguientes archivos control.h, controll.h, graphapp.h, 3.1 LISTADO DEL PROGRAMA INSTRU-EXE. /+ „ /i n TESJS;COHIROL DIGITAL DIRECTO n Autor; P a l r i c i o Fatulos P. „* / M í/ \! n PROGRAlíft ; IHSTRÜ.EXE i\:IHSIRÜ.CPP /í üllha Koíiificarión: 15/03/9Í í/ /í ~ " f/ n /í t/ í/ í/ í/ /í 9ECLARACIDK PE OBJETOS A SER ÜTíLIZÍíDOS EH EL PROGRAMA í/ Ideíine UsesJEe/s Sdeíine UsssJApplicalion fidefine UsesJEvenl UtVm UsesJRecl «define UsesJDialog Hdefine UsesJBuíion lIsesJUenuBar y fiííeíine BtíeiiriE Ü5B Hdefine UsesJSiaiusBef Sdefing UsssJDeskTop Hdefine UsesJsgPoi Bdefine UsesJCbíirDialo? define Use Sdefine Us üdefine UsesJInpulLine Ideíine USBJ TLabel /í ARCHIVOS ,H A SER LLAMADOS í/ Sinclude <lv.h> fiinclude <utb.b> Siiídude 'Paío.fi 1 <sldlib.h> lioclude Binclade <5tr5lrea,li> linclude <dos,h> üinclütiB <5tdio.l»> Iir¡dude<conio,h> de cabesera: calc.h, - 17 - l\S DE TIPO GLOBAL Las variables de tipo carácter están destinadas al ingreso de los valores a ser u l i l i í a d o s por p a n t a l l a , las variares de tipo íloai contienen el valor pasado de t i p o carácter a t i p o f l o t a n t e \ eiíern char aKchivo[9], aHpliludU], tleipo[20], dlvisionesUí], dívisionesv[6]j eHtrada[6], süpliludG[¿]j cGnlimiaSU], aLgoriUo[¿], pEriodo[6]¡ edern f l o a t A u p l i t u d , t i e s p O j dívisionesl, divisionesv, entrada, s a l i d a , írecuenciaG, a i p l i t u d G j c o n t i n u a G , algoritio, periodo, ytai, u n i d a d i , unidad) 1 ; int veces; int i!, y l j ancho; struct viexportiype vp; n DECLARACIOH DE LAS FliHCIOHES flUE VAH A SER UTILIZABAS EH EL PROGRAflá f/ void d i b u j a b o r d e í i n . t righl, ini l e f i , i n í bollos, int top J; void d í b u j a e j e t i n i alio, i n i ancho, ini r i g h t , ini l e f t , int b o l t o a , ini iop, floal divisiones!, íloat divisionesv, f l o a i Asplitud, int veces, íloal tiespo); void g r a f i c o s ( f l o a l divisionesvj f l o a t divisionest, floai tieepo, f l o a t A s p l i t u d , char Hilulo, ini veces, int v a r j j floal cofiseguirjiespo[void)j ini g p r i n t f í ini hloc, ini Íyloc 5 char íf*i, ... ); void g u a r d a r t v o i f ! ) } void r e c u p e r a r í v o i d j ; ÍBGIñpp::TBGIfipp{) : TProglnilí 4TElGIApp;:inil3íaíusLinej TEvent evení; evenl.nhal = evCoasand; event.sessage.coisand = csAbotiíBoij pulEvenít evenl ); // // esta parte i n i c i a l i í a // el nensaje de infcrnacion // al espeiar el prograsa feípandípaihToDriversl; bgiPalh = nea char[sneof(p¿lbTo&rivers)]j s l r c p y t b g i P a l h j pathToíriversJ; appfiriver = DETECT; appHotle = 0; if ( g r a p h A p p l n i l í a p p I i r i v e r , dppílode, bgiPalb, True) == Fslse) o puede c a r g a r el AdapaUdor O r i f i c o , ' , sfError j i f O K E u l l c n ) ; TBGlftpp::"TÍ!GIñpp(} deleie PARA LA AÍ9UISIC1GH GE DAÍOS Esta es la rulifta para a d q u i r i r los dalos y dibujarlos en p a n t a l l a í/ - 18 - void T B G I A p p ü d D A d q u i s i c i o n & í i n l p] í n Declaración de v a r i a b l e s de la r u t i n a t/ regislEr i n t datoin, i, kj regUter f l o a í lapso, lieípojíiicial, íiespojinal; lEvenl evení; char errorlisgfííAXSIZE], 1 suspendí ) j ií (graphicsStartO == Fahe) ' í sircpy(errorí!sgj gr sircaií morlísfjj '.' ) j 5, EÍError else for(i=l;i<=100jxn) daíoin=inpori!)ÍBr¡ír3t!a); loaí (kJí.periodo/IOOO.OÍunidadíj yeax-fiatoiníunidafJyj 0); íieipojii)al=con£eguirjie.ipo()j lap50=[lÍB*poJiiíal-iifiipojRÍcialíílOOO,0/IOO.Oj graficosídivisionesv, divisionest, tiespoj Aspiitud, "Adquisición de Batos') veceSj 0); k=-lj lifiepo_inicial=con5Bguir_iienpDÍ); do t k=kU; daioin=inportb(entraila)i pulpiíeKfloatíkJtperiodo/iOOO.Otunidadit, ynaHalointunidady, YELLO^J; delB^iíittperioíio - lapso}); }íhile((cDri5ppir cío evenl.uhal == evMhing); graphksStopOj breakj case 2; FILE tarcbiáatj üííarchidat^opentaBchivo, ^'JJ^ p r i n i f t ' H o es fiosible abrir eí archivo'); eiillUi 19 Ueipo_ÍBÍcial=can$eguir_liespQ[}; for(í=l;u=100jiíf) { bkH; daloin=iftportb(enlrada)j f p n n t f ( s r c f i i í í a t ) '-íf íf , periodo, d a l o i n ) ; } liespoJinal^conseguirJieípoO; lapso=tlie*poji(ial- ti BipoJnidaDílflOO, 0/100. 0¡ fclose(archidat); ií[(arcl¡idaí=fí3pen[aRcfíivo, V))«H[JLL) t p n n i f ( ' H t ) es posible abrir el a r c h i v o ' ) ; eiilíiJi } íprinifíarchidaij 'ARCHIVO DE A9BUI5JCIOH DE DálOS V J j í p r i f í í f l a r c M d a i , ' TiESPO DAÍO EHTRAOA \ n E ) ; f p r i n i í ( a r c h i d a t j ' [segundos) [Voltios) \ n ' ] j grsíicosídivisionesVj divisionBsí, tiespo, A s p l i l u d , Adquisición de Dalos', veces, 0); do bktl; daíoift=inporib(priírada); pulpiiel{float(k)íperiodo/IOOO,Oíunií!adjfj / l a i - d a t o i n f u n i d a d y , TELLOiíJj íprinUUrcnidái, ' íf 2f \n', kíperiodo/1000,0, datoinílO, 0/255,0);" d e h / t i n l í p e r i o d o - lapso)); }tfñile{(coriseguir_Ue*poí)"íie£pojRÍcial)(íÍEspo+.5 ¿5; íkbhill)], 1 do í ÍXÍÍÜE! event.vhat == grapííicsSlopO; íclosf(árchidaí); void TBGIApp::doAdijuÍ5ÍcionI(int p) í /í. Declaración de variables de la r u t i n a t/ regisÍEr inl daloin, í, k¡ rBgisíer float lapso, l i e i p o j n i c i a l , iiespojinal; TEvertl evenlj char errorlisgEBMSIZE]; veces=0; suspendí); ií (grapMcsSlarK) == False) í strcpyterrorKsg, grapfierrorssgígraphrBsulH)}); sírcail errorfisg, '.' ); - 20 jtfError í rfOKBuUoníj else í 5*itcli[pí case 1: í k=kH; dalDÍn=ifipartt(fiRtrada)j pulpixEllfloaUkítperJQdo/IOOO.Ohnidadij y.uHaloiriíunidady, 0); 1 lÍBipoJinal=consegiiirJifi»po(]j Up50 s (lU«poJinal-UetpoJnic¡al)tIOOO. 0/100,0; do í veces=vec95tl; cleardeviceOj graíicos(divisione5Vj divisionesí, íiespo, A i p l i t u d , 'HfiquÍEÍci6n de D a t o s ' j vecesj O); k-i; lÍBipo_inicial=con5BguirJieBpo()j do daloin=inporlb(erttrada)i pulpiielífloaÍ(k)ÍperioiJo/ÍOOO,Oíiiriidadj, jfiax-dalointunidady, YELLOB)j d e l a y f p e r i o d o - lapso); }!(hi le[ (conseguir Jifiiptí(J-lÍBfipo_inicial)(lÍBípoi4 && íkbhiíO); }»hilfi( BVBnl.iíhat " BvHolhingl; do C evsnt.gelKe/Eventí); }ú\\t[ eveni.whal == E v H o l h i n g J j grapliksStopO; case 2; FUE t a r c h i d a l j i í i í a r c h i d a b f o p e n f a R c h i v o , 'VJl-H í p r i n t í C K o es posible abrir el archivo'); entíUi tietpo_inJcial=con5Bgair_lÍBípo[lj íor(pl;ü(=100jiH) í k«k*Ij daloin s inporlb(eniradali p u l p i í B l t - f l o a t l k l t p e r i o d o / l O O O . O t u f l i d a d í , yiax-datointunidady, 0); f p r i n í f t s r c h i d a í , 'U X í ' j periodo } d a l o i n ) ; - 21 lÍEipoJinal=coi]5Eguir_lifiipQOj lapsQ=(lÍBípoJifliHieipoJnicial)tlOOO.O/iQ0.0; fcloseíarchidaijj iífíarchidat=fopBn(aíicfiivo J V)J==HULL) í p r i n t f C H o es posible abrir B! archivo']; í p r i n t f í a r e h i f í a t , 'ARCHIVO &E ADflUISlCIDH SE BATOS f p r i n l f t a r c h i d a l , c TIEKPO DATO EHTRADA \ n ' J j f p r i í t t í f a r c h i d a t j '{segundos} (Voiiios] \ n ' ) ; V); do í cieardeviceO; graficosítiivisionesVj divisionesl, Ü B í p O j ftcplitud, Adquisición ¿B D a l o s ' , VBceSj 0); k-1; íÍBapoJriicia]=conse§uir_tief,po{j; do daloin=iftf!orib(Bníra(la}; p n i p i í p l ( f l o a l ( k ) f p B f iodo/1600. O í u n i d a í x , ysaí-fialointtiíiidady, í p r i n t f í a r c f i i d a l , ' Xf Sí V, vecBSÍííperiodo/1000.0, daloinílO. 0/255.0); delc/íperioilD - lapso); }«hi!e[ (conseguir Jie»po[í-lÍBapoJnicial)<iÍBípoH && !RbMi[]J; EVEni.nhat == BvHothi do í }vhÜE( BVfini.jihal == grapliicsStopOj ícloBEÍarcMdalJj // Mbuja la rulins ds generación de una onda senoidal void TBGIApp::do5eAoi<ial!)(l í TEvEnl evenl; register íloat v s s l i d a , aipliludGíij continuaBh, t i E s p o j n i c i a í , tieupojiml, lapso; r^iiUr in\, V,; char Brrorils(|[liftXSIlE]¡ suspendOj if (qraphicsSlarU) == Faíse] - 22 Hsijj g r a p h f i r r o r s s g í g r a p h r f i s u l !())); slrcsíí Brrorfog, ',' J; lessageBoilerrorilsg, ííError J afOKímtton); else atplitU!JGft=aíspliiiidGÍ255/10; coníÍRua6íi=coiilinuaGÍ255/iO; for(x=lii<=IOO¡jH) C k=kt!j ysaiiiia=aiipl i iudGttísi[il(¿,28ííreciipnciaGtkíper iodo/1000. 0)i-continuaGhi {jutp(salida, v s a l i d a ) ; puípiíBl(f]oal(í;)tperíodo/1000.0íiiíiit!ad)[, yiíai-vsaliilafufíiilady, 0); l a p 5 0 = í l Í B i p o J i n a l - i i f i i p o j n i c i a l J Í I O O O . 0/100, Oj g r a f i c o s t d i v i & i o n B S V j d i v i s i o n e s t j t i e i p o j A i p l í í u d , 'GBneración Senoidal", veces, 0); k=-lj íie«po ií)icia]=consegiJÍr_íieapD()j do í k=kH; V5alida=a*p]HuiIGhÍ5Íitl (6. 28ífrBc«encia6í)ií periodo/1000. 0}tconlinuaBh¡ oülptsalida, vsalida); pttipiTeKíloalíRJtperiodo/lOOO.OtuniíIadx, ysai-vs?.l¡daiiinidad/j YELLOUJj (íela/(periodo - lapso)] }Khile[(coB5BquirJiefpo()-tipipoJnicial]<tieiipo*8 && IkbhiíO); o u í p t s a l i d a , 0); do }xhUe( evenl.wfiaí == evHoUiingJ; graphicsSlopOj } resuieOj } void IBG!App::doSBnoidslI[) TEvent evení; reqislsr íloal v s a l i d a , a t p l i í u d G l i j continuafih, i i e u p o j u i c i a l , iiespojinal, lapso; rBijisler ¡ni i, k, i j chai errDrKsg[BAXSnE]j suspendí); if (graphicsSíaríO " False) í slrcpyUrrorKBi), g r a p h e r r o r í s g í g r a p h r e s u U O D j slrcatí errorfisg, '.' }j «E55ageBoj(errorfisg, «fError { afQXButlcn); contiftua6h=continuaBÍ255/iO¡ iHi b-lj lienpoJnicial = cori5eguir_tieftpfi[Ji VEa}ida=aáplitüdGnfsinl(é.28í-frecuBnci¡iGfki:periofio/1000,0}i-coniir¡uaGhj o u í p í s a l i d a , '/salida); putpisBl[íloat(k)tpBrií)(JíJ/iOCiO,Otünidadüj yjiai-VBalidatiinidady, 0); ) iieipo_fina]=cDn5eguirJietpo[); lapso=(lÍBípo_final-lieipo i n i c i a l J U O O O . O / Í O O . O ; k=-l; do cleardeviceOi graficoBÍdivisionpsv, divisionesi, tieipo, A m p l i t u d , 'Generación Senoidal 1 , VECES, 0}; do í y5alida=atplitudGhí.sinl(¿,28tfrecueiiciaGtkipfiriodo/1000.0JtcoRtiriuaGIi; outpísalidaj vsalida); putp¡xel(1lí]Bt(i}ííiEriodo/lOOO,Oí.unida{!íj y u a x - v s a l i d a í u n i d a d y , ' YELUÜ]; deía^íperiodo - lapso); }?Mleí(cQíiSpquir_tie8po[)-tÍE6poJniua!}<í¡B£pü &5 e v e n t . n h a t == evHothingíj oi!ip(5alida, 0); do í }while( evenl.Bhal == e v K o l h i n q J j graphicsStopf); // D i b u j a la r u t i n a de generación iie una onda Rectangular void T 8 G I A p p : i d o R B c l a n g u l a r D ( ) - 24 - TEvení gvenl; r e g i s í e r f l o a í v s a l i d a , a f p l i t u d G h , e o n l i n u a G h , t i e s p o j n i c i a l , l i e i p o j i n a l , l a p s o , «ediojeriodo; regisíer int i, k; char errorílsgEKAXSIZEli vsce5=l¡ suspendí ) j if (grapMcsSíariO == False) ( sircpyíerrorlísq, grapherrorisgígraphrBsaltO)}; slrcaK errorHs§j '.' J; sesBageBoíterrorHsg, siError ! ifOXBiition); ) else í coniinuaGti=c:oníiftua6t255/10; kH; i o u í p í s a l i d a , vsalida); patpi IB! (f loa l(k)tper iodo/1000. Q t u n i d a d x , yiai-vsalidatunidady, 0); Iapso=(lifiípo_finai-lifiipojnicialjíi000. 0/100.0; grsficostdivisionfisv, d i v i s i o n e s i , UespGj A ü p l i i u d j 'Generación R e c t a n g u l a r 1 , VECES, 0}; k=-li Iieapojnicial=coíi5eguirjie.ípo(); cío / ¡Bdiojeriot!o=cori5BfiiirJieapt)(); do í k=kti¡ a l i d a j vsslida); pntpiie!(f]Qát(k]íperiodo/1000.0íiií)idadí, d f i l a y ( p E r i o d o - lapso}; tedio jBriodo = consE5Uir_lifiiipoí}¡ do lidaj vsalida); p u l p i í e K f l o a t t k J t per iodo/1 000. O t u n i d a d x , yiai-vsaliiiatunidady, 15); d e l a / í p a r i o d o - lapso); JtíhJlB([con5eguir_tÍEtpo[)-jiBdiojeriodo]<=(Í.O/frficii8ftcia6í/2.0J} }KhilEÍ(con5epir_lieipo(l-ÜBípo_inicial}<=lÍBipo U íkbh o u i p ( s a l i d a } 0); — 9" do í evefil.geUeyEvBnKíj }*hile( evení.yhai == evHolJiingJj ijrapMcsStopí); ffi5U«B[]j void TB6IApp::doR9ctangular]() { TEvenl evenl; regisíer floal vsalida, a í p l i t u d G t i j coníinuñGh, tieípojnicial, lie«po_fina], lapso ; register inl i, kj citar BrrorKsgCfiAXSIZE]; suspendí); if ( g r a p h i t s S í a r í í ) == FalseJ í strcpyíerrorílsg, g r a p h e r r o r í B g í g r a p h r e s u H Í J J J j sircaif errorHsgj ',' ); cessageSoxíerrorfisg, sfírror J else í conlinuaGh=coritinua6í255/10; V5alida=(aaplitudBhtconlinuaGh)tOj oulpf&alidsj vsaJida); 0}j lapso=ítieipoJinal-lieiípoJnicial)tl(ÍOO.O/ÍOO.O; do cleardeviceOj sldivisionesv, divisiones!, tiespOj Asplitiidj 'Generación Reciaugular 1 , veces, 0); do í «diojen" odoscon seguir Jie*po(]j do - 26 - vsalida); pulpneK-floaKkJípBriodo/lOOO.Otiiflidadx, yíaí-vsalidatunidaiiy, TELLOHJj deiayíperiodo - lapso); MÍh(ícori5eguirJiespG(j~fle(!ÍGjeriodo]<=[!.0/frecueKÍaG)/2,0 ); íediojBnodo=cflnseguirJifi»po[íj do í 0iiípí=alidáj v s a l i d a ) ; p u l p í j B J t f l o a K k J í p e r i D d o / l O O O . O t u f l i d a d x , yiax-vsalidatunidady, 15}; delaytperiodo - lapso); }ühilB[( conseguir J i e i p o ( J - i i e d i o j e r i o d o J < s t l . O / f r p c U B n c J a G ) / 2 , 0 ) j JHhilBdconseguirJiEtpoO-liBiipoJnicialX-liespo S4 ! k b h i l ( ) ) j Bvefll.qetKeyEvenU); EVBfll.Kbal == evHothirig); í s a l i d a j 0); do í evenl.geUeyEvenK}; }vHlfi( evBíit.xíial == evüothing); graphicsSíopO; // Dibuja la rutina de Algoriíso voíd TgGífippinJoftlgorilaoDíint p) /í Peclaracion de variables de la rutina \I regisier int datoin, i, k; register floaí lapso, tieipojnicial, iie TEvent eveni; cfiar veces=i; suspendí); ií ígr3phicsSíarí(í == Fahe) í slrcpyterrorílsgj g r a p f i e r r o r i s g t g r a p h r e s u l í í } ) ) ; s t r c a t f errorKsg, '.' ); gj el se í sKiicMp) í case !: üfError ¡ - 27 - b-i; lietpo_ifiidal=coi)seguir_tieijto()j daloiiFÍnportb(entrada)i p a t p i i e ] ( f l o a l ( l í ) t p e r iodo/1000. Oíunidadx, YcaHalointunidad?, 0 ) j outp( salida, d a l o i n t a l g o r i l w j j p H t p i l e l t f I ü a t I f c í í p e r i o d o / J O O Ü . O Í a n i d a d i , yaai-datoiníunidaa'yíalgoritd), 0 ) j } lieipojfinalsconseguirjieipoíjj íap5G=íiÍESf)G_fifiaHie;spoJr¡íci al }í 1000. 0/100,0; graficosídivisionesv, divisionesl, iiespo, A a p l i t u d , '(lanipulación de Señales', vecesj OJ; iieapo inicial^coriseguir tiefipo(l¡ do í k=kü; datoín=ifiporlti(eriirada}; pulpÍ3el(floai(k)tperiodo/IOOO,Oí.uitJdad](, j-saí-datoiníunidaQ} 1 , VELLOS); o u l p í s a l i d a , fiatoiritsigoritscijj p u l p i x e l l í l o M í k J í p e r i o d D / l O O O . O t u n i d a d x , y * a i - d a t o i n t u n i d a d y t a l g o r i l * 0 j LÍGHTELÜE); })íhile(í conseguir JieapoO-tieípoJiiici al )<=lieepof 2 ü- !kbhii(})¡ do { eveot.getKeyEventOj Jtíhiíeí evEní.Kíiat == e v H o t h i i i g í j graphicsStopOj bresk; case 2; FUE t a r c h i d a t i HKarchidai^openlaRchivo, I ji i )J==»ÜLL) í p r i n i í í ' H o es pesióle abrir el archivo'}; eni(l); {Jaioin=inporlbÍBnlra()aJ; p u l p i í e H í J o a l í k l t p í r i o d o / l O O O . O t u n i d a d i , ynaü-dalointiiíiídady, O J ; íprinííjarchidaí, '!íf íf ! , periodoj datoin); pnipiiel(floaí(h)íperiodo/1000-0íunidadx, yitai-datoiníunidad/talgoritío, 0); fprifiíftarcfliddi, 'Xf Xí f , periodo, datoin); > tie»pojinal=con5eguir_tiespoííj lapso=(íÍEspo_fifíal-tÍEspoJfíicial)ÍIOOO. 0/100,0; fclosetarchiiiatj; p r i n t í C H o es posible a b r i r el archivo 1 ); exitdli - 28 - fprintfíarchidalj 'ARCHIVO BE MHIPUUCIQH DE PATOS \n')i f p r i n l f í a r c r i i d a l , ' TIEfiPO DATO EHTRftOA TIEHPO DATO SALIDAV)} f p r i n l f í a r c h i d a í , '(segundos) (Voltios) (Segundos) (VoHiosJVli graficosldivisionesv, divisional, tieapoj ásplitud, 'Hanipulación de SeHaleE'j veces, 0}; k=-li do í k=í;ilj daíoin=in¡(ortli{eritr3da}j puíp¡íel(float{f;}ífieritido/1000,0íufii{iadxj /sa f p r i n í f t a f c f i í d a i j ! íí ^', kíperiodo/1000.0, daíoirtíiO, 0/255.0}; ouíp (salida, d a í o i n i a l g o r i t í o j j pulpiiel[f loa I (k)íper iodo/1000. Otunidad i, yiaí-datoifltunidfidytalgoritio, LIGHTBLÜE}; fprinífEarchídai, ' ?f íf \n", kíperiodo/1000.0, daíoiníalgoritsoílO, 0/255,0}; delajftperiodo - lapso}; }»liiIe(ícoD5e9UÍrJÍB»po(]-tÍBipD_inicial)<=tÍB*pof2 Ü Ikbhitd); do í }»hile[ eveflt.jfliat == BvHothing); grapfíicsStopOj fclosEÍarchidalJj br?ak¡ resuteO,' void TBBIApp::doAlgoriUoI(int p) í n Declaración de variables de la rutina í/ regisler i n i d a t o i n j i, kj regisler f l o a t lapso, tiespojnicial, t i e s p o j i n a l j TEvenl event; char erroríisgEílftXSnElj vece 5=0; suspendí}; if [graphksStartO == False} í sircpyíerrorílsgj g r a p h e r r o r í 5 g ( g r a p h r B s u H ( ) ) J ¡ 5Írcat{ erroriísq, ',' }; sessageBoxIerrorílsg, i ehe case 1; í bkHj daíoin=inporí[i(eníradd3; ufError I níOKBulion); - 29 pnipiteKfloalíkJtperioáo/iOOO.Oíunidadi, ysaHaÍGiníurudady, 0); o u l p U a l i d a , daícifilalgoriiso); pulpiíelífUallkHpBriodo/lOOfl.Otiinidadx, ytaHaioiníunidadytalgoriUo, 0); } íie5poJifial=consegiiiMÍ6ispoí]; I a p s o = í í i e f l p o _ f i n a ] - t i e n p o j n i c i a ] ) í i 0 0 0 , 0/100.0; do í veces=vecestí¡ deardeviceOj graficos(¡h"yisÍDnesYj divisiunesl, lieipoj ñ s p l i í u d , ' M a n i p u l a c i ó n de Señales'; vecesj 0); t=-ij iieepc_inicial=conseguirjie8fio(]j do í bkfl; d¡iíoin=inportb(entradaj; p u i p i í B K f l o a t t k í t p p r i o d o / l O O O . O Í ü n i d a i l i , ysardaioínítinidad/, YELLOUJ; oulpísalida, dalointalgoriliojj p a l p i i e l ( f l o a t [ k ) í p B r Í B d o / 1 0 0 0 . 0 í u n i d a d i , y i a j - d a í o í n í u n i d a i i y t a l g o r i í i o , UBHTBLUElj dela/tperiodo - lapso}; }»fiile[(conseguir_tietpD(]-tÍBapoJnicial]<=UBfipoi2 eved.shaí == e v H o t h i n g j j do í evBnt.Kiíal == evHoUiiftg}; grephicsSiopOj breakj case 2: FILE íarchitíaí; ifílarchidaHoppntaRcMvo, 'K'íJ^H p f i n í í C H o es p o s i b l e a b r i r ei a r c h i v o ' ) ; t=-l¡ íieapojnicial=con5egnir_íiefipo[jj for(i=l;i<=100jíH) í k=kH¡ daloifl=iiiporlb[eniradaíj pütfíiiBKfJcíaKMífíEriodo/iflOíi.Otiinidadjj y n a j - d a i o i n í i t n i d a d y , 0 ) j íprinHíarchidal, '?íí 'íf, periodOj daíoin}; o u l p f s a J i d a , tia íoiní almorí tío) \j /íaí-datoiní-unitiadyíalgDritío, 0); í p r i n í í ( a r c h i í l a t , ''íf íf*, periodo, d a í o i f i ) ; } lÍBitpoJinaJ=con56giiirJÍ8(ipo(Jj Upso=(tÍB*poJinal-lÍBipoJíiicial)ÍÍfiOO.O/ÍOO.Oj íclosefarcfiidat); iflíarcbidaMopenlaüchivo, i»lJ)==HÜLLi í p r i n í í ( f H o es p o s i b l e abrir el archivo'}; - 30 - f p r i f l l f l a r c h i d a l , 'ARCHIVO DE SftHIPULACIflH ÍE MÍOS \n'); fpriniftardiidal, ' TiEJíPG DATO ENTRADA HESPÍ) DATO SALmV]¡ f p r i n í f í a r c l i i d a t , '(segundos) (Voltios) (Segundos) ( V & H i o s } \ n ' ] j i=-l; do deardeviceí); graficoBÍdivisionesv, divisiones!, tieapo, ñeplüudj 'Sanipulación de Señales', veces, 0); kHj liEjtpoJflicial=conseguir_tiBipo[íj 'do daíoiri=inporíb{entra(Jd); pulpiiel[flflaí[kliper iodo/1000. Oíun i dad!, yíaHatoiii£uniila¡Iy, YELLOWJj íprintílarchidat, ' íf ?f ', vecBSÍUperiodo/lOOO.fl, daíoiníiO. 0/255.0); Dtltpísaliijaj d a i a i n t a l g o r i U o ) ; puipiíBltfloallfcJtpBriojIo/lOOO.flíiinidadi, ysai-tiaiDiníuiiidadyíalgoriífiOj LI6HTBLUÍ); fprinlflarcliidal, ' íf íf \ n [ j Uperioáo/lOOfl.O, diíointalgonUotlQ. 0/255. 0 ] j delayEperiodo - lapso); }if M 1 e(( conseguí rJifiípoíl-tieipDJnici al X^l i e*pot2 ¿i !kbhát())j fiat == evHolhing); do í }»hile( evenl.Khal == graphicsSiopí); breakj int í rscuperarOj TBGIApp íiqííipp; gtiardarí); return 0; void guardar(void) í FILE íconíi; iíííconíi=fopen{ 1 cor 1 fip,s)'5 I! N^JJ-H í printfCNo se puede abrir archivo de configuración'); fprintfíconíij ^5\n', aRchivo); - 31 fprifiifítofifi, íprinlfícoíifij fpriniflcoiifi, fpriíití(cori-fij íprintficofiíij íprinlfíconfi, fprinlfUonfij fprinlfíconfij ípriíiíftconíi, fpriniffco/tfij fprinlfíconíij fcJoseícofífi); '^ft'j f 2s\n', Vís\n'j 'ís\n', "fcsU'j I 2s\n l , "¿s\!\' , '?5\n'j 'ís\n'j "Í5\n', 'Í5\n'j aLgoriUo); cOnliriusG); aflpliíuiiGS; íRecuenciaG); atífiülud); íJsfpo); dlvisionesv); dlvisionesí); eHirada); sAlída); pEi-iodo); void recüpsrar(voiii) í FUE tconíij p r í n H Í ' H o se puede a h r i r a r c h i v o de configuración"); enlílj; fscanffcoíifi, '2sV, íscanf{confij ';ís\n', fscanífconfi, 'ís\n', fscafif(coníi, '."ísVo 1 , íscanfíconíi, ';ís\n', fscaníícoíifi, "te\n' , fscanflconfi, "^s^.n", íscanftcorifi, 7s\n', fácanííconfij 'üsV, íscanftconfij ! Í£\n', fscanítconfij 'flsNn'j fscanfíconfi, íc]ose(coníi); aRcMvo)) algoritso); cüníinuaG}; afipliludG); íRectienciaG); aílplitiid); ilespo}; dlvisionesv); dlvisionest); eHlrada); sñlida}; íieípo = aíoí(tle.ípo); divisioftPs{=aíof(dívisioriEsí]; divÍ5Íone5V=aíüf(dIyisionesv); enlrada=aíoí[eHlrai!a)j salid3=alof(5Í!lida)j co(iiii)íiaG=atof(cOritinuaG}; a3gariUo=atDÍ(aL9oriífiD]; perio(!o=alof[pEriodoíj -í/ /í- n n n n ¡\ TESíSiCOHIROL DIGITAL DIBECTB Hiflor; Patricio Fusliilos P. IHSTRO.EXE SOBÜLO: IHGRESGS.CPF í/ í/ i/ t/ Ulttia ííodifícación; 15/03/91 i/ - 32 - n /i /» \¡ __________________________ ________________ -1 / II ¿define UsesJKeys fidefine UsesJApplicalion üdefine ÜSBSJEvenl ¡define UsesJRed üdeííne UsesJUialog íidefine UsesJBuUon üdefine lIsesJHeflUÍar ídefine UsesJSuWíeim fldefine Use Ide-fine üs ÜSBsJSiatiisIíei Ü5B5_TSÍaliisDeí -firiB UsBsJChíirPialog ¡define UsesJHislory Uses TLahel í\S .H A SER LLAMADOS í/ Mnclude Sinclude íialh.h) íincluds<stdarg,h> üificlude < s i d l i b . h > Sinclude (strifig.h) lifldude <5lrslrea.h> SJincludB <dos,h> lificlude (sldio.íi) Sifidiide <conio.í)> Ü n c l u d e 'calc.h 1 íinclude <grapMcs.h> Sinclude <ci/pe.h> char aRchivof?], aSpiilud[6], tlBípo[20], dlvisione&l[6], dlvisionesvEfi], eHírada[¿], sAlida[¿], fRecüpnciaG[¿], cOntinuaG[¿], 5lgorit*o[i]j pEriodo[6]j' f j o a t fiípliiud, tieipo, divisionesl, divisionesv, e n t r a d a , salida, frecuendaG, a B p l i l u d G j continuaG, a l g o r i t a o , periodo; thar aboullÍ5g[80]j i n t \\d T6GIiípp::doíÍEípo() í char s[20]¡ TDialog U = nea lEtiaSogíTRecttdj O, 50, 8], 'Ingrese T i e u p o " ) ; d->Qpííon5 ¡= ofCenleredj // Boípnes d->inserl(ne« TButlont TP.eci(25, 5, 35, 7), 'Cancel 1 , caCancel, bíHoreal} ]; d-Mnsertfaev TButlonl IRecKH, 5, 2í, 7), 'OT", cíOK, bí&efaultl )} - 33 - // Linea de ingreso del valor nnputlirie íiiefi = ne* T I n p u l L i n e í T R e c í f U , 3, 3í } 1), 20 ); d->ifiserí( TIBÍ J; d->ir f serí(nES Uabel(TRi:dí 1¿, 2, 31, 3 ], '"Im^ (Segundos) 1 , lie* ]}; d-Mnserttnes íHUiory[TRect(35, 3, 38, 4), lies, h l D o T i e i p o l ) ; sírcpyís, t l e i p o j j i->5fiUaU(s]¡ d = (TDialo? t) v a l i d V i e w ( d ) i i f (d !=HIIU) ( d) " »DX] else { gj '\i3 Ingresado dato alíanuflérico \n\n\io ftaotenido (fltiito valor 1 ]; ¿sssagfítoiíátiod/lsg, sfError ¡ «íOKButton); strcpyís, ílespo); break; Inténtelo Huevaceníe \n\n\i3 tieipo = a t o í í U e n p o ) ; d )j } í void í char íMalog td = nex TDialogtTRecííO, O, 50, 8), 'Kojíjre A r c h i v o ' ) ; d-)opíions != oíCentered,' // d-MiiserK/iea TButton( Tííect(2í, 5, 35, 7), 'Cancel', caCancel, bíKoroa]} ) j d->ift5Brl(BB« TButlont TRed(H, 5, 24, 7), 'O^T', ciflK, bfíefaiiltj }; // Linea de ingreso del valor TlfíputLirtB ÍTiEfl = ney T l n p u l L i n e í TR&ct(l¿, 3, 34, í), 10 J; d~>inserí( Ties J j e»! TLabellTIÍBcK U, 2, 34, 3 } , "Ingrese HoabreT, TIB* ) J j THÍ5Íor/[TReci[30j 3} 33, 1), íiesj hlOoftrchivoJ); sírcpyfs, aííctiivp); d = (TPialog ÍJ vaii(!Viey{ii}¡ if (d != KBLLJ í if (de5kíop->BUcView(d} == cíOK) - 35 d-hpíions ¡= ofCeníeredj // Solones d-Mnseríínew IBultonl ÍReciíSÓ, 5, 30, 7), 'Cancel 1 , «Cancel, bfHorial) ); d->inserl{nev TButiflní T R e c í f í S , 5, 25, 7), '0T", cdli, b f O e f a u l l ] J; // Linea dE ingreso de! valor ÍlnplítLine íXdiv = nex TlnputLinef Tííedd?, 3, 30, S ) j ¿ ); d-)insert( Xdiv í; d->inseri(ne« TLabeHíílEcií ISj 2, 32, 3 } , "TdiyisionEs 1 , Xdiv ]); tBinserKne* THisíoryfTRECífSi, 3, 3^ 4 ) , Xdiv, h l D o X d i v i s i o n e s ) ) ; s t r c p / í u , dívisionfEÍ); d = (lüialog í) v a l i d V i e ^ [ d ) j ií id != HULLJ í ií (de5kTop->eiecVieK(d) == csOK) í d->gBt5ata(uJ¡ pise í slrcpyíaboutRsg, '\i3 Ingresado daio a l f s n u f l é r i c D \n\n\i3 Mantenido lílliio valor 1 ); tesáageBoitatiouíílsgj s-íError í síOKButlon); stfcpyfiij dlvisionesUj hreakj I n t é n t e l o HuevaíEnte \n\n\i3 ííivisionesl = aloftdlvisionesDj void char v[¿]j TPialog íd = neí< ÍHalog(IRect(0 } O, 50, 8}j 'DivisionesT en P a n t a l l a " ) ; d->oplions ¡= // Bolones d->ÍDserlfnen TButlon( TÍÍECÍÍ26, 5, 36, 1), 'Cancel', caCancel, d-Mnsprltne» I B u t l o n f TRccidS, 5} 25, 7), 'fl^r'i «Olí, b f P e f a u i l ) ) j // Linea de ingreso del valor r i n p u t L i n e íídiv = nex J l n p u i L i n e í TReclfl?, 3, 30, 4), ó ); ii->inEerl( Tdiv ); d->inserl( ñau HabeKTReclMS, 2, 32, 3 ), 'T'divisiones', T d i v ) ) ; - 36 - d~>inserí(nen THÍ5lor;(ÍRed{31, 3, 3*3, $}, Tdiv, hlDoTdivisiones)}; slrccy(v, divisiones 1 /]] d->seUalaív)¡ d = (Tüialog I) v a l i d V i e i í í d J j íí [d != mil] i if ídesHop->emVíe*{d) » ceGSÍ) { d->geiíaia(v)j else { strtpyíabcuílísg, "\^3 Ingresado dato a l f a n u s é r i c o \n\n\i3 Han tenido U l t i í o v a l o r ' } ; fepssagBSoiíabDiiiflsgj sfError ¡ ífOlíButíonJ; strcpylv, divisiones 1 /}] hlenleío Huevasente \n\n\j3 s!rcp/[d!vjsionesvj v j j diyisionesv = atofídlvisionesv); } destro/í d ); n rutina que nos percite setear el valor del PÓRTICO DE EHTRABA de S bits, (jue debe ser ingresado en decical, ádesás esta función nos peralte recordar e! último pórtico que fue «tunado í/ void TBfilAppüdoEnlradaíJ ÍDialog íd = ne* TDialogíTRectíO, O, 50, 8}, 'Pórtico Entrada (Deciaal)'); d-)opíions != ofCentered; // Botones d->inseri(ne« TButtoní TRecl[2¿, 5, 3¿, ?), 'Cancel 1 , «Cancel, bfHorsal) ); d->insert(nev ÍBuüoní ISeclílS, 5, 25, ?), 'GT", csOí;, bfDefaull) )j // Linea (Je ingreso del valor Tinpulline ÍPori = upa T!nputLine( TRecí(20, 3, 30, 4), 1 ]; d->insert( Port Jj d-)ÍB5erltnBí TLíbelíTRecit 20, 2, 30, 3}, '^órlico1, Pori J)j d->insBrl(nB« THisloryllRecUJl, 3, 3-1, 1], Port, ItlOoEnlrada}}; (v, eHtrada}; ¡i = (TMalog í) if (d != HOLL) ií (deskTof>->eíecView([!] == cíOK) í - 37 - iftisíigitíirCxlíJO Else í strcpy[a[íoütíísgj '\i3 Ingresado dato alfanuiérico \n\n\i3 I n t é n t e l o Nuevaiente \n\n\x3 Ha/iÍEnÍdo 1)1 1 i no v a l o r ' ) ; BoííatioiiiHsij, tfError ¡ í f O K R u t t o n J j ífj elitrada); break slrcpyteHtrada, y); e n t r a d a = aiof(eíítrada); destroyí d ); } /í rutina fjue nos periite selear e! valor del PÓRTICO DE SÁLIBft de 8 b i t s , que debe ser ingresado en d e c i e a l , ftdesh esta función nos p e r n i t e recordar el ú l t i a o p ó r t i c o que fue u t i l i z a d o ti void TBGI6pp;:doSalida() í char 5[4]¡ TUialo? td = new I5ÍBlog(TRecl(0, O, 50, 8], 'Pórtico Salida ( D p c i s i U ' J j d-)oplions ¡= sfCentered; // Botones HiíiserKfies ÍFuítont lRect(26j 5, 30, 7), 'Cancel 1 , csCaitcel, bíHonal] ); d-Mnsertfney Í8ulíon( TReddSj 5, 25, 7), 'QT , csQK, bfDefault) ]; // linfa de ingreso de! valor TInputLine ÍSal = nes ílnpuíUnet rRect(20, 3, 30, í), í }; d-)insert( Sal ); d->insert(npK TLñbel(]Reci( 20, 2, 30, 3 } , 'Aórtico', S a i ) ) ; d->insert(nev íHÍ5tory(ÍRecl(3í, 3, 34, <]), Sal, strcp/ís, sñlida); d->5eU>aUísíj d = (Tíiialog ÍJ v a l i d ^ i e n í d ) ; if id != HULU { if (deskíop">eiecView(d) == caOK) í d->gelDah(s); í H ( Í 5 d Í 9 Í i ( 5 [ l ] J ){} else í sircpytabDiilñsg, '\í3 Ingresado oalo alíanuflérico \n\n\i3 Kanienido Ulliso v a l o r ' ) ; sessageEoiUbout/isg, cfError í BÍOKBuíion); strcp/{s, sólida); I n t é n t e l o Huevasente \n\n\j3 38 - salida = a l o f U A l i d a ) ; destroyl d ); } void TBGiApp;;doFrEcueíicia6í) char }'U]¡ IBialog íd = ne« TMaloq(TRed(0, O, 50, 8), 'Frecuencia de Generación'}; fl->oplions ¡= ofCeníeredj // Bolones d->insErt(nei! TButlonl TRectí2é, 5, 3¿, 7J, 'Cancel1, «Cancel, hfHorjal) }; TButloiií TSectílli, 5, 25, 7), 'DT", «Olí, bfísfaall) )j // Linea de ingreso del valor TIitpiílLine ííre = nE¥ TUpulLinet TRed(lI, 3, 3?, 1), 6 ]; d->ifiseri( iré }¡ d-Mnserlíne» TLabel(TRed( 11, 2¡ 3?, 3 ) , '"Frecuencia de Generación V B f fre J ) j d->ifiserí(fie« THislorytTRficHlO, 3, 43, 1], iré, h l D o F r E c u e n d a G ) ) ; ly, íRecuenciaG); d = (TDialog í) v a l i d V i e « ( d ) ; if (d != KULL) { ü (de5kTop->ejec7ieií(dJ == csOí!} í sircpyíaííouifisgj '\í3 Ingresado dato alíanusérico \n\n\i3 fiantenitio Üllito v a l o r 1 ) ] lesEageBojttaliCiuiíisgj üíError ¡ sircp/í/j fRecuenciaGJj br?akj írecuenciaG = aloí(í!íec!JeficiaG}j } tíEsíroyí d }\d í cnar i[¿]; Inténtelo Uuevasenle \n\n\i3 - 39 Tfliálog id = nea T M a l o g f T R e c t í O , O, 50, 9], d-)optioris != oíCentered; '¿spliíud a ser Generada 1 ); // Botones d-HfiserUnptí Tfluitoní IRedfSí, 5, 3¿, 7), ' C a n c e l 1 , «Cancel, HHoraal} ) j ií->inseri[ne>: TBuiloní TüecUiS, 5, 25, 7), "OT", csO)!, bfüefault) ); // L i n e a de ingreso del valor ílnputLine ítapG = oe« llripuílineí IRect[7, 3j >13j 4 ) , á ); TL?,bel(IRecf[ 7, 2, 43, 3 ) , ' ^ p l i l u á ds Onda a ser Generada", fitpB ])¡ TH¡5lory(IRsctí4íj 3, 47, 4 J , AapG slrcpyd, aílpJitudG); d-)setí)3t-a(z); d = (T0ia]og í) vaiiiiVieiiíd}; ií (d != HÜLLJ í if (deskTop->eificVie)t(d} == caOí!) í d->getfiala(;}; else í sircp/taÍJOtiiHsg, *\i3 Ingresado dalo alfamuérjco \n\n\j3 H a n l e n i d o Ulliso v a l o r ' ] ; sessagEBoxíaticulílsg, síError ! fifOKBulton); strcpyiij aÜpliludG); break; Inténtelo Huevarle \n\n\i3 5Írcpjf(aHplitu(l6, i ) j = atoí(aHplitudG}¡ <Jestro/( d J; void T F G l A p p ; : d o C o n l i n « a G ( ) í c h a r a[i]j T P i a l o g U = nen TPialog(TRec!(0, O, 50, 3), ' C o n t i n u a en la señal G e n e r a d a ' ) ; tf-)opíioris J= o f C e n t e r e d j // Botones íi->in5erlíne-(í TBuUon( TRect(26, 5, 36, 7), ' C a n c e l ' , csCancel, bíHorsal] ); d-)in5erlínetí TButton( TReci(15, 5, 25, 7), 'O^T', ccO*, bíOefauli) ); // Línea de ingreso del valor IlnpuíLine ícoip = ne» I I n p « t L i n e ( TRect(14, 3, 41, 4 ) , ¿ ) j d->inserl( coap ); d->Ín5ertíriey ILabel(TRect( 14, 2, 41, 3 ), ''"Coiponente Continua' 1 ", cosp ) ) ; d - > i n 5 e r l ( n e w ÍHÍsiory(TRed(42 J 3, 45, 4), cosp, h l D o C o í i í i n u a G J ) ; slrcpy(a, cDntinuaGJj d->seíDala(a);- - 40 - d = (TDialoq í) v a l i d V Í E * ( < l ) i ií (d != HÜLLJ í ií (desUGp->eíecVie*(íl] == uQK). { d~>geíPaía(a); for(i=Oja[i]jH]tJ í ehe í strcpylaboutfoig, f \i3 ingresado dato aHanuserico \n\n\*3 tfanlenido UHiio valor'}; tessageRoxtaboutfisg, níError ¡ aíüKButton); slrcpyííj cOíiíinuaG); hreaí;; I n t é n t e l o Huevaaenle \n\n\x3 cofttiituaG = aloífcOníifiuaO]; \f d ]j /í R u t i n a que nos peralte ingresar el valor del tieipo que debe salir !a senial en f i a n t a l l a j y recordar este valor para no tener que ingresarlo c o n s t a n t e a e n l e í/ void T6G!App:;doAlgoritioO() { char b[6]i TMalog U ~ m. THalogíTRecKO, O, 50, 8), 'ftlgoriUo']; d-)opíions í= o f C e n i e r e d j // Botones d-Mnserlíney T e u l t o n t TRect(26 } 5, 30, 7), 'Cancel 1 , ceCancel, b f H o r i a l ) ); d-)in5ert(nev ÍBuUonf íRecl(l5, 5, 25, 7), 'OT 1 , «OK, bíOeíault) ); // linea de ingreso del valor TIopiiUiíiB ÍA1 = ney Tlnpuílineí TRecl(I3, 3, 37, H], ¿ ]; d~>insert( Al ); d->in&?rt(nev TLabelíTRecií 13, 2, 37, o ) , 'Tactor nulliplicativo'", Al )¡; Bií THisÍDry[TRecl[12, 3, n5, 4), al, hlfiofl]goriUoflJJ¡ d->selDala[t!)j d = (TDialog t j va]idVie«(d); ií (d != HUU) / if (de5kIop">eificVie*(d) í d->gelíaía(b)j í i f ( i s d i g i í ( b [ i ] ) I! b[i] == '/){} eHe 41 slrcpyíaboulh'sg, '\í3 Ingresado dalo ' alfaituaérico \n\n\x3 lílliso v a l o r 1 ) ; ifiSsagsBDiUboultisj], síError I sírcpyíb, aLgoriUo); breakj Inténtelo Haevaaenle \n\n\x3 Oj b); alfjoriíao = slofíaLgoriUo); } deslroyí d }j Qid ][!6JApp:;doPeriodo() citar c[!9]j TMalog id = nev TIiia]og[TReet[0, O, 50, 8), 'Periodo'); íÍGn5 í= oíCeniered; // Bolones d-MnserllnE* Títuttoní Tfiecl(2i, 5, 36, 7), 'Cancel', csCancel, b f H o r « a l ) ) j d->ifiserlíneK T8uílon( TRectdS, 5, 25, 7), 'QT", ctOK, bíDeíault) )j // Línea de ingreso de! valor TlftputLine ÍPe = ne>f TInputLine( TRectílO, 3, 37, fl), 10 ) j d->ins5rí( Pe ); d->inserl(ne« TLabeKIRecíí 10, 2, 37, 3 ), ""Período de Huestreo (iseg)* 1 , P e ) ) ] d->ifisefl(RBt! IHisloryíTIlEcKIZ, 3} 45, Mi Pe, fclDoPeriodoJJj sírcpvtc, pEriodo); d = {ÍDialog í) if (d í= HÜLL) í ií (deskTop->execViei!Í(!} == í í if(isdigil(cCx]J !! c[x]« '.'JO ehe í slrcpy(apoulíísg, f \x3 Ingresado dato alfanusérico \n\n\x3 Mantenido Ultimo v a l o r 1 ) ; BeEssgeFojtabouííísg, díError 1 üíBKH strcpylc, pEriodoJj breakj I n t é n t e l o Hueváíede \n\n\i3 slrcpylpErioáo, c)¡ periodo = stoffpEriodo); if(pErÍBdo < JO) [ MrepyU&outfísg, '\z3 El período de suestreo es *U}' pequeño \n\n\i3 El linuo es 10 AS, \n\n\i3 Guardado 10 es.'Jj g, ííError 1 sfOK6ulton)¡ Valor - 42 - pBriodo=ÍO.Q¡ } } destroyí d ); void T R B I A p p ü c a l c u l a l o r í ] { TCakulator tcak = (TCakuialor í) v a J i á V i e u l n e » TCakulaíor); i f t c a l c != 0) {JeskTop->iriserl(cak}¡ /(__-. /I - /i /í ü /t /í /! /t „„„ „ . . „ . . „ _„„ - PROGRA«A : IHSTRO.EXE KOÍULOí ÍÍEHÜ.CPP ülüsa ñodificación:-15/03/51 ¡ i . f/ i/ {/ t/ ?/ i/ í/ II TESISíCOHTROL DIGITAL DIRECTO Autor: Patricio Fustillos P. n í/ . ^ M /I DECLARACIÓN BE OBJETOS A SER UTILIZADOS EH EL PROGRAiíA U Npfinp Usesjüeys Usssjñpplicaíion U&esJEvení Wsíine U5?s_TRect üdeíinB Us85_TMalog idefine ÜsesJButíon Bdefine UBE "define UsesJHBnuHe» üdefinp Ü5P Üdeíiíie Ug Mpfine Ü52 Sdeíine Us UsesJChüirOiaioq Sdsíine üsesJHislory Hefine UsesJVindoa rdeíine UsBsJJnputLine Sdefine Uses Rabel i - 43 - /* ARCHIVOS .H A SER LLAfiADDS í/ Sinclude ¡include üinclude üincliide Binclude linclude <lv.h> <aaíh.h> <sUarg.h> 'Paloi.h' <sldlib.h> <graplúc5,h> (siring,h> S i n c l u d e <dos,h> Hncíude <5Ídio,í)> "include <conio.h> void TBGIAppííhandleEvpnilTEventi evení) í cfiar abouiKs^ESO]; íftppl i catión ::haiídleEvfinl[evefll]j (evení.vfiáí) sifilch case cífiboulBojC //aensaje de inforaacion inicial strcpyUboutiisn, '\i3 IHSIRlífiEHTáClOK \n\n\x3 2?/02/?í \n\n\x3 Por: Patricio Fusiillos P. 1 ); pes&ageBoítabQUllUg, afluítjritaíion j a f O K B u ü o n ) ; breakj cas? cfiBoCalculadora; cakulaíorOj brea!;; case csDoTiespo; dolipjipo[)j breakj case breakj case düJEdivisionesUj breahj case ciDofdivÍ5Íones: doTdivisiofiBsO; break; case doíntradaí); breakj case ctBoSalida: - 44 - doSalidaf); breakj case doAdquisicionOUJj break; case ctHoAdquisicionD/l; doAdqii breakj case ufl düfi<JquisicioriI[l); break; case iioííd(}tiisicionl(2]i breakj case cafioSenoidalf': doSeíioi brsakj case cs doSenoidalIOj brsakj case cuDoREclangularD: doRBCÍ breskj case breakj case breakj case doftlgorit»oD(2)j breakj case ctíiCh-lnof ¡Uüi: break; case breakj case cíDüFrecuenciaG; doFrE break; case doftsplihdGOj - 45 - breakj case ciBoCofiíiffuaG: doConiiniiaSO; break; case csDoAlgorüíQÜ! doAlgorüaoGOj breakj case breakj case QoArchivoO; break; default : reíurn; bresk; defaull! relurn; i j clearEvenl(event)j TKenuBar tTBBIAppüiniWenuBarfTRecl r) í r.b,y = r.a.}' f lj relurn nEK IKenuBirt r, tn» TSubfipnuí ^HíFO" 1 , hcüoConlexi ) f ínev TUenuIÍEaí "'I^íorfiación,..' 1 , cfAbouiBoXj kbHolíey, hcHoConleií ) t tne« lííenuIleAt 'T'akitladora', ccfroCalculadora, kbHoüey, hcHoConieii ) i toev Tííenulíeaí '"TaHr tile* TSublienut 'requisición', hcHoConíed } f íney IJÍBUuIleií 'Adquisición D e f i n i d a ' , HÍoAdquisicionD, UF1, hcHoConlsH, 'FI' )f ínetí TfienuIÍPít 'Adquisición DeíÍRitia-Archivo', ciDoAdquisicionDA, kbShiftFi, hcKoConleji, 'SMíi-Fl 1 íne» Tíjenuitent 'Adquisición I n d e f i n i d a " ) CfiDofidijUÍ5)cionÍj kbCírlFI, bcHoConlexl, *Círl-F!" )f tnev ÍJÍenuíl«( 'Adq^u^isición Indpfinidñ-firchivo", cftDoAdfjiiisicionlA, kbAHFJ, ficHoConíexí, "Alt-Fl 1 )f tnev TKenuIUüí'^BnoiiUl D e f i n i d a 1 , caDoSenoidalD, kbFZ, hcHoConleii, 'F2 1 }t ím Tflsniiílei('S n 'E"noii!al Indsfiffitia'jCaDoSsnoidaí!, kbCírlF2 ; hcHoConleil, 'Clrl-FZ 1 Jf tnew Tf1entiitef(" > reclangu]ar Definida', cflDoRecíangularlij kbF3, hcHoConieil, !F3' ]f ín?x TíleníUeíCReVlanquUr Indefinida^ciDoREclaíigularl, kbCiflF3, hcHoConieií, 'Ctrl-FS' ]t tneí( ÍSubflEnut 'AlgoVilíB', hcHoConleil]* íneK ííisnuUEéCT'lgoriteo Be-finido'j cñDoAlgoriUoíijkbFí, hcHoConlexl, 'Fr }f íns» THEnuIveííTI^oriho Definido-Archivo 1 , csDoAlgoriliDDAjkbShiílFfl, hcüoConteit, 'ShifW ) ínev TKenuIteií'APforiiío I n d E Í i n i d o ' j c i D o f t l g o r i U o I j k b C l r l F í , kíioConíeií, 'Clrl-FV )f tiien IKenuIleiCAlqVriUo indefinido-Archivo', ciDoAlgoriluiIAjkbAllF^ hcHoContEÜ, "ñil-FV Jt - 46 esi TSubHfiíJuCVpciQnes de Gráficos 1 jhcKaConleitJi íflEH T Í Í B f l U l U í ( fnev TSublififluf'T'antalia^hcHQContBxt)* to TtaltEaCV'ipliíud 1 , csíoAiplilnd, MAMA, hcNoCoíilejí, 'AH-A 1 tflBK TfÍE BX TíenuIÍB6[ ! (!ivÍ5ÍonB5 e^jM1, «BoXáivisioues, kbMUj hcüoConteít, 'áll-J' Jf BK TfiBiiuJtBBÍ'divisiones Voltios' , «íoídivisionfiB, kkAHV, hcKoContBxt, 'Ali-V 1 ínes ey TlienuHBaCAVplilud 8 , ctíoAspliluáG, kbAHH, hcHoConifixl, 'A1H 1 Jf ev TfíenuIíesí^'F^reciiencia*) csDoFrecuBnciaG, kbAHF, hcHoCoftíexij 'All-F* T.lEftUltB*{ 'CoViiíjua 1 , csDoCofiiinuaGj kbAUH, bcHoCoriíext, 'filt-H' )]f tnM TKfinuIleíí '^Pieepo 1 , «GoTieupo, kbAHT, hcHoContesl, 'A1H' íne« THeniiIíes[ 'Período 1 , cíDoferiüdo, kbAHP, hcHoConUst, 'Alt-P 1 íneis Tíienuíieit 'ArVhivo 1 , csDoArchivo, kbAHC, hcHoContexl, 'AH-C' '^óriico E n t r a d a 3 , csBoEntrada,' kbF5, ficHoConied, 'F5' )t ínex TñeíiuItBit'Pórtico Valida 1 , csDoSalifia, kbF¿, íicHDConiBit, 'F¿' ] TStatusLins ÍHGI¿pp:;i[iiíStaüisLiíie(TRed r) í r . a . y = r.b.v - í; r e t u r n neü TSUtusLinel r, ír.EH TSlaíusDeít O, OxFFFF } í ínp« T S t a í y 5 l t e a ( "W-r Salir', kkAUX, ceOuií ) t íitPM T5tatii5llB.i( ""Fr Adquisición", k b f l , caDoAdquisicionD )fÍREK íSÍ3tusHesí l " J Fr Ge/iBrar SBíio',kbFZ,HlloSfifioidal8Jítnew ÍStatusIieií'^r Generar Rectan',kbF3,«ÍDRecian9uUrIÍÍ^ key TSialiisHeflí 1<Sr Fr tneii íSEatiisitesí O j k b yoid T8GIApp::outQfíííiory[] { de HeBoria,*, eíError ¡ - 47 3,2 LISTADO DEL PROGRAMA COHTROL.EXE. . —„ JfI/ II TESISiCONTROL DIGITAL DIRECTO Autor: Patricio Fustiílos P. Programa CONTROL,EXE Módulo CONTROL.CPP Ultina Modificación! 15/03/94 _„____ // —-_ —, _.„,-.. DECLARACIÓN DE OBJETOS A SER UTILIZADOS EN EL PRGGRfiHA fcdefine Sdeíine fdefine Sdeíine ¡¡define §deíine fideíins 3deíine Ideíine ideíine íídefine ídeíine Sdeíine ^define ^define idefine ^define // „___ í/ i/ U Í7 \1 í/ í/ t/ UsesJTKeys UsesJApplícation UsES_T£vent UsesJRect UsesJDialog UsesJÍButton Uses_THenu8ar UsesJSubflenu Uses^THenuItera UsesJStatusLine UsesJStatusItem UsBsJStatusDef Uses_TDeskTop UsesJIsgBox UsesJChDirDialog UsEsJHi&tory UsesJTWindDW UsesJInputLinB Uses TLabel ARCHIVOS ,H A SER LLAHADOS Sinciude <tv,h> linclude <ciath,h> Pinclude<stdarg.h> lincludB "control.h" üinclude <stdlib.h> íinclude <graphics,h> ííinciuíle <string.h> Sinclude < 5 t r s í r e a , h > Sinclude <dos.h> üindude <stdio.h> Üinclude <conio,h) üinckide <ctype.h> // VARIABLES EXTERNAS Y GLOBALES extern char aRchivo[9], ahplitud[6], tlempo[20]j dlvisíonesíti], dlvisionesvfó], eNtrada[6], sAlidató], pEriodo[6]¡ extern f l o a t fiaplitud, tiempo, divisionest, divisionesVj entradaj salida, - 48 periodo, ymax, unidad};, unidad)1; char KIC1Ü3, KD[10], KPCIQ3, Reí[iO], CoefaUJtiO], Coefb[6][i03, LE10], B[IO], A[iO], UmaxüO], üainCiO]} ' float ki, kd, kp, ref3 coefa[63, coefb[6]j 3j bb, aa, untax, mninj int vecesj // DECLARACIÓN DE LAS PRINCIPALES FUNCIONES A UTILIZARSE void dibujabordefint right, int Uft, int bottoifij int top }j void dibujaeje[int alto, int ancho, int right; int left, int bottonij int topj íJoat divisionest, íloat divisionEBYj float Amplitud, int veces, íloat tiempo); void graíicosííloat divisionesv, íloat divisionest, float tiempo, float Amplitud, char Hitulo, int veces, int varjj •float conseguir_tie!npo(void]; int gprintfí int íxloc, int íyloc, char íf/nt, ... ]; void guardar[voidJí void recuperar(vQÍd}¡ // INICIftLIZACJOH DE STATUSLINE, HENUBAR, DESKTOP TBGIAppiíTBBIAppO : TProgInit( ííTBGIAppüinitStatusLine, JíTBGIAppüinitMenuBar, ífTBGIApp::initDesliTop ) { TEvent event; // event.what = evCoínínandj' // esta parte inicializa event.Biessage.cofTífiisnd = cmAboutBoxj //el mensaje de iníor/tiación putEvsntí event ]; / / a l empezar el programa ÍBXpandípathToDrivers) ; bgiPath = new chsrEsizeo-fípathToDrivers]],1 strcpytbgiPath, paí-hToDrivers); appDriver = DETECT; apphode = 0; ií [graphftppInit[appDriver, appflode, bgiPath, True) == False) flessagBBox("Ho puede cargar el Adapatador Gráfica.", mfError ¡oifOKButton); // HAHEJO DE LAS APLICACIONES TBBIftppi^TBGIAppt] í graphAppDonefJ; delete bgiPath; // RUTINA PID DEFINIDA void TBBIApp:;PIDD(int p) // Algoritmo para un PID en un tiempo definido, í register int datoin, x, k, regreso; register float lapso, tieíiipojnicial, tiempojinal, u, ul, u2[2], u3, e[2]j TEvent event; vecBs=l¡ char errorRsgthAXSIIE]; - 49 regrB5Q=0; u=ui=u3=u2[Q]=u2Ei]=Qi e[Q]=e[l]=Üi //Bloque para ingreso de las variables Kp, Ya, Kd, TDialogt d=new TDialog(TRect(7, 3, 75, U), "Ingrese Kp, Kd, Ki"l; TInputLinei a=ne« TlnputLineíTRectd?, 4, 25, 5}, 10}; d-HnsertlnEW THistory(TRect(24, 4, 27, 5), a, HIPIDO)}; char bufíerlESQ], buííer2[20]I buffer3[20], buffer4[20], aboutMsgCBSJj strcpyíbufferi, KPJ; 3->setDataíbufferi}; d-)insfirt(a) ; d-Mnserttnetí T L a b e l { T R e c t ( 24, 2, 42, 3 ) , "'"PID^p+Ki/stKdts*", a j ) j d-MnserttneH TLabel(TRect( 12, 4, 17, 5 ) , "PID^ 1 , a ) } ; d->in5Ert(nPV) T L a b e l í T R e c t t 26, 4, 28, 5 ) , " + ' ' } 5 ] ) ; T I n p u t L i n e í b=nen T I n p u t L i n e ( T Í Í B c t ( 2 B , 4, 37, 5 ) , i O J j d - > i n 5 B r t í n e H T H i s t o r y t T R e c t í 3 6 , 4, 39, 5), b, h ! P I D D ) ] ; 5trcpy(buífer2, C I J j b->5etData(buífer2)i d-MnsertEb); d - > i n s p r t ( n e w TLabel (TRecti 38, 4, 42, 5 ) , Vs+% b j ) ; T l n p u t L i n e t c=new T í n p u t L i n e { T R e c t í 4 2 } 4, 50, 5J, 10}; d - ) i n s e r t ( n B M T H Í 5 t D r y ( T R e c t ( 4 9 í 4, 52, 5}, c, h l P I D D ) ) ; 5trcpy{buífer3, K B J ; c->5BlData(buffer3Ji d-)insert(c}; d->in5Brt[neH TLabfillTRectt 51, 4, 54, 5], "Í5 N , c}); TlnputLineí r=new TínputLine(TRect(4iJ 6, 49, 7}, 10); d->in5firt(nfiw THÍ5toryíTRBctí4B f 6} 51, 7), r, hlPIDO)}; 5trcpy(buííer4J Reí); r->5etData{buífer4]j d->insBrt(rJj d->insert(neH TLabelíTRectí 20, 6, 41, 7 }, "Valor Referencia^ 11 , r)); d->in5ert[nen TButtQn(TRect(25J 8, 35, 10), "Cancel", cmCancel, bfNorctal))j d->in5ert{nen TButtoníTRBct{37, 3, 47, 10}, "OK", craOK, // Validación de las variables ingresadas d = (TDialog t) validVievj(d}i ií (d != NULL) í if (dB5kTop->BxecVierrf(d) == cmOK) í r->gel0ata(buffer4)j c->getData(bufíer3)j b-)getData(buílEr2); a->getData(bufferi)i i f ( Í 5 d Í Q Í t ( b u f f e r 4 [ > : ] ) ¡ í b u f f e r 4 [ > : ] == ' . ' ) ( } else { strcpy(aboutl1sq, " \ x 3 Ingresado dato alfanuifiérico \ n \ n \ x 3 I n t é n t e l o Nuevaisente \ n \ n \ x 3 H a n t e n i d o U l t i m o v a l o r " ) j (BessageBoxíabQuthsg, (nfError ¡ m f O K B u t t o n ) ; 5trcpy(buffer4, Reí); 50 - fDr(x=QjbuffBr2[x]j-H>¡) ( íf{isdigít[buffer2[ííj) ¡¡ buffer2[x] " '.' !J sise ( strcpyfabouUlsg, "\x3 Ingresado dato a l í a n u j í é r i c o \ n \ n \ x 3 I n t é n t e l o Nuevamente \ n \ n \ x 3 Mantenido U l t i a o v a l o r " ) ; ífiesságeBoxíaboutílsg, m f E r r a r J í n f O K B u t t o n í j 5trcpy(buffer2, K I ) ; regresad; í i f t i s d i g i t í b u f f e r H x ] ] ¡! buííeri[j;] == '/ I ! buííeri[x]=»'-'){> else í Btrcpyíaboutflsg, "\x3 Ingresado dato alfanumérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Hantenido UltiaiD valor 1 1 ); (SBH5agBBo>;(abouttlBg, íníError ! B Í O K B u t t o n J j s t r c p y í b u f f e r l j í'P); regreso^!; íoríx=0;buffer3[x]jH-x) í i í ( Í 5 d i g U ( b u í f e r 3 [ x 3 í I ! b u f í e r 5 [ x ] == ' , ' ¡¡ buf ferSCx]"'-' )(} else í it "\x3 Ingresado dato alfanufnérico \ n \ n \ x 3 inténtelo Nuevamente \n\n\x3 Hantenido Ultiñio v a l o r " } ; ftBssageBoxíaboutMsg, ínfError ! fsíOKButton) j 5trcpy(buífer3j KDJ; regre5o=í; } strcpylKJ, buííer2); strcpyfílP, bufíeri); strcpyfKDj buffer3)j 5trcpy(Refj buííer4)j ki=atof(KIJi kp=atoí(KP)i kd=stoí(KD)i refsatoííRefJi el se regrB5o=ij destroyí d ); i f ( r e í > 2 5 5 í! reí (0) í strcpyíaboutfÍBgj - 51 "\x3 El valor de referencia solo puede estar entre O y 10 V \n\n\x3 niB5sageBoí:(aboutí1sgj íníError ¡ mfOKButtonlj regreso=ij Inténtelo Nuevamente")¡ switchfregreso} í case 0: suspendí); if [graphicsStartO == False) { strcpyíerrorflsgj grspherrarjisgígraphreBultUÍ S j strcatí errorMsg, "." )j , /afError ¡ mfOKButtonJj el5B / switch(p) ; case 1: k=-i¡ tiefflpo_inicial=consBguir^tÍBBipo()j da toin=inportb( entrada) ¡ e[0]=ref-datoinj putpixe](float(k)íperiodo/1000.0tunitíad>; f ywax-datointunidady, 0); ui=kpte[0]¡ u2[0]=í;itperiodo/2000,Oíe[0]HiípBriodD/2000,OÍB[i^u2[l]¡ u3=kd/periodonOOO.Ofe[0]-i:d/periodoUOOO.OÍe[13; if(u>=255J u=255; ií(u<=0) u=0; outp(sslidaj OJj putpix8l[f]oat(k)ípBriDdo/1000,Otunidadx, yíTiax-uíunidady, 0); 2}; printf["Señal de salida; 22. 4f Señal de error; 7.2,41 Señal de control; £2,41% datoinliO.0/255.0, e[0]IÍO,0/255.0 J u í i O . 0/255, O J j e[Í3=5[0]; u2[i]=u2[03i X tiespo Jinal=conseguir_tÍB(spo( ) ; lapso=(tisíiípO M íinal-tieíspo_inÍcial}í200.0; clrscrOi g o t o x y [ 2 0 j Í2)j printf {"Duración dsl algoritiso : X 2 . 4 f ffliÜSBgundos", lapso); deUy(2000)j U=ul=u3=u2[0]=u2[i]=0¡ e[0]=e[l]=0¡ QraíicostdivisiDneBv, divisionesij tiempo, Amplitud, "CONTROL PID DEFINIDO", veces, líj do f - 52 - da tQÍn=inportb( entrada!; e[G]=ref-datoin; putpixel(float(k}tperiodo/iOOO.OÍ-unidad>:, yftajrdatoiníunidady, NBITE); ul=hpÍ8[0]j u2[0]=fcitpBriodo/2000.0tB[0]Hitperiodo/2000.0tBCÍ]+u2[l]; u3shd/pBriodoUOOO.Ote[0]-kd/pBriodDÍIOOO.Ote[i]{ u=uH-u2[OJtu3j ifíu>=255) u=255; if(u<=0) u=0j outpfsalidaj u); putpixe](íloat(kSípBrioúo/iOOO,OÍLinidad>:, ymax-utunidady, VELLO W),1 p r á n t f ( " S e ñ a J de salida; 7,2. 4í Señal de error; 7.2, 4f Señal QB control; n.4f, datointlO.0/255.0, BEO]íiO,0/255.0, uíiO. 0/255,0); e[13=B[0]¡ dslaylperiodo - lapso); )WhilB( [ consegui r_ti empoO -tiempo J ni da] )<tienpof4 ítft !kbhit( ) do í Bvent.getKeyEYentUi }while( Event.what == evNothingJj graphicsStopt); bresk; case 2; FILE íarchidstj ifííarchidabíopeníaRchivo, "w-JJ—NULD { printf("Ho BS posible abrir el archivo"); BXitíiJj } k-ij tieíiipQ_inicial=con5eguir_tÍBffipo[) ; datoin=inportb(Bntrada) j e[03=ref-datoinj putpixel[íloat(k)íppriodo/1000,0íunidadx, ymaíi-datDÍníunidadyj 0); ui=kp)fi[0]¡ u2[0]=kiíperiodo/2000.0tBE03HitpBrÍDdoy2000.0U[J]iu2[I3i u3=kd/periodoílOOO.Ote[0]-kd/periodoííOOO,Oí.e[13i if(u>=255) u=255; ií(u<=0) 11=05 outpísalidaj 0); putpix&l[íloat(k)íperiodo/JOOO,OtunidadXj ymax-utunidady, 0); fprintííarchidatj H 7,f l\, Uperiodo/KiOO.O, datointiO.0/255.0, fi[Ó]tlO. 0/255.0)} gotoKy(2, 2); p r i n t f ( " S B ñ a l de salida; Z2,4f Señal dB error; X2.4Í Señal de control; X 2 . 4 Í " , datoinliO. 0/255.0, £[03*10,0/255.0, uíiO, 0/255,0); e[l3=e[0]¡ u2[13=u2[0]j lap5o=(UempQ_íinal-tieíFipo_inicial ) 1200.0; clrscrí); gotoxy(20 J 12J; printfC'Duración del algoritmo : JÍ2,4f (ailisegundos", lapso}; d6lay{2000}; fclosetarcMdst); if((archidat=fopen(5Rchivo J VÍ)==KUll) { printíC'íio es posible abrir E! archivo 11 }] fprintílarchidat, " fprintfíarchidatj H TJEHPQ fprintf [archidat, "(segundos) ARCHIVO DE CONTROL P!D DEFIHIDO\nM¡ SALIDA DE LA PLANTA (Voltios) ERROR [Voltios} CONTROL\n"J¡ (VDltios)\n"}j B[0]=B[i]=0; graíico5(divi5ÍonB5v, divisionBBÍ;, tÍB»ijpD} Añiplitud, "PID DEFINIDO-ARCHIVO11, veces, J); k=-i¡ tÍB«poJniciaI=CDnseguir M tÍBapo( J j do í k=k+lj datoin=inportb[entrada) ; e[03 :: ref-datoin; putpixBl(f]oat[kJtperiodo/IOOO.OtunidadX| yínpíi-datoinninidady, WHITE); ui=kpte[0]¡ u2[03=kitperiodo/2000.0ÍB[0]HiípBriodo/2000.0írfi3+Li2[í3j u3=kd/periodotlOOO.OÍe[0]-}:d/pBriodoUOOO.OÍBti]; 55) u=255; if(u<=0) u=0j outp(saiida, u}; putpixBUfloalikJtperiodD/lOOO.Otunidadí!, yaax-utunidady, YELLOHJj fprintítarchidat, "7,i Xf 7,í 7.f\n", ktperiodo/iOOO.O, d3tointiO,0/255,0 J e [ 0 ] Ü O r O / 2 5 5 , 0 J u U O . O / 2 5 5 . 0 J i gotoxy(2, 2); prifitfC'Señal de salida; Z2,4f Señal de Brror: JÍ2.4f SBñal de control: 3E2.4Í", datoinUO.G/255.0, e[03UO,0/255,0, utiO. 0/255,0); e[l]=fiCO]j delayíintípBriodo - l a p s o ) } ; }HhilB((con5eguir_tÍBispoí)-tÍBfflpo_ínicial)<tieflipo+.5 ¿& ! k b h i t ( } J j do { event.getKeyEvfintO; jHhilBÍ Bvenfc.what == evHothinglj graphicBStopO ; fcloseíarcliidafcJi outptsalida, 0 } j case 1: - 54 bresk; // PID DE TiEHPO INDEFINIDO void T B G I f t p p ; : P I D I ( i n t p) í rEgistsr int daíoin, í:, k, rfigistBr float lapso, tieapojinicial, tiedipo^íinal, u, ui, u2[2]j u3, e[2]; TEvent event; char errorHsgtHftXSIZE]; e[0]=B[I]=Oi TDialogl d=new TDialog{TRectí7, 3, 75, 16), "Ingress Kp, Kd, Ki 11 ]; TlnputLinBÍ a=nBH TInputLine(TRBct(i7, 4, 25j 5}, 10); d->insBrt(ne« IHistorylTRecttí^ 4, 27, 5), 3, hlPIDDJ); . char buíÍBri[20]) buífer2[20]í buííer3[20]J buffer4[20]í aboutHsg[83]; Btrcpyíbuffsri, KP); a->5etUaU{buiferllj d-MnsBrtlnfiw TLabeKTRettf 24, 2, 42, 3 } , '""PIDmp+Ki/B+Kdls*", a } ) ; d->insfirtlnBH TLabEl[TfiBct{ 12, 4, 17, 5 ), "PID=", a í í j d-MnsfirttnBM TLabel (TRect( 26, 4, 28, 5 ), "V, a ] ) ; TlnputLineí- b=nEVi TínputLinE[TRecU28, 4, 37, 5 ) , 10); d-Mnserttnevi THistüryíTREct(3á, 4, 39, 5), b, HIPIDO)); 5trcpy(buffEr2, KU; b->setDataibuffBr2)j d->in5Brt(bí; d->insfirt(nBH TLabelíTRectí 38, 4, 42, 5 ), '"¡s*n} b)); TlnputLinBÍ c=nBW TInputLifiGÍTRBct(42, 4, 50, 5), 10); d->in5Brtínew THistory(TRBct(49, 4, 52, 5), c, hlPIDD)); strcpyíbufÍBr3, KD); c->5etDñta[buffBr3); d->inBsrt(c)j d->inBeri(new TLabEl(TRBct( 51, 4, 54, 5 i, "ts", c)); TlnputLinet r=nsw TInputLins(TRect(4i, 6, 49, 7}, 10); d->in5Bri(nEW THÍBtory(TREct(48, 6, 51, 7), r, hlPIDDJÍ; 5trcpy[buíf&r4, REÍ); r->5EtDataíbuffer4); d->in5Eftír); d->insErt(íiEW Tübel(TRBct( 20, 6, 41, 7 }, "Valor RefBrBncial=", r ) ) j d->insert(nEK TButton(TRect(25, 8, 35, 10), "Cancel", onCancel, bíNormal)); d->insErt(new TButtoníTRectlS?, 8, 47, 10), "OK", craQK, b f H o r n a l ) ) ; d = ÍTDialog t) validVÍB«(d)j if Id != NUIL) if (de5kTop->BXBcVÍB«(d) == cnOK) í r->gEtDat5Íbuffer4); c->gfitData[bufÍBr3)¡ b->gBtDataíbufíer2}] a->gEtDsta(buíferi); - 55 í if[isdigit(buffert[x]] ¡! buffer4[x] « ' , ' ) ( } else í strcpyiaboutMsg, "\i:3 Ingresado d a t o a J f s n u i a é r i c o \ n \ n U 3 I n t é n t e l o Nuevamente \ n \ n \ x 3 Mantenido UHiao v a l o r " ) ; (sessageBoxíaboutHsg, mfError ¡ mfOKButton); 5 t r c p y [ b u f f e r - í j Reí ] ; regre5Q=l; i f ( i s d : g í t ( b u í f e r 2 [ x ] J ¡ í b u f f e r 2 [ í i ] == ' , ' |¡ b u - f f e r 2 [ x ] ~ f - ' ) { } e I se { 5trcpy(aboutM5g, '\x3 Ingresado dato alfanusiérico \ n \ n \ x 3 I n t é n t e l o Nuevamente \ n \ n \ x 3 Hantenido U l t i f n o v a l o r " ) ; BsssageBoxIaboutMsg, írifError ¡ iüíDKButton) j 5trcpy(buíísr2, K I J ; regreso=lj ií[isdigit(buiíerl[x]) !í bufíeri[x] == '.' í¡ buífer][x]=='-' ){} else í strcpyíaboutHsg, '\)(3 Ingresado dato alfanuííérico \n\n\x3 I n t é n t e l o Nuevamente \ n \ n \ x 3 Mantenido Ultimo v a l o r " } ; fpessageBoxíaboutllBgj rafError ! a f O K B u t t o n ) ; strcpytbufferi, KP)j regreso=i; í if(isdigUfbufíer3[>;]) !! buffer3[x] « ' . ' ¡¡ buffer3[x]~'-'){} else ( strcpyíaboutHsg, "\x3 Ingresado dato alíanupiérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Hantenido Ultimo valor"); «essageBoxUboutHsg, fflíError ¡ nfOKButtonJj 5trcpy[buííer3j KD); regreso=lj strcpyíKí, bufíer2); strcpyfKP, buííeri); 5trcpy(i:D, b u f f e r 3 ) ; ki=atoí(Klíi fcp=atof(KPJ¡ kd=atof(KD)i ref=atof{RefJj rsí=reít255. 0/10.0; - 56 regreso=0fregreso; íj else regreso=i; destroyt d }; } if{ref>255 \\í <OJ ( strcpyíaboutHsg, "\x3 Eí valor de referencia solo puede estar entre O y 10 V \n\n\x3 (BBSsageBojílabautHsg, rofError J nsfOKButton); regreso=lj } Inténtelo Nuevamente"}; swi tch(regreso) { C3=e 0: suspendí); if (graphicsStartO == F a J s e J ( strcpyferrorflsg, grapherroriD5g(graphresult())] j strcatí erroríisgj "." ) j /nfError 1 jnfOKButton}; else C switch(p) ( case 1: k=-ij t i effipo__i n i ci a 3 = con seguí r__ti em po [ ) datoin=inportb[ entrada); e[0]=reí-datoinj putpixel[fioat(kjíperiodo/1000,0íunidadxj ymax-datointunidady, 0); uí=kpíe[0]j u2[03=kitpBriodD/2000.0íe[0]HitpeaDdo/2000,Oíe[J]+u2[l]j u3=kd/periodoíiOOO,OÍB[0]-kd/pEriodoílOOO.OSe[l]j if(u>=255] u=255¡ if(u<=OJ u=0¡ outpísalidaj 0); putpíxe](float{í;)ípBriodD/1000,Oíunidad>;j ynax-utunidady, 0)¡ goto!,'yí2} 2); printf ("Señal de salida: Z2,4í Señal de error: X2.4Í Señal de control: 7,2, datainUO.0/255.0, BCOlílO.0/255.0, uílO. 0/255.0); e[i3=e[OJ] uZ[i]=u2[0]í í tieispo_íinaI=conseguir_tiempD( } ; ]apso=(tiempo_final-tieiípo_inicial)t200,0; clrscrllj gotoxy(20, 12) j printf[ B Dursción del algoritrao : 7.2, 3f diilisegundos''., iapeo); delay(2000); - 57 e[0]=e[l]=Q} do f VBCBS-HJ cleardeviceOj graficosídivisionesv, divisionest, tiempo, Amplitud, "PIÓ INDEFINIDO", veces, I}; !;=-!; lÍBmpo_inicial=conseguir_tÍB»po(í ¡ do [ NÍ tí i datoin=inportbUntrada) ¡ e[0]=ref-datoin; putpi>:el(floatík}íperiodo/iOOO.OIunidadx, yarax-dstoiníunidady, WHITEJj ui=kpíB[0]¡ u2[0]=kiíperiodo/2000,Oíe[0]-i-kííperiodD/2000 1 Oí.e[Í]-tu2[i]j u3=kd/periodoUOOO.Ote[03-kd/pBrÍQdonOOO.Ote[i]i i f ( u > = 2 5 5 ) u=255; ií(u<=0} u=0; outpfsalidaj u j j putpixe!(íloat(k)íperiodo/iOOO.OÍunidadx, ymax-uíunídady, YELLOWJj goto>:y(2 J 2 ] ; printf( B Señal de salida; )Í2,4Í SeHal de error; 7,2Jf Señal de control: 7,2,4*", datoinUO.0/255.0, e[03ílO.O/255.0, uíiO, 0/255,0); e[l]=e[03i e[l]=e[0]; u2[l]=u2[03i delaylperiodo - lapso); J-whilettconseguir^tieíripod-tienipoJnicialXtiei'npo-í-'i MÍ J k b h i t í ] ) j Bvent.getK'ByEvBnt(J) }whilB( evsnt.«hat == evNothing); do { event.getí'eyEventí) ; }«hi!e( evBnt.what == evNothing)] graphic5StDp()¡ breskj case 2: FILE tarchidatj iíííarchida^fopentaRchivo, V)Í™NULL) í printí("No es posible abrir el archivo"); k=-l¡ liefflpDjnicial-conseguir^tieapoO; í k=k+l; da toin=in por tb[ entrada) ; e[0]=reí-datoin; putpixe][float[k]íperiodo/1000,0tunidadx, ymax-datoiníunidady, 0); ui=kpíe[0]; u2[0]=kitpBriodo/2000.0lB[03UitpBriodo/2000.0te[J3+u2[I3i u3=kd/pBriodofIOOO.OtE[03-kd/pBriodoíiOOO.OtB[13i - 58 - if(u>=255) u=255 ¡ i f ( u < = 0 ] u=0; p u t p i x B K f l o a U k J t p e r i o d o / l O O O . O Í u n i d a d x , y a a x - u í u n i d a d y , 0}; outpUalida, Oí; f p r i n U í a r c h i d a t , " Xf 7.f 7.f\n"j kíperiodo/IOOO.O, datointiO.0/255,0, e[0]UO. 0/255,0); gotoxy(2j 2); printf ("Señal de salida; 7.2, 4í Señal de error: X2.4Í Señal de control: 7.2. 'lf", datointiO. 0/255.0, e[0]UO,0/255.0, utiO. 0/255. 0] ; B[i]=eEO]¡ u2[13=u2[03¡ } tie&po_fina]=conseguir_tie¡íipo( ) 3 lapso=[tÍBfflpo_íina!-tisiiipo_iniciaI)í200,Oj clrscrO; g ü t o x y ( 2 0 , 12); p r i n t í C ' D u r a c i ó n del a l g o r i t f & D : X2.3Í milisegundos", lapso}; delay[2000); •fcioseíarchidat] ; iftíarchidatsfopenlaRchivo, MH")J==NULLJ ( p r i n t f ( " H o es posible abrir si a r c h i v o " ) ; exitíi}; } fprintítarchidat, " ARCHIVO DE CONTROL PID DE TJEHPO INDEFIHIDO\n"í¡ íprintííarchidat, H TIEMPO SALIDA DE LA PLANTA CONTROL CGNTROLV) ; í printf (archidat, "(segundos) (Voltios) (Voltios) (Voltios)\n") ; x=-i¡ U=ui=u3=u2[03=u2[l3=0j e[0 do cleardeviceí); g r a f i c o s t d i v í s i o n e s V j divisionest, tieapo, A m p l i t u d , " P I D I N D E F I N I D O - A R C H I V O " , veces, 1); fc=-i¡ íiefflpo_iniciaI=conseguir_tieíTipo[}¡ do datoin=inportb[entrada) ; 8[0]=re1-datoin; putpixel(floatík]tperÍodo/iOOO,0'íunidadx, ymax-datointunidady, WHlTEJj u2[03=kitpBriodo/2000.0te[03HitpBriodo/2000.0tB[I]+u2[l]¡ u3=kd/periodoUOOO.OtBCO]-kd/periodoíiOOO.Ota[i3i ií(u>=255) u=255; i f ( u < = 0 ) u=0; p u t p i x e l í í l o a t t U í p e r i o d o / I O O O . O Í u r t i d a d x , yfiax-utunidady, YELLQt'J); oiitpísalida, u ) ; fprintflarchidat, "Xí Zf Xf vecfisUtpBriodo/iOOO.Oj datoinílO. 0/255, 0 3 e [ 0 3 U O . O / 2 5 5 , 0 , u í l O . 0/255.0); 2J; p r i n t í l ' S B f i a l de s a l i d a : H.-H Señal de error: ¿2,41 Seííal de c o n t r o l ; X2. - 59 datoiníiO.0/255.0, e [ G 3 Ü Q , 0/255. 0 3 uííO.Ü/255,0); eEl]=e[ü3j u2[l3=u2[03j delayUntlperiodo - lapso)); }Hhile( { conseguí rJiBíJipot )-tiefíipo_iniciaÍ Xtiempo-M ítít ! kbhití } ) ; event.getKeyEventílj }while( ev'Bnt.what == evMothinglj tío { BYEnt,QBtKeyEvent[); }while[ event.what == evNothingJj graphicáStopO; fclose(archidat); breakj outpísalida, 0); resuflieí J j case i: break; void TBGíAppüEcuacioriBsDfint p) rBgíster int datoin, k, regístiEr flost lapso, tieí¡ipo_inicial, tiefTfpo_íinalj u[ó], e[6]¡ unsigned int üj TEvent eventj char errDrHsgEHAXSIZEJj rEgrE5o=Oj u[0]=u[13=u[2]=u[3]=u[43=u[53=0i // Inicio ds instrucciones para ingreso y validación de los coheücisntesj TDialogf d=new TDialog(TREct(2, O, 77, 22), "Ingrese los TlnputLineí z=new TlnputUneíTRectd?, 5, 25, 6), 10); d~>insertínew THistory(TREct(24, 5, 27, 6J, z, MPíDD)); char buffsrbOCiO], buíferbl[iO], bufíerb2[10], biifferb3[JO], aboutHsg[83]; char bufferb4[iü3, bufferb5[103, buíÍErai[103, buííera2[iO], buffera3[103i char bufÍEra4[10], buffera5[10], buííer4[103; strcpyíbuffErbO, Coeíb[03); z-í-setDatñíbufferbOíj d->insert(2); d - > i n s E r t [n E H T L a b e 1 (T R e c t ( 7 , 2 , 72, 3 d->in5E?rt(neH TLabEl (TRecU 12, 3, 71, 4 ), "*-altu[k-i)-a2tu(k-2í-a3íu(k-3í-a4í:u(k-4J-a5tuík-5)llr"I zí)i d->insert(neií TLafasl [TREcti 12, 5, 37, 6 ), "bO=", z}); TInputLineí y=nen TInputLíne[TRectíi7, 7, 25, 8), 10); d-HnSBrtínew THÍ5tory(TRect{24, 7, 27, 8), y, hlPIDD)); d->in5ert(fiew TLabelíTRectí 12, 7, 17, 8 ), "bi=", y))j ), - 60 strcpyíbufferbi, Coefb[l]); }->5BtBata(bufferbi); d-MnserUy); TlnputLineí w=new T!nputLine[TRBct(17, 9, 25, 10], 10); d~>insBrt{neH THÍ5tory(TRect(24, 9, 27, 10), w, hlPIDD))} d->in5Brt(neH TLabeI(TRect( 12, 9, 17, 10 ), "b2=", w))} strcpyíbuíferb2, Cosíb[2]); w->5etData(bufferb2)i d->in5BrtÍH); T l n p u t L i n B Í v=new T I n p u t L i n e i T R f i c t ( 1 7 , 11, 25, 12), 10); d-Mnsertto THÍ5toryíTRect[24, 11, 27, 12), v, h l P I D O ) ) ; d-HnsBrKnsw TLabeKTRectí 12, 11, 17, 1 2 ) , "b3=", v}¡; 5trcpy(bu-fferb3, Coefb[3]J; v->5BtData(buífBrb3)i d->insert(v); TlnputLinet q=nBH TIfiputLinB(TRect(17, 13, 25, 14), 10); d->insert[n£?H THistory(TRect[24, 13, 27, 14), q, hlPiOD]); d->in5BrttnsH TLabel(TRect{ 12, 13, 17, 14 ), "b4=", q}]; 5trcpy(buííerb4, Coeíb[4]j; d->in5Brt{q); TlnputLineí t=new TInputLine(TRBct[17, 15, 25, 16), 10) ¡ d->i/i5Brt(nsH T H i s t o r y ( T R e c t ( 2 4 , 15, 27, 16), t, h l P I D D ) ) ; d-MnsertlnB» TLabBlíTRBctl 12, 15, 17, 1 6 ) , "bS^11, t ) ) Btrcpy(bufferb5, Coeffa[5])j t->5fitData(buffBrb5)i d->inssrt(t)¡ Tlfiputlineí s=nevf TInputLine(TRect(53J 5, 613 ó), 10); d-)insert(neH THistory(TRectí60} 5, 63, 6), s, hlPÍDDJJj d-)insBrt(new TLabel [TP.Bctí 48, 5, 53, 6 J, "ala", 5)); strcpy(bufferaij Coefa[í])j 5->setData(bu-fÍBral)j d->insert{s)j TIriputLinBt l=new TInputünBÍTRect(53, 7, 01, 3), 10); d-)insert(nBW THÍ5tory(TRect[60, 7, 63, 8), 1, hlPIDD)); d->insert{new TLabel (TRectí 43, 7, 53, BJ, "32=", I J J j strcpy(buffsra2, Coeía[23J; ]->setData[buffBra2]j d->insert(l)j T l n p u t L i n e í o=ne« T l n p u t L i n B t T R e c t í S S , 9, 61, 10), 1 0 ) j d->inssrt(neH THÍ5toryíTReí:t(60j 9, 63, 10], o, hlPIDD}); d - M n s e r t í n e H T L a b e ! [ T R B c t ( 43, 9, 53, 10 ), "a3=", o ) ) j o->setData(buffBra3); TInputLinet n=nen TJnputLine[TRect{53, 11, 61, 12), 10); d-)in5Ert[nBH THÍ5tory(TRBctí60, 11, 63, 12), n, hlPIDD)); d->insfirt(íiBH TLabel (TRect[ 48, 11, 53, 12), n a4=" f n))j 5trcpy(bufffira4, Coefa[4])j n-)SBtData(bu1fBra4); d-)insert(n); T i n p u t L i n e í i»=new T I n p u t L i n e í T R e c t O S , 13, 61, 14), 10); d - ) i n s B r t í n B H T H i s t o r y t T R e c t l i O , 13, 63, 14), IB, H I P I D O ) ) : d ~ > i n 5 e r í [ n e w TLñbel (TRect{ 48, 13, 53, 1 4 ) , B a 5 = B , B ) ) ¡ 5 t r c p y ( b u í f B r a 5 , Coeía[5]); fii~>5etData[bLiífBra5)j - 61 TlnputLineí r=ne* TInputLine(TRect(4í, 17, 49, 18), 10); d->insert(new THÍ5tory(TRect[48 J 17, 51, 18), r, hlPIDD}); strcpy(buffer4, Reí); r->5etData{buffer4); d->insert[r) ; d-)insert(new TLabelíTRectí 20, 17, 41, 18 ), "Valor Referencia^ 11 , r ) } ; d-MnsertíneH TButton(TRectí25, 19, 35, 21), "Cancel", cmCancel, bfNonnal)); d->in5ert(neví TButton[TRect(37, 19, 47, 21), "ÜK", anOt;, d = [TDialog í) validVÍB«(d|j if (d != NULL) { if (dB5kTQp~>execVíew(d) == csiOi;) í r-)getDaU[buffer4)j s)->getData(oufÍEra5J; n->g5tDsta(buífera4); o-)getDal:a(buffera3)j l-)getOatatbufiera2íi s->QBtData(bufferai]j t->getData(bufÍBrb5J¡ q->gefcData(bufferb4}j w-)getData(buííerb21j y->gBtData{bufíerblJi i-)getData(bufterbO); for(x=0;buífer4[x];Hx) { Íf(i5digittbu1fer4[x3) !í buíÍBr4[x] == ','){} sise í strcpyíaboutHsg, B \x3 Ingresado dato alíanuaérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ulü^o valor"); nessageBoxIaboutHsg, ínfError ! isíOKButtonJj 5trcpy(buffer4, Reí); regreso=i] \ for()¡=Q¡buffera5[x]¡++x] { if(Í5digit[ííuffBra5[x]} í ! bufferaStx] == '.' !! bufíera5[x]=='-'íü else í strcpy(aboutHsg, fl \x3 Ingresado dato alíanunérico \n\n\)¡3 Inténtelo Huevainente \n\n\x3 Mantenido líltifto v a l o r " ) ; í6B5BageBo):(abouU1sg, mfError ¡ n-fOKButtoní; strcpyibuíferaS, C o e f a t S ] ) ; regreso=l; Íor(x=0;bu-f1era4[x]i i -f- x) í if(isdigit(buífera4[x]) !! bufíera4tx3 == '/ !í bi(ffera4[>¡]==1-' ){} el se í strcpyíaboutffcg, "\>:3 Ingresado dato alfanumérico \n\n\>¡3 Inténtelo Huevanente \n\n\x3 Mantenido Ultimo valor"); meBsageBoKÍabouttlsg, mfError ¡ BÍQKButtonJj ii } strcpyffauffera4, Coefa[4]]j regrese^] j foríx=Qjbuffera3[x]j -f + x) ( if(isdigitfbuffera3[>¡3) J | b u f f e r a 3 [ x ] == '.' else í |¡ strcpytaboutHsg, § \x3 Ingresado dato alfanunérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Hantenido Ultimo valor"); (BessageBoxíaboutUsg, rofError I afQKBu'tton); strcpy(buífera3, Coeía[3])¡ regreso=i¡ ii } for[x=0jbu-ífera2[x]j + + x] í if[Í5digit(bufíera2[>:]} ¡¡ buífera2[x] == ',' ¡| buffera2[x]«'-'K> else ( strcpyfaboutHsg, "\x3 Ingresado dato alfanuifiérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Hantenido Ultimo valor"); messageBoxíaboutHsg, mfError ¡ ísíOKButtDn); 5trcpy[buííera2, Coeía[2]); rsgreso=ij } i íor(x=0jbuí1erai[x]i í- + x) f if(ísdigit(buííerai[x]) ü buíferal[x] == '.' ¡¡ bufíerai[x]«'-')[} else í strcpy(aboutHsgj fl \>¡3 Ingresado dato alfanmsérico \n\n\x3 Inténtelo Nuevawente \n\n\x3 Mantenido Ultiao valor"); ffiessageBoxtaboutMsg, mfError ¡ «fQKButlonlj strcpy(bufíeral, Coeía[l]); regreso=l; íor(x=0jbufíerb5[x]j * t xj ( ií{isdigit(buiferb5[x]} ¡¡ buíferb5[x] ~ '.' ü bufferb5[x]™'-' JO else í strcpyísboutHsg, "\x3 Ingresado dato alíanuaterico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Hantenido Ultimo valor"); oeBsagEBoxtaboutMsg, mfError ¡ isfOKButtonJj strcpyfbufferbS, Coefb[5]]¡ regreso=lj for(x=Ojbuí1erM[x3; + + x) C Íf[i5digit(bu1íerb4[x]] i! b u f f e r b ^ t x ] ~ ',' ¡¡ bufíerb4[í¡3=='- I )í} Bise í - 63 strcpytabouttísg, H \x3 Ingresado dato alfanumérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultimo valor"); messageBoxíaboutílsg, ínfError ¡ mfOKButtoníj strcpy(bufferb4, Coefb[4]J; regreso-i; forííí=Üjbufferb3[>;]j * í x) í iííisdigit(bufferb3[>:]) í! buiferb3[x] ~ V !í bufferb3[x>='-'ÍC} else ( strcpyfaboutHsg, "\j¡3 ingresado dato alfanumérico \n\n\>:3 Inténtelo NuevamentB \n\n\x3 Mantenido UJtiao valor") fflBssageBoxtaboutHsg, mf Error ! »fOKButton)j strcpy(buiferb3, Coeíb[3])j regre50=]j for(x=0jbuííerb2[x]; t t x) { if(isdigitíbufferb2[j(]} ¡¡ bufísrb2[s] == ',' \\f-'){} else í strcpyUboutílsgj "\x3 Ingresado dato alfanuüiérico \n\n\x3 Inténtelo nuevamente \n\n\x3 Mantenido Ultimo valor"); ínesBageBoxíaboutHsgj mfError ¡ ísfQKButtonJi 5trcpy(bufferb2, Coeíb[2]); regreso=i; } ii for()¡=0jbufíerbl[x]j + * x ) í i í ( i s d i g i t ( b u í í e r b J [ x ] ) ¡¡ bufíerbl[>;] == '.' ü b u í f e r b l [ x ] « ' - ' ] ( } else { strcpyt abou tfteg, "\x3 Ingresado dsto alíanuinérico \n\n\x3 Inténtelo fiuevaínente \n\n\x3 flantenido Ultimo v a l o r " ) ; íBEBsageBoxíaboutíísgj míError ¡ BtfOKButton) i strcpyíbuííerbi, C o e f b [ l ] } ¡ rGgreso=ij } X for(x=0;buíferbO[x]j t + x ) í J f ( i 5 d i g i t í b u í f e r b 0 [ x 3 ) ü bufferbO[x] == '.' ¡| b u f f e r b O [ x ] « ' - ' ) ( } e!se C strcpyíaboutdsg, " \ x 3 Ingresado dato aJfanumérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Hantenido Ul ti/no valor"); ír¡eEsageBox[aboutíl5g, ínfError ¡ iafOKButton); strcpyfbufíerbO, C o e f b [ 0 ] J ¡ regresad j strcpy[CoeÍ3[53j buííera5); strcpy(CoeíaC4], buffera4)j - 64 strcpy(CoefaE33j buffBraoJ; 5trcpyíCGefa[2], biiffera2J; strcpylCosfaCi], bufíBrai)¡ slrcpylCoBfbES], bufferb5)j 5trcpy(Coefb[43, bufferb4)j strcpytCoefbES], bufferbSJj 5trcpyíCoefb[23, buffet); strcpyíCoefbül, buíferbí); 5trcpy(Coefb[0], bufíerbO); BtrcpylRef, buíÍBr'í); coeía[5]=atof!CDBfa[5])i coefa[4]=atQf(Cqefa[43]í1 coBfaE33=atof(Coefa[3])¡ coefa[2]=atflf(CoBfa[2J)j coBÍa[13=atofíCoefa[l])j coBfbC53=atofíCoefb[5]Jj coBÍbt4)=atoflCoefb[43Ji coefb[5]=atGf(Coefb[3])j coBíb[23=alof[Coeíb[2]íi coefb[13=atofíCoefb[I])i coefb[03=atof{CoBfb[0]}; ref=rBft255.Q/10.0j regrB50=0 t regreso) destroyt d ) j } if[rBO255 !í rsí (0) { strcpyUboutHsg, "\x3 El valor de reÍBrencia solo puBde estar Entrs O y 10 V \n\n\x3 Inténtelo HuevaiBente") ; ffl85sage8oí!ÍaboutH5gj míError ! (BfOKButtonJj 5HÍtch(regrfiso] í case 0: suspendí) ; if (graphicsStartO == FalsB) í strcpylerrorHsgj grapherrDrfisglgraphresultO) strcatt errortlsg, "," ); RessageBoxÍErrorlIsg, üiíError ¡ aíOlíBulton)} i i 6Í5B ca=e J : k=-ij tíeffipoJnicia)=CDn5eguir_tií:ir'po() ; ;>;';=5; * + x ) k=k + í; datoin=inpürtb(Bntrñdd)j s[0]=ref-datoin; - 65 - putpi}:Bl(iloat(FJtpBríodo/iOOO.OÍunidadx,j ymax-datoiníunidady, 0 ) ; u[0]=coefb[0]tB[0] + c G e f b [ l 3 t e [ i ] + coE?fb[2]íe[2] + coBfb[33lB[3] cQBfb[53teC53-cQBÍa[i1íij[I]-coefa[2]íu[23-coeía[33íu[3]-coefa[4]íu[43-coeía[5]íuC5]i ií(u[03>=255) í o u t p U a l i d a , 255); p u t p i } ; B l ( f í o a t { k } f p B r i o d o / 1 0 0 0 , O í u n i d a d i ! , yraax-255tunidady, 0 ) ; } iflu[0]<=0] í oulplsalida, 0)¡ putpixeKfloattMtp&riodo/iOOO.OÍuniíiadx, yaax-Otunidady, 0); } i f ( u [ 0 ] > Q M u[0]<255) í outp[5a]ida, 255)j putpixel[float[k3tperiodo/IOOO.Otunidad)i, yfflax-u[0]íunidady, 0 ) ; } g o t o x y f 2 ! 2); printfCSeñal de salida; X 2 . 4 Í Señal de error; 7.2. 4 f + coefb£43íe[<J] Seña! de control; X 2 . 4 Í " , datointlO.0/255.0, BE03UO.O/255.0, u[03UO. 0/255,0); u[53=u[43; u[3]=u[23; u[2]=u[13; u[l]=uEO]i e[53=e[43i e[3]=B[23; B[23=B[1]J sEi]=B[03i lapso=(tÍEffipa_final~tiefl¡po__iniual)í200.Q¡ clrscrí); gotoi:y(20, 12) ¡ printf("Duración del algoritmo ; ¿2,3f milisegundos", lapso}; dBlay(2000}; u[03=u[13=uC23=u[33=u[43=u[53=Oi B[0]=eCi3=eC23=eE3]=B[4]=e[53!=Oi graficosídivisionesv, divÍ5ÍDnEE-i¡ tiempo, A s p I H u d , "ECUACIÓN DE DIFERENCIAS DEFINIDO 1 1 , VBCBS, U j tiestpo_inicial=con5Bguir_tÍBa!po[) j do fc=k + í; datoin=inporíb(enirada); e[03=reí-datoin; putpixeitfloa Ukjtperiodo/1000,0tunidadXi ymax-datointunidady, WHJTEJ; u[03=coefb[03-te[03 ^ coefbE13ÍB[i] + coefb[23íe[23 + coefbC3]ÍB[3] cofifb[53ÍB[5]"COBía[I]tu[l]-coBfa[23tuE23-cofifa[3]*u[33-cDfifa[43tu[43-coBÍa[5]tu[53¡ ifíuEO]>=255) outplsalida, 255); p u t p i x e J ( í l o a t ( l ; ) t p e r i o d o / 1 0 0 0 . O í u r i J d a d ü , y¡íiax-255íunidady, Y E L L D H J i } 4- coeíb[4Jíe[43 - 66 -. if[uEü]<=0) { outptsalida, 0}; putpixelííloaUUíperiodo/iOOO.Qíunidatí}!, yoax-Qtunidady, YELLOHJj } i f ( u [ 0 3 > 0 && u[0]<255) í outpísaiida, u [ 0 3 ) ; putpixBlífloatUítpfiriodD/iQOO.Otunidadx, ymax-uCOllunidady, YELLMJ; } gotoxy(2, 2); printf ("Señal de salida: 22. 4f Señal de error; ¡Í2.4f Señal de control; datüintlQ,0/255.0, BC03Í1Q.O/255.0, u[0]*10.0/255.0Ji u[5]=u[43i u[23=u[13; u[í]=u[03; e[33=e[23; e[2]=e[13j 5[i3=e[0]j delaytperíodD - lapso); }wfiile[(con5Bguir_tieDípo(}-tiefiipoJnicial)(tiefiipo + 4 &fí ! k b h i t ( ) J j do ( BVBnt.getKeyEventO j }while( event.what == evHothing); graphicsStopO; case 2; FILE íarchidatj if((archidat=fopBn(aRchivo, V))~HULU í p r i n t f t ' N o es posible abrir el archivo"}; exitlDj tieiBpoJnicial=conseguir_tÍBflpo()i for()i=0;x(=5; f f x) { k=k + i i da toin=inportb( entrada}; e[0]=ref-datoinj putpisel(f!oatií;)í:periodo/iOOO,OUmidadXj yaiax-datoiníunidady, 0 ) j u[Ü3=coefb[0]le[0] * coeíbEi]?e[J] f coefb[23íe[23 -f cosfb[33íe[33 coBfb[53tBC53-coeía[l]íu[Í3-coBfa[23tu[2]-cDeía[3]tu[3]-coBfaC4]tu[4]-cGBfa[53tuE5]i if[u[0]>=255) í outp(salidaj 0 ) j putpixe](f]oat(h)tperÍDdo/1000,Otunidadx, ymax-Otunidady, 0 } ; fprintflarchidat, " Xf Zf ?.f VBCB5tkíp?riodo/iOOO.O, datoinüQ. 0/255,0, B[0]UO. 0/255, 0 5 10, 0 ) ; } if(u[03<=0) + coefb[4jíe['13 - 67 - outplsalida, 0}; putpixeKflaatíUípEriodo/IQOO.OUinidad)!, yiriax-Oíunidady, O J ; I p r i n t f l a r c h i d s t , a Zf Zí Zf vecfistUpfiriodo/lQÜQ.Ü, datoiníiO. 0/255,0, e[G]UG,0/255,0, 0 ) j } i f ( u [ Q 3 > Q ¿¿ u[0] <255) ( outptsalida, 0); p u t p i x B l [ f l G a t ( f c ) t p e r i o d o / 1 0 0 0 , O t u n i d a d s , ymax-OUmidady, 0 } j f p r i n t l í a r c h i d a t , " Jíf Zf Zf VBCBBÍkíperiodo/lOOCiAí, datointiO.0/255.0, a[0]tlO. 0/255.0, u[0]UO, 0/255.0); } gotoxy(2, 2}; printf ("Señal dB salida; 7,2.41 Señal de error; X2.41 SBÍÍal de control; n . 4 f " , datoinUO.0/255.0, eEO]tlO.O/255.0, u[0]HO. 0/255. 0] ; Xf\n"f iíttn", u[4]=u[3]j u[23=u[13; u[i]=u[03i i¡ eE4]=BE3]¡ e[3]=B[21i e[23=B[I]¡ eCl]=e[0]i tierapD_final=conseguir_tieíripo() j Iapso=(tieffipo_ i final-tieftpo_ > inicial)t200.0i golo>¡y(20, 12); p r i n t f ("Duración del a l g o r i t m o : X2.31 fñlisegundüB", lapso); dBlay(2000); fclo5B(archidat); i f t í a r c h i d a t ' f o p B n l a R c h i v o , V)]==NULU í print1["No es posible abrir el archivo")) BXitUii í fprintííarchidat, " ECUACIÓN DE DIFERENCIAS DEFINIDAS \n")¡ fprintííarchidat, H TIEMPO SALIDA DE LA PLANTA ERROR CONTROL \n")j íprintífarchidat, "(Begundos) (Voltios) (Voltios) (VoUio5)\nníi graíico5(divi5ionesv3 divisionest, tiempo, Aaplitud, "REDES DEFINIDAS-ARCHIVO", veces, i)j B[03=BC13=fiC2]=B[3]=BC43 ! =BE53=Oj k=-ii tieipD_inícial=CDnsBguir_tÍB¡npo( J } do í k=k i i; datDÍn = inportb( entrada) i e[0]=reí-datoinj putpjxel[f loat(k)tpErÍDdD/1000.0tunidadx, yutax-datointunidady, HHITE)j uEG]=coEfb[Ü]ÍB[Q3 * coeíbtl]íe[I3 + cQefb[2]le[23 + coefbE33tB[33 CQBÍb[53ÍB[5]-coBÍ2fi]iu[i]-coefa[2]íu[2]-coeía[3]íu[33-coEfa['i]íuE¡13"CDBfa[5]í.u[5]; if(u[0]>=255) { o u t p t s a l i d a , 255); * coBfb[43te[4] - 68 - p u t p ú e n f l o a t í k J J p e r i o d o / Í Q O O . G U m i d a d X j yraax-^Stunidady, YEILQWJj fprintflarchidat, fl Zf Zf Zf Zf\n", VBCBslkfperiodo/1000.0, datoiníld. 0/255. 0, e[0]UO.O/255.0, 10. 0 ) ; i j if(u[OJ<=OÍ í o u t p í s s l i d a j 0] ; p u t p i x B H f l o a t í k í t p B r i o d o / l O O O . O Í u n i d a d x , ymax-Ütunidady, YELLGH); f p r i n í f U r t h i d a t , " l\, VBCBstkípBriodo/1000.0, datointIO.0/255.0, B[0]UO.O/255.0, 0); ' } if[u[0]>0 U u[0]<255) ( o u t p t s a l í d a , u[03) i p u t p i x f i H ' M o a t ( k ) t p e r i o d D / i Q O O . O t u n i d a d x l y/nax-u[0]íunidadyj YELLOH); f p r i n t f l a r c h i d a t j " Zf Zf Zf YBCBsWpEriodo/lQQO.O, datoiníiO.0/255.0, e[0]tiO.O/255.0, ü[0]UO. 0/255.0); } gotoxy(2J 2); printí("Señal de salida; Z2.4Í Señal de Brror: 7,2. 4f Seña] de control; 7.2. 4f", datoinílO.0/255.0, e[0]UO.O/255.0, u[0]tiO, 0/255. Q.)j u[5]=u[4]¡ u[3]=u[2]¡ uE2]=u[l]j u[i]=u[0]; fiE13=e[0]¡ delay((periodo - lapso)); }HhilB[(cQn5Bguir_tÍBBpo[]~tififflpo_inicial)Uieiftpo -f- ,5 &fe ! k b h i t ( ) ) j do t Bvent.gBtKeyEvBnt()¡ }while( event.what == BvHothing); graphicBStopt); fclQ5B(archidat); brea!;; outpísaiida, 0); rB5uneíJ; break; asB 1: break; // ECUACIONES DE DIFERENCIAS EH TIEHPO INDEFINIDO void TBBIftppüEcuacionesUint p) t registEr int datoinj x, k, regreso) Zf\n", - 69 register íloat lapso, tiempo_inicial, tiempo_final, u[ó], e[ó]j TEvent event; vece5=0j char BrrorHsg[MAXSIZE3i regresQ=0; u[0]=u[I3=u[23=u[33=u[4]=u[53*Qi e[03=e[i3=e[23=B[33=e[43=E[5]=0; TDíalogí d=new TDialog(TREct(2, O, 77, 22), "ingrese los coeficientes"); TlnputLineí z=new TInputLine(TREct(17, 5, 25, 6), 10); d-MnserUnew THistoryíTRect{24, 5, 27, 6), i, hlPIDD)); char bufÍErbO[103, bufíerblüO], bufíerb2[iO]J bufferb3[10], aboutHsg[B3]¡ char bufferbUlG], bufferb5[103, bufferaiüO], bufferaíElO]^ buffera3[10]; char bufíera4[10], buffsraSUO}, bufíerí[10]¡ strcpy(bufferbO, Coeíb[0]); z->5BtData(buííBrbO)i d-)insert(z); d-MnsertínBH TLabfiUTRectl 7, 2, 72, 3 ), -<v uík)=bO*B(k) + blfe(k-i) + b2íe(k-2J -f b3ÍB(k-?í b4íe(k-4) + b5*B(k-5JN", z))¡ d->insert(neH TLabs) (TRectt 12, 3, 71, 4 ), BA'-altii(k-lí-a2tu{k-2)-a3tuEk-3)-a4íu(k-0-a5íu(k-5) Oii d->insertfr.BH TLabel [ T R e c t t 12, 5, 17, í> J, "bO=' f z ) J . j TlnputLínet y=new TInputLine(Tfiect(i7j 7, 25, 8), 10); d-)insBrt(new THistory(TRect(24, 7, 27, 8 } , y, hlPIDD)); d-)insertínew TLabeKTRectf 12, 7, 17, 8 ), "bi=n, y ) ) ; strcpyíbufferbl, Codb[I])j y-)se!:D5ta(buífErhi)i d~>ÍnserUy); TlnputLineí w=neM T!nputLine(TRect[17, 9, 25, 10), 10); d-MnsertfneH THistory(TRect(24 J 9, 27, ÍO), H, hlPIDD))¡ d->insert[new T L a b e l í T R e c t f 12, 9, 17, 10 J , "b2=" f H ) ] ¡ 5trcpyíbuíferb2, Coeíb[2])¡ N->setData(buíferb2); d-)insert{wj; TlnputLineí v=nBH TInputLine(TRect(17, II, 25, 12], 10); d->insert(new THÍ5bry(TRect{24, 11, 27, 121, v, hlPIDD)); d->insert[nBH TLabel(TRectí 12, 11, 17, 1 2 ) , "b3= n , v ) ) j strcpy(buíferb3, Coeíb[33); v»>5EtOata[bu1íerb3)i d->insert(v); TlnputLineí q=nBH T!nputLine(TRect(i7, 13, 25, 14), 10); d->insBrt(nBW THistory(TRect(24, 13, 27, 14), q, hlPIDD)); d->insBrt{neH TLabel (TRectt 12, 13, 17, 14 ), "b^", q ) ) j strcpyíbuíferb4, Coefb[4]); q->setData[buíÍBrb4}j d->insert(q); TlnputLineí t=neH T!nputLine{Tftectíl7, 15, 25, 16), 10); d->insBrt(nB» THistory(TRect[24, 15, 27, 16), t, hlPIDD)); d->insert[neH TLabe! (TRectí 12, 15, 17, 16 ) , "bS^ 11 , t ) ] ; strcpyfbuíferbSj Coefb[53); t->setData(buíferb5)j d-)insert(t); TlnputLineí s=new TInputLine(TRect(53, 5, 61, 6 ) , 10); d-)insert(neH THi5tory(TRect[60, 5, 63, 6), s, h l P I D D J J j d->insBrt(nBW TLabe!ÍTRecU 48, 5, 53, 6 ), "al= H , s ) ) ; strcpyfbuffBrai, Coefa[l])j 5->SBtData(buííeral)i d->in5ertís); - 70 TlnputLineí l=new TInputLine(TREct{53, 7, 61, 8), 10); d->insErt(new THistory(TRect(60, 7, 63, 8), 1, HIPIDO}); d-Mnserttnen TLabelíTRectí 48, 7, 53, 8), "a2=", 1)); strcpy[buffera2, Coeía[2]); ]->setDaU(buffera2)i d->insert(l); TlnputLineí o=ne« TInputLins(TRect{53, 9, 61, 10), 10); d-Mnserttnen THi5tory(TRect(60, 9, 03, 10), o, hÍPIDD) ) j d-MnserUnsw T L a b e l ( T R e c t t 48, 9, 53, 10 J , "a3=" f o ) ) j 5trcpyíbuífsra3, Coefa[3]); o->5EtData(buífera3); d->insertío}; TlnputLineí n=new TInputLine(TRect(53, 11, 61, 12), 10); d->insert(nEH THÍ5tory(TREct(60, 11, 63, 12), n, b l P I O D ) ] d-Hnsertínen TLabe) (TP.ecU 48, 11, 53, 12), "a^", n ) ) j strcpy[buífera4, Coe1aC4])¡ n-)setOata(bu1íera4); d->insert(n); TlnputLinel ín=new TInputLine(TRect(53, 13, 61, 14), 10) j d->insert(new THistory(TRect(60J 13, 63, 14), n, HIPIDO); d->insBrt[new TLabel(TRectf 48, 13, 53, 14), "a5=", mJ! strcpy(buffera5, Coeía[5]J; ra->setData(buííera5); d-)insert((!i); TJnputLinEt r=ne» TInputLine(TRect[41, 17, 49, 18), 10); d~>insert(new THÍ5tory(TRect(48, 17, 51, 18], r, HIPIDO) strcpyíbu1íer4, Refjj r->5EtData(bu-fÍEr4); d->ín5ert[r); d->insert(new TLabel[TRect( 20, 17, 41, 18 , "Valor Reíerencial= n , r j ) ; d->insert(nen TButton(TRect[25, 19, 35, 21), Cancel", cmCancel, bíNormai)); d-HnserHnew T B u t t o n ( T R e c t ( 3 7 , 19, 47, 2 1 ) , Oi; M , cuiOK, bíNormalJJi d = {TDialog í.) validView(d)¡ if (d != HULL) ií {de5kTop->exBcVieH[d) == c»OK) í r->gelData(bufÍBM); fl->getData(buffera5)j n-)getData(bu1íera4]; o->getData(bufíera3); I->getData[buííera2); 5->gEtD3ta(bufíeral)j t->getData[buíferb5)i q-)getData(buíferb4); v->gBtData[buííerb3); H->getData(faufíerb2)j y-)getDaU(bufíerbl); z->getData[bufferbG]j for(x=OjbufÍBr4Cx]| + i x) ifUsdigU(buffer4m) ¡¡ bufísr4[x else í strcpyíaboutflsg, '\x3 Ingresado dato alfanusérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultimo valor"); (sessageBoxtaboutílsg, míError ¡ wfOKButtun); 71 — strcpy(buffer4, Reí); regreso=j; for(}¡=0jbuífera5[x]; 4- t >:} í Íf(isdigitíbuffera5[x3} !! buffera5[>¡] == '.' ¡! buffera5[>:]=='~')(} else ( strcpytabouthsgj "\x3 Ingresado dato alfanusiérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Hantenido Ultimo valor"); fijesssgeBoxíaboutHsg, mfError ¡rafDKButtonj; 5trcpy(bufferg5, Coeía[5]); regresa=lj f o r ( x = 0 ; b u 1 í e r a ^ [ x ] ; i + x) C i f ( Í 5 d i g i t ( b u í f e r a 4 C x ] ) !! b u f í e r a 4 [ x ] == '.' ¡í b u f f e r a 4 [ x ] = = ' - ' ) { } else í strcpyíabouthsg, " \ x 3 Ingresado dato aiíanuíiérico \ n \ n \ x 3 Inténtelo Huevaaente \n\n\x3 Hantenido Ultimo valor 1 1 ); niessageSox(aboutíl£gj infError ! «fOKButtonli regreso=l; íoríx=0jbuífera3[x]; i -t- x) í ií(isdigit(buííera3[x]) !| buíiera3[x] =» '.' ¡¡ bufíera3[x]==1-'}{} else í strcpyfaboutHsgj "\x3 Ingresado dato alfanunérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Hantenido Ultimo valor"}; raessageBoxíaboutílsg, mfError J nfOKButtonJj strcpy(bufíera3, Coeía[3]); regreso^!; f o r ( x = 0 ; b u í í e r a 2 [ x ] i + + x) í if(Í5digUíbuíferB2[x]) ¡| buffera2[x] == V í! buf f e r a 2 [ x ] = = ' - r ) { } eJse í strcpyíaboutMsg, "\x3 Ingresado dato alfanuffiérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultimo valor"}; liessageBoxUboutHsg, /itfError J ntfOKButtonJj 5trcpy(bufíera2, rBgreso=i; for(x=0;buíferai[x3j + ^ x) í if(isdigit(buííerai[x]) í¡ bu1íerai[x3 == '.' íí else - 72 strcpyfaboutHsg, "\x3 Ingresado dato alfanumérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultimo valor"); nsessageBoxíaboutElsg, míError ¡ mfQKButton) j strcpyíbufferai, Coe1a[l])j regreso=ij for(x=0jbuíferb5[):]; +• * x} í if(isdigit(buíferb5[x]) ¡¡ bufferb5[x] == '.' ¡J bufferb5[xj»'-' JO else ( strcpy[abouthsgj "\x3 Ingresado dato alíanuitérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultimo valor" ísessageBoíitabouthsg, mfError ! ufOKButtonJj strcpy(buíferb5, Coefb[5]); regreso=l; for(x=0;buííerb4[x3; + + x) C ií(Í5digit[bufierb4[í!]) ¡¡ buiíerb4[)i] ~ ' .' \\) else í strcpyfaboutMsg, '\x3 Ingresado dato alfanujnénco \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultimo valor"); ¡sessageBoxíaboutílsg, mfError ! mfOKfiufctoní j Btrcpy(buíferb4, regreso=i; for(x=0jbuííerb3[x]j t t x) ( if(isdigit(buííerb3[x]) ü buííerb3[x] == ',' |¡ bufíerb3[x]=='-' ) { } else { strcpyíaboutMsg, •\x3 Ingresado dato alfanuBiérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultimo valor") nessageBoxfaboutflsg, mfError J /nfQlíButton) ; strcpytbuííerbS, Coeíb[3]J; ' regreso^]; for(x=0;bufíerb2[x]; t + x) í ií(isdigit[buííerb2[x]) J¡ buííerb2[x] == '.' !¡ bufferb2[x]=='-' ){} else í strcpylaboutMsg, "\x3 Ingresado dato alfanuménco \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultimo valor' 1 ); raessageBoxíaboutflsQ, mfError ¡ «fOKButtonlj strcpytbufferb?, Coeíb[2]); regreso=i; íor[x=0;bufíerbi[x]j * f x) - 73 ifíisdigitíbuíferbiEx]) ¡¡ buííerbUx] « '.' ¡! bu-fferbl[x]=='-']{} else í strcpyíabouthsgj •\x3 Ingresado dato alfanuaérko \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultimo valor" íaessageBoítabouüIsg, mfError j sfOKButtonJ) strcpyíbufferbi, Coefb[IJ)j for{x=QjbuíferbO[x]i * + x) ( ií(Í5digit(buíÍBrbO[x]) ¡¡ buííerbOtx] == '.' {1 bufferbO[x]=='-' ){} else { strcpyíaboutHsg, "\x3 Ingresado dato alíanumérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Hantenido Ultimo valor"); isEssageBoxIaboutHsg, míError { míQKBufcton)} strcpyíbuííerbO, Coeíb[0]); regreso=i; slrcpy(Coeía[5]j buííera5); strcpy(Coeia[4], buffera4); strcpy[Coefa[3]j buífera3); strcpy(Coeía[2], buífera2); 5trcpy(Coefa[i], buíferai); strcp>'(Coeíb[5], buiferb5); 5trcpy[Coeíb[4], buíferb4); strcpy(Coeíb[3], buíferb3); strcpy(Coefb[2]J bufferb2)j strcpylCoefbCl], buíferbl); strcpy(CoefbEO], buíferbO); strcpyfReí, buífer4)i coBfa[53=atoflCoefa[53Jj cQ8Ía[4]=atof(Coefa[4]}; coe{a[3]=atof[Coeía[3]); CQefa[2]=atof(CoeíaC2j); coeía[J]=atof(Coefa[l]); coefb[53=ataí(CQefb[5])j coeíb[3]=atof[Coeíb[3]); coefb[23=atof(Coefb[2])i coBÍb[i]=atoí(Coeíb[i])j coefb[0]=atof[Coefb[0]); reí=atof(Reí)j ref=reft255.0/10.0j regreso=0 + regreso; } else regre5o=íj destroyí d ); } ií(reí>255 J¡ reí <0 ) í strcp/faboutUsg, "\x3 El valor de referencia solo puede estar entre O y 10 V \n\n\x3 Inténtelo Huevaaente"); nessageBoxíaboutHsg, fafError í mfOKButtoníj - 74 regreso=lj } switchíregreso) { case 0: suspendo ; if (graphicsStartU == False) ( strcpyíerrorhsg, graphBrrQrnsgígraphresuUUJ); strcatf errorílsg, V ); wessageBoxíerrarHsg, refError ¡ JifQKButton); } el se { switch(p) ( case i: k=-l¡ tíefflpo_inicial=con5eguir_tÍE»po[}¡ for(x=Q;x<=5; t f x) í k=k *• l j datDÍn=inportb( entrada); e[0]=rEÍ-datoin; putpixel (íJoat(k)íperiodo/iOOO.Otunidadx, ymax-datointunidady, 0) ; u[0]=coeffa[0]íe[0] í- coefbEi]íeCi] + coeíb[2]íe[2] + coefb[3]te[3] + coefb[4]íe[4] f coefb [5]te[5] - coefa[JJtu[IJ - coefa[2]tu[2] - coefa[3]fu[3] if(u[0]>«255) í outpísalida, 255); putpixBlííJoatíUíperiodD/lOOO.Otunidadx, y/nax-Otunidady, VELLOH); } ií(u[0]<=0) 0); putpisel(íloat(k)tperiodD/1000.0íunidadx, ymax-Otunidady, YELLOW); } ií(u[0]>0 U u[0]<255) f putpiXE!(f]oat(k}íperiodo/1000,Oíunidadx, ymax-Oíunidady, YELLOH); outpísalida, u[0]J; \j 2); prinH("SenaI de salida: Z2.4Í Señal de error: X 2 . 4 Í datointlO.0/255.0, e[0]íiO,0/255,0, u[0]íiO, 0/255,0); u[5]=u[4]¡ u[4]=u[3]¡ u[3]=u[2]i u[2]=u[l]¡ u[13=u[0]¡ e[3]=e[2]j e[2]=e[i]j tiefspo_iina]=con5Bguir_tÍBiíipo( ) j Señal de control: Z 2 . 4 í % lapso=[tíeif)pD_final~tie/spo_inidal)í20Q.O) clrscrt); gotoxy(20, 1 2 ) j prÍntf( n Duración del algoritmo : 7.2. 3f railisegundos", lapso); delay(2000); e[0]=B[l]=e[2]=e[33=eE4]=e[5]=Oi u[0]=um=u[2]=u[33=um=u[5]=0j do { veces^YBCES t i; cleardevíceOj g r a í i c o s t d i v i s i o n E s v , divisionest, tiempo, A m p l i t u d , "REDES I N D E F I N I D A S " , veces, i j j k=-i¡ ÜE¡npQjnicial=con5EguirJ:ieíipD(); do { k=k f i; datoin=inportb[entrada]¡ e[0]=ref-datoin; putpixel(float(k)íperiodo/1000.0tunidadx, ymax-datoiníunidady, HHITE); u[0]=coeíb[0]ÍG[0] f coeíb[i]í-E[i] + coeíb[2]ÍE[2] f coefb[3]íe[3] f c Q e f b [ 4 ] J e [ 4 ] + coefb[5]íe[5] - c o e í a [ i ] í u [ i ] - coefa[2]í-u[2] -coeía[3]tu[3] - c o e f a [ 4 ] t u [ 4 ] - c o e f a [ 5 ] f u [ 5 ] ¡ ií(u[0]}=255) { o u t p ( s a ] i d a , 255); p i i t p i X E l ( í l o a t { k ) í p e r i o d o / i O O O , O í u n i d a d x , y ( ü a x - 2 5 5 t u n i d a d y , YELLOH); i * if(u[0]<«OJ í • outp(salida, 0); putpixel(float(k)tpenodo/JOOO,Oíunidñdx, ymax-Otunidady, YELLOW); i if[utO]>0 &6 u[0]<255) { putpixB](íloat(k)íperiodo/iOOO.Otunidadx, yaax-utOJÍunidady, YELLOH); outpfsalida, u[0]); } gotoxy(2, 2)j p r i n t f ( " S e ñ a l de s a l i d a ; J Í 2 , 4 f Serial de error: "/2.4Í datoinUQ, 0/255. Q, E[0]íiO t O/255.0, u[0]ÍIO. 0/255.0); u[5]=u[4]; u[4]=u[33; u[3]=u[2]¡ uC2]=u[i]j Señal de control: 7,2.41", e[5]=e[43; e[2]=e[l]j e[í]=e[03j delaylperiodo } H h Í ] e [ [ c o n 5 B g u i r J Í B f f l p D ( l - t Í E f l t p D _ i n Í c i a l ) < t i e f l i p D + 4 ífít ¡ k b h i t ( ) ) ¡ event.get^eyEventí); Í H h i l e í e v e n t . H h a t == evHothing}; do 76 event.geU.'eyEvenfcO; }while( event.what == evNothing); graphicsSUpf } ; break; case 2: FILE íarchidatj ifí(archidat=fopeníaRchivo J V))==NULLÍ ( printfPNo es posible abrir el archivo"); exit(i); tieínpo_inicial=con5eguir_tiefiipo[) ; for(í;=0i)!<=5j + t x) í k=k * i; datoin=inportb[entrada)¡ e[0]=ref-datoin; putpixel[f ]oa t( k)í periodo/ jOOO.Of unidadx, ymax-datoiníunidady, 0)j u[0]=coefb[0]teCO] + coefb[i]te[l] ^ coEÍb[2]íe[2] + coefb[3]te[3] + coBfb[4]ÍE[4] + coefb[5]íe[5] coefa[13íu[l] - coefa[2]tu[2] - coefa[3]íu[3] -.cüBfa[4]tu[4] - coefa[5]tu[5]j if(u[0]>=0) ( outpísalida, 0); putpixel[float(k)íperiodo/1000.0íunidadXj yeiax-Otunidady, 0); fprintffarchidat, n Zf 7,f Xf vecesíkíperiodo/JOOO.O, datointlO.0/255.0, e[0]UO.O/255.0, 10. 0); } if(u[0]<=0) { outplsalida, 0); putpixel(f loa t(k)t periodo/1000. Oíunidarfx, ymax-Oíunidady, 0); íprintffarchidat, " Zf Xf li vecesíUperiodo/lOOO.O, datoinílO.0/255.0, e[0]ílO.O/255.0, O J j } if(u[0]>0 && u[0] <255J C DUtptsalida, 0); putpixel(íloat(k]Íperiodo/HiOO,OíunÍdadx, yisax-Oíunidady, 0)j íprintftarchidahj " Zf Zf U 7,1 \n"t vecestktperiodo/JOOO.O, datointlO.0/255.0, e[0]ílO.O/255,0, u[0]UO. 0/255.0); } gotoxy(2, 2); prinHC'Señal de salida: 1.2. ^ Seña] de error: 22. 4f datoinílO.0/255,0, eCOJUO. 0/255.0, u[0]tiO, 0/255.0); u[5]=u[4]; u[23=u[i]; u[í]=u[03; e[53=e[4]¡ e[2]=e[i]j e[i]=BEO]¡ } tieRpo_fina!=con5eguir_tieíBpo(); Señal de control: X 2 . 4 Í " , - 77 - lap5Q=ÍUeiiipa_final-tÍER>po_inidal)í20Q,0; drscrí); gotoxyUO, 12); printfC'Üurauón dsl algoritmo : 7.2, 3f ídlisegundos", lapso); de!ay(2000); •fclosetarchidaUj if((archidat=íopEn(aRchivoí V))™NULL) ( p r í n t í f N o BS posible abrir el archivo"); EXÍt(i); } i p r i n t i í a r c h i d a t , » CONTROL CON REDES POR TIEHPO I N D E F I N I D O \ n " ) j f p r i n t f í a r c h i d a t , " TIEHPO SflLIDft DE LA PLANTA ERROR CONTROL \ n " ) j f p r i n t f í a r c h i d a t , "(segundos) (Voltios) (Voltios) (Control ) \ n " ) j x=-i] do { vecEs=Yeces i 1; cleardevice(}¡ graiicostdivisionesv, divisionest, tieíspo, fimplitud, "REDES INDEFIN1DO-ARCHIVO", veces, i ) j 1;=-]; tJBítpo_inicia!=consEguir_tieiíipoí ) j do ( x=x + i; k=k + i; da toin=inportb( entrada); e[0]=(rei-datoin); pulpixel(float[Utperiodo/iOOO.Otunidad)!, ymax-datointunidady, WH1TE); u[G]=caefb[G]Íe[0] i coefb[l)te[i] + coeíb[23íe[2] * coeíb[3JÍB[3] f coBÍb[4]íe[4] f CDBÍb[5]te[5] - coeía[i]íu[i] - coeía[2]tu[2] - coeís[3]tu[3] - coefa[4]tu[4] CQBfa[5]íu[5]j if(u[0]>=255) í outp[salida, 255] ; putphBl(iloat(k)tperiodo/iOOO.Oiunidadx, ynia)í-255tunidady, YELLOH); íprintf(archidat } " '/f 7f Xf /.í\n", vecBSÍkíperiodo/1000.0, datoinUO.0/255.0, e[0]ílO,0/255.0, 10.0J; } ií(u[0]<=0) í outpUalidñ, 0); putpixelífloatlkJtperiodo/lOOO.Otunidadx, ymax-Otunidady, YELLOWJj fprintffarchidatj " Xf U li Xf\n", vecBSÍktperiodo/1000.0, datoiníiO.0/255.0, e[0]UO. 0/255,0, 0); } ifíu[03>0 lik u[0]<255) í outp(salida, u[0]J j putpixellfloatlkJtpBriodo/iOOO.Otunidadx, yfriax-u[0]íunidady, YELLOHlj íprintfíarchidat, H Zf. Zf Jíf 7.f\n"J VBcestkípBriodo/iOOO.O, d3tointiO,0/255.0j e[0]íiO.O/255.0, u[0]UO. 0/255.0); } gotoxyl2, 2); - 78 - print-f("3enal de salida; Jf2.4f Señal de error: X2.4Í Señal de control: 7.2, datoiníiO. 0/255.0; £[03*10.0/255.0, u[Q]HO. 0/235.0); u[5]=u[4Jj u[4]=u[3]j u[3]=u[2]j u[2]=u[lj¡ u[i]=u[Q]; B[5]=e[4Jj e[4]=B[3]j B[23=B[i]¡ e[l]=e[0]¡ deJayUnUperiodo - lapso)}; }while((conseguir_tie/npo(J-tieíspo_inicial)<tie/(tpo 4- 4 && ! k b h i t ( ) ) event.getKeyEventí); }Hhile{ event.what == evílothing); do ( EvenUgetKeyEventOj }while( Bvent.Mhaí: == evNothing); graphicsStopOi íclosE(archidat)j breakj outptsalida, 0); resusieUj break) case i: breakj // ALGORITMO QH-OFF PARA T1EHPO DEFINIDO void T B G I A p p ; ; O n o í f O ( i n t p) í regisier int datoin, x, k, regreso; register íloat lapsoj tie¡üpo_inicialj tienpo^íinal, e; TEvent evBnt; vecB5=i; char BrrorHsg[flAXSIZE]j regreso=0] TDialogí. d=new T D i a l o g [ T R e c t ( 7 , 3, 75j 16), "Control de tipo O n - O f f ' J ; char b u f f e r 4 [ 2 0 ) , buííer/na[20] í bufferffii[20], aboutMsg[83]¡ TInputLine) ma=new T!nputLine(TRect(32, 4, 40, 5), 10); d->insert(new THistorytTRecKSíj 4, 42, 5), na, h l P I D D J Í j d - > j n s f i r t ( n e w T L a b e l í T R e c U 27, 4, 32, 5 ), "Uaáx.s", n a ) ) ; strcpyfbuíferína, Umax); ína->5etData[buffer/na); d->insert(nia)j T I n p u t L i n e t jni=nBW T!nputLineíTRect(32, 6, 40, 7 ) , 10)} d->insert(nen IHistoryíTRactíS?, ó, 42, 7 ) , mi, h l P I D D ) ) ; d->insert(neM TLabel(TRect[ 27, 6, 32, 7 ) , "Ujun,= K , m i ) ) ; s t r c p y t b u f f e r m i , Uminí; - 79 iü~>setData(buf fernú); d-HnsertímiJi TlnputLinel r=new TInputLine[TRect('li J 8, 49, 9), 10); d~>insBrt(nen THistory(TRect('13 J 8, 51, 9), r, hlPIDD)); strcpytbufferí), R e í ) ; r->setData(buffer<l)j d->insBrt(r); d->insert(neH d-Mnsertínew d~>inserl(neH d->insBrt[nEH TLabei (TRectí 20, TLabelíTRectt 20, TButtQn(TRectf25 í IBultoíiíTRectl??, 9, 1, 10, 10, 41, 9 ), "Valor Referencial*", rí)j 52, 2 ), "u=Unáx. si e>0 y u=U»in. si B<0", r))¡ 35, 12}, "Cancel", cnCancel, bfNoríial)); 47, 12), "OK1, cnüC, bíNornaJ)); // Validación de las variables ingresadas d = (TDialog t) validVieH(tí); if (d \* NULL] í if (deskTop->exBcVieH(d) == cnOK) { ma->gelData(bufferffiaJj ffli-)gBtData(buf-fEr/íi); r-)gBtDala[buffer41¡ for(x=0¡buffBr4Cx3¡ * + x)' { if(i5digit(bufÍEr4[ií]) !! bufferUx] ™ '.'){} Bise { strcpytabouthsg, "\x3 Ingresado dato alíanusíérico \n\n\x3 Inténtelo Nuevaíiente \n\n\x3 Mantenido Ultimo valor"); sessagBBaxíaboutMsg, mfError ! «fOKButtonJj strcpy(bufíer4, Reflj regrB5Q=i; f o r ( x = O j b u f í B r f l a [ x ] j + + x) í if(isdigit(bufíeri3a[x]) !l buí1er(sa[x] == ' . ' ] { } else í strcpyíaboutHsg, '\x3 Ingresado dato aifanumérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultisto valor"); íüessageBoxfaboutflsg, mfError J BfOKButton); strcpytbufferfna, Usiax); regresü=ij for(K=0;buíferfíi[x]j t f x ) í if(isdigit(buíÍBrffli[x]} ¡ J buííermi[x] == ' . ' ] { } el se { strcpyíaboutHsg, "\x3 Ingresado dato-alíanusérico \n\n\x3 Inténtelo Huevamente \n\n\x3 Mantenido Ultino valor"); (Bes5agEBo>:(sboutí1sg, míError j míOÍ'Button); strcpyíbuffennij UminJ; _ regreso=l; - 80 strcpyíRef, ref=atof(REf]; strcpy(Uinax, buf ferina); Uínax=atGf(U/Eax)j strcpy(Ufflin ? buffensi); Uffiin=atof (Uñiin); Uffiax=iifGaxí255. 0/10.0; UBÍn=uiíint255,0/JO.O¡ reí=reft255, 0/10,0; regreso=0 * regreso; } el se regreso=i; d e s t r o y t d ); // Fin del bloque de ingreso y validación de variables ií(reí>255 ¡| reí <OJ í strcpyfaboutHsgj B\x3 El valor de referencia solo puede estar entre O y 10 V \n\n\>:3 Inténtelo Nuevamente"); aBSsageBoxtaboutHsgj fnfError ¡ mfQKButton); regre5o=lj if[U(üax>255) strcpytaboutHsgj "\x3 UBtax íiáxiflio ES de 10 V \n\n\x3 Inténtelo Nuevamente"}; nessageBoxíabmitMsg, mfError ¡ íflfGKButton); regre50=i; ií{u(nax<0) strcpyfaboutHsg, " \ x 3 Umax mínimo es de O V \ n \ n \ x 3 Inténtelo Huevaiíiente"}; laessageBoxíabouthsg, (TifError ¡ íBÍOKButton); regreso=l; if(UBiax<=Uffiin) í strcpy(aboutñsg, " \ x 3 uaiax, debe ser raayor que iiain. es de O V \ n \ n \ x 3 (BessageBoxíaboutHsgj míError í fflfOKButton); regreso=l; Inténtelo Nuevadiente 11 ); if(uifiin>ref) í strcpyíaboutHsg, " \ x 3 uflin. debe ser menor que el valor referencial \n\n\x3 ísessageBoxfaboutflsgj mfError I iníOKButton); regreso=l; 5witch(regreso) í case 0; suspendí); ií [graphicsStartU ~ False) Inténtelo Nuevamente"]; 81 strcpyÍBrrorMsg, grapherronnsg(graphre5ult[)) s t r c a t t errortlsg, "." ); fnessageBoxterrorHsg, raíError { (BfOKButton)j í sHÍtch(p) í case i: k-i; tieflpD_inicial=consfiguirJ:ÍBiBpoOj f o r ( x = 0 j x < = 5 j + f x) í k=k * i; datoín=inportb[entrada)¡ e=ref-dafcüin; putpixe U í loa t(k)í periodo/1000, O tunidadx, ymax-datointunidady, 0); if[e>=0) í outptsalida, OJj putpixBl(float(kJtperiodo/1000.0tunidadx, ynax-255tunidady, O J j i else ( outp[salida, 0)j putpixel(íloat(kJíperÍQdo/100Ü.OÍunidadx, ymax-Otunidady, 0); } gotüxy(2} 2); printít"Sena] de salida; X 2 . 4 Í Señal de error; 7.2.41", dataintlO.Q/255.0, etlO. 0/255.0); } tieiapo Jinal=con5Bguir_tÍB»po( J ; lapSG=(tiempo_ünal-tiefflpoJnicial}í2GQ,Ü; clrscrlli gotoxy[20, 12); p r i n t f ("Duración del a l g o r i U o ¡ 7.2. 3í fnilisegundos", lapso); delay(2000(; graíico5(divÍ5Íone5Vj divisionest, tiempo, A m p l i t u d , "CONTROL ON-DFF DEF1ÍIIDO", veces, i); do í fc=k ^ Í; datoin=inportb( entrada); B=reí-datoin; putpixel(íloat(k)tpEriodo/ÍOOO,Oíunidadx, ymax-datoiníunidady, WH!TE)j Íf(E>=0) í outptsalida, umax)¡ p u t p i x e l l í loa t ( k ) í periodo/1000. O í u n i d a d x , yjaax-unaxtunidady, VELLÓN); } Bise í outpUalida, uminj; p u t p i x E U í l o a t l k l t p e r i o d o / l O O O . O t u n i d a d x , ymax-unintunidady, Y E L L Q H J j - 82 gotoxy(2, 2); printfC'Señal de s a l i d a : 22.<Jf Señal de error: Z 2 . 4 Í " , ddtoinUQ.0/255.0, eíiQ, 0/255,0); dBlayíperiodo - lapsoj; }while((conseguir_tieBipo()~tÍBflipoJnicial)<tiempo + 4 ici !í;bhit(}J; do í event,getKeyEvent(); / n h i l e t e v e n t . w h a t == evlíothing); graphicsBtopO j break; case 2: FILE tarchidat; ií((archidat=fDpen(aRchiYo, "w")]~NULLJ ( prinHC'Ho es posible abrir el archivo"); exit(l); tiempo Jnici a I=con5eguir_tiempo[); for(>!=0jx<=5j * i x ) { k=k t i; da t o i n = i n p o r t b ( e n t r a d a ) ; e=reí"datoinj p u t p i x e l ( f l o a t ( k ) í periodo/1000, Otunídad)!, y ñ t s x - d a t o i n t u n i d a d y j 0 ) ; Íf(B>=0) { outptsalida, 0); putpixBl{1loatík)tperiodo/lOOO.OÍunidad>!, yfnax-255tunidadyj 0); } else ( outpísalida, 0)¡ putpixel(float(k)íperiodo/1000,0iunidad)!f yroax-Oíunidady, 0); } fprintfUrchidat, " Zf Xf '/.í\n nj k t p e r i o d o / l O O O . Q , datointlO.0/255.0, etiO. 0 / 2 5 5 , 0 ) ; gotoxy(2t 2); printí("Señal dB salida; 7.2.41 Señal de error: 7.2, 4 f " , datoiníiO.0/255.0, eíiO. 0/255.0); ) tÍBfflpoJÍnal=conseguir_tieínpo( ) ; Iapso=ítiefnpo_final-tie(npo_inicial)t200,0; clrscríí; goto>iy(20 J 12); p r i n t f ("Duración del algoritruo ; 7,2, 3í miJisegimdDS' 1 , l a p s o ) ; delay(2000); fclose(archidal) ; ifdarchidabíopeníaRchivo, "H"|)~NULLJ í p r i n t í ( " H o es posible abrir el a r c h i v o " ) ) exit(i); } íprintí(archidat, iprintfíarchidat, h M ON-OFF DEFINIDO-ARCHIVO \n")j TIEMPO SALIDA DE LA PLftNTfi ERROR COHTROL\n"Jj - 83 fprintitarchidat, "(segundos) (Voltios) graficosídivisionesv, divisionest, tiempo, Amplitud, "QN-DFF DEFINIDO-ARCHIVO", veces, í); k=-i; tie[npo_inicial=con5eguir_tieiñpo( ] ; do { (Voltios) (VOLTIO) \n" k=k i- í; datoin=inportb[ en irada); e=ref~datoin; putpixel(ÍÍoat(k)íperiodo/IOOO,Oíunidadx 3 ymax-datointunidady, WHITE); if(e>=0) outplsaiitía, putpixel(-flDat(k)tpBriodo/1000.0tunidadx, ymax-unaxtunidady, YELLGWJj íprintííarchidat, " Jíf Xf Xf /.f\n"í ktperiodo/1000.0, datoinílO.0/255.0, etiO.0/255.0, umaxtiO. 0/255.0); ' T Bise í outptsalida, 0)j p u t p i x e l ( f l o a t ( k ] t p e r Í D d o / i O O O , O t u n i d a d x , yniax-UBiiníunidadyj YELLOH); f p r i n t f ( a r c h i d a t j " '/í 7.í 7,f ktperiodo/1000.0, daioiníiO,0/255,0 } etlO.0/255.0, unúníiO. 0/255. 0) ; ) gotoxy(2 J 2 ) j p r i n t í [ B S e n a l de salida: 7,2. 4f Señal de error; 7.2.41", datoinUO.0/255,0, eíiO, 0/255, 0 ) j delay(int(periodo - lapso)); }Hhile((cQn5Bguir_tieíRpo()-tiefflpo_inicial)<tiefiipo + .5 && ¡ k b h i t ( J ) j do í evBnt.getKeyEventd; }HhilB[ event.what == e v H o t h i n g J j graphicsStopOj fclosBÍarchidatJj break; outpfsalida, 0); break j case i; break; // CONTROL ON-OFF EN TIEMPO INDEFINIDO void TBGIAppüQnofíUint p) í registBr int datoin, x, k, rBgreso; register íloat lapso, Üeiapojinidal, tie«po_final, e; TEvBnt BVfint; veces=i; char Error«5g[MAXSIlE]j Xf\n", - 84 - regreso=0; TDialogí d=new TDialogíTRectí?, 3, 75, 16), "Control de tipo Qn-0ff")j char buffEr4[2Q], buffernatfG], buffermiCZO], aboutHsg[83]; TlnputLineí u¡a=neH TInputLineíTRect[32, 4, 40, 5), 10); d->insert(neH THÍ5tory(Tfiect(39, 4, 42, 5), isa, MPIDD)); d->insert(new TLabel(TRect[ 27, 4, 32, 5 ), "Uitáx.»", n a ) ) ; strcpyfbufferffla, Uiiaxjj íBa->setData(faufferna)j d~>in5ert[fia) ; TínputLinet íni^neK TIfiputLine(THect(32, ó, 40, 7), 10); d->insert(neH THistorytTRectfSíj 6, 42, 7 ] , ni, hlPIDD)); d->Jnsert[neH TLabelíTRectí 27, é, 32, 7 ] , "Unin.=", «i]J¡ strcpyíbuíferrai, Uminlj irii->5et0ata(bufferítij¡ d->insert(íii); TínputLinef r=new TlnputLine(TRect(4i J B, 49, 9), iOJj d->insert(neH THisfcory[TRect(48 í B, 51, 9), r, hlPIDDJ); 5trcpy(bufíer4, Reí); . r->setDatafbuífer4}j d->insert(r); d-)insert(new TLabel (TRectt 20, 8, 41, 9 J , "Valor Referencia]*", r ) ) ; d->in5Ert(neH TLabel [TRectf 20, 1, 52, 2 ), nu=Uraá>!. si e>0 y u-ünín. si e<0", r j j j d-)insert[neH TButton(TRect[25, 10, 35, 12), "Cancel", cmCancel, bíNomaDJi d">insert(neH T8uttQníTRect(37, 10, 47, 12), "GK", cisOK, bfNormal)]; // Validación de las variables ingresadas d « (TDialog t) validView(d) ; if (d != NUIL) í ií [deskTop->execVÍBw(d) == cmOKJ { ma->getData(bufíerína); «i->getDat3[bufferffliJ¡ r->getData(buffer4)j for(x=0jbuífer4[)¡3; í- t x) ( i f ( Í 5 d i g i t [ b u í f e r 4 [ x ] ) !! bufíer4[)i] == ' . ' ) [ } else í strcpy(abouttl5g, '\x3 Ingresado dato alfanumérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultimo valor"); fflessageBoxíaboutHsg, íiíError ! mfOK8utton)j strcpy(buííer4, Reí); regreso=lj for(x=0jbuííeríía[x]; + t x) í ií[Í5digit(buííerwa[x]) !! buííerffla[x] == ' . ' ) { } else í strcpyíabouthsq, "\x3 ingresado dato alíanuroérico \n\n\x3 Inténtelo Nueva/senté \n\n\x3 Mantenido Ultisio valor"); niessageBoxtaboutHsg, míError ! BÍOKButton); strcpyfbuf ferina, Uínax); regreso=i; - 85 - for(x=0jbuífer«it)!]j * t- x) ( if(Í5digit(buííerffliC};3] \e í strcpyíaboutHsgj "\x3 Ingresado dato alfanumérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Hantenido Ultimo valor")] aessageBoxtaboutHsg, (nfError í ncfQKButtonlj strcpyíbuffenci, Umin); regreso5!; strcpy(Ref, buífer4); ref=atof(Reflj strcpytUmax, buíferma); uiriax=atof(U(nax)j strcpy(Uff)inj buiíernii); uinin=atof(Ui3Ínjj umax=ufflaxí255,0/10.0; Uftin=ufliní255.0/!0.0; rei=refí255.0/ÍO.O; regre50=0 •>- regreso; > else regreso2!; destroyí d ]¡ // Fin del bloque de ingreso y validación de variables ií(reí>255 ¡| ref <OJ { strcpyfaboutHsgj fl\x3 El valor de referencia solo puede estar entre O y 10 V \n\n\x3 Inténtelo Nuevanente"); «essageBoxtaboutfísgj ífiíError j ufOKButton); regreso3] ; } if[u»ax>255) í strcpyfaboutHsgj "\x3 uiítax siáxiflto es de 10 V \n\n\x3 Inténtelo Huevanente"!; [fiessageBoxíabouthsg, fflfError I wfOKButtonlj regreso=J; } if (uísas<0) ( strcpylaboutHsg, " \ x 3 umax mínínio es de O V \n\n\x3 Inténtelo Huevaínente"}; stessageBoxíaboutílsg, mfError j «fOKBuLton} ; regreso=J; } Íf(uaia¡(<=uiBÍn) í Btrcpy[abouth5g, " \ x 3 Uffiax, debe ser ¡sayor que uinin. es de O V \n\n\x3 Inténtelo Nuevamente" J j aessageBoxíabouthsg, isfError ¡ mfOKButlonJj - 86 regreso=í; } if (ufoin>ref) { 5trcpy[aboutHsgj "\x3 unan, debe ser menor que el valor reíerencial \n\n\>¡3 Inténtelo Nuevamente"); íiessageBoxfaboutMsg, fafError J «fOKButton) j regrEso=ij } SHitchfregreso) í case 0: suspendí); ií (graphicsStartí) == False) í strcpylerrorhsg, grapherronasg(graphresul t( ) ) ) ; strcafcí errorllsg, V }j rcessageBGüíerrorHsgj otfError í mfQKButton) J } else í switch(p) ( case i; k=-i; tÍBJBpojnicial=conseguir_tieiipo(J¡ for(x=0;x<=iO¡ -f + x) { k=k f i; da toin=inportb( entrada); e=reí-datoin¡ putpixel(í!oat(k)tperiodo/1000.0íunidadxj ymax-datointunidady, 0); if[e>=0) í outpUalida, 0); putpneKfloatíklíperiodo/IOOO.Oíunidadx, ymax-255íunidadyj 0); i else í outpísalidaj 0); putpixeUíloatíUíperiodo/iOOO.Olunidadx, ymax-Otunidady, 0); ) gotoxyí?, 2]; printfí 'Señal de salida: '1,2, 4í SeHal de error: 7,2,41*, datointlO.0/255,0, eííO, 0/255,0); } tiefnpo_íifial=conseguir_tiefflpo[)j !apsQ=[tieu)po_final -tiempo Jni cía 1 Jí 100.0; clrscríJ; goto)¡y[20; 12); príntf ("Duración del algoriUo : X2.3Í /nilisegundos", lapso); delay(2000)¡ do cleardeviceOj - 87 graficostdivisionesv, divisionest, tiempo, Amplitud, "Control QN-QFF Indefinido", veces, i}j k-I; tieBipo_inicÍ3l=con5eguir_tiefflpo()j do { k=k t i; da toin=Ín por tb( e n t r a d a ) ; e=ref-datoinj putpixellvecBsHloattkJlpenodo/iOOO.Qtunidadji, ymax-datointunidady, HHITE); if(e>=0) í outptsalida, unsax); p u t p i x e l ( Y e c e s l f l o a t ( k ) t p E r i o d o / } O O O . O t u n i d a d x , ymax-uniaxíunidady, YELLOH); } el se umin)} puipixelívecesíflaaUU t periodo/1000. Oiunidadx, yínax-umintunidady, YELLOH); } gotoxyU, 2); printífSeñal de salida; Z2,4f Señal de error:. X 2 . 4 f " , datointiO.0/255.0, e l l O , 0/255,0); delay(periodo - lapso); } H h i l e ( ( c o n s e g u i r _ t i e i n p o ( ) - t i e ( n p o _ i n i c Í a l ) < t i e f f i p o f 4 ítíc í k b h i t O ) ; event.getKeyEvEntí) j }while[ event.what == evHothing); do event.getKeyEventO }whíle( event.whst == evNothing); graphicsStopOj break; case 2: FILE tarchidat; if((archidat=fopen(aRchivo J V)Í~HULL) { printíCNo es posible abrir el archivo"); exitíl}; tiefflpo_inicial=conseguir_tieiripo() ; f o r ( x = 0 j > ! < = 5 ; + + x) { k=k + 1; datoin=ínportb(entrada); e=reí-datoinj putpixel(íloat(k)íperiodo/i000,0iiínidad)!, ymax-datoiníunidady, 0); if[e>=0) í outptsalida, 0} ; putpixel(float[k)tperiodo/1000.0tunidadXj ymax-255tunidady, 0); íprintffarchidat, " Xf l\ Xf \" J kíperiodo/1000,0, datoiníiO.0/255,0, etiO.0/255.0, 0); } else í outp(salida, 0) j - 88 putpixel(f loatíkJtperiodo/lQGO.Qtunidadx, ynaK-Otunidady, 0)j fprintfíarchidat, " l\f Xf /.un" kíperiodo/1000.0, datoiníIO.0/255.0, etiQ.0/255.0, 0); } gotoxy(2, 2); printfrSena! de salida: 22. 4f Señal de error: 7.2, ir, datointlO.0/255.0, 6*10.0/255.0); > tiefflpQ_final-cQnseguir_tie(FipD(); clr5cr[); goto>;y(20, 12); printf ("Duración de! algoritino : J£2.3f milisEgundos", lapso); delay(2000)j -fcloseíarchidat}; ifííarchidatsfopentaRchiva, "«Mí-NULL) [ printf ("No es posible abrir el archivo"); exit(ij) > fprintfíarchidat, " CONTROL ON-OFF INDEFINIDO \n"J; íprintí{archidat, " TIEMPO SALÍ DA DE Lfi PLANTA " íprintítarchidat, "(segundos) (Voltios) x=-i¡ do í veces=Yeces + 1} cleardeviceí ); graíicosfdivisionesVj divisionest, tiempo, Amplitud, "OH-QFF INDEFINIDQ-ARCHIVO", veces, 1); ERRGR [Voltios) CONTROL \n")¡ (Voltio5)\nH); do í x=x + 1¡ fcsfc í- J; datoin=inportb(enfcrada) j e=rBf-datoin; putpixeltvecesííloatíUíperiodo/iOOO.OÍunidadx, ymax-datoiníunidady, HHITE); Dutp[salida, uniax); putpÍXBl(vecB5Ífloat[k}ípBriodD/1000,Oíunidadx, yinax-umaxíunidady, YELLQW); fprintííarchidat, " Xf Zf Xf /.f\n", VBcesíkíperiodo/lOOO.Oj datointlO.0/255.0, eUO.0/255.0, u/naxílO. 0/255.0); } else [ oittpfsalida, u/sin); putpixBlívecesííloatfkJtpBriodo/iOOO.OÍunidñdK, ywax-umintunidady, YELLOH); fprintffarchidat, " 7,f '/.i 7,f 7.f\", VBCBSÍkÍperiodo/1000,0, datoinílO.0/255.0, etJO.0/255.0, uainílO. 0/255.0); } gotoxy(2, 2Í¡ printffSeñal de salida; X2.4f Señal de error: Z2.41", datoinílO.0/255,0, eílO, 0/255.0); dBlayfintfperiodo - lapso)); - 89 }Hhile((conseguirJÍEfflpa()-tiempoJnicial)<tÍEmpo t 4 && !kbhit()}; Event.getKeyEvBntí); >while( BVEnt.nhat == evNothing); do C BVBnt.getKeyEventtJj }while( BVEnt.Hhat == evHothing}; graphicsStopOi fcloselarchidat); break; ILJ. • ! J otitplsalida, 0); resuflBÍJ; break; casE 1: breakj // fiLGÜRITHG DE DAHLIHB EN TIEHPG DEFINIDO void TBGIAppuDeadOUnt p) í register int datoinj x, k, regreso; register double lapso, tÍE»po_inicial, Uempo_final } u[6], e[6], fii, A2, fi3, TEvBnt eventj veces^i; char errorWsgEHAXSHElj rBgre5o=0; eCO]=B[i]=e[2]=eE3]=BC4]=B[5]=Oj TDialogt d=new TDialogtTRectí?, 1, 75, 21), "Control DahUns"); TIíiputLinet a=nen TInputline{TRect(2aj 8, 37, 9), 15}} d->insert[neH THístory(TREct(36, 8, 39, 9), a, hlPlDD)); char bufferiUO], buífer2[20], buífEr3[20], buffer4[20], aboutHsg[833} strcpyíbuíferi, LJ; a->setOata(buífEri)i d->in5ert(a}; d-MnsertíneH TLabeUTRBctt 11, 2, 60, 3 ), • Í V D(s):=e A H2ís}/(bts + 1) y G[5l=l/[ats + 1)*", a } ] j d-KnsBrUnew TLabBl{TRect( 9 3 4, 60, 5 ), n ^ D í s ) en lazo cerrado y G ( s } la planta a compensar"" 1 , a j ) j d->insErt(new TLabel ÍTREcfct 9, 6, 60, 7 ), nv T2=ltperíodo; donde 1 es Entero"", a)l¡ d->insert(neH TLabel [TRectt 25, 8 } 2 8 , 9 } , " l = H , d ] ] i TInputLinEÍ b=new TInputüne(TRect(28, 10, 37, 11), 15); d-)insert{nev( THistory(TRect(36, 10, 39, U), b, hlPIDD))¡ s t r c p y [ b u f f e r 2 , B); b->setData(buffer2); d-)in5Bri(bJ ; L d->insBrtlneM TLabelITRectl 25, 10, 28, 11 ), "b^", b})¡ TlnputLinet c=new TInputLine(TRect(283 12, 37, 13), 15}; d->insert(neyí THistory[TRect(36, 12, 39, 13), c, hlPIDD)}; strcpy(buffer3, A); c-)setData(buffBr3); d->insErt(c}; d->in5ert(nEH TLabelíTRectf 25, 12, 28, 13}, "3=", c)); ísessageBoxtaboutHsg, strcpyfbufferl, L ) j rsgreso^i; /níError ! ffifOKButton); - 91 for(x=0;buffer3[>¡]j f + xj ( if(isdigit(buffer3[x]} ¡¡ buffer3[x] == '.' í! buffer3[x]=='-' )(} else í i strcpyíaboutllsg, " \ x 3 Ingresado dato alfanuíiérico \n\n\x3 Inténtelo Nuevamente \ n \ n \ x 3 Mantenida Ultimo v a l o r " } ; reessageBoxíaboutíisg, /nfError ¡ fsfOKButton); strcpy(buffer3, A ) ; regreso=lj > strcpy(B, buffer2); strcpyíLj buíferl); strcpy(A, bufíer3); strcpy(Ref, buífer4)j l=atoí(L); bb=atof(BJ¡ aa=atoí(A)j reí=atoí(ftef); regresólo + regreso! > else regreso^l; destroyí d }; // Fin del bloque de ingreso y validación de variables í strcpylaboutHsgj M \ x 3 Para el programa 1 náxino es de 4 \ n \ n \ x 3 Inténtelo nuevanente"); íiies5ageBox[aboutHsgj míError ¡ rafOKButton); regreso=i; } ii(ref>255 ü reí<0] í strcpy[aboutHsg, n \ x 3 La referencia íuaxitriñ es de 10 \n\n\x3 La referencia nininia es de OV \n\n\x3 Está nal ingresadoj inténtelo nuevamente"}; íTiessageBoxíaboutNsg, mfError ! JííQKButtoíi}; regreso=i¡ í ií(cta<=0 !¡ bb<=0} í strcpylaboutHsgj "\x3 A y b tienen que ser mayores de cero \n\n\x3 Está mal ingresado; inténtelo nuevamente") i (BessageBoxIabautflsg, mfError I ftíOKButton)¡ regreso=lj } 5HÍtch(regreso) { case 0: fil=(Í.O-exp(-periodo/(iOOC).Otbb}}}/(1.0-exp(-periodo/(1000.0íaa))) A2=(exp(-periodo/fiOOO,OÍ23))í(l,0-e>:pí"perÍQdo/[ÍOOO,OÍbb)))}/íl.O~exp{"periodo/(1000.Óíaa))}; A3=exp(-periodo/UOOO.QÍbb)); - 92 fl4=(l.G-expí-perÍQdG/íiOÜQ,Otbb))); suspendí)} if (graphicsStartí) == false) ( strcpy(eiTorf1sg, grapherrormsgígraphresultOJ] j strcatí errorllsg, "." ); messageBoxíerrorMsgj mfError ¡ ííifÜKButton); } else { switch(p) í case 1; k=-ij tiedipo_inicial=con5eguir_tiempo(); for[>:=0;x<=5j f t x ] { k=k + i; da toin=inportb( entrada); e[Q]=ref~datoinj putpixeKf loa t[k)í periodo/i 000, OUmidadx, ymax-datüiníunidady, 0 ) ; uCO]»fliÍB[l]-A2ÍB[l + 1] + fi3íu[i] t A4tu[l + i]j if(u[03> s 255) C outpísalida, 0); putpixBl(-float(k)íperÍodo/1000,Otunidadx, ymax-Oíunidady, 0) j } if{u[0]<=0) { outptsalída, 0); putpixB)(íloatík)tperiodo/JOOO,OtunidadXj yBax-Oíunidady, 0 ) ; } if[0<u[QJ && u[0]<255] í outplsalída, 0); putpheliíloaUkJíperiodo/lOOO.OÍiinidadXj yinax-u[0]tunidady r 0); } g o t o x y ( 2 , 2); printí["SBfial de salida; 7.2, -H Señal de error: Z2.4Í Señal de control: U, 41", datoiníiO.0/255.0, e[0]íiO.O/255.0, u[0]UO. 0/255. 0 ) j e[4]=e[3J; e[2]=e[i]j e[i]=e[0]j u[4]=u[33¡ u[3]=uC2]¡ u[2]=u[i]¡ u[l]=u[03¡ ) tÍBBpoJinal=con5eguJr_tienpo()¡ Íap5o=(tÍEíipoJÍnat-tÍB(npa_iniciaI)í.200,0; clrscrí); gotoxy(20, 12); printí('Duración del algoritmo ; 7,2,31 mil i segundos" , lapso); delay(2000); - 93 - graficosIdivisionesYj divisionestj tiempo, Amplitud, "CONTROL TIPO DAHLINS DEFINIDO", veces, i); k=-l¡ tÍEínpo_inicial=conseguir_tieíTipo(}; do í K=k + i; datoifFÍnportb(entrada) j putpixe][f]oat{k}íperÍDdo/iOOO,OÍuíiidadXj yisax-datointunidady, WHITE); uEQ3 s Ane[l]-A2ÍBEl * I] + A3tu[I] + A4tu[l t i]; if(u[0]>=255) í outptsaüda, 2 5 5 ) ; putpixeKiloattkjíperiodo/IOOO.Otunidadj!, ymax-255ÍLinidady, YELLDH); } if(u[Q3<=0) í outp(5a!ida, OJ; p u t p i x e l l f l o a t i k j í periodo/1000. Otunidadx, y/nax-Otunidady, YELLOW) j } if(0<u[0] tá u[03<255] í outptsalida, u[0]); putpiJteKíJoattkJtperJodD/lOOO.Oiunidadx, y.'Bax-u[03íiinidady í YELLOW); i gotoxy[2í 2); printfC'Señal de salida; "/2,4f Señal de error: X2.4Í datoinílO, 0/255,0, e[03tlO, 0/255.0, u[0]ÜO. 0/255,0); Señal de control; X2.4f"j u[5]=u[43; u[4]«u[3]¡ u[3]«u[2]j deiaytperiodo - lapso); }Hhile( [cQnseguir_tiempo(}-tie;ripQ__ifncÍ3l}<üe?ipo t 4 ftft ! k b h i t ( ) ) ; do í event,getKey£vent{); }Hhile( event.Bhat == evNothing); graphicBStopí); break; case 2; Al=[i,0-expl-periodo/tlOOO.Otbb)l)/(i.O-e)!pí-pBnodo/(iOOO.Otaalí)i A2=(expí-periodo/(iOOO í Oíaa)Jt(i.O-exp[-periodo/(1000.0tbb))JJ/(1.0-exp(-pBriodo/(1000.0laa)])i A3=Bxp(-periodo/|1000.0tbb))i A4=(1.0-Bxp(-periodo/(1000.0tbb}))i FILE tarchidat; i1((archidabíopen(aRchivo, H w " } ) í 94 p r i n t f [ B N o ES posible abrir si archivo"); BíitíDi tiempo jnidaI=can5eguir_tÍBnipaí) i for{í¡=0j>!<=5; t + xl í k=k t 1; da toin^in por tb( entrada); E[0]=ref-datoin; p u t p i x e l ( í l o a t [ k ) t periodo/1000. O í u n i d a d x , ytnax-datoiníunidady, O J ; u[G]=AiÍE[l]-A2tfi[I * i] t A3lu[i] + A4íu[l + i]; if[u[0]>=255) C outp(salida, 0 ) j putpixellíloatíklíperiDdo/lOOO.Otunidadx, ymax-Oíunidady, 0); fprintítarchídat, " U 7.f Zí\n', fctperiodo/1000.0, datoinUO.0/255.0, B[0]tlO.O/255.0)i } if[u[0]<=OJ í o u i p t s a l i d a j 0); p u t p i x B l ( í l o a t [ k ) t p e r i o d o / 1 0 0 0 . 0 í u n i d a d X j yiiiax-Oíunidady, 0 ) ; f p r i n t í í a r c h i d a t , H /.í l\, ktperiodo/1000.0, d a t o i n t l O . 0/255.0, e[0]UO. 0/255. 0) j } ií(0<u[0] \& u[0]<255) lida, 0); putpixel[float[klípEriodD/iOOO.Otunidadx, ymax-Otunidady, 0); fprintfíarchidat, " Xf Xf Xf\n", kíperiodo/1000,0, datoinflO.0/255.0, e[0]ÜO.0/255.0); printífSefial ds salida; 7.2.4f Señal de error: 72.4í datoinííQ.0/255.G, e[03tlO.O/255.0, u[0]tiO.O/255.0]j B[5]=B[43i eC4]=B[33¡ B[3]=s[23i Señal de control; 7.2.4í", B[2]=B[13i u[3]=u[2]í u[2]=u[ili u[i]=uEO]¡ Jap5o=(tÍBBpo_final-tÍEBipo_inicia])í200.0s clrscr[); gotoxy(20j 12); p r i n t i [ " D u r a c i ó n ds) a l g o r i t m o ; 7,2, oí íiilisegundos 1 1 , l a p s o ) ; dElay(200Ü)¡ ícloseíarchidat) ; i f ( t a r c h i d a t = f o P B n t a R c h i v o I "H"))==NÜLL} í p r i n t í ( " N o es posible abrir el archivo"); - 95 í fprintfíarchidat, " ARCHIVO QE CONTROL TIPO DAHLIHS \n")j fprintfíarchidat, " TJEHPO SALIDA DE LA PLANTA ERROR fprintffarchidal, "(segundos) (Voltios) (Voltios) CONTROL \n"); (Valtios)\n") ; graficostdivisionEsv, divisionBstj tiempoj Amplitud, "CONTROL TIPO DAHL1NS-ARCHIVQ", VBCBS, i); k=-l; tÍBflipo_Íniciai=con5eguir_tÍBf[fpo( ) ; do í k=k f 1¡ datDÍn=inportb(Bntrada); E[0]=ref-datDÍnj putpixel (f loatíkJíperiodo/iOOO.Oturudadx, ymax-datoiníunidady, WHITE) ; u[0]=AiÍE[l]-A2te[í i i] f A3ÍUÜ3 +fl4iu[l+ i]; ií(u[0]>=255) 255! j putpixBlífloat(k)ípBriodo/iOOO,Oíunidadí;'j ymax-ÍSSíunidady, YELLOH); fprintftarchidat, H 7.Í Zf 1A /.f\n llí ktpBriodo/1000.0, d a t o i n t l O . 0 / 2 5 5 . 0 , e[0]UO.O/255.0, 10); } if(u[0]<=OÍ í outptsalida, 0); putpixel ( f l o a t í k j í periodo/1000. Oíunidadx, ymax-Otunidady, VELLÓN); fprintfíarchidat, ' Xf 7.f "/f Xf\n", ktperiodD/IOOO.O, datoiníiO. 0/255,0, e [ 0 ] U O . O / 2 5 5 . 0 , O J j } if(0<u[0] fcjt Li[0](255) í outpísalida, u [ 0 3 ) j putpiXBKfloattkJtperiodo/lOOO.Otunidad)!, y/nax-ufOjíunidady, YELLOH); fprintítarchidat, " 7,f 7.f Zf 7.f\n M j kíperiodo/1000.0, datoinUO.0/255.0, e[0]UO.O/255.0, u[0]J10. 0 / 2 5 5 . 0 ) ; 2)¡ printf("Señal dB salida; Z2,4f Señal de error; Z2.4Í datoinUO.0/255.0, B[0]UO. 0/255, 0 } u[0]UQ. 0/255.0)} B[5]=e[43j e[4]=B[3]j B[3]=e[2]j e[23=B[13¡ e[Í]=e[0]; u[5]=u[4]j u[4]=u[3]; u[3]=u[23j Señal de control; Z2. u[i]=u[03; dBlay(int[períodD - lapso)); jHhile((conseguir_tÍBiapoí)-tieflipojniciaI)<tieíipo + ,5 && !kbhit(J)j do ( event.getKeyEventl]; - 96 }Hhile( Bvent.what == BvNothing); graphicsStopí); fcloseUrchidat); break; outpísalida, 0); resume! }; break; case i: breakj // ALGORITMO PARfi CONTROL TIPO DAHLJNS POR TIEMPO INDEFINIDO. void TBGIñpp::DeadI(int p) t register int datoirij x, k, regreso; register double lapso, tieapojinicial, tieínpo_final, u[6J, eE.6], Al, A2, A3, ft4; TEvent svBnt; veces=l; char BrrürHsg[«ftXSIZE3i regre50=0j u[03=uEl]=u[2]=u[3]=u[4]=uE5]=Oj eCO]=BEi]=eC2]=eC3]=BC4]«e[5>0; Tüialogt d=new T D i a l o g [ T R E c t { 7 f i, 75, 2 3 ) , "Control DahUns")} TInputLinet a=new TInputLine(TRBct(28 J 8, 37, 9 ) , 15}; d-Hn5ertínevi T H i s t o r y t T R e c t f í t , B, 39 3 9 ) , a, hIPIDD)]; char bufÍBrlE20], buffer2[20], buífer3[20], buífEr4[20], aboutMsg[83]; 5trcpy(bufferl, L); a->sei:Data(buffBrí)} d->insert(a}j d->in5Brt[new T L a b e l ( T R B c t ( 11, 2, 60, 3 } , H ' ' D [ 5 ) = e A í - T 2 Í 5 S / ( b t 5 + 1] y 6 [ 5 ] = l / ( a t 5 + I)* 11 , a ) ) ; d-)in5Ert(neH TLabel(TRect( 9, 1, 60, 5 ), N V D(5) en iazo cerrado y G ( s ) la planta a co/npensar"" 1 , a ) ) ; d-MnsErtíneH TLabel ( T R e c t í 9, 6, 60, 7 ), "* T2=l|:períDdD; donde 1 BS entero" 11 , a ) ) j d-MnserttiiBH TLabel (TRect( 25, 8, 28, 9 }, H l=", a ) ) ; TInputLinB). b=nBH TInputLine(TRect(28, 10, 37, 11), 15); d->insert(new THÍ5toryíTRect(36j 10, 39, 11), b, hlPIDD]); 5trcpy(buííer2, B); b->setOata(buífer2); d-)in5Brt(b); d-)insert(new TLabelíTRectt 25, 10, 28, 11 ), ''ÍF", b)); TlnputLine? c=new TInputLine(TRectí2S, 12, 37, 13}, 15}; d->insBrt(nevi THistory(TRectí36, 12, 39, 13), c, hlPIDB)); 5fcrcpy[buffer3, A); c->SBtData(buffer3); d-)inBBrt(c); d->in5ert(nfiw TLabel(TRect( 25, 12, 28, 13), "a=", c)); TlnputLineí. r=new TInputLine(TRBct(U, 14, 49, 15), 15); d->in5ert(new THÍ5tory(TRBct(48, 14, 51, 15), r, hlPIDD}); strcpylbufferí, Reí}] r->BetData{bufíer4J; d->iri5ert(r); d->insert(nEH TLñbel(TRectf 20, 14, 41, 15 ), "Valor Reíerencial= B , r))¡ d">in5Ert[neH TButton(TRect(25J 16, 35, 18), "Cancel", cmCancel, bíHormalJ); - 97 d-HnserUne* TButtoníTRectíSy, 16, 17, 18), "OK", caGK, bíNormal)); // Validación de las variables ingresadas d = (TDiaiog t ] validVien(d)¡ if (d != NULL) í if ídeskTop->e>;ec l /ieH(d) == csiOK) í r->getData(buHer4); c->getData(buf fer3); b->getData(buffer2); a->getData(bufferi)i for(x=0;buffer4[x]; + + x) C ifíisdigitlbufferíWÍ !! buffer4tx] -- '.'){} else í strcpytaboutHsg, *\x3 Ingresado dato alfanumérico \n\n\>;3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultimo valor"); messagEBo>!(aboutf1sg, mfError { iBÍOKButton); 5trcpy(buffer4, Reí); regreso=l; for(x=OjbuffBr2[x3¡ + + x) [ ií(isdigit{bu1íer2[x]] ü buííer2[x] == '.' \\ü else { strcpylaboutMsg, "\x3 Ingresado dato alíanuniérico \n\n\x3 Ultiaio valor"!,' fiessageBoxlaboutUsg, míError { mfOKButton) j 5trcpy(buffsr2, B]j Inténtelo Nuevamente \n\n\x3 Hantenido regresD=l; for(x=0;bufferl[x]; ± + x) ( if(isdigit(bufferl[x]))U else ( strcpyfaboutMsg, "\x3 Ingresado dato alfamnriénco \n\n\x3 O el dato no es entero \n\nx3 Inténtelo Nuevamente \n\n\x3 Hantenido Ultimo valor"); aessageBoxUboutHsg, míError ¡ míOKButton) j strcpyfbuíferi, L); regreso=lj í > for(x=0;buífer3[>!]í + + x] ( ií(isdigH(buffer3[x3) !¡ bufíer3[x] == V ü buífer3[x]™'-'){} else í strcpytaboutKsg, "\x3 Ingresado dato alíanumérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Hantenido Ultimo valor"); 98 ffiessagBBoxíabGufcfísg, mfError { nMButton}; strcpyfbufferoj A); regreso=lj strcpyíB, buffer2); strcpy(L, b u f f e r i ) ; s t r c p y t A , bufferS); strcpytRsf, bufíeM); í=atof{L); bb=atof(B); aa=atoí(AJj reí=atoí(Ref]¡ rBf=refí255, 0/10,0; regreso=0 -i- regreso; i B!SE regreso=l; destroyí d ) j // Fin del bloque de ingreso y validación de variables strcpyfaboutfisg, W \ x 3 Para e! programa 3 máximo es de 4 \n\n\x3 Inténtelo nuevamente"); messageBoxtabouthsg, íníError j mfOKButton) j regreso=l; } ií(reí>255 |¡ reí<0) { strcpyíaboutíísgj n\)¡3 La referencia isáxitna es de 10 \n\n\x3 inténtelo nuevafliente 11 ); ísessageBoxfabouthsg, mfError ! í»fOKButton)j regreso^lj } if(aa<=0 ¡! bb<=0) { strcpyíaboutHsg, La referencia füínima es de OV \n\n\x3 Esiá mal i \3 A y b tienen que ser mayores de cero \n\n\x3 (BessagsBoxfaboutHsgj íüfError í nfOKButtaníi regreso^!; ) sHitchfregreso) ( case 0: Ai=(i. 0-exp(-periodo/í 1000, Oíbb} ) ) / ( ! . O-expt-periodo/ ( i O O O . O Í a a ) ) ] j fl2=(exp(-pBrio{Jo/(lOOO.O)aa)ÍHl.O-e)!p(-pBriodo/ÍI000.01:bb) )))/(!. O-expí-periodo/dOOO.OtaaJJlj A3=exp(-periodo/(1000.0íbb)); A4=[1.0-eiíp(-pBriodo/ílOOO,Otbb)ííj suspendí}; if [graphicsStartO == False) { strcpy {errorHsg, grapherrorwsg [graphresul t( ) } ) } strcatf errorHsg, "." }\, m-fError í nfOKButton]¡ - 99 else { switchíp) í case 1: k=-ij tieftpQ_inicial=con5eguir Júeapof ) ; for(x=0jx<=5; + + x) ( k=k t i ¡ da toin=inportb[ entrada); fi[0]=ref-datoin¡ putpixelífloatlkltperiüdo/JQOQrOfunidadx, ymax-datoiníunidady, 0); u[Q3=AHB[13-A2te[l * 13 + fl3tu[i] + A 4 t u [ l f I]; if(u[Q]>=255) t o u t p t s a l i d a j O), 1 putpixel(float(í;)íperiodo/iOOO.OíunidadXj ymax-Oíunidadyj 0}j > iflu[0]<=0) ( outpUalJda, 0); putpixB](fioat(k)tperÍodo/iOOO.OÍunidadx, ymax-Otunidady, 0); i i f ( Q < u [ 0 ] && u[0]<255) ( outp(salida, 0 ) j p u t p i x e l í f l o a t í M Í ' p B r i o d o / I O O O . O t u n i d a d x , ynax-u[0]í u n i d a d / , 0 ) ; 2); p r i n t f [ " S e ñ a l de s a l i d a : 7,2. -lí Señal de error: 7,2. 4f d a t o i n J I O . 0 / 2 5 5 . 0 , e C O J H O . 0 / 2 5 5 . 0 , u[0]UO. 0/255.0); Señal de c o n t r o l : 2 2 . 4 f H , e[4]=B[3]j e[3]=e[2]¡ B[i]=B[0]¡ u[5]=u[4]j uC3]=u[2]¡ u[2]=u[l]j u[i]=u[0]¡ } tiejnpo_final=conseguir_tie[ripo()j lap5Q=[tiefl)po_íinaI~tieínpo_inicial)í200.0; clrscríJj gotoxytSQ, 12); p r i n t í ( " D u r a c i ó n del algoritítio : Z2.3f m i l i s e g u n d o s " , l a p s o ) ] delay(2000); uEO]=uti3=u[2]=u[33=u[4]=u[5]=Oj B[0]=EEI]=e[2]=eC3]=B[4]=e[53=Oi do í vecBs=vece5 * i; cleardevicsOj graíicosídivisionesv, divisionest) tiempo, Amplitud, - 100 "CONTROL TIPO DAHLIHS INDEFINIDO", veces, i); k=-í] tíefflpG_inicial=conseguir_tie¡7ipa()j do { k=k + 1; da toin=ínportb( entrada); e[0]=ref-datain; putpixeHfloatdOíperiodo/iOOO.OtLJnidadXj y/nax-datoiníunidady , WHÍTE); uEG3=Alíe[13-A2*e[l t 13 + A3tu[13 + A<Hu[l + i]; ií(u[0]>=255) lidaj 2 5 5 ) ; putpixe](íloat(k)íperiodü/1000.0tunidad)!, yniax^SSÍunidady, VELLÓN); > iííu[0](=0) { outpísalida, 0); putpixel(float[UtperiodQ/100Q.Qtunidadx, ywaxrOtunidady, YELLOW); } if(0<u[0] && u[03<255J f outp[5alida, u[0]); putpixeKílDaKkJtperiodo/iOOO.Otunidadx, yfflax-u[0}tunidady, VELLOW); } gotoxy{2, 2); printf ("Señal de salida: 7,2, 4í SeBál de error: X2,1f datointiO.0/255,0, e[0]tlO.O/255.0, u[0]tiO, 0/255.0); Señal de control: Z2.4f", B[5]=B[4]¡ e[2]=e[l]j e[i3=e[01; u[1]=u[3]; úC23=u[J]¡ u[l]=u[0]j delayfperiodo - lapso); }while((conseguir_tÍEjnpo()-tieflipo_inKÍal)<tienipD + 4 && ! k b h i t ( ) ) ; evBnt.getKeyEvBntí); }Hhile( event.what == evNothing); do í BYent.getKeyEYBntíJj }KhÜE( event.what == evNothing); graphicsStopOj break; case 2: Ai=(J.O-exp(-periodD/íiOOO.OÍbb)))/(i,0-exp!-periodo/(1000,Otaa))); A2=íexp(-periodoy(1000.0íaaJ)t(i.O-e)!pí-periodo/ílOOO.OÍbb)í))/(i,0-Bxp(-pentído/(1000.0íaa)J)i A3=Bxpí-perÍDdo/(1000,Otbb))j A4=íl,0-expí-periodo/(10QQ.Otbbí)íi FILE Urchidat} ifííarchidat^fopeníafichivo, "H") )~NULLJ { prínti( B No es posible abrir el archivo"); - 101 exitUli } k=-lj tie/RpoJnidal^consEguirJiientpoU; íor(x=0;>:<=5; f t x) ( k=k * i; datoin=inportb(entrada]j e[0]=ref-datoin¡ p u t p i x B l ( f ] o a t [ k ) t periodo/1000. O t u n i d a d x , y n a x - d a t o i n t u n i d a d y , 0 ) ; u[OJ=ftltE[l]-A2te[l + i] + fl3tuE13 + A4íu[l i- 1]; if(u[Ü]>=255) t p u t p j x e l t í l o a t l k J t p e r i D d o / i O O O . O í u n i d a d X j yíiax-255tunidady, 0 ) ; f p r i n t f f a r c h i d a t , " Xf 7.f Xf Xf\n", kíperiodo/1000.0, d a t o i n í i O . O / Z 5 5 . 0 , e[0]UO. 0/255. 0 5 10); } ií(u[0]<=OJ C outptsalida, 0); putpixeKfloatíkJíperiodo/iQQQ.Qtunidadx, yuax-Oíunidady, 0]¡ fprintfíarchidat, " 7.f Zf Xf Xí\n", ktperiodo/lOQQ.Q, datoinílO.0/255.0, B[0]UO.O/255.0, 0]¡ } if(0<u[0] ítfe u[0]<255J ( outpísalida, Ojj putpixel (f Ioat(k)tperiodo/Í000.0íunidadx, ymax-u[03tunidady, 0) ; fprintfíarchidatj " Xf Xf Xf Xf\n M , kíperiodo/1000.0, datoiníiO.0/255,0, e[0]UO.O/255.0, u[0]UO. 0/255. 0); } gotoxy(2( 2]j p r i n t í f S e ñ a l de s a l i d a ; Z2.4f Señal de error: X 2 . 4 f datointiO.0/255.0, e[0]íiO.O/255.0, u[0]UO. 0/255.0); Señal de c o n t r o l : Z 2 . 4 f f l , e[3]=e[23j e[l]=e[0]¡ u[5]=u[4]¡ u[4]=u[3]¡ uC3]=u[2]¡ u[2]=u[l]i uCi3=uCO]¡ } tÍBBpoJina]=con5Bguir_tÍBftpo[) j 3ap50=[tÍB/npo_final-tienipoJnicial}Í200.0; clrscrO; gotoxy{20j 12}; printf("Duración del algoritmo : 7,2. 3f milisegundos", lapso); delay[2000); fclose(archidat); if((archidat=fopen[aRchivo/ "w")} p r 3 n t í ( " H o es posible a b r j r el a r c h i v o " ) ; exilílJi - 102 fpriíitfíarchidat, " ARCHIVO DE CONTROL TIPO DAHLINS INDEFJNIDO\n")¡ fprintflarchidat, H TIEhPD SALIDA DE LA PLANTA ERROR fprintfUrcnidat, "(segundos) (Voltios) [Voltios } u[0]=u[l]=u[2]=u[3]=u[43=u[5]=0; CONTROL \n"í¡ tVoltiosJVn") j do í vecB5=vecB5 t i; cleardeviceO; graficos(divÍ5Íonesv, divisionest, tiempo, Amplitud, "CONTROL TIPO DAHLINS INDEFINIDO-ARCHIVO", veces, i); k=-i; lienpo jnicial=con5Bguir_tÍB»po() j do { k=k + I¡ datoin=inportb(entrada) ¡ e[03=ref-datoinj putpixel(floatík)ípBriodo/1000.0íunidadXj ymax-datointunidady, WHITE); uCO]=Alte[l]-A2ífi[l + 1] + A3tu[i] outpísalida, 255); putpixeKílOdtíhlíperiodo/iOOO.Otunidadx, ynax-255tunidady, YELLQW}; fprintffarchidat, " 7,f 3£f 7.1 7.í\n flJ híperiodo/JOOO.O, datointlO.0/255.0, B[Ü3UQ. 0/255. G, i O J j > if(u[03<=0) ( outp(salida, 0 ) j putpixe][f!oat(k)íperiodo/1000,0tunidadx, ymax-Otunidady, YELLOW)¡ fprintfíarchidat, " 7.f 7.f 7.í Zün", kípBriodo/lOOO.Oj datointiO.0/255,0, BtOltlO.0/255.0, 0); } if(0<u[03 && u[03<255J í outptsalida, u[0]}¡ putpixeUfloatíkJtpBriodo/iOOO.Otunidadx, ymax-u[0]íunidady, YELLOW); fprintfíarchidat, " X f 7,f 7,f 7.f\n M , kípEriodo/1000,0, datoinüO.O/255.0 t e[0]UO.O/255,0, u[0]UO, 0/255,0) ; } gotoxy(2) 2]j printf ("Señal ds salida: 7.2.41 Señal ds error: 72. 4f Señal de control: 7.2, datoinUO.0/255,0, BE03UO.O/255.0, u[0]tlO. 0/255,0); e[3]=B[2]; E[23=e[13i B[13=B[03i u[53=uC43¡ uE3]=u[2]¡ u[2]=uE13i u[l]=u[0]¡ dBlay(int(pBriodo - lapso)); }HhilB((cQn5Eguir_tiempo(í-tÍE»po_inicial)<tieflipQ + 4 && ! k b h i t ( ) ) j - 103 eYent.getKeyEventUi }Hhile( event.what ™ evNothing); do í EVBnt.gEtKeyEventUj }while( event.whah == evHothing); graphicsStDpO; fcloseíarchidat); brea!; ; í } outptsalida, 0); hreakj case i: breatj // ESTRUCTURA PRINCIPAL DEL PROGRAMA int aainO í recuperar(}j TBGIApp bgifipp; bgiApp,run(); guardar! ); return 0; // FUNCIÓN PARñ FUñRDAR LOS VALORES UTILIZADOS EN ÜH ARCHIVO void guardar(void) í FILE íconíi; if((coníi=íopen[ l l [:oníicon.5y5" I n wl) fl )]== : NULL} í printíí'No se puede abrir archivo de configuración"]; BXÍtdij fprintííconfi, fprintfíconfi, fprintfíconfi, fprintfíconfi, fprintf í c o n f i j fprintfíconfi, fprintfíconfi, fprintfíconfi, fprintfíconfi, fprintfíconfi, fprintfíconfi, fprintfíconfi, fprintfíconfi, fprintfíconfi, fprintffconfi. fprintfíconfi, íprintf (confi, •Zs\n", aRchivo); "X5\n", ahplitud); " Z 5 \ n " , tlBíipo); "Jísto", dívisionBsvJj "X5\n", dlvisionest); "XsV, eN Irada J; "Z5\n", sAIida)) "JísV, pEriodo); "^n", Í:PÍ; H 7.s\n H , KI]¡ "7,s\n" f KD)¡ "7.s\nH, R e í ) } 'Zs\n", C o 0 f b [ 0 ] ) j "Xs\n", CoefbU])i "Zs\n", Coefb[2]]j nf,S\fín, Coefb[3])¡ •Xs\n", C o B f b [ 4 ] J ; - 104 fprintf(confij '7,s\n", Coefb[5])¡ fprintf(confi, "7.s\n', Coefa[i]J¡ fprintf(confi, "7.s\n", CoBfa[2])j fprintf(confi, M7.5\n"I Cofifa[3]Ji fprintf(confi, "7.s\n", Coefa[43)j fprintf(confij "ZsVn", Coefa[5]); fprintfíconfi, H7.5\nH, L)j fprintftconfi, "7.s\n", BJ¡ fprintf[coníi, fprintftconfi, "Zs\n", Ujaax); fprintf(confi, K/.s\nH, Umin); 1 cióse[confi); // FUNCIÓN PARA RECUPERAR LOS PARAHETROS DE UN ARCHIVO DE CONFIGURACIÓN void recuperarívoid) í int porticoSj FILE íconfij if[(confi=fopen( N coníicon,By5" I "rb"))=sHULL) { printf( M No se puede abrir archivo de configuración" J; fscanf {confi, "XsVn", aRchivo); fscanf (confí, "'/,5\nHj aHpiitud); fscanf (confi, u/.5\n", tiempo); fscanftconfij "7,s\n" , dívisionesv}; fBcanf (confij "ZsNn", dÍYÍ5Íone&t); fscanfíconfi, "X5\n', eHtradaJj f5canf(confi, "Zs\n", sñlida); fscanf (confij "Xs\n", pEriodo); fscanítconfi, "ZsV, KP); fscanfíconfi, "Xs\n", KI)¡ fscanftconfi, "Zs\n", KD]¡ fscanífconfi, "XsNn", Reí); fscanftconfi, "Xs\n% CoefbtO]}) fscanffconfi, '7,s\nBJ CoefbEi]); fscanftconfi, "ZsNn", Coefb[2])} fscanííconfi, 7,s\nH, Coefb[3}]; íscanficonfi, "Zs\n", Coefb[4J); íscanftconfi, ":Í5\nHJ Coefb[5])j fscanftconfi, "ZsNn", CoBfa[J]); fscanftconíi, '75\n", Coefa[2]); fscanftconfi, "Xs\n", Coefa[3]); fscanftconfi, "Xs\n", Coefat4])j -fscanflconfi, "XsVn", Coefa[5]); fscanftconfi, "JÍ5\nM, LJ; fscanftconfij "X5\n", B}¡ fscan-Uconfi, J7.s\nn, A}; Iscanf (confij "X5\n n , Itaax); fscanfíconfij "X5\n", Umin)j fclose(confi); A(r¡píitud=atof (ahplitud); tieapD=atoí (tiempo) ; - 105 divisionest s atof(dlvisionest); divisionesv=atoí(dIvÍ5ÍonEsv); entrada=atof(eNtrada); 5alida=atof [sAHdaí j perioda=atof[pEriodoJ; kp=atof(i;P); ki=atof(Kíij kd=atof(KDJ¡ rEf=atoí(REÍ); coEfa[5]=atof(Coefa[5]}; coBla[4]=atoflCoi?fa[4])j coefa[3]=atof(Coefa[3]}; CDBÍa[2]=atoí(CoefaE2)Ji coEfa[i]=atof(CoBÍa[i]í¡ cofifb[5]=atof(CüBfb[5])¡ coEfb[4]=atof(CoBfb[4])j coefb[33=atof(Coefb[3]); coBfb[2]=atoí(CoBfb[23Ji coBÍb[i]=atof(Coeíb[l]]; coeíb[0]=atoí(Coeíb[0]}¡ l=atoítLíi bb=atoí(8); aa=atof[A)j Uiax=atof(Ufflax]¡ uain=atDÍ(Uinin); ;t— /t /t TESISíCQHTROL DIGITAL DIRECTO n /t /t /i /i /t /t_. Autor: Patricio Fustillos P, Programa IHSTRU.EXE Y COHTROL.EXE Kódulo FUHC.CPP Ultina ilodificaciún: 15/03/94 *f )/ \l M \l t/ ÍV t/ t/ __ t / Sindude (diath.h) 3include<5tdarg.h> flindude (stdlib.h) Sinclude <graphics.h> linclude Cstring.h) linclude <strstrea,h> Sindude <dos,h> lindude <stdio,h> tindudB<conio,h> void dibujabordEÍánt right, ínt left,int botto(n,int top ); voíd díbujaeje(int altojint ancho}int right,int left,int bottom,int topjíloat divisionestjfloat divÍ5ÍonE5Yjf]oat Amplitud, int VBCBSJ íloat tiempo); void graíicos(íloat divisionesv,íloat divisione5t,f]oat tiempo,float AmplitudjChar ítitulo, int vecesjint var}¡ íloat coíi5eguir_ties»po(void); int g p r i n t í f int íxloc, int t y l o c j char íímt, ... ); - 106 f l o a t unidadx, unidad)1, yjnaxj //FUNCIONES DE USO GENERAL void graficostiloat divisionesVjíloat divisionest^Ioat tiempo, float Amplitud, char Uitulojint var) ( struct viewporttype vp; ínt «axXjflaxYjanchOjaltDjXijylj ííoat amplitud; ai3p]itud=Ai3plitudí255, 0/10,0; veces, int cleardevicedj 5etvieMport(0,0,ínax!í,ísaxY,l); getviBHsettingsíítvpli settextstyletBHALLJONTjHORnjIR^Ji xi=0j yi=vp.boítoin-vp,top"texthBÍQht( n h ! ']; gprintff&xljítyi, "Presione una tecla para terminar...") j 5etviewport[0J0JflaxMJ[(n3>!Y-[textheÍ9ht[1!MH)+2})fi); ., getviewsettingsíivp); dibujaborde(vp,rightj vp.leít, vp,bottojn, vp.top )j // Escribir e! encabezado settextstyletTRIPLEXJOHTjHORIZJIRjlJi setcolor(2J¡ aIto=tBxthBightt"tt"J¡ xi=(vp.right-vp.lBft-15tancho)/2j yi=2íalto+2i gprintílítxJjítyl, titulo); settexlstylBÍSHALLJONT^ORIZJIR^Jj alto=tBxthBÍght["H"]j ancho=textHidth( l f fl"J¡ dibujae je [al to , ancho, vp,right,vp,]eft,vp,botto/iijVp.top,divÍ5ÍonB5tjdivisione5V, Amplitud, veces, tiempo); //Escribir los valores en los ejes xi=2íancho; gprintf [kxi^yi," Amplitud 11 ) j xi=2íancho; yi=5í-altoj gprintfUxi^yl/fvoltios)"); xí=vp.right-Yp.left-17í ancho; yl=vp.bottoji-vp.top-3taltoj gprintí (ítxJ ,{tyl , "Tiempo 11 ) j xi=vp,right-vp. leí t-iOÍ ancho; yl=vp.botto«-vp.top-3íaltoi gprintí(ixI J í t yi J "(Segundo5) 11 )j xl=2tancho¡ yl=7talto¡ outtextxy(2tancho,vp,bottofli-vp.top-9taUo J "0 H Ji gprintí fi-xl, ¿y 1, "/,, 3f", Amplitud ) ; xl=vp.right-vp.left-10t ancho; - 107 yi=vp.bottoirrvp.top-7íalto; xi=7íanchoj yi=yp,botto0i-yp,tüp-7íalta; gprintf(Í(XÍ,ícyl,'7"3f' l jtienpGÍfloat(veces-i)]; if[var==JJ í xi=35tanchoj yi=vp,bottoflrvp.top~4íalto; BLANCG=SAUDñ M ); gstvieHSBltingsUvp) ; getvieHsettingsUíVp); unidady=(vp.bDttom-vp.top) /amplitud; unidadx=(vp.right-Yp.Jef U/ (tiempo íj yfnax=(vp.botto/s-vp,topj; /i t/ /í GPRINTF: Usado CQOÍÍG el PRíNTF excepto que la salida es enviada a ¡\a en íüodo gráfico a especificadas coordenadas t/ /í \ int gprintf( int í vajist argptr; char str[í40]j int cntj va_start( Í/ , int tyloc, char tííritj .,, ) /t Argument list pointer í/ n Buffer to build sting into t/ /í Result of SPRIHTF for return í/ fat cnt = vsprintfí str, f«t, argptr )¡ outtextxyf hloc, íylocj str ); íyloc += tej¡th5ight[ "Hn ) + 2; /? Initialize va_ functions í/ l\. prínts string to buffer \ ¡\d string in graphics made t/ /t Advance to next line í/ va_endí argptr ); /í Cióse va_ functions í/ returni cnt ); /í Return the conversión count í/ f l o a t conseguirjáefñpoívoid) f unión REGS interrupcionjüeispo; f l o a t Lieíiipo^sBgundos; float centesi(iias_5Bgundo; f l o a t horas; interrupción,h,ah=0)!2c; in tdos( ^interrupción, Stieispo) ; cBntB5Íma5_5egundo=tiefripo,h.dl; hora5=tiefi)po.h,chi tiecípo_segundos=hora5l3¿00 ttieiípo.h.el í60+tiempo.h,dh+centesiiia5_segundo/100i - 108 returní tieíRpo_5egundos); l\A QUE DIBUJA UN BORDE EN EL VIEHPQRT ACTIVO \¡ void dibujaborde(int right, int leftjint botto/íjint top ) setcolort LI6HTBLUE ]; setlinestylet SOLIDJ.INE, O, NQRHJlíQTH ); r e c t a n g l e í O, O, r i g h t - l e f t , bollon-lop ) ; void d i b u j a e j e t i n t a l t o , int ancho, i n t r i g h t , i n t l e f t , i n t bollón, int divisionesVjfloat Amplitud, int veces, float tiempo) top , float divisionestj íloat í int í l a x C o l o r S j X l j y l j d j íloat Divisionest,DivÍ5Íonesv; HaxColors=gBtiaaxcolor[); setcolorí MaxColors - 3 ) j Iinei8t ancho ,8taHo-2, 81 ancho, boltoa-lop-8taltol; 1 ine (8 íancho, bollo»- top-Staltojright-lBÍt-Bt ancho, bottom-top-8 t a i t a ) ; BBtcolor[ HaxColors-4); SEtlinestyletDOTTED_LIHE l O I NORHJIDTHÍj DivisÍDnest=(right-left-i¿Íancho)/ di visiones t; for(d=í;dtDivisionest <= (right-leít-Uiancho-í) j { xl=Divisionestíd-t-Bíanchoi yi=bottoís-top-7taltoj gpr in tí ( í t x i ^ y l j ' Z . S f j tiempo/di vi sionestí dt ti ejnpottloatlveces-l) ) ; I ine( Di visiones tí dianchol;8jbQttoííi-top-8í a lio. Divisiones tíd-t-anchoí8j 8} a l t o ) ; } Divisione5V=(bottoffi-top-16tBHo)/divÍ5Íone5V+l; íor[d=ljdtDivisionesv (= ( b o l l o n r l o p - U í a l t a j j d H ) í xi=ancho; y]=bottoiirtop-8íaHo-DÍYÍ5ÍonB5vtd; gprintfíítxlj&yl/JÍ.SfjAflpIitud/divisianesvtdí; lÍne(2nchof8jbottDri-top-8t3lto-DivÍ5ÍoneBVÍd,right-left-8íancho,bottofli"top"8Í5ltD-DivÍ5Íone5víd); } setcolor(i5); - 108 return(tieínpo_5egundos); /í RUTINA QUE DIBUJA UN BORDE EN EL V1EHPQRT ACTIVO í/ void d i b u j a b o r d e [ i n t right, int l e f t j i n t bottoín,int top ) S B t c o l o r t LIGHTBLUE ); s e t l i n E s t y l B Í SOLIDJ.INE, O, NORHJÍIDTH )¡ r s c t a n g l B t O, O, r i g h t - l e f t , bottom-top ); void d i b u j a B J B Í i n t a l t o , i n t a n c h o j i n t r i g h t , i n t Í B Í t , i n t botto/n,int t o p , f l o a t divisionest, divisionesVjf loat A m p l i t u d , int VBCES, f l o a t tiempo) í int haxColorSjXljy^d; í l o a t DivisionestjDivisionesvj Ha)¡Colors=getfiaxcolor{}i setcolort tlaxColors - 3 ); 3irie(8ÍBnchOjBíalto-2,Bíancho,bottofii-top-8talto); lineíSí ancho jbottofn-top-atalto,right-lEU-8lancho,bottQfB-top-at3lto); line(right-leít-8í ancho j8ÍaHo-2,riqht-lEÍt-aíancho,bQtto(it-top-atalto)j setcolort t-laxColors- 1 !)) 5BtlinBstyle(DQTTEDJ.IMElOINORMJIDTH)i DivisionBst=(right-lBÍt-i6íancho)/ divisionestj íor(d=í;dtDivÍ5ionest (= í r i g h t ~ I e f t - í ó í a n c h o ~ i ) ; d + + ) ( xl=DivisÍonBsttdiBt3ncho; yi=battoís-top-7íalto,' g p r i n t f ( I t x i ^ y i j ' X . S f " , tiempo/divisiones tíd-HÍBsipotf loat [VECES-!] ]; 1 i ne( Di visiones tíd-fanchoÍ8,bottoín-tQp-aí a I t O j Divisiones tid-f-anchoí8,8í a l t o ) ; } DivÍ5Íonesv=íbotto(fi-top-i6talto)/divÍ5Íonesv-i-lj for(d=ijd)DivisionBsv (= {bottoiB-top-lfiíaltoJjdHj { xl=ancho; yi=botto,ii-top-3íalto-DÍYÍ5Íone5vtd; liíiBÍanchoíSjbottoíi-top-aíalto-DivisionBSvtdjright-lBÍt-Síancho^ottoffi-top-BiaHo-Divisionesvtd); setco!or(i5); } -float - 109 - f/ \l I/ / 1- n n n n n ¡\ TESISíCONTROL DIGITAL DIRECTO Autor: Patricio Fustillos P, í/ í/ í/ Programa CONTROL. EXE HóduJo FNGCONTR.CPP UUiffia liodificación: 15/03/9-} í/ í/ t/ /í /i~ .— t / Sdefine Sdefine Idefine Sdefíne Sdeíine fidefinE Sdefine tfdEÍine SdEÍinE Sdeíine Sdefine SdeíinE Ideíine Sdefine Idefine üdefine Sdefine Sdefine fídefine Use5_TKBy5 UsBS_Tfipplication UsesJEvent UsBS__TRect UsB5_TDia3og UsesJButton UsesJTHemiBar U5es_TSubí1enu UsesJ'henuItB» UsesJTStatusLine U&esJStatusIte» UsesJStatusDef UsE5_TDEskTop Uses^hsgBox UsESJFChDirDialog U5e5_THistory UsesJÍHindoH UsesjInputLine Uses TLabel /t ARCHIVOS .H A SER LLAMADOS í/ íinclude "control! ,h" 'include <fsai:h,h> SincludE<Btdarg,h> Hnclude (stdlib.h) íinclude <string.h> jfinclude <strstrea,h> 8inc!ude <dos,h> Kinclude <stdio.h> Sinclude (conio.h) Sinclude "cslc.h" linclude <graphícs.h> Hnclude <ctype,h> char aRchivo[9], sHplitud[6], float Aíiplitudj üeapo, char aboutHsg[80]j int x j void TBGIApp;:doTieiítpo(} í tle/npoUO], divisionest, dlvisionEstEé], divísionesv, entrada, dlvisionesv[6] , salida, periodo; eNtrada[6], sAlida[6], - 110 char s[20]¡ TDialog td = new TDialogfTRecUO, O, 50, 8), "Ingrese Tiempo"); d~>Gptions ¡= ofCentered; // Botones d->insert(nen TButtoní TRect(25, 5, 35, 7 ) , "Cancel", onCancel, bfNonaal) ); d-MnserUnew TButton[ TRectfH, 5, 24, 7), "G^r", cisOí;, b f O e f a u l t J ); // Linea de ingreso del valor TInputLine t-Tien = new TlfiputLineí TRect(l¿, 3, 34, 4), 20 )¡ d->insert( Tiem }; d->insert[neH TLabel(TReci( 16, 2, 34, 3 ) ,. "^Tiempo" (Segundos)", Tiea ) ) j d-Mnserlínew THistDry(TRect(35, 3, 38, 4), Tiem, hlDoTiempo] ); s t r c p y í s j tiempo); d->SBlData(5)¡ ' d = (TDiaiog í) v a l i d V Í B M ( d ) ; if (d != HULL) í if (deskTop->execVÍBw(d) =- cmOKJ í d->getData(s]) í iílisdigitlsW) ¡I 5[x] == '.'}{) eíse ( strcpytabouíHsg, "\):3 Ingresado dato alíanumérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultimo valor"); laessageBoxtabDUtHsg, míError ¡ «fOKButtonlj strcpyts, tiempo); break; s¡ tiempo = a f c a f ( t l e n p o ) j } destroyt d ]j void TBGIApp: ;doArchivo() í char s[10]¡ TDialog íd = nsw TDialog[TRect(0, O, 50, 8), "Nombre Archivo"); d->aptions j= afCentered; // Botones d-)insert(new TButtonl T R e c t ( 2 5 , 5, 35, 7 ) , " C a n c e l " , coCancel, bíNormal) ) j d-)ins8rt(ne M TButtonf TRectíH, 5, 24, 7), "frr", CínQ};, bíDeíauit) } ; // Linea de ingreso del valor TInputLine íTien = new TInputLineí TRect(i6, 3, 34, 4 ) , 10 ); d-)insert( Tiem ); d-Mnserttnew T L a b e l ( T R e c t ( 16, 2, 34, 3 ), ^Ingrese Nombra*)", Tie» )); d~>in5ert(new THistory{TRect(30 3 3, 33, 4 ) , Ti en, hlDoArchivo)); - 111 strcpy[s, aRchivo); d-)setData(s)i d = (TDialog tj validView(d)j if (d != NULL) í ií (de5kTop->execl/ÍBWÍd) == craGK) í d->getData(s); strcpyíaRchivo, s)j } destroyf d ); } í void TBGíAppi ¡doAropl itud[) í char t[6]j TDislüg te = new TDiaIog[TRect[0, O, 50, 8), "Amplitud en Pantana"); e~>option5 í= ofCentered; // Botones e->insert(neH TButtont TRect[26, 5, 36, 7), "Cancel", cnCanceJ, MNonnal) ); e->insert(new TButtont TRecttiS, 5, 25, 7), "OT", cM, bfDefault) ); // Linea de ingreso del valor TlnputLine ífinpli = neH TinputLine( TRect(iI, 3 5 29, 4 ) , ó ); e-)insert[ ftnpli ); e->insert( nsw T L a b B l ( T R e c t ( J2, 2, 31, 3 ), "Amplitud* ( V o l t i o s ) " , Ampli }) e-)insert:ínew THistory(TRect(30 ( 3, 33, 4 ) , ftmpli, hlDoAmplitud) J; s t r c p y t t , aHpHtud}; E->setData(t]j e = (TDíaJog i] validView(e) ; if (e != NULL} { if (deskTop->BxecViewU) == cmO);] í B->getData(t)i C H U s d i g i t l t h ] ) ¡! t[x] « ' . ' ) ( } else í strcpyiaboutHsg, "\x3 Ingresado dato alíanumérico \n\n\x3 Inténtelo Huevanente \n\n\x3 Hantenido Uitl/íio valor"); messagePoxíaboutHsgj infError ¡ wlOKButtonJ; strcpyft, atipíítud}; breakj strcpyfaHplitudj t)} Amplitud = atof (aHplitud); - 112 - destroyt e J j void TBGIflpp::doXdivÍ5Íones() í char u[¿3; TDialog Id = nen TDialogíTRectfO, O, 50, 8), "Divisiones* en Pantalla"); d->options ¡= ofCenteredj // BotonES d->inserUnew TButtont TRect[2¿, 5, 3¿, 7), "Cáncer, cnCancel, bíNormal) ); d->insert(new TButtont TRecttiS, 5, 25, 7), "(Ti:*", caOK, bfDeíault) ); // Linea de ingreso del valor TInputLine íXdiv = nen TInputLine( TRect(i9f 3, 30, 4), 6 ); d-MnserU Xdív ]; d-Mnsertínew TLabel [TRectl 18, 2, 32, 3 ), "^divisiones", Xdiv ])j d-)insert(neH THistoryíTRectíSlj 3, 345 1), Xdiv, hlDoXdÍYisiones)); strcpyíu, divisionest) ; d~>setData{u); d = [TDialog í) vaüdVieH(d); ií (d ¡= HULL) ( if (de5kTop-)execView(d) == caOK] ( d->getData(u)¡ íor(x=0;u[x3;++x) í iflisdigitluCx]) i¡ u[xl == ',']{} el se í strcpyíaboulhsg, "\x3 Ingresado dato alíanunérico \n\n\x3 Inténtelo Huevaaente \n\n\>:3 Mantenido Ultimo valor"); me55ageBoí;(aboutll5g, nfError ¡ nfOKButton]; strcpy(u, divisionest); break; strcpyídlvisionest, u); divisionest = atof (dlvisioriEst) ; } destroyí d ]; void TBGIApp:;doYdivisiones(} { char v[6]¡ TDialog td = new TDialog(TRBct(0, O, 50, 8), "DivisionesY en PantallaM) d->options í= oíCentered; // Botones - 113 d->insert(neH TButtont TRect(2ó, 5, 36, 7], "Cancel", cmCancel, bf Normal) ); d->insert(new T8utton( TRect[15, 5, 25, 7J, "OT", cnOK, bfDefault) ); // Linea de ingreso del valor TInputLine ÍYdiv = ñau TínputLinef TRect(i9? 3, 30, 4), 6 }j d-)insert( Ydiv ]; d-)insert( new TLabel(TRect( 18, 2, 32, 3 }, "^divisiones", Ydiv ))¡ d-Mnsertínew THi5tory(TRBct(3i, 3, 34, 4J, Ydiv, hlDoYdivÍ5Íone5]] ; strcpyív, dlvisíonesv); d-)setData(v); d « (TDiaíog tj validView(d); ií (d != NÜLLJ í ii (dE5kTop->exEcViewíd) == cisOK) ( d->getData(v)i i - f ( i s d i g i t t v [ x 3 ) í ! v t x ] == ' . ' ) { } else í sfcrcpyíaboutKsg, "\x3 Ingresado dato alíanumérico \n\n\x3 Inténtelo Huevamente \n\n\x3 Mantenido Ultimo valorM; messageBoxíaboutHsg, níError ¡ nfOKButton] j strcpyÍYj dlvisionesvjj break; strcpyídlvisionesv, v); divisionesv = atof [dlvisionesvj; > destroy( d ) ¡ /t rutina que nos pénate setear el valor del PÓRTICO DE ENTRADA de 8 bits, que debe ser ingresado en decimal. Además esta función nos permite recordar el últifio pórtico que íué utilizado í/ void TBGIApp;;doEntrada(} ( char w[43i TDiaiog íd = new TDialog(TRect(0, O, 50, 8], "Pórtico Entrada (Decimal}"); d-)optíons != oíCentered; // Botones d-Mnsertínew TButtoní TRect(26, 5, 36, 7), "Cancel", cmCancel, bíNorroai; d->insert(new TButtoní TRect[i5, 5, 25, 7), "OT"1, cmOí;, bfDefault) )} // Linea de ingreso del valor TInputLine ÍPort = new TInputLinei TRect(20, 3, 30, 4), 4 ); d->in5ert( Port ); - 114 d-Mnsertínew TLafael(TRect( 20, 2, 30, 3 J, -Aórtico", Port ) ) j d->insert(new THistory(TRect[3i, 3, 3-1, 1), Port, MDoEntrada)} \, eNtrada); d-)setData(n)) d = (TDialog í) validView(d); ií (d != NULL) í ií [de5kTop->EXecViewídJ == cnOKJ { d->getData(w); ií(isdigit(n[xj)){} else í 5trcpy[aboutMsg, "\x3 Ingresado dato aHanumérico \n\n\x3 Inténtelo Nuevamente \n\n\x3 Mantenido Ultimo valor"}; «essageBoxtaboutHsg, mfError ¡ «fOKButton) j strcpyÍH, eHtradaJ; breakj strcpyíeNtrada, H] j entrada = atof (eNtrada) j } destroyt d ]j /t rutina que nos permite setear el valor del PÓRTICO DE SALIDfi de B bits, que debe ser ingresado en decimal. Además esta función nos perraite recordar el último pórtico que fue utilizado t/ void TBGIApp:;doSalidaí) í char s[4]; TDialog id = nen TDialogíTRectíO, O, 50, 8), "Pórtico Salida (Decimal } H J ; d-)options í= oíCentered; // Botones . d-MnserUneH TButtont TRect(26, 5, 36, 7 J , "Cancel", csCancel, bfHoraai; d-)insert[new TButtoní TRect(15, 5, 25, 7), "OT", cnOK, bfDefault) ); // Linea de ingreso del valor TInputLine íSal = new TlnputLineí TRectUO, 3, 30, -1], t\; d-MnserH Sal ); d->insert(neH TLabeliTRectí 20, 2, 30, 3 ), "Aórtico", Sal )); d->in5ert(new THÍ5tory(TRect(3í, 3, 3"}, 4), Sal, hlDoSalida))] strcpy(s, sfilidsjj d->BetData(s]j d = [TDialog í) validViBWÍdJj ií (d != MULLÍ í ií (desl;Top->execView(d] == cnOK] ( d->gelData(5)i - 115 - if(Í5digitís[>;]} ){} else í Btrcpyíaboutílsg, "\j[3 Ingresado dato alíanuméricD \n\n\x3 Ultimo valor"]; Inténtelo nuevamente \n\n\x3 Mantenido fnessageBoxUbautHsg, tr¡f Error ¡ fBfQKButtonJj strcpyts, sftHdaJj breakj strcpyísAlida, sj; salida = atof(sAlida) ; } destroyí d ); voíd TB6IApp:;doPeriodo{) í char c[iG]j TDialog id = new TDjalogíTRectíO, O, 50, B), "Periodo"]; d-)option5 ¡= oíCentered; // Botones d->insert(new TButtonl T R e c t ( 2 6 , 5, 36, 7 ) , "Cáncer, onCancel, bíNormal] ]; d-Mnsertínew TButtont TRsctíiS, 5, 25, 7], "0^", oitüK, b f D e f a u l t ] J; // Linea de ingreso del valor TlnputLine ÍPe = new TInputLinEf TRectdO, 3, 37, 4 ) , 10 ) j d-Mnsertí Pe )j d-)in5ert[new T L a b e l í T R e c t t 10, 2, 37, 3 ], ""Período de Huestreo ( m s e g ) " " , Pe ) ) ; d-)in5ert(new THÍ5tory(TRect(42, 3, 45, 4 ) , Pe, hlOoPeriodo}}; strcpylc, pEriodo); d->setData(c); d = (TDialog i) yalidViewídJj ií (d != NULL] í ií ídeskTop->execVieH(d) == cinOKJ í d->9BtData(c)¡ í iflisdigit[c[x]J !', c[x] == '/JO else g, «\x3 Ingresado Ultimo valor" dato alíanuiérico \n\n\x3 Inténtelo Huevante \n\n\x3 Hantenido g, niError 1 BfOEButtonli strcpytc, pEriodo); breai;; s t r c p y [ p E r i o d O ) c}; _.-v« «define UsesJStatusDef üídefine Uses^TDeskTop ¿ne UsesJTChDirDialog ^ " sJHistory s_TWindow - 116 periodo = atof (pEriodo); iííperiodo < 10) { strcpyíabDutMsg, "U3 El período de muestreo es auy pequeño \n\n\x3 El mínimo es 10 ms, \n\n\x3 Valor Guardado 10 ÍES."); messageSoxfaboutHsgj ufError í ítifOKButton); strcpyípEriodo, M iQ"}j periodo=10,0j destroyf d )j void TBBIApp::ca]cu!ator() ( TCakulator tcak = (TCakulator I) validVÍBH(new TCalculator)j iítcalc i= 0) desUop->in5ertíc3k); /1 /í. /t /I /í /t /t n /t /+ TESISiCüNTROL DIGITAL DIRECTO Autor: Patricio Pústulas P. Programa CONTROL.EXE Háduio HEHUCON.CPP Ultiaa Hodificaciún: 15/03/94 /í DECLARACIÓN DE OBJETOS A SER UTILIZADOS EN EL PROGRAMA í/ Bdefine Sdefine fdefine Ideíine Idefine íídefine Usesjteys UEesJApplication Uses^TEvent Uses^TRect UsesJDialog UsesJButton fideíine UEes_TSubhenn Sdefine Uses^Tilenultera Pdeíine UsesJStatusLine Idefine UsesJStatusUen \e UsesJStatusDef , •. Sdefine Use5_TDesí;Top \\ldefinB UsesJsgBox Sdefine UsesJÍChDirDialog fdMinB UsesJFHistory Sdefine Uses THindow - 117 «define UsesJFÍnputLine idefine Uses TLabel /í ARCHIVOS ,H A SER UftHADOS II linclude <tv.h> iinclude <(nsth,h> Üinclude <stdarg,h> Üinclude "controll.h11 Sinclude <stdlib.h> Sinclude <graphics.h> Iinclude <5tring.h> fiinclude <strstrea.h> Sinclude <dos,h> iinclude <stdio.h> Sinclude <conio,h> void T8GIApp::handleEvent(TEven(:í{ event) { char abouthsg[80]; TApplicatÍQn::handleEvent( event]; snitch (event.what) case (event. message.cominand) case cínAbDUtBox: //mensaje de información inicial 5trcpy(aboutHEg, 1! \x3 CONTROL DIGITAL DIRECTO \n\n\x3 29/02/9-1 \n\n\j¡3 Por; Patricio Fustillos P . " ] ; ffieBSsgeBoxtaboutHsgjflílníornation! nfOKBultonJj break; case cnDoCalculadora: calculatorilj break; case craDoTietripo: doTieapoO; break; case cjfiDoA.Dplitud; doAmplitudO; break; case cffiDoJídivisiones; doXdivisioneslJj breakj case cniDoYdivisiones: doYdivisiones{)¡ break; case cnDoEntrada: doEntradaí); break; - 118 case csiDoSalida: doSalidaOj break; case CfflPIDO; PIDDdJi breakj case ofiPIDDA; PIDDÍ2); break; case cflPIDI; PIDIÍilí breakj case cinPIDIA: PIQIÍ2); break; case cmEcuacionesD: EcuadonesDfiJ; break; case císEcuacionesDA; EcuacionesD[2J¡ break; case cmEcuacionesl; Ecuacioneslli); break] case cmEojacionesIA: Ecuacione5l[2); bresk; case cmOnoffD; OnoífO(ií) break; case CfflOnoífDñ: Ono1íD[2); break; case cwOnoffl: Onoííí(i); break; . case cinOnoífíA: OnofíI(2Ji break; csse cisDeadD; DeadD(l); breakj case CíüDeadDA; DeadDí2)j break; case C R i D e a d I : Deadl(l); breakj case craDeadlA: - 119 Oeadl(2}; breakj case cffiDoPeriodo: doPeriodoO ¡ break; case caDoArchivo: doArchivoO ¡ break; deíault : return; > break; default: return; } clearEventíevent); THenuBar ÍTBGIApp::inith J enuBar(TRect r) { r . b . y = r . a . y + i; return nen THenuBarf r, íneví TSubMenuf B *\xFÜ v ", hcNoContext ) + ínew TMenuIteirií ""Pnfonaadón../, cmAboutBox, kbNoKey, hcNoContext ) * ínew THenuIteuit ""C^a leu ¡adora", cjnDoCal cu] adora, kbfíol'ey, hcNoContext ) + tnew T«enuItBB( " v S' v aUr w J cínQuU J kbfllUjhcNoContBxt/Alt-X" ) + tnew TSubHenuí TTD", hcNoContext ] i tnew TMenuItent ""P^ID Definida", cmPIDD ; kbFi, hcNoContext, "Fi" )f ínew Thenultemí "P^TD Deíinida-ftrchivo B , cmPIDOA, k b S h i f t F l , hcNoContext, "Shift-Fl 1 )f tneH TMenuIteraí "PK'D" Indefinida", cmPIDI, kbCtrlFi, hcNoContext, "Ctrl-Fl" )t tnew Thenulten( "PID IVdeíinida-ftrchivD", CínFIDIA, fcbAHFl, hcHoContext, "filt-Fl" ) + ínew TSubMenuí'^cuadones de Diferencias", ncNoCantext}*tnew T«BnuIteisí"^cuadón D e f i n i d a " , onEcuadonesD, kbF2, hcNoContext,. "F2" ) + ínew TMenuUe¡E("E'Vu3dón Definida-Archivo", cinEcuacionesDA, kbShiftFS, hcNoContext, H Shiít~F2" ) íneH THenuIteaCEcVadón I n d e f i n i d a " , cmEcuadonesI, kbCtr!F2, hcNoContext, "Crtl-F2" Jf ÍneM Thenulteraí"Ecu' v a' v ción Indef inida-Archivo B J cntEcuadonesIA J kbAltF2, hcNoContext, H Ait-F2" Jf ínew TSubfienuí "OtV^B", hcNoContext 1 i ínew Thenulteftí tneH TSubMBnu( I I V 0*n-Ofí" 5 hcHoContext) + ínew Ttíenulteíaf "*0vn-0f f D e f i n i d a " J CBiOnoffD, kbF3, hcNoContext, M F3 H )t ínew THenuItsíaí "O^n^-Off Definida-Archivo", cnOnofíDA, kbShiftF3, hcNoContext, "Shift-F3" ) + tnew Tfíenultenl "On-O^f^f Indefinida", cmOnoffl, kbCtrlF3, hcNoContext, "Ctr!-F3 fl )t ínew THenuItent fl ün-üff "I^definida-Archivo", csiOnofUA, kbAHFS, hcNoContext, "ñlt-FS" )) + ínsw Tttenulteuí ínew Tíienulteír f ( "TahÜns Definido", c/nDeadD, kbFI, hcNoContext, "F4" )f tnew TMenuItenit "DVhl ins Definida-Archivo", cmDeadDA, kbShiítFÍ, hcNoContext, K Shift-F1" ínew THenuIteret "Da^lins Indefinida", cííiDeadl, kbCtrlF-5, hcNoContext, "Ctrl-FV }* ÍOBH TMenuIteraf "Dah v lMns Indefinida-Archivo", c/nOeadlA, kbAHF4, hcNoContext, B Alt-F4" )) TSubflenut^O'-pciones de Graficos",hcNoContext)-iTtlenulteiüí ínew TSubíiBnut "P^antall a" ,hcHoContBxtJ + tnew TNenuIte/ii( l "'A v íriplitud 1 ' J caiDoAmpIitud, kbAHA, hcNoContext, "filt-A" )f ínew TMenuítenl tnew TSubMenu("' v D J V ÍYÍsiones n ,hcNoContext]t I - 120 tnen TMenuItefliC'divisiones-eTErj onDoXdivisiones, k b A l U , hcNoContext, "AK-J" } + ínBH TUenuIteíiC'divisiGnes-'VolUos' 1 , onüoYdivisiones, k b A l t V , hcNoContext, "Alt-V Í J H TtÍEnuItercí '"Tiempo" , cmDoTie.Tipo, kbAHT, hcNoContext, "Alt-T" )+. THenuItent "Periodo", cíaDoPEriodo, kbftltP, hcNoContext, "filt-P" ) + í-new THBnuHeffif "Archivo", ouDoArchivo, kbAItC, hcNoContext, "Alt-C" ) + ÍHBK TSubfienuC'Pórtico^^^hcNoContextJf ÍHBW THenuIte/nC^P^órticD E n t r a d a " j onDoEntrada, kbF5, hcNoContext, "F5" )f tnew THenuIteui("Pórtico Calida", cmOoSalidaj kbFÓ, hcNoContest, "F6" )); TStatusLinB tTB6IApp:;initStatu5ÜnBÍTRBct r) í r.a.y = r.b.y - ij return new TStatusLinef r, ÍDBH TStstusDeft O, OxFFFF S + ínen TStatusItBflt """Alt-X 1 * Salir", k b A l U , cmfluit ) + ínevi TStatusItBifií !! ^Ctrl-Fi v P I D ", h b C t r l F I , oiPIDI ) + ÍOBH TStatusíteín( ! l v Ctrl-F2^ Redes", kbCtrlF2,c«EcuacionB5l) + ínew TBlatusItB»("*Ctrl-F3 1 1 ' Gn-oíí n ,kbCtrlF3,CDDnoff I ] * tnew TStatusItfifr 1 (""Ctrl-Fr Dahlin5 i l I kbCtrIF'í J cniDEadI] + ÍHBH TStatusItewi void TBBIApp'.ioutOíHettoryO í nessageBoxC'Bloqueo de Memoria.", wfError ! /riíOKButton);