TemperatureStatus DomainTemperature_002::getTemperatureStatus(UIntN participantIndex, UIntN domainIndex) { try { Temperature temperature = getParticipantServices()->primitiveExecuteGetAsTemperatureTenthK( esif_primitive_type::GET_TEMPERATURE, domainIndex); if (!temperature.isValid()) { getParticipantServices()->writeMessageWarning( ParticipantMessage(FLF, "Last set temperature for virtual sensor is invalid.")); return TemperatureStatus(Temperature::minValidTemperature); } return TemperatureStatus(temperature); } catch (primitive_destination_unavailable) { return TemperatureStatus(Temperature::minValidTemperature); } catch (dptf_exception& ex) { getParticipantServices()->writeMessageWarning(ParticipantMessage(FLF, ex.what())); return TemperatureStatus(Temperature::minValidTemperature); } }
void Temperature::throwIfInvalid(const Temperature& temperature) const { if (temperature.isValid() == false) { throw temperature_out_of_range("Temperature is not valid."); } }
Bool Temperature::operator==(const Temperature& rhs) const { // Do not throw an exception if temperature is not valid. if (this->isValid() == true && rhs.isValid() == true) { return (this->m_temperature == rhs.m_temperature); } else if (this->isValid() == false && rhs.isValid() == false) { return true; } else { return false; } }
Temperature Temperature::snapWithinAllowableTripPointRange(Temperature aux) { if ((UInt32)aux != Constants::MaxUInt32) { Temperature minAux = fromCelsius(ESIF_SDK_MIN_AUX_TRIP); if (aux.isValid() && aux < minAux) { aux = minAux; } Temperature maxAux = fromCelsius(ESIF_SDK_MAX_AUX_TRIP); if (aux.isValid() && aux > maxAux) { aux = maxAux; } } return aux; }
int main(void) { sei(); Clock::start(); TWI::init(); TWI::write(0x40, 255); max6675::SPI::start(); SerialPort<9600> com; Led::SetDirWrite(); com << "Starting on 9600" << endl; RadiatorCascade radiatorCascade; BoilerCascade boilerCascade; const uint8_t MaxAddrs = 16; OneWire::Addr addrs[MaxAddrs]; uint16_t fails = 0; for(;;) { Clock::clock_t startTime = Clock::millis(); com << "Search "; uint8_t count = 0; OneWire::Search<Wire> search; { LedOn<Led> l; do { addrs[count++] = search(); } while (!search.isDone() && count < MaxAddrs); } if (search.isFail()) { com << "failed on " << int(count) << ": " << search.error(); search.errorDetail(com) << endl; fails++; } else { com << int(count) << endl; fails = 0; } if (!Wire::reset()) { com << "Reset failed" << endl; fails++; continue; } { LedOn<Led> l; Wire::skip(); DS1820::convert(); com << "Radiator " << radiatorCascade << endl; com << "Boiler " << boilerCascade << endl; DS1820::wait(); } for (int i = 0; i < count; ++i) { Led::Set(); Temperature t = DS1820::read(addrs[i]); Led::Clear(); if (t.isValid()) { radiatorCascade.processSensor(addrs[i], t.get()); boilerCascade.processSensor(addrs[i], t.get()); com << "Temp: " << addrs[i] << '=' << t << endl; } else { com << "Fail " << addrs[i] << endl; fails++; } } { Temperature t = max6675::temperature(); if (t.isValid()) { boilerCascade.processTC(t.get()); com << "Temp: TC=" << t << endl; } else { com << "Fail TC" << endl; fails++; } } com << "Temp: fails=" << fails << endl; if (!radiatorCascade.step()) com << "Radiator Cascade fail" << endl; if (!boilerCascade.step()) com << "Boiler Cascade fail" << endl; //Clock::clock_t regStart = Clock::millis(); int16_t rDelay = radiatorCascade.getAbsOutput(); int16_t bDelay = boilerCascade.getAbsOutput(); TWI::write(0x40, ~Data::data); if (rDelay > 0 || bDelay > 0) { if (rDelay < bDelay) { delay_ms(rDelay); RadiatorCascade::action_t::stop(); TWI::write(0x40, ~Data::data); delay_ms(bDelay - rDelay); BoilerCascade::action_t::stop(); TWI::write(0x40, ~Data::data); } else { delay_ms(bDelay); BoilerCascade::action_t::stop(); TWI::write(0x40, ~Data::data); delay_ms(rDelay - bDelay); RadiatorCascade::action_t::stop(); TWI::write(0x40, ~Data::data); } } Clock::clock_t regStop = Clock::millis(); com << "cycle time " << regStop - startTime << endl; if (cycleTime > (regStop - startTime)) delay_ms(cycleTime - (regStop - startTime)); } }