def initialize_variables(self): self.timestamp = time.time() self.autotune = PIDAutotune( self.setpoint, out_step=self.outstep, sampletime=self.period, out_min=0, out_max=self.period, noiseband=self.noiseband) self.running = True self.autotune_active = True self.timer_loop = time.time() self.logger.info( "PID Autotune started with options: " "Measurement Device: {}, Measurement: {}, Output: {}, Output_Channel: {}, Setpoint: {}, " "Period: {}, Noise Band: {}, Outstep: {}, DIrection: {}".format( self.measurement_device_id, self.measurement_measurement_id, self.output_device_id, self.output_channel, self.setpoint, self.period, self.noiseband, self.outstep, self.direction))
def initialize_variables(self): controller = db_retrieve_table_daemon(CustomController, unique_id=self.unique_id) self.log_level_debug = controller.log_level_debug self.set_log_level_debug(self.log_level_debug) self.timestamp = time.time() self.autotune = PIDAutotune(self.setpoint, out_step=self.outstep, sampletime=self.period, out_min=0, out_max=self.period, noiseband=self.noiseband)
def initialize_variables(self): """Set PID parameters""" self.set_log_level_debug(self.log_level_debug) self.dict_outputs = parse_output_information() self.sample_rate = db_retrieve_table_daemon( Misc, entry='first').sample_rate_controller_pid self.device_measurements = db_retrieve_table_daemon( DeviceMeasurements) pid = db_retrieve_table_daemon(PID, unique_id=self.unique_id) self.device_id = pid.measurement.split(',')[0] self.measurement_id = pid.measurement.split(',')[1] self.is_activated = pid.is_activated self.is_held = pid.is_held self.is_paused = pid.is_paused self.log_level_debug = pid.log_level_debug self.setpoint_tracking_type = pid.setpoint_tracking_type self.setpoint_tracking_id = pid.setpoint_tracking_id self.setpoint_tracking_max_age = pid.setpoint_tracking_max_age self.raise_output_id = pid.raise_output_id self.raise_output_type = pid.raise_output_type self.raise_min_duration = pid.raise_min_duration self.raise_max_duration = pid.raise_max_duration self.raise_min_off_duration = pid.raise_min_off_duration self.raise_always_min_pwm = pid.raise_always_min_pwm self.lower_output_id = pid.lower_output_id self.lower_output_type = pid.lower_output_type self.lower_min_duration = pid.lower_min_duration self.lower_max_duration = pid.lower_max_duration self.lower_min_off_duration = pid.lower_min_off_duration self.lower_always_min_pwm = pid.lower_always_min_pwm self.period = pid.period self.start_offset = pid.start_offset self.max_measure_age = pid.max_measure_age self.store_lower_as_negative = pid.store_lower_as_negative self.timer = time.time() + self.start_offset self.setpoint = pid.setpoint # Initialize PID Controller if self.PID_Controller is None: self.PID_Controller = PIDControl( self.logger, pid.setpoint, pid.p, pid.i, pid.d, pid.direction, pid.band, pid.integrator_min, pid.integrator_max) else: # Set PID options self.PID_Controller.setpoint = pid.setpoint self.PID_Controller.Kp = pid.p self.PID_Controller.Ki = pid.i self.PID_Controller.Kd = pid.d self.PID_Controller.direction = pid.direction self.PID_Controller.band = pid.band self.PID_Controller.integrator_min = pid.integrator_min self.PID_Controller.integrator_max = pid.integrator_max self.PID_Controller.first_start = True # Autotune options self.autotune_activated = pid.autotune_activated self.autotune_noiseband = pid.autotune_noiseband self.autotune_outstep = pid.autotune_outstep # If activated, initialize PID Autotune if self.autotune_activated: self.autotune_timestamp = time.time() try: self.autotune = PIDAutotune( self.PID_Controller.setpoint, out_step=self.autotune_outstep, sampletime=self.period, out_min=0, out_max=self.period, noiseband=self.autotune_noiseband) except Exception as msg: self.logger.error(msg) self.stop_controller(deactivate_pid=True) if self.setpoint_tracking_type == 'method' and self.setpoint_tracking_id != '': self.setup_method(self.setpoint_tracking_id) if self.is_paused: self.logger.info("Starting Paused") elif self.is_held: self.logger.info("Starting Held") self.logger.info("PID Settings: {}".format(self.pid_parameters_str())) return "success"