OlliTut/CoreLibrary/Param_Model.py

83 lines
2.3 KiB
Python

import logging
from logging.handlers import RotatingFileHandler
from time import sleep
from threading import Thread, Event
from CoreLibrary.ExampleDeviceScalar import ExampleDeviceScalar
from CoreLibrary.Measurement import Measurement
from CoreLibrary.Plot_Data import Plot_Data
LOGGER = logging.getLogger("my_logger")
LOGGER.setLevel(logging.DEBUG)
LOGGER.propagate = False
# create formatter
formatter = logging.Formatter('%(levelname)s %(asctime)s - %(module)s: %(message)s')
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
# add formatter to ch
ch.setFormatter(formatter)
# add ch to logger
LOGGER.addHandler(ch)
fi = RotatingFileHandler("my_logger.log", maxBytes=10**5, backupCount=5)
fi.setLevel(logging.DEBUG)
fi.setFormatter(formatter)
LOGGER.addHandler(fi)
class DataWorker(Thread):
def __init__(self, pd):
super().__init__(name="Data_Worker")
self.exit_request = Event()
self.pd = pd
def run(self):
while not self.exit_request.is_set():
self.pd.refresh()
sleep(1)
class Param_Model:
def __init__(self):
self.devices = {"treib1": ExampleDeviceScalar(), "mess1": ExampleDeviceScalar()}
self.__plot_data = []
self.__measurement = []
self.data_worker = DataWorker(self)
self.data_worker.start()
def new_measurement(self, name=None, writer=None) -> Measurement:
mess = Measurement(name=name)
self.__measurement.append(mess)
return mess
def get_plot_data(self):
plot_data = Plot_Data()
self.__plot_data.append(plot_data)
return plot_data
def refresh(self):
LOGGER.debug("refresh")
for name, device in self.devices.items():
data = device.get_data
for meas in self.__measurement:
meas.append_data(name, data)
for pd in self.__plot_data:
pd.append_data(name, data)
def stop_measuring(self):
for sens in self.devices.values():
sens.stop_measuring()
def start_measuring(self):
for sens in self.devices.values():
sens.start_measuring()
def exit(self):
LOGGER.warning("entering exit method")
for sens in self.devices.values():
sens.exit()
self.data_worker.exit_request.set()