Files
brewpi/tasks/tracer.py
T
jens bf019733b2 - added abstarct PID APid
- added PidFactory
- use variable args for factory
2021-10-02 11:10:43 +02:00

62 lines
2.0 KiB
Python

import time
import asyncio
from tasks import ATask
from ws.message import MsgIo
from components import ATemperatureSensor
from components import AHeater
from components import APid
import numpy as np
import scipy.io
class TracerTask(ATask):
def __init__(self, sensor: ATemperatureSensor, heater: AHeater, temp_ctrl: APid, interval, msg_handler: MsgIo):
ATask.__init__(self, interval)
self.msg_handler = msg_handler
msg_handler.set_recv_handler(self.recv)
self.sensor = sensor
self.heater = heater
self.temp_ctrl = temp_ctrl
async def recv(self, data):
pass
async def send(self, data):
await self.msg_handler.send(data)
async def on_process(self):
print("{}: Started with interval {} s".format(self.msg_handler.get_key(), self.interval))
timestamp = 0
_timestamp = np.empty(0)
_sensor_temp = np.empty(0)
_heater_power = np.empty(0)
_tc_temp_ist = np.empty(0)
_tc_dtemp_ist = np.empty(0)
_tc_temp_soll = np.empty(0)
_tc_dtemp_soll = np.empty(0)
_tc_dtemp_commanded = np.empty(0)
filename = "brewpi." + time.strftime("%Y%m%d%H%M%S", time.localtime()) + ".mat"
while True:
_timestamp = np.append(_timestamp, timestamp)
_sensor_temp = np.append(_sensor_temp, self.sensor.temperature())
_heater_power = np.append(_heater_power, self.heater.get_power())
_tc_temp_ist = np.append(_tc_temp_ist, self.temp_ctrl.theta_ist)
_tc_dtemp_ist = np.append(_tc_dtemp_ist, max(-1, self.temp_ctrl.heatrate_ist))
_tc_temp_soll = np.append(_tc_temp_soll, self.temp_ctrl.theta_soll_set)
_tc_dtemp_soll = np.append(_tc_dtemp_soll, self.temp_ctrl.heatrate_soll_set)
_tc_dtemp_commanded = np.append(_tc_dtemp_commanded, self.temp_ctrl.heatrate_soll)
data = {'time': _timestamp, 'sensor_temp': _sensor_temp, 'heater_power': _heater_power, 'tc_temp_ist': _tc_temp_ist, 'tc_dtemp_ist': _tc_dtemp_ist, 'tc_temp_soll': _tc_temp_soll, 'tc_dtemp_soll': _tc_dtemp_soll, 'tc_dtemp_commanded': _tc_dtemp_commanded}
scipy.io.savemat('brewpi.mat', data)
scipy.io.savemat(filename, data)
timestamp += 1
await asyncio.sleep(self.interval)