////////////////////////////////////////////////////////////////////////////
// Model TOPENI.CPP               SIMLIB/C++
//
// Příklad jednoduchého systému s nelineárním prvkem - relé
//

#include "simlib.h"

const double T1 = 10,
             T2 = 50,
             K1 = 50,
             K2 = 1;

const double XValue = 10;       // vstup
const double StepPrn = 0.1;     // krok tisku výsledků

// tepelná soustava
class Soust : public aContiBlock {
  Integrator y2, y1;        
 public:
  Soust(Input inp, double T1, double T2, double K1, double K2) :
    y2( (K1*inp-y2)/T1 ),
    y1( (K2*y2-y1)/T2 )   {}
  double Value() { return y1.Value(); }  // výstup 
};

// celý systém
class Sys : public aContiBlock {
  Relay r;
  Soust s;
 public:
  Sys(Input inp, double T1, double T2, double K1, double K2) :
    r( inp - s, 0, 0, 1, 1, 0, 1 ),
    s( r, T1, T2, K1, K2 )  {}
  double Value() { return s.Value(); }  // výstup 
};

Sys   s(XValue, T1, T2, K1, K2);

// výstup:
void Sample() { Print("%-8.2f  %g\n", T.Value(), s.Value()); }
Sampler S(Sample, StepPrn);

int main() {                    // popis experimentu
  SetOutput("topeni.dat");
  _Print("# TOPENI - model regulace ohřívání\n");
  Print("# Time   t\n");
  Init(0,120);                  // inicializace experimentu
  SetAccuracy(1e-2);            // požadovaná přesnost
  Run();                        // simulace
  return 0;
}

// konec


syntax highlighted by Code2HTML, v. 0.9.1