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 ) ...@@ -353,7 +353,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updateOutputs( bool _force )
{ {
si.id = <xsl:value-of select="../../@name"/>; si.id = <xsl:value-of select="../../@name"/>;
si.node = node_<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 ) catch( const Exception&amp; ex )
{ {
...@@ -368,7 +383,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updateOutputs( bool _force ) ...@@ -368,7 +383,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updateOutputs( bool _force )
{ {
si.id = <xsl:value-of select="../../@name"/>; si.id = <xsl:value-of select="../../@name"/>;
si.node = node_<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 ) catch( const Exception&amp; ex )
{ {
......
...@@ -291,7 +291,22 @@ UniSetTypes::ObjectId <xsl:value-of select="$CLASSNAME"/>_SK::getSMTestID() ...@@ -291,7 +291,22 @@ UniSetTypes::ObjectId <xsl:value-of select="$CLASSNAME"/>_SK::getSMTestID()
{ {
si.id = <xsl:value-of select="../../@name"/>; si.id = <xsl:value-of select="../../@name"/>;
si.node = node_<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 ) catch( const Exception&amp; ex )
{ {
...@@ -306,7 +321,22 @@ UniSetTypes::ObjectId <xsl:value-of select="$CLASSNAME"/>_SK::getSMTestID() ...@@ -306,7 +321,22 @@ UniSetTypes::ObjectId <xsl:value-of select="$CLASSNAME"/>_SK::getSMTestID()
{ {
si.id = <xsl:value-of select="../../@name"/>; si.id = <xsl:value-of select="../../@name"/>;
si.node = node_<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 ) catch( const Exception&amp; ex )
{ {
......
...@@ -293,7 +293,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preAskSensors( UniversalIO::UIOComm ...@@ -293,7 +293,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preAskSensors( UniversalIO::UIOComm
{ {
si.id = <xsl:value-of select="@name"/>; si.id = <xsl:value-of select="@name"/>;
si.node = node_<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 ) catch( UniSetTypes::Exception&amp; ex )
{ {
...@@ -311,7 +326,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preAskSensors( UniversalIO::UIOComm ...@@ -311,7 +326,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preAskSensors( UniversalIO::UIOComm
{ {
si.id = <xsl:value-of select="@name"/>; si.id = <xsl:value-of select="@name"/>;
si.node = node_<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 ) catch( UniSetTypes::Exception&amp; ex )
{ {
......
...@@ -234,7 +234,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::initFromSM() ...@@ -234,7 +234,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::initFromSM()
{ {
si.id = <xsl:value-of select="@name"/>; si.id = <xsl:value-of select="@name"/>;
si.node = node_<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 ) catch( const Exception&amp; ex )
...@@ -252,7 +267,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::initFromSM() ...@@ -252,7 +267,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::initFromSM()
{ {
si.id = <xsl:value-of select="@name"/>; si.id = <xsl:value-of select="@name"/>;
si.node = node_<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 ) catch( const Exception&amp; ex )
...@@ -269,7 +299,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::initFromSM() ...@@ -269,7 +299,22 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::initFromSM()
{ {
si.id = <xsl:value-of select="@name"/>; si.id = <xsl:value-of select="@name"/>;
si.node = node_<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 ) catch( const Exception&amp; ex )
......
...@@ -345,6 +345,7 @@ ...@@ -345,6 +345,7 @@
</xsl:template> </xsl:template>
<xsl:template name="COMMON-HEAD-PRIVATE"> <xsl:template name="COMMON-HEAD-PRIVATE">
unsigned int setValueNumberOfAttempts = { 3 }; // количество попыток, сохранить 'out' (см. updateOutputs)
<xsl:if test="normalize-space($VARMAP)='1'"> <xsl:if test="normalize-space($VARMAP)='1'">
class PtrMapHashFn class PtrMapHashFn
{ {
...@@ -836,7 +837,7 @@ end_private(false) ...@@ -836,7 +837,7 @@ end_private(false)
logserv = make_shared&lt;LogServer&gt;(loga); logserv = make_shared&lt;LogServer&gt;(loga);
logserv-&gt;init( argprefix + "logserver", confnode ); logserv-&gt;init( argprefix + "logserver", confnode );
<xsl:for-each select="//smap/item"> <xsl:for-each select="//smap/item">
<xsl:if test="normalize-space(@no_check_id)!='1'"> <xsl:if test="normalize-space(@no_check_id)!='1'">
if( <xsl:value-of select="normalize-space(@name)"/> == UniSetTypes::DefaultObjectId ) if( <xsl:value-of select="normalize-space(@name)"/> == UniSetTypes::DefaultObjectId )
...@@ -907,6 +908,8 @@ end_private(false) ...@@ -907,6 +908,8 @@ end_private(false)
maxHeartBeat = conf->getArgPInt("--" + argprefix + "heartbeat-max",it.getProp("heartbeat_max"), 10); 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:for-each select="//smap/item">
<xsl:if test="normalize-space(@default)=''"> <xsl:if test="normalize-space(@default)=''">
...@@ -994,6 +997,7 @@ end_private(false) ...@@ -994,6 +997,7 @@ end_private(false)
vmonit(maxHeartBeat); vmonit(maxHeartBeat);
vmonit(activateTimeout); vmonit(activateTimeout);
vmonit(smReadyTimeout); vmonit(smReadyTimeout);
vmonit(setValueNumberOfAttempts);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -1357,6 +1361,7 @@ askPause(uniset_conf()->getPIntProp(cnode,"askPause",2000)) ...@@ -1357,6 +1361,7 @@ askPause(uniset_conf()->getPIntProp(cnode,"askPause",2000))
si.node = conf->getLocalNode(); 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>); 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>"); string s_resetTime("<xsl:call-template name="settings-alone"><xsl:with-param name="varname" select="'sleep-msec'"/></xsl:call-template>");
if( s_resetTime.empty() ) if( s_resetTime.empty() )
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
Name: libuniset2 Name: libuniset2
Version: 2.3 Version: 2.3
Release: alt5 Release: alt6
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
License: LGPL License: LGPL
...@@ -483,6 +483,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -483,6 +483,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# .. # ..
%changelog %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 * Wed May 11 2016 Pavel Vainerman <pv@altlinux.ru> 2.3-alt5
- fixes after coverity_scan - fixes after coverity_scan
......
...@@ -224,6 +224,7 @@ ...@@ -224,6 +224,7 @@
- \b --argprefix-activate-timeout msec - \b --argprefix-activate-timeout msec
- \b --argprefix-startup-timeout msec - \b --argprefix-startup-timeout msec
- \b --argprefix-log-[add|del]-levels xxx,xxx,xxx - \b --argprefix-log-[add|del]-levels xxx,xxx,xxx
- \b --argprefix-setValueNumberOfAttempts num
\section pg_Codegen_Configuration Конфигурирование \section pg_Codegen_Configuration Конфигурирование
...@@ -254,6 +255,8 @@ ...@@ -254,6 +255,8 @@
- \b activateTimeout = conf->getArgPInt("--activate-timeout", 20000); - время отведённое на инициализацию процесса - \b activateTimeout = conf->getArgPInt("--activate-timeout", 20000); - время отведённое на инициализацию процесса
- \b msec = conf->getArgPInt("--startup-timeout", 10000); - пауза, в течение которой игнорируется сообщение SystemMessage::WatchDog. - \b msec = conf->getArgPInt("--startup-timeout", 10000); - пауза, в течение которой игнорируется сообщение SystemMessage::WatchDog.
В случае если они приходят подряд. В случае если они приходят подряд.
- \b setValueNumberOfAttempts - количество попыток сохранить 'выходы'(out_xxx) в SharedMemory.
\section pg_Codegen_TestMode Специальный режим "тест" (TestMode) \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