Commit bfb0a5b0 authored by Pavel Vainerman's avatar Pavel Vainerman

Revert "(codegen): добавил проверку что 'выход' сохранился в SM."

This reverts commit 0e10a4b9.
parent 741852ac
......@@ -353,22 +353,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updateOutputs( bool _force )
{
si.id = <xsl:value-of select="../../@name"/>;
si.node = node_<xsl:value-of select="../../@name"/>;
unsigned int i=0;
for( ; i&lt;setValueNumberOfAttempts; i++ )
{
ui->setValue( si,<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>, getId() );
// Проверка, что сохранилось
if( ui->getValue(si.id,si.node) == <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> )
break;
}
if( i>=setValueNumberOfAttempts )
{
ostringstream err;
err &lt;&lt; myname &lt;&lt; "(setmsg): failed setValue for sid=" &lt;&lt; si.id;
mycrit &lt;&lt; err.str() &lt;&lt; endl;
throw UniSetTypes::SystemError(err.str());
}
}
catch( const Exception&amp; ex )
{
......@@ -383,22 +368,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updateOutputs( bool _force )
{
si.id = <xsl:value-of select="../../@name"/>;
si.node = node_<xsl:value-of select="../../@name"/>;
unsigned int i=0;
for( ; i&lt;setValueNumberOfAttempts; i++ )
{
ui->setValue( si,<xsl:value-of select="$setval"/>, getId() );
// Проверка, что сохранилось
if( ui->getValue(si.id,si.node) == <xsl:value-of select="$setval"/> )
break;
}
if( i>=setValueNumberOfAttempts )
{
ostringstream err;
err &lt;&lt; myname &lt;&lt; "(setmsg): failed setValue for sid=" &lt;&lt; si.id;
mycrit &lt;&lt; err.str() &lt;&lt; endl;
throw UniSetTypes::SystemError(err.str());
}
}
catch( const Exception&amp; ex )
{
......
......@@ -291,22 +291,7 @@ UniSetTypes::ObjectId <xsl:value-of select="$CLASSNAME"/>_SK::getSMTestID()
{
si.id = <xsl:value-of select="../../@name"/>;
si.node = node_<xsl:value-of select="../../@name"/>;
unsigned int i=0;
for( ; i&lt;setValueNumberOfAttempts; i++ )
{
ui->setValue( si,<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>, getId() );
// Проверка, что сохранилось
if( ui->getValue(si.id,si.node) == <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> )
break;
}
if( i>=setValueNumberOfAttempts )
{
ostringstream err;
err &lt;&lt; myname &lt;&lt; "(setdata): failed setValue for sid=" &lt;&lt; si.id;
mycrit &lt;&lt; err.str() &lt;&lt; endl;
throw UniSetTypes::SystemError(err.str());
}
}
catch( const Exception&amp; ex )
{
......@@ -321,22 +306,7 @@ UniSetTypes::ObjectId <xsl:value-of select="$CLASSNAME"/>_SK::getSMTestID()
{
si.id = <xsl:value-of select="../../@name"/>;
si.node = node_<xsl:value-of select="../../@name"/>;
unsigned int i=0;
for( ; i&lt;setValueNumberOfAttempts; i++ )
{
ui->setValue( si,<xsl:value-of select="$setval"/>, getId() );
// Проверка, что сохранилось
if( ui->getValue(si.id,si.node) == <xsl:value-of select="$setval"/> )
break;
}
if( i>=setValueNumberOfAttempts )
{
ostringstream err;
err &lt;&lt; myname &lt;&lt; "(setdata): failed setValue for sid=" &lt;&lt; si.id;
mycrit &lt;&lt; err.str() &lt;&lt; endl;
throw UniSetTypes::SystemError(err.str());
}
}
catch( const Exception&amp; ex )
{
......
......@@ -293,22 +293,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preAskSensors( UniversalIO::UIOComm
{
si.id = <xsl:value-of select="@name"/>;
si.node = node_<xsl:value-of select="@name"/>;
unsigned int i=0;
for( ; i&lt;setValueNumberOfAttempts; i++ )
{
ui->setValue( si, <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>, getId() );
// Проверка, что сохранилось
if( ui->getValue(si.id,si.node) == <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> )
break;
}
if( i>=setValueNumberOfAttempts )
{
ostringstream err;
err &lt;&lt; myname &lt;&lt; "(setdata): failed setValue for sid=" &lt;&lt; si.id;
mycrit &lt;&lt; err.str() &lt;&lt; endl;
throw UniSetTypes::SystemError(err.str());
}
}
catch( UniSetTypes::Exception&amp; ex )
{
......@@ -326,22 +311,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preAskSensors( UniversalIO::UIOComm
{
si.id = <xsl:value-of select="@name"/>;
si.node = node_<xsl:value-of select="@name"/>;
unsigned int i=0;
for( ; i&lt;setValueNumberOfAttempts; i++ )
{
ui->setValue( si,<xsl:value-of select="$setval"/>, getId() );
// Проверка, что сохранилось
if( ui->getValue(si.id,si.node) == <xsl:value-of select="$setval"/> )
break;
}
if( i>=setValueNumberOfAttempts )
{
ostringstream err;
err &lt;&lt; myname &lt;&lt; "(setdata): failed setValue for sid=" &lt;&lt; si.id;
mycrit &lt;&lt; err.str() &lt;&lt; endl;
throw UniSetTypes::SystemError(err.str());
}
}
catch( UniSetTypes::Exception&amp; ex )
{
......
......@@ -234,22 +234,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::initFromSM()
{
si.id = <xsl:value-of select="@name"/>;
si.node = node_<xsl:value-of select="@name"/>;
unsigned int i=0;
for( ; i&lt;setValueNumberOfAttempts; i++ )
{
ui->setValue( si, <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>, getId() );
// Проверка, что сохранилось
if( ui->getValue(si.id,si.node) == <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> )
break;
}
if( i>=setValueNumberOfAttempts )
{
ostringstream err;
err &lt;&lt; myname &lt;&lt; "(setdata): failed setValue for sid=" &lt;&lt; si.id;
mycrit &lt;&lt; err.str() &lt;&lt; endl;
throw UniSetTypes::SystemError(err.str());
}
}
}
catch( const Exception&amp; ex )
......@@ -267,22 +252,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::initFromSM()
{
si.id = <xsl:value-of select="@name"/>;
si.node = node_<xsl:value-of select="@name"/>;
unsigned int i=0;
for( ; i&lt;setValueNumberOfAttempts; i++ )
{
ui->setValue( si,<xsl:value-of select="$setval"/>, getId() );
// Проверка, что сохранилось
if( ui->getValue(si.id,si.node) == <xsl:value-of select="$setval"/> )
break;
}
if( i>=setValueNumberOfAttempts )
{
ostringstream err;
err &lt;&lt; myname &lt;&lt; "(setdata): failed setValue for sid=" &lt;&lt; si.id;
mycrit &lt;&lt; err.str() &lt;&lt; endl;
throw UniSetTypes::SystemError(err.str());
}
}
}
catch( const Exception&amp; ex )
......@@ -299,22 +269,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::initFromSM()
{
si.id = <xsl:value-of select="@name"/>;
si.node = node_<xsl:value-of select="@name"/>;
unsigned int i=0;
for( ; i&lt;setValueNumberOfAttempts; i++ )
{
ui->setValue( si,(long)m_<xsl:value-of select="@name"/>, getId() );
// Проверка, что сохранилось
if( ui->getValue(si.id,si.node) == (long)m_<xsl:value-of select="@name"/> )
break;
}
if( i>=setValueNumberOfAttempts )
{
ostringstream err;
err &lt;&lt; myname &lt;&lt; "(setmsg): failed setValue for sid=" &lt;&lt; si.id;
mycrit &lt;&lt; err.str() &lt;&lt; endl;
throw UniSetTypes::SystemError(err.str());
}
}
}
catch( const Exception&amp; ex )
......
......@@ -345,7 +345,6 @@
</xsl:template>
<xsl:template name="COMMON-HEAD-PRIVATE">
unsigned int setValueNumberOfAttempts = { 3 }; // количество попыток, сохранить 'out' (см. updateOutputs)
<xsl:if test="normalize-space($VARMAP)='1'">
class PtrMapHashFn
{
......@@ -908,8 +907,6 @@ end_private(false)
maxHeartBeat = conf->getArgPInt("--" + argprefix + "heartbeat-max",it.getProp("heartbeat_max"), 10);
}
setValueNumberOfAttempts = conf->getArgPInt("--" + argprefix + "setValueNumberOfAttempts",it.getProp("setValueNumberOfAttempts"),setValueNumberOfAttempts);
// Инициализация значений
<xsl:for-each select="//smap/item">
<xsl:if test="normalize-space(@default)=''">
......@@ -997,7 +994,6 @@ end_private(false)
vmonit(maxHeartBeat);
vmonit(activateTimeout);
vmonit(smReadyTimeout);
vmonit(setValueNumberOfAttempts);
}
// -----------------------------------------------------------------------------
......@@ -1361,7 +1357,6 @@ askPause(uniset_conf()->getPIntProp(cnode,"askPause",2000))
si.node = conf->getLocalNode();
sleep_msec = conf->getArgPInt("--" + argprefix + "sleep-msec","<xsl:call-template name="settings-alone"><xsl:with-param name="varname" select="'sleep-msec'"/></xsl:call-template>", <xsl:call-template name="settings-alone"><xsl:with-param name="varname" select="'sleep-msec'"/></xsl:call-template>);
setValueNumberOfAttempts = conf->getArgPInt("--" + argprefix + "setValueNumberOfAttempts",it.getProp("setValueNumberOfAttempts"),setValueNumberOfAttempts);
string s_resetTime("<xsl:call-template name="settings-alone"><xsl:with-param name="varname" select="'sleep-msec'"/></xsl:call-template>");
if( s_resetTime.empty() )
......
......@@ -14,7 +14,7 @@
Name: libuniset2
Version: 2.3
Release: alt6
Release: alt5
Summary: UniSet - library for building distributed industrial control systems
License: LGPL
......@@ -483,9 +483,6 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# ..
%changelog
* Fri May 27 2016 Pavel Vainerman <pv@altlinux.ru> 2.3-alt6
- codegen: added several attempts to save the value
* Wed May 11 2016 Pavel Vainerman <pv@altlinux.ru> 2.3-alt5
- fixes after coverity_scan
......
......@@ -224,7 +224,6 @@
- \b --argprefix-activate-timeout msec
- \b --argprefix-startup-timeout msec
- \b --argprefix-log-[add|del]-levels xxx,xxx,xxx
- \b --argprefix-setValueNumberOfAttempts num
\section pg_Codegen_Configuration Конфигурирование
......@@ -255,8 +254,6 @@
- \b activateTimeout = conf->getArgPInt("--activate-timeout", 20000); - время отведённое на инициализацию процесса
- \b msec = conf->getArgPInt("--startup-timeout", 10000); - пауза, в течение которой игнорируется сообщение SystemMessage::WatchDog.
В случае если они приходят подряд.
- \b setValueNumberOfAttempts - количество попыток сохранить 'выходы'(out_xxx) в SharedMemory.
\section pg_Codegen_TestMode Специальный режим "тест" (TestMode)
......
/*
* Copyright (c) 2015 Pavel Vainerman.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, version 2.1.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Lesser Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// --------------------------------------------------------------------------
/*
DO NOT EDIT THIS FILE. IT IS AUTOGENERATED FILE.
......@@ -8,7 +22,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/
// --------------------------------------------------------------------------
// generate timestamp: 2016-05-27+03:00
// generate timestamp: 2015-12-19+03:00
// -----------------------------------------------------------------------------
#ifndef UObject_SK_H_
#define UObject_SK_H_
......@@ -29,7 +43,7 @@ class UObject_SK:
public UniSetObject
{
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();
virtual ~UObject_SK();
......@@ -43,54 +57,60 @@ class UObject_SK:
virtual bool setMsg( UniSetTypes::ObjectId code, bool state = true );
inline std::shared_ptr<DebugStream> log(){ return mylog; }
inline std::shared_ptr<LogAgregator> logAgregator(){ return loga; }
inline std::shared_ptr<DebugStream> log()
{
return mylog;
}
inline std::shared_ptr<LogAgregator> logAgregator()
{
return loga;
}
void init_dlog( std::shared_ptr<DebugStream> d );
// "синтаксический сахар"..для логов
#ifndef myinfo
#define myinfo if( log()->debugging(Debug::INFO) ) log()->info()
#endif
#ifndef mywarn
#define mywarn if( log()->debugging(Debug::WARN) ) log()->warn()
#endif
#ifndef mycrit
#define mycrit if( log()->debugging(Debug::CRIT) ) log()->crit()
#endif
#ifndef mylog1
#define mylog1 if( log()->debugging(Debug::LEVEL1) ) log()->level1()
#endif
#ifndef mylog2
#define mylog2 if( log()->debugging(Debug::LEVEL2) ) log()->level2()
#endif
#ifndef mylog3
#define mylog3 if( log()->debugging(Debug::LEVEL3) ) log()->level3()
#endif
#ifndef mylog4
#define mylog4 if( log()->debugging(Debug::LEVEL4) ) log()->level4()
#endif
#ifndef mylog5
#define mylog5 if( log()->debugging(Debug::LEVEL5) ) log()->level5()
#endif
#ifndef mylog6
#define mylog6 if( log()->debugging(Debug::LEVEL6) ) log()->level6()
#endif
#ifndef mylog7
#define mylog7 if( log()->debugging(Debug::LEVEL7) ) log()->level7()
#endif
#ifndef mylog8
#define mylog8 if( log()->debugging(Debug::LEVEL8) ) log()->level8()
#endif
#ifndef mylog9
#define mylog9 if( log()->debugging(Debug::LEVEL9) ) log()->level9()
#endif
#ifndef mylogany
#define mylogany log()->any()
#endif
#ifndef vmonit
#define vmonit( var ) vmon.add( #var, var )
#endif
#ifndef myinfo
#define myinfo if( log()->debugging(Debug::INFO) ) log()->info()
#endif
#ifndef mywarn
#define mywarn if( log()->debugging(Debug::WARN) ) log()->warn()
#endif
#ifndef mycrit
#define mycrit if( log()->debugging(Debug::CRIT) ) log()->crit()
#endif
#ifndef mylog1
#define mylog1 if( log()->debugging(Debug::LEVEL1) ) log()->level1()
#endif
#ifndef mylog2
#define mylog2 if( log()->debugging(Debug::LEVEL2) ) log()->level2()
#endif
#ifndef mylog3
#define mylog3 if( log()->debugging(Debug::LEVEL3) ) log()->level3()
#endif
#ifndef mylog4
#define mylog4 if( log()->debugging(Debug::LEVEL4) ) log()->level4()
#endif
#ifndef mylog5
#define mylog5 if( log()->debugging(Debug::LEVEL5) ) log()->level5()
#endif
#ifndef mylog6
#define mylog6 if( log()->debugging(Debug::LEVEL6) ) log()->level6()
#endif
#ifndef mylog7
#define mylog7 if( log()->debugging(Debug::LEVEL7) ) log()->level7()
#endif
#ifndef mylog8
#define mylog8 if( log()->debugging(Debug::LEVEL8) ) log()->level8()
#endif
#ifndef mylog9
#define mylog9 if( log()->debugging(Debug::LEVEL9) ) log()->level9()
#endif
#ifndef mylogany
#define mylogany log()->any()
#endif
#ifndef vmonit
#define vmonit( var ) vmon.add( #var, var )
#endif
// Вспомогательные функции для удобства логирования
// ------------------------------------------------------------
......@@ -107,16 +127,19 @@ class UObject_SK:
\param id - идентификатор датчика
\param showLinkName - TRUE - выводить SensorName, FALSE - не выводить
*/
std::string str( UniSetTypes::ObjectId id, bool showLinkName=true );
std::string str( UniSetTypes::ObjectId id, bool showLinkName = true );
/*! Вывод значения входа/выхода в формате: in_xxx(SensorName)=val
\param id - идентификатор датчика
\param showLinkName - TRUE - выводить SensorName, FALSE - не выводить
*/
std::string strval( UniSetTypes::ObjectId id, bool showLinkName=true );
std::string strval( UniSetTypes::ObjectId id, bool showLinkName = true );
/*! Вывод состояния внутренних переменных */
inline std::string dumpVars(){ return std::move(vmon.pretty_str()); }
inline std::string dumpVars()
{
return std::move(vmon.pretty_str());
}
// ------------------------------------------------------------
std::string help();
......@@ -145,13 +168,16 @@ class UObject_SK:
virtual void callback() override;
virtual void processingMessage( UniSetTypes::VoidMessage* msg ) override;
virtual void sysCommand( const UniSetTypes::SystemMessage* sm ){};
virtual void askSensors( UniversalIO::UIOCommand cmd ){}
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ) override{}
virtual void timerInfo( const UniSetTypes::TimerMessage* tm ) override{}
virtual void sysCommand( const UniSetTypes::SystemMessage* sm ) {};
virtual void askSensors( UniversalIO::UIOCommand cmd ) {}
virtual void sensorInfo( const UniSetTypes::SensorMessage* sm ) override {}
virtual void timerInfo( const UniSetTypes::TimerMessage* tm ) override {}
virtual void sigterm( int signo ) override;
virtual bool activateObject() override;
virtual std::string getMonitInfo(){ return ""; } /*!< пользовательская информация выводимая в getInfo() */
virtual std::string getMonitInfo()
{
return ""; /*!< пользовательская информация выводимая в getInfo() */
}
virtual void testMode( bool state );
void updatePreviousValues();
......@@ -164,7 +190,6 @@ class UObject_SK:
void preSysCommand( const UniSetTypes::SystemMessage* sm );
void waitSM( int wait_msec, UniSetTypes::ObjectId testID = UniSetTypes::DefaultObjectId );
void initFromSM();
UniSetTypes::ObjectId getSMTestID();
void resetMsg();
Trigger trResetMsg;
......@@ -172,7 +197,7 @@ class UObject_SK:
int resetMsgTime;
// Выполнение очередного шага программы
virtual void step(){}
virtual void step() {}
int sleep_msec; /*!< пауза между итерациями */
bool active;
......@@ -187,9 +212,15 @@ class UObject_SK:
xmlNode* 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 */
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);
}
timeout_t smReadyTimeout; /*!< время ожидания готовности SM */
std::atomic_bool activated;
......@@ -223,8 +254,6 @@ class UObject_SK:
// Используемые идентификаторы сообщений
unsigned int setValueNumberOfAttempts = { 3 }; // количество попыток, сохранить 'out' (см. updateOutputs)
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