Exemplo n.º 1
0
    def update(self):
        """Update the valve state.
        """

        if self._state.is_state(ValveState.Prepare):

            delta_pos = self.target_position - self.current_position

            if delta_pos == 0:
                self.__stop()
                self._state.set_state(ValveState.Wait)
                return

            time_to_move = self.__to_time(abs(delta_pos))
            self.__logger.debug("Time: {}".format(time_to_move))

            self.__move_timer.expiration_time = time_to_move
            self.__move_timer.update_last_time()

            if delta_pos > 0:
                self.__open_valve()

            elif delta_pos < 0:
                self.__close_valve()

            self._state.set_state(ValveState.Execute)

        elif self._state.is_state(ValveState.Execute):

            self.__move_timer.update()
            if self.__move_timer.expired:
                self.__move_timer.clear()
                self.__stop()
                self._current_position = self.target_position
                self._state.set_state(ValveState.Wait)

            cw_limit_state = False  # self.__get_close_limit()
            ccw_limit_state = False  # self.__get_open_limit()
            if cw_limit_state or ccw_limit_state:
                self.__stop()
                GlobalErrorHandler.log_hardware_limit(
                    self.__logger,
                    "{} has raised end position.".format(self.name))
                self._current_position = self.target_position
                self._state.set_state(ValveState.Wait)

        elif self._state.is_state(ValveState.Calibrate):

            # Wait to start.
            if self.__calibration_state.is_state(CalibrationState.NONE):
                self.__calibration_state.set_state(CalibrationState.OpenValve)
                self.__stop()

            # Open the valve.
            if self.__calibration_state.is_state(CalibrationState.OpenValve):
                self.__stop()
                self.__open_valve()
                self.__calibration_state.set_state(CalibrationState.EnsureOpen)
                self.__limit_timer.update_last_time()

            # Wait until it si open at 100%.
            if self.__calibration_state.is_state(CalibrationState.EnsureOpen):

                # Get CCW limit switch state.
                ccw_limit_state = self.__get_open_limit()
                if ccw_limit_state:
                    self.__t0 = time.time()
                    self.__calibration_state.set_state(
                        CalibrationState.CloseValve)

                # Prevent with timer,
                # if the valve is not reacting properly.
                self.__limit_timer.update()
                if self.__limit_timer.expired:
                    self.__limit_timer.clear()
                    self.__calibration_state.set_state(CalibrationState.Error)

            # Close the valve.
            if self.__calibration_state.is_state(CalibrationState.CloseValve):
                self.__stop()
                self.__close_valve()
                self.__calibration_state.set_state(
                    CalibrationState.EnsureClose)
                self.__limit_timer.update_last_time()

            # Wait until it si open at 100%.
            if self.__calibration_state.is_state(CalibrationState.EnsureClose):

                # Get CW limit switch state.
                cw_limit_state = self.__get_close_limit()
                if cw_limit_state:
                    self.__t1 = time.time()
                    self.__calibration_state.set_state(
                        CalibrationState.YouDoTheMath)

                # Prevent with timer,
                # if the valve is not reacting properly.
                self.__limit_timer.update()
                if self.__limit_timer.expired:
                    self.__limit_timer.clear()
                    self.__calibration_state.set_state(CalibrationState.Error)

            # Make calculations.
            if self.__calibration_state.is_state(
                    CalibrationState.YouDoTheMath):
                self.__stop()
                self.__dt = self.__t1 - self.__t0
                self._state.set_state(ValveState.Wait)

            # Close the valve.
            if self.__calibration_state.is_state(CalibrationState.Error):

                GlobalErrorHandler.log_hardware_malfunction(
                    self.__logger,
                    "The valve {} can not calibrated.".format(self.name))
                self._state.set_state(ValveState.Wait)
