Commit 2fb545d3 authored by Pavel Vainerman's avatar Pavel Vainerman

(uniset-codegen): Сделал функцию preAskSensors() чтобы уйти от ошибки, когда…

(uniset-codegen): Сделал функцию preAskSensors() чтобы уйти от ошибки, когда пользователь переопределяя askSensors() забывает вызвать функнцию базового класса..
parent c5f409b2
......@@ -109,7 +109,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
msleep( sleep_msec );
}
// -----------------------------------------------------------------------------
void <xsl:value-of select="$CLASSNAME"/>_SK::askSensors( UniversalIO::UIOCommand _cmd )
void <xsl:value-of select="$CLASSNAME"/>_SK::preAskSensors( UniversalIO::UIOCommand _cmd )
{
// имитируем изменения для посылки сообщений при старте
if( _cmd == UniversalIO::UIONotify )
......
......@@ -14,6 +14,9 @@
<xsl:variable name="OID">
<xsl:call-template name="settings"><xsl:with-param name="varname" select="'ID'"/></xsl:call-template>
</xsl:variable>
<xsl:variable name="TESTMODE">
<xsl:call-template name="settings"><xsl:with-param name="varname" select="'testmode'"/></xsl:call-template>
</xsl:variable>
<!-- Генерирование cc-файла -->
<xsl:template match="/">
......@@ -33,6 +36,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
return;
try
{
<xsl:if test="normalize-space($TESTMODE)!=''">
isTestMode = checkTestMode();
if( trTestMode.change(isTestMode) )
testMode(isTestMode);
......@@ -45,7 +49,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::callback()
msleep( sleep_msec );
return;
}
</xsl:if>
// проверка таймеров
checkTimers(this);
......@@ -178,24 +182,26 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::askValue( UniSetTypes::ObjectId _si
// -----------------------------------------------------------------------------
bool <xsl:value-of select="$CLASSNAME"/>_SK::getState( UniSetTypes::ObjectId _sid )
{
try
{
<xsl:for-each select="//smap/item">
if( _sid == <xsl:value-of select="@name"/> &amp;&amp; <xsl:value-of select="@name"/> != DefaultObjectId )
{
<xsl:choose>
<xsl:when test="normalize-space(@iotype)='DI'">
<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = ui.getState(<xsl:value-of select="@name"/>, node_<xsl:value-of select="@name"/>);
<xsl:text> </xsl:text><xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = ui.getState(<xsl:value-of select="@name"/>, node_<xsl:value-of select="@name"/>);
return <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>;
</xsl:when>
<xsl:when test="normalize-space(@iotype)='DO'">
<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = ui.getState(<xsl:value-of select="@name"/>, node_<xsl:value-of select="@name"/>);
<xsl:text> </xsl:text><xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = ui.getState(<xsl:value-of select="@name"/>, node_<xsl:value-of select="@name"/>);
return <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>;
</xsl:when>
<xsl:when test="normalize-space(@iotype)='AO'">
<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = ui.getValue(<xsl:value-of select="@name"/>, node_<xsl:value-of select="@name"/>);
<xsl:text> </xsl:text><xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = ui.getValue(<xsl:value-of select="@name"/>, node_<xsl:value-of select="@name"/>);
return <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>;
</xsl:when>
<xsl:when test="normalize-space(@iotype)='AI'">
<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = ui.getValue(<xsl:value-of select="@name"/>, node_<xsl:value-of select="@name"/>);
<xsl:text> </xsl:text><xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = ui.getValue(<xsl:value-of select="@name"/>, node_<xsl:value-of select="@name"/>);
return <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>;
</xsl:when>
</xsl:choose>
......@@ -203,17 +209,23 @@ bool <xsl:value-of select="$CLASSNAME"/>_SK::getState( UniSetTypes::ObjectId _si
</xsl:for-each>
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(getState): Обращение к неизвестному ДИСКРЕТНОМУ датчику sid="
&lt;&lt; _sid &lt;&lt; endl;
}
catch(Exception&amp; ex)
{
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(getState): " &lt;&lt; ex &lt;&lt; endl;
throw ex;
}
return false;
}
// -----------------------------------------------------------------------------
void <xsl:value-of select="$CLASSNAME"/>_SK::askSensors( UniversalIO::UIOCommand _cmd )
void <xsl:value-of select="$CLASSNAME"/>_SK::preAskSensors( UniversalIO::UIOCommand _cmd )
{
PassiveTimer ptAct(activateTimeout);
while( !activated &amp;&amp; !ptAct.checkTime() )
{
cout &lt;&lt; myname &lt;&lt; "(askSensors): wait activate..." &lt;&lt; endl;
cout &lt;&lt; myname &lt;&lt; "(preAskSensors): wait activate..." &lt;&lt; endl;
msleep(300);
if( activated )
break;
......@@ -221,7 +233,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::askSensors( UniversalIO::UIOCommand
if( !activated )
unideb[Debug::CRIT] &lt;&lt; myname
&lt;&lt; "(askSensors): ************* don`t activated?! ************" &lt;&lt; endl;
&lt;&lt; "(preAskSensors): ************* don`t activated?! ************" &lt;&lt; endl;
for( ;; )
{
......@@ -241,15 +253,15 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::askSensors( UniversalIO::UIOCommand
}
catch(SystemError&amp; err)
{
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(askSensors): " &lt;&lt; err &lt;&lt; endl;
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(preAskSensors): " &lt;&lt; err &lt;&lt; endl;
}
catch(Exception&amp; ex)
{
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(askSensors): " &lt;&lt; ex &lt;&lt; endl;
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(preAskSensors): " &lt;&lt; ex &lt;&lt; endl;
}
catch(...)
{
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(askSensors): catch(...)" &lt;&lt; endl;
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(preAskSensors): catch(...)" &lt;&lt; endl;
}
msleep(askPause);
}
......@@ -275,6 +287,8 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::setMsg( UniSetTypes::ObjectId _code
<xsl:param name="output">0</xsl:param>
if( <xsl:value-of select="@name"/> != DefaultObjectId )
{
try
{
<xsl:choose>
<xsl:when test="normalize-space(@iotype)='DI'">
<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = ui.getState(<xsl:value-of select="@name"/>, node_<xsl:value-of select="@name"/>);
......@@ -290,11 +304,19 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::setMsg( UniSetTypes::ObjectId _code
</xsl:when>
</xsl:choose>
}
catch( UniSetTypes::Exception&amp; ex )
{
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(getdata): " &lt;&lt; ex &lt;&lt; endl;
throw ex;
}
}
</xsl:template>
<xsl:template name="setdata">
if( <xsl:value-of select="@name"/> != DefaultObjectId )
{
try
{
<xsl:choose>
<xsl:when test="normalize-space(@iotype)='DI'">
si.id = <xsl:value-of select="@name"/>;
......@@ -314,12 +336,20 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::setMsg( UniSetTypes::ObjectId _code
</xsl:when>
</xsl:choose>
}
catch( UniSetTypes::Exception&amp; ex )
{
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(setdata): " &lt;&lt; ex &lt;&lt; endl;
throw ex;
}
}
</xsl:template>
<xsl:template name="setdata_value">
<xsl:param name="setval">0</xsl:param>
if( <xsl:value-of select="@name"/> != DefaultObjectId )
{
try
{
<xsl:choose>
<xsl:when test="normalize-space(@iotype)='DI'">
si.id = <xsl:value-of select="@name"/>;
......@@ -339,6 +369,12 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::setMsg( UniSetTypes::ObjectId _code
</xsl:when>
</xsl:choose>
}
catch( UniSetTypes::Exception&amp; ex )
{
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(setdata): " &lt;&lt; ex &lt;&lt; endl;
throw ex;
}
}
</xsl:template>
......
......@@ -171,9 +171,9 @@
virtual void callback();
virtual void processingMessage( UniSetTypes::VoidMessage* msg );
virtual void sysCommand( UniSetTypes::SystemMessage* sm );
virtual void askSensors( UniversalIO::UIOCommand cmd );
virtual void sensorInfo( UniSetTypes::SensorMessage* sm ){};
virtual void timerInfo( UniSetTypes::TimerMessage* tm ){};
virtual void askSensors( UniversalIO::UIOCommand cmd ){}
virtual void sensorInfo( UniSetTypes::SensorMessage* sm ){}
virtual void timerInfo( UniSetTypes::TimerMessage* tm ){}
virtual void sigterm( int signo );
virtual bool activateObject();
virtual void testMode( bool state );
......@@ -183,6 +183,7 @@
<xsl:if test="normalize-space($TESTMODE)!=''">
bool checkTestMode();
</xsl:if>
void preAskSensors( UniversalIO::UIOCommand cmd );
void preSensorInfo( UniSetTypes::SensorMessage* sm );
void preTimerInfo( UniSetTypes::TimerMessage* tm );
void waitSM( int wait_msec, UniSetTypes::ObjectId testID = UniSetTypes::DefaultObjectId );
......@@ -288,6 +289,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::sysCommand( SystemMessage* _sm )
// сперва обновить входы.. а потом уже выходы
updateValues();
updateOutputs(true); // принудительное обновление выходов
preAskSensors(UniversalIO::UIONotify);
askSensors(UniversalIO::UIONotify);
active = true;
break;
......@@ -295,6 +297,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::sysCommand( SystemMessage* _sm )
case SystemMessage::FoldUp:
case SystemMessage::Finish:
preAskSensors(UniversalIO::UIODontNotify);
askSensors(UniversalIO::UIODontNotify);
break;
......
......@@ -3,7 +3,7 @@
Name: libuniset
Version: 1.3
Release: alt12
Release: alt13
Summary: UniSet - library for building distributed industrial control systems
License: GPL
Group: Development/C++
......@@ -213,6 +213,9 @@ rm -f %buildroot%_libdir/*.la
%changelog
* Sun Mar 11 2012 Pavel Vainerman <pv@altlinux.ru> 1.3-alt13
- minor fixes in uniset-codegen (add "preAskSensors")
* Fri Mar 02 2012 Pavel Vainerman <pv@altlinux.ru> 1.3-alt12
- fixed bug in DigitalFilter
- fixed bug in RTU188 exchange
......
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