?? outctrltempthread.cpp
字號(hào):
if(TempDeviate<=12*TempDeviateWave && TempDeviate>2*TempDeviateWave)/////80%~45%//80%+20%
{
CycleWork=CycleWorkDefault;
count_i=0;
if(TempDeviateDifferentialValid>0)
{
proportion = I_two*TempDeviate + P_two_positive*TempDeviateDifferentialValid + Cobble_two;
}
else
{
proportion = I_two*TempDeviate + P_two_negative*TempDeviateDifferentialValid + Cobble_two;
}
///////////////
// printf("%lf\n",proportion);/////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////
// fprintf(fp,"%4d ",count_record);
// fprintf(fp,"%0 .4f\n",proportion);
/////////////////////////////////////
DelayPlanningSign=0;
///////////////
if(proportion>0&& proportion<0.9)
{
CycleWorkOccupy=int (proportion*CycleWork*CaiWenJianGe); if(CycleWorkOccupy==0) { CycleWork=2; } return;
}
if(proportion>0.9 && proportion<=1)
{
CycleWorkOccupy=int (0.9*CycleWork*CaiWenJianGe);return;
}
if(proportion>1)
{
CycleWorkOccupy=int (CycleWork*CaiWenJianGe);return;
}
if(proportion<0)
{
CycleWorkOccupy=0;CycleWork=2;return;
}
////////////////////
}
if(TempDeviate<=2*TempDeviateWave && TempDeviate>revision*TempDeviateWave)//////50%~20%//55%+40%+5%
{
CycleWork=CycleWorkDefault;
count_i=0;
TempDeviateLast=TempDeviate;
if(TempDeviateDifferentialValid>0)
{
proportion = I_three*TempDeviate + P_three_positive*TempDeviateDifferentialValid
+ D_three*TempDeviateDifferentialVariance + Cobble_three;
}
else
{
proportion = I_three*TempDeviate + P_three_negative*TempDeviateDifferentialValid
+ D_three*TempDeviateDifferentialVariance + Cobble_three;
}
// printf("%lf\n",proportion);///////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////
// fprintf(fp,"%4d ",count_record);
// fprintf(fp,"%0 .4f\n",proportion);
///////////////////////////////////////
DelayPlanningSign=0;
///////////////
if(proportion>0 && proportion<0.7)
{
CycleWorkOccupy=int (proportion*CycleWork*CaiWenJianGe); if(CycleWorkOccupy==0) { CycleWork=2; } return;
}
if(proportion>0.7 && proportion<=0.8)
{
CycleWorkOccupy=int (0.7*CycleWork*CaiWenJianGe);return;
}
if(proportion>0.8 && proportion<=0.9)
{
CycleWorkOccupy=int (0.8*CycleWork*CaiWenJianGe);return;
}
if(proportion>0.9)
{
CycleWorkOccupy=int (0.9*CycleWork*CaiWenJianGe);return;
}
if(proportion<=0)
{
CycleWorkOccupy=0;CycleWork=2;return;/////////////
}
}
if(TempDeviate<=revision*TempDeviateWave && TempDeviate>-revision*TempDeviateWave)//////15%~5%//30%+60%+10%
{
count_i=0;
///////////////
if(TempDeviateDifferentialValid>=0)
{
proportion = I_four*TempDeviate + P_four_positive*TempDeviateDifferentialValid
+ D_four*TempDeviateDifferentialVariance + Cobble_four;
}
else
{
proportion = I_four*TempDeviate + P_four_negative*TempDeviateDifferentialValid
+ D_four*TempDeviateDifferentialVariance + Cobble_four;
}
// printf("%lf\n",proportion);///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////
// fprintf(fp,"%4d ",count_record);
// fprintf(fp,"%0 .4f\n",proportion);
//////////////////////////////////////
if(proportion>0.05)
{
CycleWorkOccupy=regular;
}
else
{
CycleWorkOccupy=0;
}
////////////
if(CycleWorkOccupy==regular)
{
CycleWork=CycleWorkChange;
if(TempDeviateDifferentialValid>=0)
{
DelayPlanningSign=1;
}
else
{
DelayPlanningSign=0;
}
}
else
{
CycleWork=2;
DelayPlanningSign=0;
}
////////////
if(TempDeviateLast<=2*TempDeviateWave && TempDeviateLast>revision*TempDeviateWave)
{
revision=0.4f;
}
if(TempDeviateLast<=0.3*TempDeviateWave && TempDeviateLastLast<=0.3*TempDeviateWave &&
TempDeviateLastLastLast<=0.3*TempDeviateWave)
{
revision=0.3f;
}
TempDeviateLastLastLast=TempDeviateLastLast;
TempDeviateLastLast=TempDeviateLast;
TempDeviateLast=TempDeviate;
return;
}
if(TempDeviate<=-revision*TempDeviateWave)//////////////////////////0%
{
count_i=0;
CycleWorkOccupy=0;
CycleWork=2;
TempDeviateLastLastLast=TempDeviateLastLast;
TempDeviateLastLast=TempDeviateLast;
TempDeviateLast=TempDeviate;
return;
}
}
#define PT_EVT(x) {CKYEVT data(x,0); \(m_calorimeter.GetEventQueue()).Push(data);}void COutCtrlTempThread::CKYSleep( int nSeconds ){ for( int i = 0; i < nSeconds; i ++ ) { if( m_bExitFlag ) { //add code here, and run the clear action of exit. m_calorimeter.OutsideBarrelCycle( false ); m_calorimeter.PotHeatFull( false ); if( m_hInsideTemp != NULL ) fclose( m_hInsideTemp ); if( m_hOutsideTemp != NULL ) fclose( m_hOutsideTemp ); CExperimentData &expData = m_calorimeter.GetExperimentData(); PT_EVT( SUB_CTRL_TEMP_BEGIN ); expData.InvalidateCtrlTempTime(); ExitThread(); //Halt; } sleep( 1 ); }}
void COutCtrlTempThread::run( void ){ //m_calorimeter.SwitchOnMixer( true ); // CExperimentData &expData = m_calorimeter.GetExperimentData(); expData.EnableCtrlTempTime(); PT_EVT( SUB_CTRL_TEMP_BEGIN ); TempAim = expData.GetOutCtrlTemp(); /**/ int mSave = 0; m_hInsideTemp = fopen( "/usr/sd/insideTemp.txt", "a+" ); m_hOutsideTemp = fopen( "/usr/sd/outsideTemp.txt", "a+" );
/**/ if( m_hInsideTemp == NULL || m_hOutsideTemp == NULL ) { printf( "create file insideTemp.txt or outsideTemp.txt fail!\n" );
CExperimentData &expData = m_calorimeter.GetExperimentData();
PT_EVT( SUB_CTRL_TEMP_BEGIN );
expData.InvalidateCtrlTempTime();
ExitThread(); //return; }
//m_calorimeter.OutsideBarrelCycle( true ); sleep(5); char szBuffer[ 100 ]; float dInsideTemp=0.0, dOutTemp=0.0,TempDe=0.0,TempDelast = 0.0f; int nCounter = 0,OutLevel=0,InLevel=0;
//time_t c_start, c_end; //
while( true ) { /////////////////////////////////////////////////////////////
//CKYSleep( 1 ); dOutTemp = m_calorimeter.ReadOutsideBarrelTemperature();// dOutTemp = Temp;
TempDe = TempAim - dOutTemp; if( TempDe > 1.2f ) {
InLevel=0;
if(OutLevel==0)
{
TempDelast=TempDe;
}
OutLevel++;
if(OutLevel>=45)
{
OutLevel=0;
if(TempDelast-TempDe<0.015f)
{
//add code here, and run the clear action of exit.
m_calorimeter.OutsideBarrelCycle( false );
m_calorimeter.PotHeatFull( false );
if( m_hInsideTemp != NULL )
fclose( m_hInsideTemp );
if( m_hOutsideTemp != NULL )
fclose( m_hOutsideTemp );
CExperimentData &expData = m_calorimeter.GetExperimentData();
PT_EVT( SUB_CTRL_TEMP_BEGIN );
expData.InvalidateCtrlTempTime();
//ExitThread(); //Halt;
}
TempDelast=TempDe;
}
//m_calorimeter.PotHeatFull( true ); } else {
if(TempDe<=1.2 && TempDe>0.6)
{
OutLevel=0;
if(InLevel==0)
{
TempDelast=TempDe;
}
InLevel++;
if(InLevel>=90)
{
InLevel=0;
if(TempDelast-TempDe<0.01f)
{
//add code here, and run the clear action of exit.
m_calorimeter.OutsideBarrelCycle( false );
m_calorimeter.PotHeatFull( false );
if( m_hInsideTemp != NULL )
fclose( m_hInsideTemp );
if( m_hOutsideTemp != NULL )
fclose( m_hOutsideTemp );
CExperimentData &expData = m_calorimeter.GetExperimentData();
PT_EVT( SUB_CTRL_TEMP_BEGIN );
expData.InvalidateCtrlTempTime();
//ExitThread(); //Halt;
}
TempDelast=TempDe;
}
}
else
{
OutLevel=0;
InLevel=0;
}
nCounter ++; nCounter = Mathematical(nCounter,TempDe,TempAim);
if(nCounter < CycleWorkOccupy)
{
//m_calorimeter.PotHeatPart( true );
}
else
{
m_calorimeter.PotHeatPart( false );
} } /////////////////////////////////////////////////////////// dInsideTemp= m_calorimeter.ReadInsideBarrelTemperature(); if( mSave >= 5 ) {
mSave = 0; double dTherTemp = m_calorimeter.ReadThermostatTemperature(); struct tm *newtime; time_t long_time; time( &long_time ); newtime = localtime( &long_time ); sprintf( szBuffer, " %02d:%02d:%02d %.4f %.4f %.4f\r\n", newtime->tm_hour, newtime->tm_min, newtime->tm_sec, dInsideTemp, dOutTemp, dTherTemp ); fwrite( szBuffer, 1, strlen( szBuffer ), m_hInsideTemp ); } mSave++;
CKYSleep( 1 );
m_calorimeter.ReadThermostatTemperature(); m_calorimeter.ReadEnviromentTemperature(); }}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -