/// <summary> /// Uses the temperature lookup table to convert a resistance into /// a thermistor temperature /// </summary> /// <param name="r">The measured resistance</param> /// <param name="type">The type of thermistor</param> /// <returns>The temperature of the thermistor</returns> public static double ConvertRToT(double r, ThermistorType type) { switch (type) { case (ThermistorType.Warner): if (r < R0_Warner) { r = R0_Warner; } if (r > RMax_Warner) { r = RMax_Warner; } return(T_Warner[(int)r - R0_Warner]); default: if (r < R0_Omega) { r = R0_Omega; } if (r > RMax_Omega) { r = RMax_Omega; } return(T_Omega[(int)r - R0_Omega]); } }
/// <summary> /// Constructs a new thermistor /// </summary> /// <param name="daq">The daq-board for reading the thermistor</param> /// <param name="channelName">The ai channel readint the thermistor bridge</param> /// <param name="type">The type of the thermistor</param> public Thermistor(PCIe6323 daq, string channelName, ThermistorType type) { if (ViewModelBase.IsInDesignMode) { Temperature = 12.3456789; return; } _type = type; if (channelName.ToLower() == "ai0") { daq.AI.AI0.MinValue = -5; daq.AI.AI0.MaxValue = 5; daq.AI.AI0.Callback = (sampleIndex, samples) => { int length = samples.Length; double sum = 0; for (int i = 0; i < length; i++) { sum += samples[i]; } Temperature = ConvertRToT(ConvertVToR(sum / length), _type); }; } if (channelName.ToLower() == "ai1") { daq.AI.AI1.MinValue = -5; daq.AI.AI1.MaxValue = 5; daq.AI.AI1.Callback = (sampleIndex, samples) => { int length = samples.Length; double sum = 0; for (int i = 0; i < length; i++) { sum += samples[i]; } Temperature = ConvertRToT(ConvertVToR(sum / length), _type); }; } if (channelName.ToLower() == "ai2") { daq.AI.AI2.MinValue = -5; daq.AI.AI2.MaxValue = 5; daq.AI.AI2.Callback = (sampleIndex, samples) => { int length = samples.Length; double sum = 0; for (int i = 0; i < length; i++) { sum += samples[i]; } Temperature = ConvertRToT(ConvertVToR(sum / length), _type); }; } if (channelName.ToLower() == "ai3") { daq.AI.AI3.MinValue = -5; daq.AI.AI3.MaxValue = 5; daq.AI.AI3.Callback = (sampleIndex, samples) => { int length = samples.Length; double sum = 0; for (int i = 0; i < length; i++) { sum += samples[i]; } Temperature = ConvertRToT(ConvertVToR(sum / length), _type); }; } }