From 8b726d0771b3e9fdc528307acdbcd05572a9faa8 Mon Sep 17 00:00:00 2001 From: Yana Sitkovets <68400442+NogameNo-life@users.noreply.github.com> Date: Thu, 3 Aug 2023 12:32:12 +0300 Subject: [PATCH] Fix inheritance "valve_DO2" (#598) * Remove DO2 * Add test valve_DO2 * Add explict to constructor valve_DO2 * Add get_state * Add test for valve state * Group public methods * Update get_valve_state test --- PAC/common/PAC_dev.cpp | 6 ++-- PAC/common/PAC_dev.h | 62 ++++++++++++++++++++++-------------------- test/PAC_dev_tests.cpp | 19 +++++++++++++ 3 files changed, 54 insertions(+), 33 deletions(-) diff --git a/PAC/common/PAC_dev.cpp b/PAC/common/PAC_dev.cpp index 8fee22a52..08b94122e 100644 --- a/PAC/common/PAC_dev.cpp +++ b/PAC/common/PAC_dev.cpp @@ -3231,7 +3231,7 @@ digital_io_device::~digital_io_device() //----------------------------------------------------------------------------- #ifndef DEBUG_NO_IO_MODULES -int DO2::get_state() +int valve_DO2::get_state() { int b1 = get_DO( DO_INDEX_1 ); int b2 = get_DO( DO_INDEX_2 ); @@ -3239,13 +3239,13 @@ int DO2::get_state() return b2; } //----------------------------------------------------------------------------- -void DO2::direct_on() +void valve_DO2::direct_on() { set_DO( DO_INDEX_1, 0 ); set_DO( DO_INDEX_2, 1 ); } //----------------------------------------------------------------------------- -void DO2::direct_off() +void valve_DO2::direct_off() { set_DO( DO_INDEX_1, 1 ); set_DO( DO_INDEX_2, 0 ); diff --git a/PAC/common/PAC_dev.h b/PAC/common/PAC_dev.h index 709d73406..0d6e503b3 100644 --- a/PAC/common/PAC_dev.h +++ b/PAC/common/PAC_dev.h @@ -847,33 +847,6 @@ class DO1 : public digital_io_device #endif // DEBUG_NO_IO_MODULES }; //----------------------------------------------------------------------------- -/// @brief Устройство с двумя дискретными выходами. -/// -/// Это может быть клапан, насос... -class DO2 : public digital_io_device - { - public: - DO2( const char *dev_name, device::DEVICE_TYPE type, - device::DEVICE_SUB_TYPE sub_type, u_int par_cnt ): - digital_io_device( dev_name, type, sub_type, par_cnt ) - { - } - -#ifndef DEBUG_NO_IO_MODULES - public: - int get_state(); - void direct_on(); - void direct_off(); - - private: - enum CONSTANTS - { - DO_INDEX_1 = 0, ///< Индекс канала дискретного выхода №1. - DO_INDEX_2, ///< Индекс канала дискретного выхода №2. - }; -#endif // DEBUG_NO_IO_MODULES - }; -//----------------------------------------------------------------------------- class valve_DO2_DI2_bistable; /// @brief Устройство с обратными связями. @@ -3757,12 +3730,41 @@ class valve_DO1 : public valve }; //----------------------------------------------------------------------------- /// @brief Клапан с двумя каналами управления. -class valve_DO2 : public DO2 +class valve_DO2 : public valve { public: - valve_DO2( const char *dev_name ): DO2( dev_name, DT_V, DST_V_DO2, 0 ) + explicit valve_DO2( const char* dev_name ) : valve( dev_name, DT_V, DST_V_DO2 ) { } + /// @brief Получение состояния клапана без учета обратной связи. + VALVE_STATE get_valve_state() override + { +#ifdef DEBUG_NO_IO_MODULES + return ( VALVE_STATE ) digital_io_device::get_state(); +#else + return ( VALVE_STATE ) get_state(); +#endif // DEBUG_NO_IO_MODULES + } + + /// @brief Получение состояния обратной связи. + bool get_fb_state() override + { + return true; + } + +#ifndef DEBUG_NO_IO_MODULES + public: + int get_state(); + void direct_on(); + void direct_off(); + + private: + enum CONSTANTS + { + DO_INDEX_1 = 0, ///< Индекс канала дискретного выхода №1. + DO_INDEX_2, ///< Индекс канала дискретного выхода №2. + }; +#endif // DEBUG_NO_IO_MODULES }; //----------------------------------------------------------------------------- class i_motor : public device @@ -3775,7 +3777,7 @@ class i_motor : public device void reverse(); /// @brief Получение линейной скорости (например, приводимого в - // движение конвейра). + // движение конвейера). virtual float get_linear_speed() const; /// @brief Получение текущего тока мотора diff --git a/test/PAC_dev_tests.cpp b/test/PAC_dev_tests.cpp index 1ae0fd21f..90e8d6655 100644 --- a/test/PAC_dev_tests.cpp +++ b/test/PAC_dev_tests.cpp @@ -788,6 +788,25 @@ TEST( valve_iol_terminal_DO1_DI2, get_fb_state ) EXPECT_EQ( true, V1.get_fb_state() ); } +TEST( valve_DO2, valve_DO2 ) + { + valve_DO2 V2( "V2" ); + EXPECT_STREQ( "Клапан", V2.get_type_name() ); + EXPECT_STREQ( "V2", V2.get_name()); + } + +TEST( valve_DO2, get_valve_state ) + { + valve_DO2 V2( "V2" ); + V2.direct_on(); + EXPECT_EQ( 1, V2.get_valve_state() ); + } + +TEST( valve_DO2, get_fb_state ) + { + valve_DO2 V2( "V2" ); + EXPECT_EQ( true, V2.get_fb_state() ); + } TEST( level_s, is_active ) {