Commit 84ee08fd authored by Pavel Vainerman's avatar Pavel Vainerman

(codegen): Вынес prev_xx переменные в private, т.к. они нужны исключительно,

для внутренней работы.
parent 9bec6be7
...@@ -31,7 +31,6 @@ Version 2.0 ...@@ -31,7 +31,6 @@ Version 2.0
- использовать везде где нужно(и можно) вместо прямых указателей.. shared_ptr и т.п. (например для conf и других глобальных переменных) - использовать везде где нужно(и можно) вместо прямых указателей.. shared_ptr и т.п. (например для conf и других глобальных переменных)
- встроить различные сигналы (sigc).. в ModbusExchange и другие классы.. - встроить различные сигналы (sigc).. в ModbusExchange и другие классы..
- (uniset-codegen): вынести prev_ переменные в private т.к. они исключительно для "внутренней" работы нужны (updateOutputs)
- (uniset-codegen): сделать управление ключом "force" для updateOutputs(force) (из командной строки, конф.файла и src.xml) - (uniset-codegen): сделать управление ключом "force" для updateOutputs(force) (из командной строки, конф.файла и src.xml)
- ТЕСТЫ! ТЕСТЫ! ТЕСТЫ! - ТЕСТЫ! ТЕСТЫ! ТЕСТЫ!
......
...@@ -37,11 +37,15 @@ ...@@ -37,11 +37,15 @@
<xsl:if test="normalize-space(@name)=$OID"> <xsl:if test="normalize-space(@name)=$OID">
<xsl:choose> <xsl:choose>
<xsl:when test="$GENTYPE='H'"> <xsl:when test="$GENTYPE='H'">
<xsl:if test="normalize-space(@vartype)!='io'"> <xsl:if test="normalize-space(@vartype)!='io'">const UniSetTypes::ObjectId <xsl:value-of select="../../@name"/>; /*!&lt; <xsl:value-of select="../../@textname"/> */
const UniSetTypes::ObjectId <xsl:value-of select="../../@name"/>; /*!&lt; <xsl:value-of select="../../@textname"/> */
UniSetTypes::ObjectId node_<xsl:value-of select="../../@name"/>; UniSetTypes::ObjectId node_<xsl:value-of select="../../@name"/>;
long <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>; /*!&lt; текущее значение */ long <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>; /*!&lt; текущее значение '<xsl:value-of select="../../@name"/>' */
long prev_<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>; /*!&lt; предыдущее значение */ </xsl:if>
<xsl:if test="normalize-space(@vartype)='io'">#warning (uniset-codegen): vartype='io' NO LONGER SUPPORTED! (ignore variable: '<xsl:value-of select="../../@name"/>')
</xsl:if>
</xsl:when>
<xsl:when test="$GENTYPE='H-PRIVATE'">
<xsl:if test="normalize-space(@vartype)!='io'">long prev_<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>; /*!&lt; предыдущее значение '<xsl:value-of select="../../@name"/>'*/
</xsl:if> </xsl:if>
<xsl:if test="normalize-space(@vartype)='io'">#warning (uniset-codegen): vartype='io' NO LONGER SUPPORTED! (ignore variable: '<xsl:value-of select="../../@name"/>') <xsl:if test="normalize-space(@vartype)='io'">#warning (uniset-codegen): vartype='io' NO LONGER SUPPORTED! (ignore variable: '<xsl:value-of select="../../@name"/>')
</xsl:if> </xsl:if>
...@@ -82,7 +86,8 @@ ...@@ -82,7 +86,8 @@
<xsl:choose> <xsl:choose>
<xsl:when test="$GENTYPE='H'">const UniSetTypes::ObjectId mid_<xsl:value-of select="normalize-space(../../@name)"/>; /*!&lt; <xsl:value-of select="normalize-space(../../@text)"/> */ <xsl:when test="$GENTYPE='H'">const UniSetTypes::ObjectId mid_<xsl:value-of select="normalize-space(../../@name)"/>; /*!&lt; <xsl:value-of select="normalize-space(../../@text)"/> */
bool m_<xsl:value-of select="normalize-space(../../@name)"/>; /*!&lt; текущее состояние (сообщения) */ bool m_<xsl:value-of select="normalize-space(../../@name)"/>; /*!&lt; текущее состояние (сообщения) */
bool prev_m_<xsl:value-of select="normalize-space(../../@name)"/>; /*!&lt; предыдущее состояние (сообщения) */ </xsl:when>
<xsl:when test="$GENTYPE='H-PRIVATE'">bool prev_m_<xsl:value-of select="normalize-space(../../@name)"/>; /*!&lt; предыдущее состояние (сообщения) */
</xsl:when> </xsl:when>
<xsl:when test="$GENTYPE='C'">mid_<xsl:value-of select="normalize-space(../../@name)"/>(<xsl:value-of select="../../@id"/>), <xsl:when test="$GENTYPE='C'">mid_<xsl:value-of select="normalize-space(../../@name)"/>(<xsl:value-of select="../../@id"/>),
m_<xsl:value-of select="normalize-space(../../@name)"/>(false), m_<xsl:value-of select="normalize-space(../../@name)"/>(false),
......
...@@ -81,6 +81,21 @@ class <xsl:value-of select="$CLASSNAME"/>_SK: ...@@ -81,6 +81,21 @@ class <xsl:value-of select="$CLASSNAME"/>_SK:
private: private:
<xsl:call-template name="COMMON-HEAD-PRIVATE"/> <xsl:call-template name="COMMON-HEAD-PRIVATE"/>
// Используемые идентификаторы
<xsl:for-each select="//sensors/item">
<xsl:call-template name="setvar">
<xsl:with-param name="GENTYPE" select="'H-PRIVATE'"/>
</xsl:call-template>
</xsl:for-each>
// Используемые идентификаторы сообщений
<xsl:for-each select="//sensors/item">
<xsl:call-template name="setmsg">
<xsl:with-param name="GENTYPE" select="'H-PRIVATE'"/>
</xsl:call-template>
</xsl:for-each>
}; };
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
......
...@@ -76,13 +76,10 @@ class <xsl:value-of select="$CLASSNAME"/>_SK: ...@@ -76,13 +76,10 @@ class <xsl:value-of select="$CLASSNAME"/>_SK:
const UniSetTypes::ObjectId <xsl:value-of select="@name"/>; /*!&lt; <xsl:value-of select="@comment"/> */ const UniSetTypes::ObjectId <xsl:value-of select="@name"/>; /*!&lt; <xsl:value-of select="@comment"/> */
UniSetTypes::ObjectId node_<xsl:value-of select="@name"/>; UniSetTypes::ObjectId node_<xsl:value-of select="@name"/>;
bool m_<xsl:value-of select="@name"/>; /*!&lt; текущее состояние /> */ bool m_<xsl:value-of select="@name"/>; /*!&lt; текущее состояние /> */
bool prev_m_<xsl:value-of select="@name"/>; /*!&lt; предыдущее состояние /> */
</xsl:for-each> </xsl:for-each>
// Текущее значение и предыдущее значение // Текущее значение
<xsl:for-each select="//smap/item"> <xsl:for-each select="//smap/item">long <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>;
long <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>;
long prev_<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>;
</xsl:for-each> </xsl:for-each>
// --- public variables --- // --- public variables ---
...@@ -155,6 +152,14 @@ class <xsl:value-of select="$CLASSNAME"/>_SK: ...@@ -155,6 +152,14 @@ class <xsl:value-of select="$CLASSNAME"/>_SK:
</xsl:if> </xsl:if>
</xsl:for-each>// --- end of private variables --- </xsl:for-each>// --- end of private variables ---
// предыдущее значение (для работы UpdateValue())
<xsl:for-each select="//smap/item">long prev_<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>;
</xsl:for-each>
// Используемые идентификаторы сообщений
<xsl:for-each select="//msgmap/item">bool prev_m_<xsl:value-of select="@name"/>; /*!&lt; предыдущее состояние /> */
</xsl:for-each>
<xsl:call-template name="COMMON-HEAD-PRIVATE"/> <xsl:call-template name="COMMON-HEAD-PRIVATE"/>
bool end_private; // вспомогательное поле (для внутреннего использования при генерировании кода) bool end_private; // вспомогательное поле (для внутреннего использования при генерировании кода)
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ. ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// generate timestamp: 2014-11-24+03:00 // generate timestamp: 2014-11-30+03:00
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#ifndef UObject_SK_H_ #ifndef UObject_SK_H_
#define UObject_SK_H_ #define UObject_SK_H_
...@@ -21,24 +21,24 @@ ...@@ -21,24 +21,24 @@
#include "DebugStream.h" #include "DebugStream.h"
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
class UObject_SK: class UObject_SK:
public UniSetObject, public UniSetObject,
public LT_Object public LT_Object
{ {
public: public:
UObject_SK( UniSetTypes::ObjectId id, xmlNode* node=UniSetTypes::uniset_conf()->getNode("UObject"), const std::string& argprefix="" ); UObject_SK( UniSetTypes::ObjectId id, xmlNode* node=UniSetTypes::uniset_conf()->getNode("UObject"), const std::string& argprefix="" );
UObject_SK(); UObject_SK();
virtual ~UObject_SK(); virtual ~UObject_SK();
bool alarm( UniSetTypes::ObjectId sid, bool state ); bool alarm( UniSetTypes::ObjectId sid, bool state );
long getValue( UniSetTypes::ObjectId sid ); long getValue( UniSetTypes::ObjectId sid );
void setValue( UniSetTypes::ObjectId sid, long value ); void setValue( UniSetTypes::ObjectId sid, long value );
void askSensor( UniSetTypes::ObjectId sid, UniversalIO::UIOCommand, UniSetTypes::ObjectId node = UniSetTypes::uniset_conf()->getLocalNode() ); void askSensor( UniSetTypes::ObjectId sid, UniversalIO::UIOCommand, UniSetTypes::ObjectId node = UniSetTypes::uniset_conf()->getLocalNode() );
void updateValues(); void updateValues();
void setMsg( UniSetTypes::ObjectId code, bool state ); void setMsg( UniSetTypes::ObjectId code, bool state );
DebugStream mylog; DebugStream mylog;
void init_dlog( DebugStream& d ); void init_dlog( DebugStream& d );
// "синтаксический сахар"..для логов // "синтаксический сахар"..для логов
#define myinfo if( mylog.debugging(Debug::INFO) ) mylog #define myinfo if( mylog.debugging(Debug::INFO) ) mylog
...@@ -55,86 +55,90 @@ class UObject_SK: ...@@ -55,86 +55,90 @@ class UObject_SK:
#define mylog9 if( mylog.debugging(Debug::LEVEL9) ) mylog #define mylog9 if( mylog.debugging(Debug::LEVEL9) ) mylog
// Используемые идентификаторы // Используемые идентификаторы
// Используемые идентификаторы сообщений // Используемые идентификаторы сообщений
// Текущее значение и предыдущее значение // Текущее значение
// --- public variables --- // --- public variables ---
// --- end of public variables --- // --- end of public variables ---
protected: protected:
// --- protected variables --- // --- protected variables ---
// ---- end of protected variables ---- // ---- end of protected variables ----
virtual void callback() override; virtual void callback() override;
virtual void processingMessage( UniSetTypes::VoidMessage* msg ) override; virtual void processingMessage( UniSetTypes::VoidMessage* msg ) override;
virtual void sysCommand( const UniSetTypes::SystemMessage* sm ) override; virtual void sysCommand( const UniSetTypes::SystemMessage* sm ) override;
virtual void askSensors( UniversalIO::UIOCommand cmd ){} virtual void askSensors( UniversalIO::UIOCommand cmd ){}
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ) override{} virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ) override{}
virtual void timerInfo( const UniSetTypes::TimerMessage* tm ) override{} virtual void timerInfo( const UniSetTypes::TimerMessage* tm ) override{}
virtual void sigterm( int signo ) override; virtual void sigterm( int signo ) override;
virtual bool activateObject() override; virtual bool activateObject() override;
virtual void testMode( bool state ); virtual void testMode( bool state );
void updatePreviousValues(); void updatePreviousValues();
void checkSensors(); void checkSensors();
void updateOutputs( bool force ); void updateOutputs( bool force );
void preAskSensors( UniversalIO::UIOCommand cmd ); void preAskSensors( UniversalIO::UIOCommand cmd );
void preSensorInfo( const UniSetTypes::SensorMessage* sm ); void preSensorInfo( const UniSetTypes::SensorMessage* sm );
void preTimerInfo( const UniSetTypes::TimerMessage* tm ); void preTimerInfo( const UniSetTypes::TimerMessage* tm );
void waitSM( int wait_msec, UniSetTypes::ObjectId testID = UniSetTypes::DefaultObjectId ); void waitSM( int wait_msec, UniSetTypes::ObjectId testID = UniSetTypes::DefaultObjectId );
void resetMsg(); void resetMsg();
Trigger trResetMsg; Trigger trResetMsg;
PassiveTimer ptResetMsg; PassiveTimer ptResetMsg;
int resetMsgTime; int resetMsgTime;
// Выполнение очередного шага программы // Выполнение очередного шага программы
virtual void step(){} virtual void step(){}
int sleep_msec; /*!< пауза между итерациями */ int sleep_msec; /*!< пауза между итерациями */
bool active; bool active;
UniSetTypes::ObjectId smTestID; /*!< идентификатор датчика для тестирования готовности SM */ UniSetTypes::ObjectId smTestID; /*!< идентификатор датчика для тестирования готовности SM */
// управление датчиком "сердцебиения" // управление датчиком "сердцебиения"
PassiveTimer ptHeartBeat; /*! < период "сердцебиения" */ PassiveTimer ptHeartBeat; /*! < период "сердцебиения" */
UniSetTypes::ObjectId idHeartBeat; /*! < идентификатор датчика (AI) "сердцебиения" */ UniSetTypes::ObjectId idHeartBeat; /*! < идентификатор датчика (AI) "сердцебиения" */
int maxHeartBeat; /*! < сохраняемое значение */ int maxHeartBeat; /*! < сохраняемое значение */
xmlNode* confnode; xmlNode* confnode;
/*! получить числовое свойство из конф. файла по привязанной confnode */ /*! получить числовое свойство из конф. файла по привязанной confnode */
int getIntProp(const std::string& name) { return UniSetTypes::uniset_conf()->getIntProp(confnode, name); } int getIntProp(const std::string& name) { return UniSetTypes::uniset_conf()->getIntProp(confnode, name); }
/*! получить текстовое свойство из конф. файла по привязанной confnode */ /*! получить текстовое свойство из конф. файла по привязанной confnode */
inline const std::string getProp(const std::string& name) { return UniSetTypes::uniset_conf()->getProp(confnode, name); } inline const std::string getProp(const std::string& name) { return UniSetTypes::uniset_conf()->getProp(confnode, name); }
int smReadyTimeout; /*!< время ожидания готовности SM */ int smReadyTimeout; /*!< время ожидания готовности SM */
std::atomic_bool activated; std::atomic_bool activated;
int activateTimeout; /*!< время ожидания готовности UniSetObject к работе */ int activateTimeout; /*!< время ожидания готовности UniSetObject к работе */
PassiveTimer ptStartUpTimeout; /*!< время на блокировку обработки WatchDog, если недавно был StartUp */ PassiveTimer ptStartUpTimeout; /*!< время на блокировку обработки WatchDog, если недавно был StartUp */
int askPause; /*!< пауза между неудачными попытками заказать датчики */ int askPause; /*!< пауза между неудачными попытками заказать датчики */
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
private: private:
// --- private variables --- // --- private variables ---
// --- end of private variables --- // --- end of private variables ---
// предыдущее значение (для работы UpdateValue())
bool end_private; // вспомогательное поле (для внутреннего использования при генерировании кода)
// Используемые идентификаторы сообщений
bool end_private; // вспомогательное поле (для внутреннего использования при генерировании кода)
}; };
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment