Speeding up simulator.

pull/123/head
James Kirikland Garner 2022-12-14 16:32:10 -08:00
rodzic 9b78ea005c
commit f5336ec2a1
2 zmienionych plików z 27 dodań i 4 usunięć

Wyświetl plik

@ -243,6 +243,9 @@ class Oven(threading.Thread):
self.reset()
self.save_automatic_restart_state()
def get_start_time(self):
return datetime.datetime.now() - datetime.timedelta(milliseconds = self.runtime * 1000)
def kiln_must_catch_up(self):
'''shift the whole schedule forward in time by one time_step
to wait for the kiln to catch up'''
@ -252,11 +255,11 @@ class Oven(threading.Thread):
# kiln too cold, wait for it to heat up
if self.target - temp > config.pid_control_window:
log.info("kiln must catch up, too cold, shifting schedule")
self.start_time = datetime.datetime.now() - datetime.timedelta(milliseconds = self.runtime * 1000)
self.start_time = self.get_start_time()
# kiln too hot, wait for it to cool down
if temp - self.target > config.pid_control_window:
log.info("kiln must catch up, too hot, shifting schedule")
self.start_time = datetime.datetime.now() - datetime.timedelta(milliseconds = self.runtime * 1000)
self.start_time = self.get_start_time()
def update_runtime(self):
@ -414,6 +417,7 @@ class SimulatedOven(Oven):
self.R_o_nocool = config.sim_R_o_nocool
self.R_ho_noair = config.sim_R_ho_noair
self.R_ho = self.R_ho_noair
self.speedup_factor = 10
# set temps to the temp of the surrounding environment
self.t = self.t_env # deg C temp of oven
@ -425,6 +429,18 @@ class SimulatedOven(Oven):
self.start()
log.info("SimulatedOven started")
# runtime is in sped up time, start_time is actual time of day
def get_start_time(self):
return datetime.datetime.now() - datetime.timedelta(milliseconds = self.runtime * 1000 / self.speedup_factor)
def update_runtime(self):
runtime_delta = datetime.datetime.now() - self.start_time
if runtime_delta.total_seconds() < 0:
runtime_delta = datetime.timedelta(0)
self.runtime = runtime_delta.total_seconds() * self.speedup_factor
def heating_energy(self,pid):
# using pid here simulates the element being on for
# only part of the time_step
@ -489,7 +505,7 @@ class SimulatedOven(Oven):
# we don't actually spend time heating & cooling during
# a simulation, so sleep.
time.sleep(self.time_step)
time.sleep(self.time_step / self.speedup_factor)
class RealOven(Oven):

Wyświetl plik

@ -1,4 +1,6 @@
import threading,logging,json,time,datetime
import config
from oven import Oven
log = logging.getLogger(__name__)
@ -32,7 +34,12 @@ class OvenWatcher(threading.Thread):
else:
self.recording = False
self.notify_all(oven_state)
time.sleep(self.oven.time_step)
if config.simulate:
time.sleep(self.oven.time_step / self.oven.speedup_factor)
else:
time.sleep(self.oven.time_step)
def lastlog_subset(self,maxpts=50):
'''send about maxpts from lastlog by skipping unwanted data'''