Exemplo n.º 2
0
Arquivo: modv1.py Projeto: bgerp/ztm
    def update(self):

        if self.__blinds_state.is_state(BlindsState.Prepare):

            delta_pos = self.__new_position - self.__current_position

            if delta_pos == 0:
                self.__stop()
                self.__blinds_state.set_state(BlindsState.Wait)
                return

            time_to_move = self.__to_time(abs(delta_pos))
            self.__logger.debug("Time: {}".format(time_to_move))

            self.__move_timer.expiration_time = time_to_move
            self.__move_timer.update_last_time()

            if delta_pos > 0:
                self.__turn_cw()

            elif delta_pos < 0:
                self.__turn_ccw()

            self.__blinds_state.set_state(BlindsState.Execute)

        elif self.__blinds_state.is_state(BlindsState.Execute):

            self.__move_timer.update()
            if self.__move_timer.expired:
                self.__move_timer.clear()
                self.__stop()
                self.__current_position = self.__new_position
                self.__blinds_state.set_state(BlindsState.Wait)

            input_fb = self.__reed_fb()
            if input_fb:
                self.__stop()
                GlobalErrorHandler.log_hardware_limit(self.__logger, "{} has raised end position.".format(self.name))
                self.__current_position = self.__new_position
                self.__blinds_state.set_state(BlindsState.Wait)

        elif self.__blinds_state.is_state(BlindsState.Calibrate):

            if self.__calibration_state.is_state(CalibrationState.Stop):

                self.__stop()

                self.__current_position = 0
                self.__new_position = 0

                self.__calibration_state.set_state(CalibrationState.TurnCW)

            elif self.__calibration_state.is_state(CalibrationState.TurnCW):

                self.__turn_cw()

                self.__calibration_state.set_state(CalibrationState.WaitCurStabCW)

            elif self.__calibration_state.is_state(CalibrationState.WaitCurStabCW):

                if self.__timout_counter >= 5:
                    self.__timout_counter = 0
                    self.__calibration_state.set_state(CalibrationState.WaitLimitCW)
                else:
                    self.__timout_counter += 1

            elif self.__calibration_state.is_state(CalibrationState.WaitLimitCW):

                fb_value = self.__reed_fb()
                if fb_value:

                    self.__stop()

                    self.__t1 = time.time()

                    self.__calibration_state.set_state(CalibrationState.TurnCCW)

            elif self.__calibration_state.is_state(CalibrationState.TurnCCW):

                self.__turn_ccw()

                self.__calibration_state.set_state(CalibrationState.WaitCurStabCCW)

            elif self.__calibration_state.is_state(CalibrationState.WaitCurStabCCW):

                if self.__timout_counter >= 5:
                    self.__timout_counter = 0
                    self.__calibration_state.set_state(CalibrationState.WaitLimitCCW)
                else:
                    self.__timout_counter += 1

            elif self.__calibration_state.is_state(CalibrationState.WaitLimitCCW):

                fb_value = self.__reed_fb()
                if fb_value:

                    self.__stop()

                    self.__t2 = time.time()

                    time_delta = self.__t2 - self.__t1
                    time_delta -= 4
                    self.__deg_per_sec = 180 / time_delta
                    self.__logger.info("DPS: {}".format(self.__deg_per_sec))

                    self.__turn_cw()

                    self.__calibration_state.set_state(CalibrationState.ExitTightness)

            elif self.__calibration_state.is_state(CalibrationState.ExitTightness):

                if self.__timout_counter >= 12:
                    self.__timout_counter = 0
                    self.__stop()
                    self.__calibration_state.set_state(CalibrationState.WaitCurrentStab)
                else:
                    self.__timout_counter += 1

            elif self.__calibration_state.is_state(CalibrationState.WaitCurrentStab):

                if self.__timout_counter >= 4:
                    self.__timout_counter = 0
                    self.__calibration_state.set_state(CalibrationState.GoTo90)
                else:
                    self.__timout_counter += 1

            elif self.__calibration_state.is_state(CalibrationState.GoTo90):

                self.__calibration_state.set_state(CalibrationState.NONE)
                self.__set_position(90)

                return