49 FPosicionTurbina = 61.08;
51 FDistanciasVastago = NULL;
61 delete[] FDistanciasVastago;
67 void TTGV::LeeDatosEntrada(
char *Ruta, FILE *fich) {
73 for(
int i = 0; i <= (int) strlen(Ruta); i++) {
74 DatosTGV[i] = Ruta[i];
77 fscanf(fich,
"%s ", &FileTGV);
78 strcat(DatosTGV, FileTGV);
80 FichTGV = fopen(DatosTGV,
"r");
81 if((FichTGV = fopen(DatosTGV,
"r")) == NULL) {
82 std::cout <<
"ERROR: Fichero de TGV no cargado";
84 fscanf(FichTGV,
"%lf %lf %lf ", &FKc1, &FKi1, &FKd1);
85 fscanf(FichTGV,
"%lf %lf %lf ", &FKc2, &FKi2, &FKd2);
86 fscanf(FichTGV,
"%lf %lf %lf ", &FCorr0, &FCorr1, &FCorr2);
87 fscanf(FichTGV,
"%lf %lf %lf ", &FCorr4, &FCorr6, &FCorr8);
88 fscanf(FichTGV,
"%lf %lf ", &FCorr10, &FCorr12);
89 fscanf(FichTGV,
"%d %d ", &FNumeroDatos_Regimen, &FNumeroDatos_Mf);
91 FVector_Mf_mapa =
new double[FNumeroDatos_Mf];
92 FVector_Regimen_mapa =
new double[FNumeroDatos_Regimen];
94 FMapa_PosicionTurbina =
new double*[FNumeroDatos_Mf];
95 FMapa_Padmision =
new double*[FNumeroDatos_Mf];
96 for(
int i = 0; i < FNumeroDatos_Mf; i++) {
97 FMapa_PosicionTurbina[i] =
new double[FNumeroDatos_Regimen];
98 FMapa_Padmision[i] =
new double[FNumeroDatos_Regimen];
101 for(
int i = 0; i < FNumeroDatos_Regimen; i++) {
102 fscanf(FichTGV,
"%lf ", &FVector_Regimen_mapa[i]);
104 for(
int i = 0; i < FNumeroDatos_Mf; i++) {
105 fscanf(FichTGV,
"%lf ", &FVector_Mf_mapa[i]);
107 for(
int i = 0; i < FNumeroDatos_Mf; i++) {
108 for(
int j = 0; j < FNumeroDatos_Regimen; j++) {
109 fscanf(FichTGV,
"%lf ", &FMapa_PosicionTurbina[i][j]);
112 for(
int i = 0; i < FNumeroDatos_Mf; i++) {
113 for(
int j = 0; j < FNumeroDatos_Regimen; j++) {
114 fscanf(FichTGV,
"%lf ", &FMapa_Padmision[i][j]);
120 FDistanciasVastago =
new double[8];
121 FDistanciasVastago[0] = 0;
122 FDistanciasVastago[1] = 1;
123 FDistanciasVastago[2] = 2;
124 FDistanciasVastago[3] = 4;
125 FDistanciasVastago[4] = 6;
126 FDistanciasVastago[5] = 8;
127 FDistanciasVastago[6] = 10;
128 FDistanciasVastago[7] = 12;
130 }
catch(exception &N) {
131 std::cout <<
"ERROR: TTGV::LeeDatosEntrada (DLL)" << std::endl;
132 std::cout <<
"Tipo de error: " << N.what() << std::endl;
140 void TTGV::CalculaTurbina(nmTipoControl TipoControl,
double MasaFuel,
double Regimen,
double PresionAdmision,
141 double RelacionCinematica,
double RelExp,
double RegTurboCorr,
double GastoCorr,
double Tiempo) {
143 int contador = 0, x1, x2;
144 double Rendimiento1 = 0., Rendimiento2 = 0., AefecEstator = 0., AefecRotor = 0.;
145 if(TipoControl == nmControlPadm) {
147 MasaFuel = MasaFuel * 1e6;
149 FPresionAdmisionConsigna = Interpolacion_bidimensional(Regimen, MasaFuel, FVector_Mf_mapa, FVector_Regimen_mapa,
150 FMapa_Padmision, FNumeroDatos_Regimen, FNumeroDatos_Mf) / 1000.;
153 FErrorIAnt = FErrorI;
154 FError = (PresionAdmision - FPresionAdmisionConsigna) / FPresionAdmisionConsigna;
163 FErrorI = FErrorI + FError;
168 FI = -FKi1 * (FErrorI);
169 FD = -FKd1 * (FError - FError_ant);
171 if(FPosicionTurbina + FP + FI + FD > FCierreMaximo) {
173 FErrorI = FErrorIAnt;
174 FI = -FKi1 * (FErrorI);
178 }
else if(FPosicionTurbina + FP + FI + FD < 0.) {
180 FErrorI = FErrorIAnt;
181 FI = -FKi1 * (FErrorI);
187 FErrorI = FErrorI + FError;
191 FI = -FKi2 * (FErrorI);
192 FD = -FKd2 * (FError - FError_ant);
194 if(FPosicionTurbina + FP + FI + FD > FCierreMaximo) {
196 FErrorI = FErrorIAnt;
197 FI = -FKi2 * (FErrorI);
201 }
else if(FPosicionTurbina + FP + FI + FD < 0.) {
203 FErrorI = FErrorIAnt;
204 FI = -FKi2 * (FErrorI);
211 FPosicionTurbina = FPosicionTurbina + FP + FI + FD;
212 if(FPosicionTurbina > FCierreMaximo) {
213 FPosicionTurbina = FCierreMaximo;
214 }
else if(FPosicionTurbina < 0.) {
215 FPosicionTurbina = 0.;
218 }
else if(TipoControl == nmControlMasaAire) {
220 MasaFuel = MasaFuel * 1e6;
222 FPosicionTurbina = Interpolacion_bidimensional(Regimen, MasaFuel, FVector_Mf_mapa, FVector_Regimen_mapa,
223 FMapa_PosicionTurbina, FNumeroDatos_Regimen, FNumeroDatos_Mf);
227 FDistanciaVastago = -(FPosicionTurbina - 100) / 8.3333;
228 if(FDistanciaVastago > 12.) {
229 FDistanciaVastago = 12.;
231 while(FDistanciasVastago[contador] <= FDistanciaVastago) {
238 Rendimiento1 = 1.6122 *
pow3(RelacionCinematica) - 3.6641 *
pow2(RelacionCinematica) + 2.0753 * RelacionCinematica;
239 Rendimiento2 = 1.3275 *
pow3(RelacionCinematica) - 3.42625 *
pow2(RelacionCinematica) + 2.1998 * RelacionCinematica;
242 FRendimiento = (Rendimiento1 - (FDistanciasVastago[x1] - FDistanciaVastago) * (Rendimiento1 - Rendimiento2) /
243 (FDistanciasVastago[x1] - FDistanciasVastago[x2])) * FCorr0;
246 Rendimiento1 = 1.3275 *
pow3(RelacionCinematica) - 3.42625 *
pow2(RelacionCinematica) + 2.1998 * RelacionCinematica;
247 Rendimiento2 = 0.6491229 *
pow3(RelacionCinematica) - 2.646368 *
pow2(RelacionCinematica) + 2.2409 * RelacionCinematica;
251 FRendimiento = (Rendimiento1 - (FDistanciasVastago[x1] - FDistanciaVastago) * (Rendimiento1 - Rendimiento2) /
252 (FDistanciasVastago[x1] - FDistanciasVastago[x2])) * FCorr1;
255 Rendimiento1 = (0.6491229 *
pow3(RelacionCinematica) - 2.646368 *
pow2(RelacionCinematica) + 2.2409 *
257 Rendimiento2 = (-0.316970 *
pow3(RelacionCinematica) - 1.5838 *
pow2(RelacionCinematica) + 2.1257 * RelacionCinematica);
261 FRendimiento = (Rendimiento1 - (FDistanciasVastago[x1] - FDistanciaVastago) * (Rendimiento1 - Rendimiento2) /
262 (FDistanciasVastago[x1] - FDistanciasVastago[x2])) * FCorr2;
264 Rendimiento1 = (-0.316970 *
pow3(RelacionCinematica) - 1.5838 *
pow2(RelacionCinematica) + 2.1257 * RelacionCinematica);
265 Rendimiento2 = (-0.20288 *
pow3(RelacionCinematica) - 1.457777 *
pow2(RelacionCinematica) + 2.0414 *
270 FRendimiento = (Rendimiento1 - (FDistanciasVastago[x1] - FDistanciaVastago) * (Rendimiento1 - Rendimiento2) /
271 (FDistanciasVastago[x1] - FDistanciasVastago[x2])) * FCorr4;
273 Rendimiento1 = (-0.20288 *
pow3(RelacionCinematica) - 1.457777 *
pow2(RelacionCinematica) + 2.0414 *
275 Rendimiento2 = (-0.17608 *
pow3(RelacionCinematica) - 1.37028 *
pow2(RelacionCinematica) + 1.8979 * RelacionCinematica);
279 FRendimiento = (Rendimiento1 - (FDistanciasVastago[x1] - FDistanciaVastago) * (Rendimiento1 - Rendimiento2) /
280 (FDistanciasVastago[x1] - FDistanciasVastago[x2])) * FCorr6;
282 Rendimiento1 = (-0.17608 *
pow3(RelacionCinematica) - 1.37028 *
pow2(RelacionCinematica) + 1.8979 * RelacionCinematica);
283 Rendimiento2 = (0.00635 *
pow3(RelacionCinematica) - 1.5031 *
pow2(RelacionCinematica) + 1.79457 * RelacionCinematica);
287 FRendimiento = (Rendimiento1 - (FDistanciasVastago[x1] - FDistanciaVastago) * (Rendimiento1 - Rendimiento2) /
288 (FDistanciasVastago[x1] - FDistanciasVastago[x2])) * FCorr8;
290 Rendimiento1 = (0.00635 *
pow3(RelacionCinematica) - 1.5031 *
pow2(RelacionCinematica) + 1.79457 * RelacionCinematica);
291 Rendimiento2 = (0.39258 *
pow3(RelacionCinematica) - 1.90361 *
pow2(RelacionCinematica) + 1.7190 * RelacionCinematica);
295 FRendimiento = (Rendimiento1 - (FDistanciasVastago[x1] - FDistanciaVastago) * (Rendimiento1 - Rendimiento2) /
296 (FDistanciasVastago[x1] - FDistanciasVastago[x2])) * FCorr10;
298 FRendimiento = ((0.39258 *
pow3(RelacionCinematica) - 1.90361 *
pow2(RelacionCinematica) + 1.7190 * RelacionCinematica))
305 AefecEstator = -1.818 *
pow2(FDistanciaVastago) + 54.4 * FDistanciaVastago + 73.88;
306 FCDStator = AefecEstator / FAEstator;
309 AefecRotor = 59.9801 * GastoCorr - 2.79195 * RegTurboCorr + 0.695835 * RelExp * GastoCorr - 1.30223 * pow(GastoCorr,
310 2.) + 35.9154 + 10.1818 * pow(RelExp, 2.) - 29.9162 * RelExp;
311 FCDRotor = AefecRotor / FARotor;
312 FCDRotor = FCDStator / 1.5;
316 }
else if(FCDStator > 0.8) {
320 if(FCDRotor < 0.11) {
322 }
else if(FCDRotor > 0.8) {
326 }
catch(exception &N) {
327 std::cout <<
"ERROR: CalculaTurbina (DLL)" << std::endl;
328 std::cout <<
"Tipo de error: " << N.what() << std::endl;
336 #pragma package(smart_init)