ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
18 мая
214461 Топик полностью
POV (06.10.2010 15:55 - 15:57, просмотров: 139) ответил ya на код в студию
Вот. Место с иключениями в try выделил символами "<--------------"... void __fastcall TForm1::Timer1Timer(TObject *Sender) { Timer1->Enabled = false; // тут удалил скучный кусок кода чтобы не мешал - этот кусок не менялся 3 года. всё должно работать. да и ломаться там нечему. if (emulation) { ... } else { ... } // анализ стабилизации (по МНК аппроксимирую данные) for (int k = 1; k <= 2; k++) { for (int i = 1 ; i <= numTabs[k]; i++) { if (!VU45[k][i]->execute) continue; int intervalStability = var.FurLoughIntervalStability; switch (VU45[k][i]->GetCurrentMode()) { case modLoad: intervalStability = var.LoadIntervalStability; break; case modBraking: intervalStability = var.BrakingIntervalStability; break; } #define N3Points intervalStability*intervalStability*intervalStability #define N2Points intervalStability*intervalStability #define NPoints intervalStability float z,v,q,p,bb,kk; z = N3Points/3.0 + N2Points/2.0 + NPoints/6.0; v = N2Points/2.0 + NPoints/2.0; // стабилизация расхода if (VU45[k][i]->pressure.size() < (UINT)NPoints) VU45[k][i]->PressureTMStabile = false; else { q = 0; p = 0; for (int j = 1; j <= NPoints; j++) { q += j*VU45[k][i]->GetShiftDiscretFlow(NPoints-j); p += VU45[k][i]->GetShiftDiscretFlow(NPoints-j); } try { bb = (q-p*z/v) / (v-NPoints*z/v); // <-------------- тока тут и в следующей строке исключение случается kk = p/v - bb*NPoints/v; // наклон аппроксимирующей прямой VU45[k][i]->FlowStabile = (fabs(kk) < var.deltaStabilityFlow/NPoints); } catch(...){}; } // стабилизация на выходе установки if (VU45[k][i]->pressure.size() < (UINT)NPoints) VU45[k][i]->PressureTMStabile = false; else { q = 0; p = 0; for (int j = 1; j <= NPoints; j++) { q += j*VU45[k][i]->GetShiftDiscretTM(NPoints-j); p += VU45[k][i]->GetShiftDiscretTM(NPoints-j); } try { bb = (q-p*z/v) / (v-NPoints*z/v); // <-------------- тока тут и в следующей строке исключение случается kk = p/v - bb*NPoints/v; // наклон аппроксимирующей прямой VU45[k][i]->PressureTMStabile = (fabs(kk) < var.deltaStability/NPoints); } catch(...){}; } // стабилизация в голове состава if (VU45[k][i]->pressureHead.size() < (UINT)NPoints) VU45[k][i]->PressureHeadStabile = false; else { z = 0; v = 0; q = 0; p = 0; for (int j = 1; j <= NPoints; j++) { if (VU45[k][i]->GetShiftDiscretHead(NPoints-j) >= 250) continue; z += j*j; v += j; q += j*VU45[k][i]->GetShiftDiscretHead(NPoints-j); p += VU45[k][i]->GetShiftDiscretHead(NPoints-j); } try { bb = (q-p*z/v) / (v-NPoints*z/v); // <-------------- тока тут и в следующей строке исключение случается kk = p/v - bb*NPoints/v; // наклон аппроксимирующей прямой VU45[k][i]->PressureHeadStabile = (fabs(kk) < var.deltaStability/NPoints); } catch(...){}; } // стабилизация в хвосте состава if (VU45[k][i]->pressureEnd.size() < (UINT)NPoints) VU45[k][i]->PressureEndStabile = false; else { z = 0; v = 0; q = 0; p = 0; for (int j = 1; j <= NPoints; j++) { if (VU45[k][i]->GetShiftDiscretEnd(NPoints-j) >= 250) continue; z += j*j; v += j; q += j*VU45[k][i]->GetShiftDiscretEnd(NPoints-j); p += VU45[k][i]->GetShiftDiscretEnd(NPoints-j); } try { bb = (q-p*z/v) / (v-NPoints*z/v); // <-------------- тока тут и в следующей строке исключение случается kk = p/v - bb*NPoints/v; // наклон аппроксимирующей прямой VU45[k][i]->PressureEndStabile = (fabs(kk) < var.deltaStability/NPoints); } catch(...){}; } // результирующий флаг стабильности с учётом используемости источников давления if (var.useFlowStability) VU45[k][i]->PressureStabile = VU45[k][i]->FlowStabile; else if (var.useTMStability) { VU45[k][i]->PressureStabile = VU45[k][i]->PressureTMStabile; if (var.useHeadStability) VU45[k][i]->PressureStabile &= VU45[k][i]->PressureHeadStabile; if (var.useEndStability) VU45[k][i]->PressureStabile &= VU45[k][i]->PressureEndStabile; } else { VU45[k][i]->PressureStabile = true; VU45[k][i]->lbStability->Visible = false; } } } Timer1->Enabled = true; }