double K1 = 50.0 / 300; // Warm up, 5 min, 20 - 70. Subject to change, if wrong
double K2 = -50.0 / 120; // Cool down, 2 min, 20 - 70. Subject to change, if wrong
double T = 20;
const int ON_TIME = 7; // seconds. this should be calculated
const int OFF_TIME = 2; // seconds. this should be calculated
int onCounter = ON_TIME;
int offCounter = 0;
for (int t = 0; t < 1800; t++)
{
if (onCounter > 0)
{
onCounter--;
T += K1;
}
else if(offCounter == 0)
{
onCounter = ON_TIME;
// switch relay off here
}
if (offCounter > 0)
{
T += K2;
offCounter--;
}
else if(onCounter == 0)
{
offCounter = OFF_TIME;
// switch relay on here
}
Console.WriteLine("t: {0}, T: {1:F2}", t, T);
}
この関数が行うことは、オーブン温度を 30 分間 (Tt) まで直線的にシミュレートすること70C
です。もちろん、期待どおりには機能しません。入力パラメータは 2 つの線形勾配です。
- オーブンの温度が から
20C
まで70C
5 分間 (Tw)上昇します。 - オーブンは から
70C
まで20C
2 分間冷却されます (Tc) - ステップは
1C
(Ts)
したがって、関数はリレーを制御し、オーブンをオンまたはオフにします。これらの ON/OFF_TIME 定数を検索しようとしましたが、もっと真剣なアプローチが必要なようです。
ON_TIME
問題は -とを計算する方法OFF_TIME
です。