Commit 67899026 authored by Pavel Vainerman's avatar Pavel Vainerman

backported to p8 as 2.7-alt15.M80P.16 (with rpmbph script)

parents 95a8e54d c1f75ad9
...@@ -170,8 +170,8 @@ uniset::ObjectId <xsl:value-of select="$CLASSNAME"/>_SK::getSMTestID() const ...@@ -170,8 +170,8 @@ uniset::ObjectId <xsl:value-of select="$CLASSNAME"/>_SK::getSMTestID() const
<xsl:for-each select="//sensors/item/consumers/consumer"> <xsl:for-each select="//sensors/item/consumers/consumer">
<xsl:if test="normalize-space(@name)=$OID"> <xsl:if test="normalize-space(@name)=$OID">
if( <xsl:value-of select="../../@name"/> != DefaultObjectId ) if( <xsl:value-of select="../../@name"/> != DefaultObjectId )
return <xsl:value-of select="../../@name"/>; return <xsl:value-of select="../../@name"/>;
</xsl:if> </xsl:if>
</xsl:for-each> </xsl:for-each>
...@@ -282,12 +282,12 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updateOutputs( bool _force ) ...@@ -282,12 +282,12 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updateOutputs( bool _force )
<xsl:choose> <xsl:choose>
<xsl:when test="normalize-space(@vartype)='out'"> <xsl:when test="normalize-space(@vartype)='out'">
<xsl:if test="normalize-space(../../@force)=''"> <xsl:if test="normalize-space(../../@force)=''">
if( _force || prev_<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> != <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> ) if( _force || prev_<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> != <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> )
</xsl:if> </xsl:if>
{ {
<xsl:call-template name="setdata"/> <xsl:call-template name="setdata"/>
prev_<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> = <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>; prev_<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> = <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>;
} }
</xsl:when> </xsl:when>
</xsl:choose> </xsl:choose>
</xsl:if> </xsl:if>
...@@ -350,17 +350,17 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updateOutputs( bool _force ) ...@@ -350,17 +350,17 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updateOutputs( bool _force )
</xsl:template> </xsl:template>
<xsl:template name="gensetdata"> <xsl:template name="gensetdata">
try try
{ {
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() ); ui->setValue( si,<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>, getId() );
} }
catch( const uniset::Exception&amp; ex ) catch( const uniset::Exception&amp; ex )
{ {
mycrit &lt;&lt; myname &lt;&lt; "(setdata): " &lt;&lt; ex &lt;&lt; endl; mycrit &lt;&lt; myname &lt;&lt; "(setdata): " &lt;&lt; ex &lt;&lt; endl;
throw; throw;
} }
</xsl:template> </xsl:template>
<xsl:template name="setdata_val"> <xsl:template name="setdata_val">
...@@ -382,18 +382,18 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updateOutputs( bool _force ) ...@@ -382,18 +382,18 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updateOutputs( bool _force )
<xsl:param name="onlymsg"></xsl:param> <xsl:param name="onlymsg"></xsl:param>
<xsl:if test="normalize-space(../../@msg)!='1'"> <xsl:if test="normalize-space(../../@msg)!='1'">
<xsl:if test="normalize-space(@name)=$OID"> <xsl:if test="normalize-space(@name)=$OID">
<xsl:if test="normalize-space($onlymsg)=''"> <xsl:if test="normalize-space($onlymsg)=''">
if( prev_<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> != <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> ) if( prev_<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> != <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> )
</xsl:if> </xsl:if>
{ {
// приходится искуственно использовать третий параметр, // приходится искуственно использовать третий параметр,
// что-бы компилятор выбрал // что-бы компилятор выбрал
// правильный(для аналоговых) конструктор у SensorMessage // правильный(для аналоговых) конструктор у SensorMessage
IOController_i::CalibrateInfo _ci; IOController_i::CalibrateInfo _ci;
SensorMessage _sm( <xsl:value-of select="../../@name"/>, (long)<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>, _ci); SensorMessage _sm( <xsl:value-of select="../../@name"/>, (long)<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>, _ci);
_sm.sensor_type = UniversalIO::AI; _sm.sensor_type = UniversalIO::AI;
sensorInfo(&amp;_sm); sensorInfo(&amp;_sm);
} }
</xsl:if> </xsl:if>
</xsl:if> </xsl:if>
</xsl:template> </xsl:template>
......
...@@ -323,21 +323,21 @@ uniset::ObjectId <xsl:value-of select="$CLASSNAME"/>_SK::getSMTestID() const ...@@ -323,21 +323,21 @@ uniset::ObjectId <xsl:value-of select="$CLASSNAME"/>_SK::getSMTestID() const
<xsl:param name="onlymsg"></xsl:param> <xsl:param name="onlymsg"></xsl:param>
<xsl:if test="normalize-space(../../@msg)!='1'"> <xsl:if test="normalize-space(../../@msg)!='1'">
<xsl:if test="normalize-space(@name)=$OID"> <xsl:if test="normalize-space(@name)=$OID">
<xsl:if test="normalize-space($onlymsg)=''"> <xsl:if test="normalize-space($onlymsg)=''">
if( prev_<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> != <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> ) if( prev_<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> != <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> )
</xsl:if> </xsl:if>
{ {
<xsl:if test="normalize-space($onlymsg)=''"> <xsl:if test="normalize-space($onlymsg)=''">
// cout &lt;&lt; myname &lt;&lt; ": (AO) change value <xsl:value-of select="../../@name"/> set " // cout &lt;&lt; myname &lt;&lt; ": (AO) change value <xsl:value-of select="../../@name"/> set "
// &lt;&lt; <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> &lt;&lt; endl; // &lt;&lt; <xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/> &lt;&lt; endl;
</xsl:if> </xsl:if>
// приходится искуственно использовать третий параметр, // приходится искуственно использовать третий параметр,
// что-бы компилятор выбрал // что-бы компилятор выбрал
// правильный(для аналоговых) конструктор у SensorMessage // правильный(для аналоговых) конструктор у SensorMessage
SensorMessage _sm( <xsl:value-of select="../../@name"/>, (long)<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>); SensorMessage _sm( <xsl:value-of select="../../@name"/>, (long)<xsl:call-template name="setprefix"/><xsl:value-of select="../../@name"/>);
_sm.sensor_type = UniversalIO::AI; _sm.sensor_type = UniversalIO::AI;
sensorInfo(&amp;_sm); sensorInfo(&amp;_sm);
} }
</xsl:if> </xsl:if>
</xsl:if> </xsl:if>
</xsl:template> </xsl:template>
......
...@@ -121,15 +121,15 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::setValue( uniset::ObjectId _sid, lo ...@@ -121,15 +121,15 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::setValue( uniset::ObjectId _sid, lo
return; return;
<xsl:for-each select="//smap/item"> <xsl:for-each select="//smap/item">
<xsl:if test="normalize-space(@vartype)='out'"> <xsl:if test="normalize-space(@vartype)='out'">
if( _sid == <xsl:value-of select="@name"/> ) if( _sid == <xsl:value-of select="@name"/> )
{ {
mylog8 &lt;&lt; myname &lt;&lt; "(setValue): <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = " &lt;&lt; _val &lt;&lt; endl; mylog8 &lt;&lt; myname &lt;&lt; "(setValue): <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = " &lt;&lt; _val &lt;&lt; endl;
<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = _val; <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = _val;
<xsl:call-template name="setdata"/> <xsl:call-template name="setdata"/>
return; return;
} }
</xsl:if> </xsl:if>
</xsl:for-each> </xsl:for-each>
ui->setValue(_sid,_val); ui->setValue(_sid,_val);
...@@ -289,20 +289,20 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preAskSensors( UniversalIO::UIOComm ...@@ -289,20 +289,20 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preAskSensors( UniversalIO::UIOComm
</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
{ {
try si.id = <xsl:value-of select="@name"/>;
{ si.node = node_<xsl:value-of select="@name"/>;
si.id = <xsl:value-of select="@name"/>; ui->setValue( si, <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>, getId() );
si.node = node_<xsl:value-of select="@name"/>;
ui->setValue( si, <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>, getId() );
}
catch( uniset::Exception&amp; ex )
{
mycrit &lt;&lt; myname &lt;&lt; "(setdata): " &lt;&lt; ex &lt;&lt; endl;
throw;
}
} }
catch( uniset::Exception&amp; ex )
{
mycrit &lt;&lt; myname &lt;&lt; "(setdata): " &lt;&lt; ex &lt;&lt; endl;
throw;
}
}
</xsl:template> </xsl:template>
<xsl:template name="setdata_value"> <xsl:template name="setdata_value">
......
...@@ -124,14 +124,14 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::setValue( uniset::ObjectId sid, lon ...@@ -124,14 +124,14 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::setValue( uniset::ObjectId sid, lon
return; return;
<xsl:for-each select="//smap/item"> <xsl:for-each select="//smap/item">
<xsl:if test="normalize-space(@vartype)='out'"> <xsl:if test="normalize-space(@vartype)='out'">
if( sid == <xsl:value-of select="@name"/> ) if( sid == <xsl:value-of select="@name"/> )
{ {
mylog8 &lt;&lt; "(setValue): <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = " &lt;&lt; val &lt;&lt; endl; mylog8 &lt;&lt; "(setValue): <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = " &lt;&lt; val &lt;&lt; endl;
<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = val; <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> = val;
return; return;
} }
</xsl:if> </xsl:if>
</xsl:for-each> </xsl:for-each>
ui->setValue(sid,val); ui->setValue(sid,val);
......
...@@ -1372,9 +1372,9 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updatePreviousValues() noexcept ...@@ -1372,9 +1372,9 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::updatePreviousValues() noexcept
void <xsl:value-of select="$CLASSNAME"/>_SK::checkSensors() void <xsl:value-of select="$CLASSNAME"/>_SK::checkSensors()
{ {
<xsl:for-each select="//smap/item"> <xsl:for-each select="//smap/item">
<xsl:choose> <xsl:choose>
<xsl:when test="normalize-space(@vartype)='in'"><xsl:call-template name="check_changes"/></xsl:when> <xsl:when test="normalize-space(@vartype)='in'"><xsl:call-template name="check_changes"/></xsl:when>
</xsl:choose> </xsl:choose>
</xsl:for-each> </xsl:for-each>
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -1821,9 +1821,9 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::checkSensors() ...@@ -1821,9 +1821,9 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::checkSensors()
{ {
// Опрашиваем все входы... // Опрашиваем все входы...
<xsl:for-each select="//sensors/item/consumers/consumer"> <xsl:for-each select="//sensors/item/consumers/consumer">
<xsl:choose> <xsl:choose>
<xsl:when test="normalize-space(@vartype)='in'"><xsl:call-template name="check_changes"/></xsl:when> <xsl:when test="normalize-space(@vartype)='in'"><xsl:call-template name="check_changes"/></xsl:when>
</xsl:choose> </xsl:choose>
</xsl:for-each> </xsl:for-each>
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -2002,16 +2002,16 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::strval( uniset::ObjectId id, ...@@ -2002,16 +2002,16 @@ std::string <xsl:value-of select="$CLASSNAME"/>_SK::strval( uniset::ObjectId id,
<xsl:template name="check_changes"> <xsl:template name="check_changes">
<xsl:param name="onlymsg"></xsl:param> <xsl:param name="onlymsg"></xsl:param>
<xsl:if test="normalize-space($onlymsg)=''"> <xsl:if test="normalize-space($onlymsg)=''">
if( prev_<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> != <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> ) if( prev_<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> != <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> )
</xsl:if> </xsl:if>
{ {
<xsl:if test="normalize-space($onlymsg)=''"> <xsl:if test="normalize-space($onlymsg)=''">
</xsl:if> </xsl:if>
SensorMessage _sm( <xsl:value-of select="@name"/>, (long)<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> ); SensorMessage _sm( <xsl:value-of select="@name"/>, (long)<xsl:call-template name="setprefix"/><xsl:value-of select="@name"/> );
_sm.sensor_type = UniversalIO::AI; _sm.sensor_type = UniversalIO::AI;
sensorInfo(&amp;_sm); sensorInfo(&amp;_sm);
} }
</xsl:template> </xsl:template>
</xsl:stylesheet> </xsl:stylesheet>
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
Name: libuniset2 Name: libuniset2
Version: 2.7 Version: 2.7
Release: alt14.M80P.15 Release: alt15.M80P.16
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
License: LGPL License: LGPL
...@@ -546,9 +546,15 @@ rm -f %buildroot%_docdir/%oname/html/*.md5 ...@@ -546,9 +546,15 @@ rm -f %buildroot%_docdir/%oname/html/*.md5
# history of current unpublished changes # history of current unpublished changes
%changelog %changelog
* Tue Sep 04 2018 Pavel Vainerman <pv@altlinux.ru> 2.7-alt14.M80P.15 * Thu Oct 11 2018 Pavel Vainerman <pv@altlinux.ru> 2.7-alt15.M80P.16
- backport to ALTLinux p8 (by rpmbph script) - backport to ALTLinux p8 (by rpmbph script)
* Thu Oct 11 2018 Pavel Vainerman <pv@altlinux.ru> 2.7-alt16
- (codegen): reformat
- (Modbus): modify genRegID(), update test, used 'using' instead 'typedef'
- (UNet): set default prefix for log setup (default: "--unet-log")
- (UNet): increased the maximum allowed number of analog values for node (2000)
* Tue Sep 04 2018 Pavel Vainerman <pv@altlinux.ru> 2.7-alt15 * Tue Sep 04 2018 Pavel Vainerman <pv@altlinux.ru> 2.7-alt15
- (mtr): fix bug for read from 'serial device' - (mtr): fix bug for read from 'serial device'
- (UNet): added "undefined_value" property - (UNet): added "undefined_value" property
......
...@@ -87,8 +87,8 @@ namespace uniset ...@@ -87,8 +87,8 @@ namespace uniset
// с другой стороны в текущей реализации // с другой стороны в текущей реализации
// в сеть посылается фактическое количество данных, а не sizeof(UDPPacket). // в сеть посылается фактическое количество данных, а не sizeof(UDPPacket).
// При текущих настройках sizeof(UDPPacket) = 32654 (!) // При текущих настройках sizeof(UDPPacket) = 72679 (!)
static const size_t MaxACount = 1500; static const size_t MaxACount = 2000;
static const size_t MaxDCount = 5000; static const size_t MaxDCount = 5000;
static const size_t MaxDDataCount = 1 + MaxDCount / 8 * sizeof(unsigned char); static const size_t MaxDDataCount = 1 + MaxDCount / 8 * sizeof(unsigned char);
......
...@@ -164,7 +164,7 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const ...@@ -164,7 +164,7 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
} }
unetinfo << myname << "(init): init sender.. my node " << n_it.getProp("name") << endl; unetinfo << myname << "(init): init sender.. my node " << n_it.getProp("name") << endl;
sender = make_shared<UNetSender>(h, p, shm, false, s_field, s_fvalue, prefix); sender = make_shared<UNetSender>(h, p, shm, false, s_field, s_fvalue, "unet", prefix);
sender->setSendPause(sendpause); sender->setSendPause(sendpause);
sender->setCheckConnectionPause(checkConnectionPause); sender->setCheckConnectionPause(checkConnectionPause);
loga->add(sender->getLog()); loga->add(sender->getLog());
...@@ -326,7 +326,7 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const ...@@ -326,7 +326,7 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
unetinfo << myname << "(init): (node='" << n << "') add basic receiver " unetinfo << myname << "(init): (node='" << n << "') add basic receiver "
<< h << ":" << p << endl; << h << ":" << p << endl;
auto r = make_shared<UNetReceiver>(h, p, shm); auto r = make_shared<UNetReceiver>(h, p, shm, false, prefix);
loga->add(r->getLog()); loga->add(r->getLog());
...@@ -358,7 +358,7 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const ...@@ -358,7 +358,7 @@ UNetExchange::UNetExchange(uniset::ObjectId objId, uniset::ObjectId shmId, const
unetinfo << myname << "(init): (node='" << n << "') add reserv receiver " unetinfo << myname << "(init): (node='" << n << "') add reserv receiver "
<< h2 << ":" << p2 << endl; << h2 << ":" << p2 << endl;
r2 = make_shared<UNetReceiver>(h2, p2, shm); r2 = make_shared<UNetReceiver>(h2, p2, shm, false, prefix);
loga->add(r2->getLog()); loga->add(r2->getLog());
......
...@@ -40,7 +40,10 @@ bool UNetReceiver::PacketCompare::operator()(const UniSetUDP::UDPMessage& lhs, ...@@ -40,7 +40,10 @@ bool UNetReceiver::PacketCompare::operator()(const UniSetUDP::UDPMessage& lhs,
} }
*/ */
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
UNetReceiver::UNetReceiver(const std::string& s_host, int _port, const std::shared_ptr<SMInterface>& smi, bool nocheckConnection ): UNetReceiver::UNetReceiver(const std::string& s_host, int _port
, const std::shared_ptr<SMInterface>& smi
, bool nocheckConnection
, const std::string& prefix ):
shm(smi), shm(smi),
recvpause(10), recvpause(10),
updatepause(100), updatepause(100),
...@@ -71,11 +74,14 @@ UNetReceiver::UNetReceiver(const std::string& s_host, int _port, const std::shar ...@@ -71,11 +74,14 @@ UNetReceiver::UNetReceiver(const std::string& s_host, int _port, const std::shar
addr = s_host.c_str(); addr = s_host.c_str();
ostringstream logname;
logname << prefix << "-R-" << s_host << ":" << setw(4) << port;
unetlog = make_shared<DebugStream>(); unetlog = make_shared<DebugStream>();
unetlog->setLogName(myname); unetlog->setLogName(logname.str());
auto conf = uniset_conf(); auto conf = uniset_conf();
conf->initLogStream(unetlog, myname); conf->initLogStream(unetlog, prefix + "-log");
upThread = unisetstd::make_unique< ThreadCreator<UNetReceiver> >(this, &UNetReceiver::updateThread); upThread = unisetstd::make_unique< ThreadCreator<UNetReceiver> >(this, &UNetReceiver::updateThread);
......
...@@ -101,7 +101,9 @@ namespace uniset ...@@ -101,7 +101,9 @@ namespace uniset
public std::enable_shared_from_this<UNetReceiver> public std::enable_shared_from_this<UNetReceiver>
{ {
public: public:
UNetReceiver( const std::string& host, int port, const std::shared_ptr<SMInterface>& smi, bool nocheckConnection = false ); UNetReceiver( const std::string& host, int port, const std::shared_ptr<SMInterface>& smi
, bool nocheckConnection = false
, const std::string& prefix = "unet" );
virtual ~UNetReceiver(); virtual ~UNetReceiver();
void start(); void start();
......
...@@ -31,10 +31,12 @@ namespace uniset ...@@ -31,10 +31,12 @@ namespace uniset
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
UNetSender::UNetSender(const std::string& _host, const int _port, const std::shared_ptr<SMInterface>& smi, UNetSender::UNetSender(const std::string& _host, const int _port, const std::shared_ptr<SMInterface>& smi,
bool nocheckConnection, const std::string& s_f, const std::string& s_val, bool nocheckConnection, const std::string& s_f, const std::string& s_val,
const std::string& s_prefix, size_t maxDCount, size_t maxACount ): const std::string& s_prefix,
const std::string& prefix,
size_t maxDCount, size_t maxACount ):
s_field(s_f), s_field(s_f),
s_fvalue(s_val), s_fvalue(s_val),
prefix(s_prefix), prop_prefix(s_prefix),
shm(smi), shm(smi),
port(_port), port(_port),
s_host(_host), s_host(_host),
...@@ -55,11 +57,14 @@ namespace uniset ...@@ -55,11 +57,14 @@ namespace uniset
myname = s.str(); myname = s.str();
} }
ostringstream logname;
logname << prefix << "-S-" << s_host << "-" << port;
unetlog = make_shared<DebugStream>(); unetlog = make_shared<DebugStream>();
unetlog->setLogName(myname); unetlog->setLogName(logname.str());
auto conf = uniset_conf(); auto conf = uniset_conf();
conf->initLogStream(unetlog, myname); conf->initLogStream(unetlog, prefix + "-log");
unetinfo << myname << "(init): read filter-field='" << s_field unetinfo << myname << "(init): read filter-field='" << s_field
<< "' filter-value='" << s_fvalue << "'" << endl; << "' filter-value='" << s_fvalue << "'" << endl;
...@@ -407,7 +412,7 @@ namespace uniset ...@@ -407,7 +412,7 @@ namespace uniset
return false; return false;
} }
int priority = it.getPIntProp(prefix + "_sendfactor", 0); int priority = it.getPIntProp(prop_prefix + "_sendfactor", 0);
auto& pk = mypacks[priority]; auto& pk = mypacks[priority];
......
...@@ -69,9 +69,14 @@ namespace uniset ...@@ -69,9 +69,14 @@ namespace uniset
class UNetSender class UNetSender
{ {
public: public:
UNetSender( const std::string& host, const int port, const std::shared_ptr<SMInterface>& smi, bool nocheckConnection = false, UNetSender( const std::string& host, const int port, const std::shared_ptr<SMInterface>& smi
const std::string& s_field = "", const std::string& s_fvalue = "", const std::string& prefix = "unet", , bool nocheckConnection = false
size_t maxDCount = UniSetUDP::MaxDCount, size_t maxACount = UniSetUDP::MaxACount ); , const std::string& s_field = ""
, const std::string& s_fvalue = ""
, const std::string& prop_prefix = "unet"
, const std::string& prefix = "unet"
, size_t maxDCount = UniSetUDP::MaxDCount
, size_t maxACount = UniSetUDP::MaxACount );
virtual ~UNetSender(); virtual ~UNetSender();
...@@ -175,7 +180,7 @@ namespace uniset ...@@ -175,7 +180,7 @@ namespace uniset
std::string s_field = { "" }; std::string s_field = { "" };
std::string s_fvalue = { "" }; std::string s_fvalue = { "" };
std::string prefix = { "" }; std::string prop_prefix = { "" };
const std::shared_ptr<SMInterface> shm; const std::shared_ptr<SMInterface> shm;
std::shared_ptr<DebugStream> unetlog; std::shared_ptr<DebugStream> unetlog;
......
...@@ -3,6 +3,6 @@ ...@@ -3,6 +3,6 @@
uniset2-start.sh -f ./uniset2-unetexchange --unet-name UNetExchange --unet-run-logserver \ uniset2-start.sh -f ./uniset2-unetexchange --unet-name UNetExchange --unet-run-logserver \
--confile test.xml --smemory-id SharedMemory \ --confile test.xml --smemory-id SharedMemory \
--unet-filter-field rs --unet-filter-value 2 --unet-maxdifferense 40 --unet-sendpause 1000 \ --unet-filter-field rs --unet-filter-value 2 --unet-maxdifferense 40 --unet-sendpause 1000 \
--dlog-add-levels info,crit,warn --unet-log-add-levels info,crit,warn,any $* --dlog-add-levels info,crit,warn --unet-log-add-levels info,crit,warn,any --unet-S-localhost-3000-add-levels any $*
#--unet-nodes-confnode specnet #--unet-nodes-confnode specnet
...@@ -79,7 +79,7 @@ namespace uniset ...@@ -79,7 +79,7 @@ namespace uniset
}; };
typedef unsigned long RegID; using RegID = size_t;
/*! Получение уникального ID (hash?) на основе номера функции и регистра /*! Получение уникального ID (hash?) на основе номера функции и регистра
* Требования к данной функции: * Требования к данной функции:
...@@ -87,7 +87,7 @@ namespace uniset ...@@ -87,7 +87,7 @@ namespace uniset
* 2. одинаковые регистры, но разные функции должны давать разный ID * 2. одинаковые регистры, но разные функции должны давать разный ID
* 3. регистры идущие подряд, должны давать ID идущие тоже подряд * 3. регистры идущие подряд, должны давать ID идущие тоже подряд
*/ */
RegID genRegID( const ModbusRTU::ModbusData r, const int fn ); RegID genRegID( const ModbusRTU::ModbusData r, const uint8_t fn );
// определение размера данных в зависимости от типа сообщения // определение размера данных в зависимости от типа сообщения
// возвращает -1 - если динамический размер сообщения или размер неизвестен // возвращает -1 - если динамический размер сообщения или размер неизвестен
...@@ -134,7 +134,7 @@ namespace uniset ...@@ -134,7 +134,7 @@ namespace uniset
*/ */
}; };
const unsigned char MBErrMask = 0x80; const uint8_t MBErrMask = 0x80;
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
uint16_t SWAPSHORT( uint16_t x ); uint16_t SWAPSHORT( uint16_t x );
// --------------------------------------------------------------------- // ---------------------------------------------------------------------
...@@ -1217,7 +1217,7 @@ namespace uniset ...@@ -1217,7 +1217,7 @@ namespace uniset
std::string val; std::string val;
}; };
typedef std::list<RDIObjectInfo> RDIObjectList; using RDIObjectList = std::list<RDIObjectInfo>;
/*! Ответ для 0x2B/0x0E */ /*! Ответ для 0x2B/0x0E */
struct MEIMessageRetRDI: struct MEIMessageRetRDI:
......
...@@ -3651,16 +3651,17 @@ namespace uniset ...@@ -3651,16 +3651,17 @@ namespace uniset
return s.str(); return s.str();
} }
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
ModbusRTU::RegID ModbusRTU::genRegID( const ModbusRTU::ModbusData mbreg, const int fn ) ModbusRTU::RegID ModbusRTU::genRegID( const ModbusRTU::ModbusData mbreg, const uint8_t fn )
{ {
// диапазоны: // диапазоны:
// mbreg: 0..65535 // mbreg: 0..65535
// fn: 0...255 // fn: 0...255
int max = numeric_limits<ModbusRTU::ModbusData>::max(); // по идее 65535 size_t reg_max = numeric_limits<ModbusRTU::ModbusData>::max(); // по идее 65535
int fn_max = numeric_limits<ModbusRTU::ModbusByte>::max(); // по идее 255
// fn необходимо привести к диапазону 0..max // задача функции сдвинуть диапазон за рабочий диапазон для регистров (65535)
return max + mbreg + max + uniset::lcalibrate(fn, 0, fn_max, 0, max, false); // а так же обеспечить, чтобы для каждого нового номера функции был свой диапазон
// не пересекающийся с другими
return reg_max + mbreg + (reg_max * fn) + 1;
} }
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
size_t ModbusRTU::numBytes( const size_t nbits ) size_t ModbusRTU::numBytes( const size_t nbits )
......
...@@ -125,23 +125,25 @@ TEST_CASE("numBytes function", "[modbus][numbytes]" ) ...@@ -125,23 +125,25 @@ TEST_CASE("numBytes function", "[modbus][numbytes]" )
REQUIRE( ModbusRTU::numBytes(257) == 33 ); REQUIRE( ModbusRTU::numBytes(257) == 33 );
} }
// --------------------------------------------------------------- // ---------------------------------------------------------------
#if 0
#warning VERY LONG TIME TEST
TEST_CASE("genRegID", "[modbus][genRegID]" ) TEST_CASE("genRegID", "[modbus][genRegID]" )
{ {
int max_reg = numeric_limits<ModbusRTU::ModbusData>::max(); size_t max_reg = numeric_limits<ModbusRTU::ModbusData>::max();
int max_fn = numeric_limits<ModbusRTU::ModbusByte>::max(); size_t max_fn = numeric_limits<ModbusRTU::ModbusByte>::max();
ModbusRTU::RegID prevID = ModbusRTU::genRegID(0, 0); ModbusRTU::RegID prevID = ModbusRTU::genRegID(0, 0);
for( int f = 1; f < max_fn; f++ ) for( size_t f = 1; f < max_fn; f++ )
{ {
ModbusRTU::RegID minID = ModbusRTU::genRegID(0, f); ModbusRTU::RegID minID = ModbusRTU::genRegID(0, f);
REQUIRE( minID > prevID );
for( int r = 1; r < max_reg; r++ ) // для каждого нового номера функции должен быть свой диапазон
// не пересекающийся с другими
REQUIRE( minID > (prevID + max_reg - 1) );
prevID = minID;
for( size_t r = 1; r < max_reg; r++ )
REQUIRE( ModbusRTU::genRegID(r, f) == minID + r ); REQUIRE( ModbusRTU::genRegID(r, f) == minID + r );
} }
} }
#endif
// --------------------------------------------------------------- // ---------------------------------------------------------------
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