Index: leahi_dialin/dd/modules/mixing_cntrl.py =================================================================== diff -u -r3f4937e339925dde0b95f08e49969f8983c5cba4 -reca9e15bc984af2b7f59eb38f3836ca354ee1251 --- leahi_dialin/dd/modules/mixing_cntrl.py (.../mixing_cntrl.py) (revision 3f4937e339925dde0b95f08e49969f8983c5cba4) +++ leahi_dialin/dd/modules/mixing_cntrl.py (.../mixing_cntrl.py) (revision eca9e15bc984af2b7f59eb38f3836ca354ee1251) @@ -23,7 +23,7 @@ from leahi_dialin.common.msg_ids import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import CanMessenger, CanChannels -from leahi_dialin.utils.abstract_classes import AbstractSubSystem +from leahi_dialin.utils.abstract_classes import AbstractSubSystem, LocalVars from leahi_dialin.utils.base import publish from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray from leahi_dialin.common.dataclass.closed_loop_signals import ControllerSignals @@ -102,6 +102,154 @@ self.dd_mixing_control_timestamp = 0 #: The timestamp of the last message + +# ============================================================ Properties ============================================================ + @property + def bicarb_mixing_state(self) -> int: + """ + The Bicarb Mixing State + """ + return self._bicarb_mixing_state + + @bicarb_mixing_state.setter + def bicarb_mixing_state(self, value): + self._bicarb_mixing_state = value + + + @property + def bicarb_control_interval(self) -> int: + """ + The Bicarb Control Interval + """ + return self._bicarb_control_interval + + @bicarb_control_interval.setter + def bicarb_control_interval(self, value): + self._bicarb_control_interval = value + + + @property + def acid_mixing_state(self) -> int: + """ + The Acid Mixing State + """ + return self._acid_mixing_state + + @acid_mixing_state.setter + def acid_mixing_state(self, value): + self._acid_mixing_state = value + + + @property + def acid_control_interval(self) -> int: + """ + The Acid Control Interval + """ + return self._acid_control_interval + + @acid_control_interval.setter + def acid_control_interval(self, value): + self._acid_control_interval = value + + + @property + def current_bicarb_mix_volume(self) -> float: + """ + The Bicarb Current Mixing Volume + """ + return self._current_bicarb_mix_volume + + @current_bicarb_mix_volume.setter + def current_bicarb_mix_volume(self, value): + self._current_bicarb_mix_volume = value + + + @property + def last_bicarb_mix_volume(self) -> float: + """ + The Bicarb Last Mixing Volume + """ + return self._last_bicarb_mix_volume + + @last_bicarb_mix_volume.setter + def last_bicarb_mix_volume(self, value): + self._last_bicarb_mix_volume = value + + + @property + def current_acid_mix_volume(self) -> float: + """ + The Acid Current Mixing Volume + """ + return self._current_acid_mix_volume + + @current_acid_mix_volume.setter + def current_acid_mix_volume(self, value): + self._current_acid_mix_volume = value + + + @property + def last_acid_mix_volume(self) -> float: + """ + The Acid Last Mixing Volume + """ + return self._last_acid_mix_volume + + @last_acid_mix_volume.setter + def last_acid_mix_volume(self, value): + self._last_acid_mix_volume = value + + + @property + def bicarb_conductivity_pre_mix(self) -> float: + """ + The Bicarb Conductivity Pre Mixing + """ + return self._bicarb_conductivity_pre_mix + + @bicarb_conductivity_pre_mix.setter + def bicarb_conductivity_pre_mix(self, value): + self._bicarb_conductivity_pre_mix = value + + + @property + def bicarb_conductivity_post_mix(self) -> float: + """ + The Bicarb Conductivity Post Mixing + """ + return self._bicarb_conductivity_post_mix + + @bicarb_conductivity_post_mix.setter + def bicarb_conductivity_post_mix(self, value): + self._bicarb_conductivity_post_mix = value + + + @property + def acid_conductivity_post_mix(self) -> float: + """ + The Acid Conductivity Post Mixing + """ + return self._acid_conductivity_post_mix + + @acid_conductivity_post_mix.setter + def acid_conductivity_post_mix(self, value): + self._acid_conductivity_post_mix = value + + + @property + def total_conductivity(self) -> float: + """ + The Total Conductivity + """ + return self._total_conductivity + + @total_conductivity.setter + def total_conductivity(self, value): + self._total_conductivity = value + + + +# ============================================================ Handlers ============================================================ @publish(["msg_id_dd_mixing_control_data", "bicarb_mixing_state", "bicarb_control_interval", "acid_mixing_state", "acid_control_interval", "bicarb_conductivity_pre_mix", "bicarb_conductivity_post_mix", "acid_conductivity_post_mix", @@ -122,54 +270,102 @@ @return: None """ msg_list = [] + msg_list.append((type(self).bicarb_mixing_state, DataTypes.U32)) + msg_list.append((type(self).bicarb_control_interval, DataTypes.U32)) + msg_list.append((type(self).acid_mixing_state, DataTypes.U32)) + msg_list.append((type(self).acid_control_interval, DataTypes.U32)) - msg_list.append(('self.bicarb_mixing_state', DataTypes.U32)) - msg_list.append(('self.bicarb_control_interval', DataTypes.U32)) - msg_list.append(('self.acid_mixing_state', DataTypes.U32)) - msg_list.append(('self.acid_control_interval', DataTypes.U32)) + msg_list.append((type(self).current_bicarb_mix_volume, DataTypes.F32)) + msg_list.append((type(self).last_bicarb_mix_volume, DataTypes.F32)) + msg_list.append((type(self).current_acid_mix_volume, DataTypes.F32)) + msg_list.append((type(self).last_acid_mix_volume, DataTypes.F32)) - msg_list.append(('self.current_bicarb_mix_volume', DataTypes.F32)) - msg_list.append(('self.last_bicarb_mix_volume', DataTypes.F32)) - msg_list.append(('self.current_acid_mix_volume', DataTypes.F32)) - msg_list.append(('self.last_acid_mix_volume', DataTypes.F32)) + msg_list.append((type(self).bicarb_conductivity_pre_mix, DataTypes.F32)) + msg_list.append((type(self).bicarb_conductivity_post_mix, DataTypes.F32)) + msg_list.append((type(self).acid_conductivity_post_mix, DataTypes.F32)) + msg_list.append((type(self).total_conductivity, DataTypes.F32)) - msg_list.append(('self.bicarb_conductivity_pre_mix', DataTypes.F32)) - msg_list.append(('self.bicarb_conductivity_post_mix', DataTypes.F32)) - msg_list.append(('self.acid_conductivity_post_mix', DataTypes.F32)) - msg_list.append(('self.total_conductivity', DataTypes.F32)) + # Temp debug values + bicarb_reference = LocalVars() + bicarb_measured = LocalVars() + bicarb_error = LocalVars() + bicarb_error_sum = LocalVars() + bicarb_error_sum_after = LocalVars() + bicarb_prop_output = LocalVars() + bicarb_integral_output = LocalVars() + bicarb_ff_output = LocalVars() + bicarb_control = LocalVars() + msg_list.append((bicarb_reference, DataTypes.F32)) + msg_list.append((bicarb_measured, DataTypes.F32)) + msg_list.append((bicarb_error, DataTypes.F32)) + msg_list.append((bicarb_error_sum, DataTypes.F32)) + msg_list.append((bicarb_error_sum_after, DataTypes.F32)) + msg_list.append((bicarb_prop_output, DataTypes.F32)) + msg_list.append((bicarb_integral_output, DataTypes.F32)) + msg_list.append((bicarb_ff_output, DataTypes.F32)) + msg_list.append((bicarb_control, DataTypes.F32)) - msg_list.append(('self.bcarb_ctlrl_signal.control_signal_reference', DataTypes.F32)) - msg_list.append(('self.bcarb_ctlrl_signal.control_signal_measured', DataTypes.F32)) - msg_list.append(('self.bcarb_ctlrl_signal.control_signal_error', DataTypes.F32)) - msg_list.append(('self.bcarb_ctlrl_signal.control_signal_error_sum', DataTypes.F32)) - msg_list.append(('self.bcarb_ctlrl_signal.control_signal_error_sum_after_windup', DataTypes.F32)) - msg_list.append(('self.bcarb_ctlrl_signal.control_signal_proportional_output', DataTypes.F32)) - msg_list.append(('self.bcarb_ctlrl_signal.control_signal_integral_output ', DataTypes.F32)) - msg_list.append(('self.bcarb_ctlrl_signal.control_signal_feed_forward_output', DataTypes.F32)) - msg_list.append(('self.bcarb_ctlrl_signal.control_singal_control', DataTypes.F32)) + acid_reference = LocalVars() + acid_measured = LocalVars() + acid_error = LocalVars() + acid_error_sum = LocalVars() + acid_error_sum_after = LocalVars() + acid_prop_output = LocalVars() + acid_integral_output = LocalVars() + acid_ff_output = LocalVars() + acid_control = LocalVars() + msg_list.append((acid_reference, DataTypes.F32)) + msg_list.append((acid_measured, DataTypes.F32)) + msg_list.append((acid_error, DataTypes.F32)) + msg_list.append((acid_error_sum, DataTypes.F32)) + msg_list.append((acid_error_sum_after, DataTypes.F32)) + msg_list.append((acid_prop_output, DataTypes.F32)) + msg_list.append((acid_integral_output, DataTypes.F32)) + msg_list.append((acid_ff_output, DataTypes.F32)) + msg_list.append((acid_control, DataTypes.F32)) - msg_list.append(('self.acid_ctrl_signal.control_signal_reference', DataTypes.F32)) - msg_list.append(('self.acid_ctrl_signal.control_signal_measured', DataTypes.F32)) - msg_list.append(('self.acid_ctrl_signal.control_signal_error', DataTypes.F32)) - msg_list.append(('self.acid_ctrl_signal.control_signal_error_sum', DataTypes.F32)) - msg_list.append(('self.acid_ctrl_signal.control_signal_error_sum_after_windup', DataTypes.F32)) - msg_list.append(('self.acid_ctrl_signal.control_signal_proportional_output', DataTypes.F32)) - msg_list.append(('self.acid_ctrl_signal.control_signal_integral_output ', DataTypes.F32)) - msg_list.append(('self.acid_ctrl_signal.control_signal_feed_forward_output', DataTypes.F32)) - msg_list.append(('self.acid_ctrl_signal.control_singal_control', DataTypes.F32)) + bicarb_kp_gain = LocalVars() + bicarb_ki_gain = LocalVars() + acid_kp_gain = LocalVars() + acid_ki_gain = LocalVars() + msg_list.append((bicarb_kp_gain, DataTypes.F32)) + msg_list.append((bicarb_ki_gain, DataTypes.F32)) + msg_list.append((acid_kp_gain, DataTypes.F32)) + msg_list.append((acid_ki_gain, DataTypes.F32)) - msg_list.append(('self.dd_bicarb_kp_gain', DataTypes.F32)) - msg_list.append(('self.dd_bicarb_ki_gain', DataTypes.F32)) + self.process_into_vars(decoder_list = msg_list, message = message) - msg_list.append(('self.dd_acid_kp_gain', DataTypes.F32)) - msg_list.append(('self.dd_acid_ki_gain', DataTypes.F32)) + # Not creating properties for temporary debug values + self.bcarb_ctlrl_signal.control_signal_reference = bicarb_reference.value + self.bcarb_ctlrl_signal.control_signal_measured = bicarb_measured.value + self.bcarb_ctlrl_signal.control_signal_error = bicarb_error.value + self.bcarb_ctlrl_signal.control_signal_error_sum = bicarb_error_sum.value + self.bcarb_ctlrl_signal.control_signal_error_sum_after_windup = bicarb_error_sum_after.value + self.bcarb_ctlrl_signal.control_signal_proportional_output = bicarb_prop_output.value + self.bcarb_ctlrl_signal.control_signal_integral_output = bicarb_integral_output.value + self.bcarb_ctlrl_signal.control_signal_feed_forward_output = bicarb_ff_output.value + self.bcarb_ctlrl_signal.control_singal_control = bicarb_control.value - self.process_into_vars(decoder_list = msg_list, - message = message) + self.acid_ctrl_signal.control_signal_reference = acid_reference.value + self.acid_ctrl_signal.control_signal_measured = acid_measured.value + self.acid_ctrl_signal.control_signal_error = acid_error.value + self.acid_ctrl_signal.control_signal_error_sum = acid_error_sum.value + self.acid_ctrl_signal.control_signal_error_sum_after_windup = acid_error_sum_after.value + self.acid_ctrl_signal.control_signal_proportional_output = acid_prop_output.value + self.acid_ctrl_signal.control_signal_integral_output = acid_integral_output.value + self.acid_ctrl_signal.control_signal_feed_forward_output = acid_ff_output.value + self.acid_ctrl_signal.control_singal_control = acid_control.value + self.dd_bicarb_kp_gain = bicarb_kp_gain.value + self.dd_bicarb_ki_gain = bicarb_ki_gain.value + self.dd_acid_kp_gain = acid_kp_gain.value + self.dd_acid_ki_gain = acid_ki_gain.value + self.dd_mixing_control_timestamp = timestamp + +# ============================================================ Overrides and Requests ============================================================ def cmd_dialysate_mixing_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the mixing control data broadcast interval override command @@ -211,7 +407,7 @@ channel_id=CanChannels.dialin_to_dd_ch_id, msg_id=MsgIds.MSG_ID_DD_BICARB_MIX_VOL_OVERRIDE_REQUEST, entity_name='DD Bicarb Mix Vol', - override_text=str(bicarb_dose_vol), + override_text=str(bicarb_mix_vol), logger=self.logger, can_interface=self.can_interface)