Commit 0e10a4b9 authored by Pavel Vainerman's avatar Pavel Vainerman

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

parent 7804bea0
......@@ -353,7 +353,22 @@ 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"/>;
ui->setValue( si,<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>, getId() );
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 )
{
......@@ -368,7 +383,22 @@ 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"/>;
ui->setValue( si,<xsl:value-of select="$setval"/>, getId() );
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,7 +291,22 @@ UniSetTypes::ObjectId <xsl:value-of select="$CLASSNAME"/>_SK::getSMTestID()
{
si.id = <xsl:value-of select="../../@name"/>;
si.node = node_<xsl:value-of select="../../@name"/>;
ui->setValue( si,<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>, getId() );
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 )
{
......@@ -306,7 +321,22 @@ UniSetTypes::ObjectId <xsl:value-of select="$CLASSNAME"/>_SK::getSMTestID()
{
si.id = <xsl:value-of select="../../@name"/>;
si.node = node_<xsl:value-of select="../../@name"/>;
ui->setValue( si,<xsl:value-of select="$setval"/>, getId() );
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,7 +293,22 @@ 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"/>;
ui->setValue( si, <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>, getId() );
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 )
{
......@@ -311,7 +326,22 @@ 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"/>;
ui->setValue( si,<xsl:value-of select="$setval"/>, getId() );
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,7 +234,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::initFromSM()
{
si.id = <xsl:value-of select="@name"/>;
si.node = node_<xsl:value-of select="@name"/>;
ui->setValue( si, <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>, getId() );
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 )
......@@ -252,7 +267,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::initFromSM()
{
si.id = <xsl:value-of select="@name"/>;
si.node = node_<xsl:value-of select="@name"/>;
ui->setValue( si,<xsl:value-of select="$setval"/>, getId() );
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 )
......@@ -269,7 +299,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::initFromSM()
{
si.id = <xsl:value-of select="@name"/>;
si.node = node_<xsl:value-of select="@name"/>;
ui->setValue( si,(long)m_<xsl:value-of select="@name"/>, getId() );
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,6 +345,7 @@
</xsl:template>
<xsl:template name="COMMON-HEAD-PRIVATE">
unsigned int setValueNumberOfAttempts = { 3 }; // количество попыток, сохранить 'out' (см. updateOutputs)
<xsl:if test="normalize-space($VARMAP)='1'">
class PtrMapHashFn
{
......@@ -836,7 +837,7 @@ end_private(false)
logserv = make_shared&lt;LogServer&gt;(loga);
logserv-&gt;init( argprefix + "logserver", confnode );
<xsl:for-each select="//smap/item">
<xsl:if test="normalize-space(@no_check_id)!='1'">
if( <xsl:value-of select="normalize-space(@name)"/> == UniSetTypes::DefaultObjectId )
......@@ -907,6 +908,8 @@ 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)=''">
......@@ -994,6 +997,7 @@ end_private(false)
vmonit(maxHeartBeat);
vmonit(activateTimeout);
vmonit(smReadyTimeout);
vmonit(setValueNumberOfAttempts);
}
// -----------------------------------------------------------------------------
......@@ -1357,6 +1361,7 @@ 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: alt5
Release: alt6
Summary: UniSet - library for building distributed industrial control systems
License: LGPL
......@@ -483,6 +483,9 @@ 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,6 +224,7 @@
- \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 Конфигурирование
......@@ -254,6 +255,8 @@
- \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)
......
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