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