T11940pt.2.pdf

Anuncio
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);
Descargar