Files
newfolder/ChamChat/Models/Step.cs
Wesley Hofman 2f1f4199ad first commit
2025-09-18 14:23:18 +02:00

183 lines
5.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ChamChat.Models
{
public class Step
{
/// <summary>
/// Create a new profile step
/// </summary>
/// <param name="Duration">Duration of step in minutes</param>
public Step(Double Duration)
{
_DurationMin = Duration;
}
private double _DurationMin = 0;
private int _PK = 0; // PK is index in Step list
private double _RH = 0; // RH = 0 means RH OFF
private double _T = 0;
private bool _RampCtrlRH = false;
private bool _RampCtrlT = false;
private double _PreTemp = 0;
private double _LimitT = 0;
public Double DurationMin { get { return _DurationMin; } set { _DurationMin = value; } }
public Int32 PK { get { return _PK; } set { _PK = value; } }
public Double RH { get { return _RH; } set { _RH = value; } }
public Double T { get { return _T; } set { _T = value; } }
public Boolean RampCtrlRH { get { return _RampCtrlRH; } set { _RampCtrlRH = value; } }
public Boolean RampCtrlT { get { return _RampCtrlT; } set { _RampCtrlT = value; } }
public Double PreTemp { get { return _PreTemp; } set { _PreTemp = value; } }
public Double LimitT { get { return _LimitT; } set { _LimitT = value; } }
public Int32 Hours { get { return (int)Math.Floor(_DurationMin / 60); } }
public Int32 Minutes { get { return (int)Math.Round(_DurationMin - 60 * Hours); } }
public string ToFormattedString()
{
string r ="";
if (_DurationMin > 60)
r = String.Format("{0:0} hours and {1:00} minutes ", Hours, Minutes);
else
r = String.Format("{0:0} minutes ", _DurationMin);
r += "\n";
if (_RampCtrlT)
r += String.Format("{0:0.0} °C (R-ctrl ON) ", _T);
else
r += String.Format("{0:0.0} °C (R-ctrl OFF) ", _T);
if (_RH > 0)
{
if (_RampCtrlRH)
r += String.Format("\n{0:0.0} %rh (R-ctrl ON)", _RH);
else
r += String.Format("\n{0:0.0} %rh (R-ctrl OFF)", _RH);
}
if (_PreTemp < double.MaxValue - 1 && !_RampCtrlT)
r += String.Format("\npre-T {0:0.0} °C, ", _PreTemp);
return r;
}
public override string ToString()
{
string r = String.Format("PK={0:00}: {1:0} min, ",_PK, _DurationMin);
if (_DurationMin >= 60)
r = String.Format("{0:0} hours & {1:00} minutes ", Hours,Minutes);
else
r = String.Format("{0:0} minutes ", _DurationMin);
r += "\n";
if (_RampCtrlT)
r += String.Format(" {0:0.0} °C (R-ctrl ON) ", _T);
else
r += String.Format(" {0:0.0} °C (R-ctrl OFF) ", _T);
if (_RH > 0)
{
if (_RampCtrlRH)
r += String.Format("\n{0:0.0} %rh (R-ctrl ON)", _RH);
else
r += String.Format("\n{0:0.0} %rh (R-ctrl OFF)", _RH);
}
if(!double.IsNaN(_PreTemp))
r += String.Format("\npre-T {0:0.0} °C, ", _PreTemp);
return r;
}
public Boolean HasRH
{
get
{
if (RH > 0)
return true;
return false;
}
}
public Step(String XML)
{
string fp = "<" + this.GetType().Namespace + "." + this.GetType().Name + ">";
if (!XML.Contains(fp))
throw new Exception(fp + " tag not found!");
try
{
_DurationMin = Double.Parse(XML.GetTags("_DurationMin"));
_PK = Int32.Parse(XML.GetTags("_PK"));
_RH = Double.Parse(XML.GetTags("_RH"));
_T = Double.Parse(XML.GetTags("_T"));
_RampCtrlRH = Boolean.Parse(XML.GetTags("_RampCtrlRH"));
_RampCtrlT = Boolean.Parse(XML.GetTags("_RampCtrlT"));
_PreTemp = Double.Parse(XML.GetTags("_PreTemp"));
_LimitT = Double.Parse(XML.GetTags("_LimitT"));
}
catch
{
throw new Exception(fp +": could not create instance from input string!");
}
}
public String XML
{
get
{
string xml = "";
xml += "<"+this.GetType().Namespace + "." + this.GetType().Name + ">";
xml += String.Format("<_DurationMin>{0:0.0}</_DurationMin>", _DurationMin);
xml += String.Format("<_PK>{0:0}</_PK>", _PK);
xml += String.Format("<_RH>{0:0.00}</_RH>", _RH);
xml += String.Format("<_T>{0:0.00}</_T>", _T);
xml += String.Format("<_RampCtrlRH>{0}</_RampCtrlRH>", _RampCtrlRH);
xml += String.Format("<_RampCtrlT>{0}</_RampCtrlT>", _RampCtrlT);
xml += String.Format("<_PreTemp>{0:0.00}</_PreTemp>", _PreTemp);
xml += String.Format("<_LimitT>{0:0.00}</_LimitT>", _LimitT);
xml += "</" + this.GetType().Namespace + "." + this.GetType().Name + ">";
return xml;
}
}
}
public static class StepExtensionMethods
{
public static Step DeepClone(this Step s)
{
Step r = new Step(s.DurationMin);
r.RH = s.RH;
r.T = s.T;
r.RampCtrlRH = s.RampCtrlRH;
r.RampCtrlT = s.RampCtrlT;
r.PreTemp = s.PreTemp;
r.LimitT = s.LimitT;
r.PK = s.PK;
return r;
}
}
}