Commit 95d5e8b5 authored by Pavel Vainerman's avatar Pavel Vainerman

(tests): добавил заготовку для тестов "extensions"(расширений).

Исправил пару ошибочек. Удалил лишние файлы.
parent 89406a14
...@@ -30,7 +30,7 @@ prefix(prefix) ...@@ -30,7 +30,7 @@ prefix(prefix)
} }
int tmID=1; int tmID=1;
for( ;it1.getCurrent(); ++it1,++tmID ) for( ;it1.getCurrent(); it1++,++tmID )
initRRD(it1,tmID); initRRD(it1,tmID);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -74,7 +74,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID ) ...@@ -74,7 +74,7 @@ void RRDServer::initRRD( xmlNode* cnode, int tmID )
throw SystemError(err.str()); throw SystemError(err.str());
} }
for(;it_rra.getCurrent(); ++it_rra ) for(;it_rra.getCurrent(); it_rra++ )
{ {
string rra( it_rra.getProp("rra") ); string rra( it_rra.getProp("rra") );
if( rra.empty() ) if( rra.empty() )
......
SUBDIR=SMemoryTest SUBDIR=SMemoryTest
noinst_PROGRAMS = calibration digitalfilter noinst_PROGRAMS = tests tests_with_conf tests_with_sm
calibration_SOURCES = calibration.cc tests_SOURCES = tests.cc calibration.cc digitalfilter.cc
calibration_LDADD = $(top_builddir)/lib/libUniSet2.la $(top_builddir)/extensions/lib/libUniSet2Extensions.la tests_LDADD = $(top_builddir)/lib/libUniSet2.la $(top_builddir)/extensions/lib/libUniSet2Extensions.la
calibration_CPPFLAGS = -I$(top_builddir)/include -I$(top_builddir)/extensions/include tests_CPPFLAGS = -I$(top_builddir)/include -I$(top_builddir)/extensions/include -I$(includedir)/Catch
digitalfilter_SOURCES = digitalfilter.cc tests_with_conf_SOURCES = tests_with_conf.cc
digitalfilter_LDADD = $(top_builddir)/lib/libUniSet2.la $(top_builddir)/extensions/lib/libUniSet2Extensions.la tests_with_conf_LDADD = $(top_builddir)/lib/libUniSet2.la $(top_builddir)/extensions/lib/libUniSet2Extensions.la
digitalfilter_CPPFLAGS = -I$(top_builddir)/include -I$(top_builddir)/extensions/include tests_with_conf_CPPFLAGS = -I$(top_builddir)/include -I$(top_builddir)/extensions/include -I$(includedir)/Catch
tests_with_sm_SOURCES = tests_with_sm.cc
tests_with_sm_LDADD = $(top_builddir)/lib/libUniSet2.la $(top_builddir)/extensions/lib/libUniSet2Extensions.la \
$(top_builddir)/extensions/SharedMemory/libUniSet2SharedMemory.la $(SIGC_LIBS) $(COMCPP_LIBS)
tests_with_sm_CPPFLAGS = -I$(top_builddir)/include -I$(top_builddir)/extensions/include -I$(includedir)/Catch \
-I$(top_builddir)/extensions/SharedMemory $(SIGC_CFLAGS) $(COMCPP_CFLAGS)
#include <catch.hpp>
#if 0
#include <iostream> #include <iostream>
#include "Exceptions.h" #include "Exceptions.h"
#include "UniXML.h" #include "UniXML.h"
...@@ -77,3 +80,4 @@ int main( int argc, const char** argv ) ...@@ -77,3 +80,4 @@ int main( int argc, const char** argv )
return 1; return 1;
} }
#endif
\ No newline at end of file
#include <catch.hpp>
#if 0
#include <iostream> #include <iostream>
#include <vector> #include <vector>
#include <iomanip> #include <iomanip>
...@@ -44,3 +47,4 @@ int main( int argc, const char** argv ) ...@@ -44,3 +47,4 @@ int main( int argc, const char** argv )
return 1; return 1;
} }
#endif
\ No newline at end of file
#define CATCH_CONFIG_MAIN
#include <Catch/catch.hpp>
// не удивляйтесь, что тут нет main().. она спрятана в catch.cpp :)
#define CATCH_CONFIG_RUNNER
#include <catch.hpp>
#include <iostream>
#include "Configuration.h"
int main( int argc, char* argv[] )
{
Catch::Session session;
try
{
UniSetTypes::uniset_init(argc,argv);
int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore );
if( returnCode != 0 ) // Indicates a command line error
return returnCode;
return session.run();
}
catch( UniSetTypes::Exception& ex )
{
std::cerr << ex << std::endl;
}
return 1;
}
#!/bin/sh
# '--' - нужен для отделения аоргументов catch, от наших..
uniset-start.sh -f ./tests_with_conf $* -- --confile tests_with_conf.xml --prop-id2 -10
<?xml version = '1.0' encoding = 'UTF-8' ?>
<UNISETPLC>
<UserData></UserData>
<!-- Общие(стартовые) параметры по UniSet -->
<UniSet>
<NameService host="localhost" port="2809"/>
<LocalNode name="localhost"/>
<RootSection name="UNISET_PLC"/>
<CountOfNet name="1"/>
<RepeatCount name="3"/>
<RepeatTimeoutMS name="50"/>
<WatchDogTime name="0"/> <!-- [мин] -->
<PingNodeTime name="0"/> <!-- [сек] -->
<AutoStartUpTime name="1"/> <!-- [сек] -->
<DumpStateTime name="10"/><!-- [сек] -->
<SleepTickMS name="500"/><!-- [мсек] -->
<!-- Debug, logs -->
<UniSetDebug name="unideb" levels="crit,warn" file=""/>
<!-- Если не указано, то считается текущий каталог -->
<ConfDir name=""/>
<DataDir name=""/>
<BinDir name=""/>
<LogDir name=""/>
<DocDir name=""/>
<LockDir name=""/>
<testnode name="testnode" id2="-100"/>
<Services>
<LocalTimeService name="TimeService" MaxCountTimers="100" AskLifeTimeSEC="10"/>
<LocalInfoServer name="InfoServer" dbrepeat="1">
<RouteList>
</RouteList>
</LocalInfoServer>
<LocalDBServer name="DBServer" dbnode="" dbname="UNISET_PLC" dbuser="dbadmin" dbpass="dbadmin" pingTime="60000" reconnectTime="30000"/>
<LocalPrintServer device="/dev/lp0" checkTime="5000" />
</Services>
</UniSet>
<dlog name="dlog" levels="" file=""/>
<ObjectsMap idfromfile="1">
<!--
Краткие пояснения к полям секции 'sensors'
==========================================
node - узел на котором физически находится данный датчик
iotype - тип датчика
priority - приоритет сообщения об изменении данного датчика
textname - текстовое имя датчика
-->
<nodes port="2809">
<item id="1000" name="localhost" alias="" textname="Локальный узел" ip="127.0.0.1"/>
<item id="1001" name="node2" alias="" textname="Локальный узел" ip="127.0.0.1"/>
</nodes>
<!-- ************************ Датчики ********************** -->
<sensors name="Sensors">
<item id="1" name="Input1_S" textname="Команда 1" node="" iotype="DI" priority="Medium" default="1" />
<item id="4" name="Input2_S" textname="Команда 2" node="" iotype="DI" priority="Medium" />
<item id="140" name="Input3_S" textname="Команда 3" node="" iotype="DI" priority="Medium"/>
</sensors>
<thresholds name="thresholds">
</thresholds>
<controllers name="Controllers">
<item id="90" name="SharedMemory"/>
</controllers>
<!-- ******************* Идентификаторы сервисов ***************** -->
<services name="Services">
<item id="99" name="TimeService"/>
</services>
<!-- ******************* Идентификаторы объектов ***************** -->
<objects name="UniObjects">
<item id="100" name="TestProc"/>
</objects>
</ObjectsMap>
<messages name="messages" idfromfile="1" >
</messages>
</UNISETPLC>
#define CATCH_CONFIG_RUNNER
#include <catch.hpp>
#include <string>
#include "Debug.h"
#include "UniSetActivator.h"
#include "SharedMemory.h"
#include "Extensions.h"
// --------------------------------------------------------------------------
using namespace std;
using namespace UniSetTypes;
using namespace UniSetExtensions;
// --------------------------------------------------------------------------
int main(int argc, char* argv[] )
{
Catch::Session session;
if( argc>1 && ( strcmp(argv[1],"--help")==0 || strcmp(argv[1],"-h")==0 ) )
{
cout << "--confile - Использовать указанный конф. файл. По умолчанию configure.xml" << endl;
SharedMemory::help_print(argc, argv);
cout << endl << endl << "--------------- CATCH HELP --------------" << endl;
session.showHelp("test_with_sm");
return 0;
}
int returnCode = session.applyCommandLine( argc, argv, Catch::Session::OnUnusedOptions::Ignore );
if( returnCode != 0 ) // Indicates a command line error
return returnCode;
try
{
uniset_init(argc,argv);
/*
conf->initDebug(dlog,"dlog");
string logfilename = conf->getArgParam("--logfile", "smemory.log");
string logname( conf->getLogDir() + logfilename );
ulog.logFile( logname );
dlog.logFile( logname );
*/
SharedMemory* shm = SharedMemory::init_smemory(argc, argv);
if( !shm )
return 1;
UniSetActivator* act = UniSetActivator::Instance();
act->addObject(static_cast<class UniSetObject*>(shm));
SystemMessage sm(SystemMessage::StartUp);
act->broadcast( sm.transport_msg() );
act->run(true);
int ret = session.run();
act->oaDestroy();
return ret;
}
catch( SystemError& err )
{
cerr << "(tests_with_sm): " << err << endl;
}
catch( Exception& ex )
{
cerr << "(tests_with_sm): " << ex << endl;
}
catch( std::exception& e )
{
cerr << "(tests_with_sm): " << e.what() << endl;
}
catch(...)
{
cerr << "(tests_with_sm): catch(...)" << endl;
}
return 1;
}
#!/bin/sh
# '--' - нужен для отделения аоргументов catch, от наших..
uniset-start.sh -f ./tests_with_sm $* -- --confile tests_with_sm.xml
<?xml version="1.0" encoding="utf-8"?>
<UNISETPLC xmlns:xi="http://www.w3.org/2001/XInclude">
<UserData/>
<!-- Общие(стартовые) параметры по UniSet -->
<UniSet>
<NameService host="localhost" port="2809"/>
<LocalNode name="LocalhostNode"/>
<RootSection name="UNISET_PLC"/>
<CountOfNet name="1"/>
<RepeatCount name="3"/>
<RepeatTimeoutMS name="50"/>
<WatchDogTime name="0"/>
<PingNodeTime name="0"/>
<AutoStartUpTime name="1"/>
<DumpStateTime name="10"/>
<SleepTickMS name="500"/>
<UniSetDebug levels="" name="ulog"/>
<ConfDir name="./"/>
<DataDir name="./"/>
<BinDir name="./"/>
<LogDir name="./"/>
<DocDir name="./"/>
<LockDir name="./"/>
<Services>
<LocalTimeService AskLifeTimeSEC="10" MaxCountTimers="100" name="TimeService"/>
<LocalInfoServer dbrepeat="1" name="InfoServer">
<RouteList>
</RouteList>
</LocalInfoServer>
<LocalDBServer dbfile="test.db" dbname="UNISET_PLC" dbpass="dbadmin" dbuser="dbadmin" name="DBServer" pingTime="60000" reconnectTime="30000"/>
<LocalPrintServer checkTime="5000" device="/dev/lp0"/>
</Services>
</UniSet>
<dlog name="dlog"/>
<LogServer name="smplus" port="3333" host="localhost" />
<settings>
<TestProc name="TestProc1"
on_s="Input1_S"
lamp_c="Lamp58_C"
depend_c="Input4_S"
d1_check_s="Input5_S"
set_d1_check_s="Input5_S"
d2_check_s="AI11_AS"
set_d2_check_s="AI11_AS"
undef_c="AI54_S"
check_undef_s="AI54_S"
t_set_c="AI_AS"
t_check_s="Threshold1_S"
log_c="LogLevel_S"
log_s="LogLevel_S"
/>
<IOControl name="IOControl"/>
<testnode id="1000" id2="-100" name="testnode"/>
<SharedMemory name="SharedMemory" shmID="SharedMemory">
<History savetime="200">
<item filter="a1" fuse_id="AlarmFuse1_S" fuse_invert="1" id="1" size="30"/>
<item filter="a2" fuse_id="AlarmFuse2_AS" fuse_value="2" id="2" size="30"/>
</History>
</SharedMemory>
<UniExchange name="UniExchange">
<item name="UniExchange2" node="Node2"/>
<item id="3001" node_id="Node2"/>
</UniExchange>
<MBMaster1 iaddr="127.0.0.1" levels="info,warn,crit" name="MBMaster1" poll_time="200" port="30000" reply_timeout="60">
<DeviceList>
<item addr="0x01" invert="0" respondSensor="RespondRTU_S" timeout="5000" modeSensor="MB1_Mode_AS"/>
</DeviceList>
</MBMaster1>
<MBMultiMaster1 levels="info,warn,crit" name="MBMaster1" poll_time="200" reply_timeout="60">
<DeviceList>
<item addr="0x01" invert="0" respondSensor="RespondRTU_S" timeout="5000" modeSensor="MB1_Mode_AS"/>
</DeviceList>
<GateList>
<item ip="127.0.0.1" port="2048" recv_timeout="200"/>
<item ip="127.0.0.1" port="2049" recv_timeout="200"/>
</GateList>
</MBMultiMaster1>
<MBSlave2 addr="0x3">
</MBSlave2>
<MBMultiSlave1 addr="0x31" aftersend-pause="0" name="MBMultiSlave1" poll_time="200" reply_timeout="60">
<clients>
<item ip="localhost"/>
</clients>
</MBMultiSlave1>
<MBSlave1 addr="0x31" aftersend-pause="0" dev="/dev/ttyS0" levels="info,warn,crit" name="MBSlave1" poll_time="200" reply_timeout="60" speed="9600">
<filelist>
<!-- Список файлов разрешённых для передачи по modbus
directory - каталог где лежит файл. Можно не задавать
'ConfDir' - берётся из настроек (см. начало этого файла)
'DataDir' - берётся из настроек (см. начало этого файла)
'xxx' - прямое указание каталога
-->
<item directory="ConfDir" id="1" name="configure.xml"/>
<item directory="ConfDir" id="2" name="VERSION"/>
<item directory="/tmp/" id="3" name="configure.xml.gz"/>
<item directory="ConfDir" id="4" name="SERIAL"/>
</filelist>
<MEI>
<!-- ВНИМАНИЕ: должен заполняться в соответсвии со стандартом. ObjectID и DeviceID не случайны.. -->
<device id="0x01">
<object id="0" comm="VendorName">
<string value="etersoft"/>
</object>
<object id="1" comm="ProductCode">
<string value="uniset"/>
</object>
<object id="2" comm="MajorMinorRevision">
<string value="1.6"/>
</object>
</device>
<device id="0x02">
<object id="3" comm="VendorURL">
<string value="http://www.etersoft.ru"/>
</object>
<object id="4" comm="ProductName">
<string value="uniset"/>
</object>
<object id="5" comm="ModelName">
<string value="uniset:MBSlave"/>
</object>
<object id="6" comm="UserApplicationName">
<string value="MBSlave1"/>
</object>
</device>
<device id="0x03">
<object id="128" comm="private objects">
<string id="129" value="etersoft"/>
<string id="130" value="uniset"/>
<string id="131" value="1.6"/>
<string id="132" value="http://www.etersoft.ru"/>
<string id="133" value="MBSlave1"/>
</object>
</device>
</MEI>
</MBSlave1>
<RTUExchange name="RTUExchange">
<DeviceList>
<item addr="0x01" invert="0" respondSensor="RespondRTU_S" modeSensor="MB1_Mode_AS" timeout="5000"/>
</DeviceList>
</RTUExchange>
<UDPExchange name="UDPExchange"/>
<UDPExchange2 name="UDPExchange2"/>
<UNetExchange name="UNetExchange"/>
<HeartBeatTime time_msec="5000"/>
<TestGen input1_s="Input1_S" input2_s="DumpSensor1_S" name="TestGen" output1_c="DO_C"/>
<RRDServer1 name="RRDServer1">
<rrd filename="rrdtest.rrd" filter_field="rrd" filter_value="1" step="5" ds_field="rrd1_ds" overwrite="0">
<item rra="RRA:AVERAGE:0.5:1:4320"/>
<item rra="RRA:MAX:0.5:1:4320"/>
</rrd>
<rrd filename="rrdtest2.rrd" filter_field="rrd" filter_value="2" step="10" ds_field="rrd2_ds" overwrite="0">
<item rra="RRA:AVERAGE:0.5:1:4320"/>
<item rra="RRA:MAX:0.5:1:4320"/>
</rrd>
</RRDServer1>
</settings>
<ObjectsMap idfromfile="1">
<!--
Краткие пояснения к полям секции 'sensors'
==========================================
node - узел на котором физически находится данный датчик
iotype - тип датчика
priority - приоритет сообщения об изменении данного датчика
textname - текстовое имя датчика
-->
<nodes port="2809" unet_broadcast_ip="192.168.1.255" unet_broadcast_ip2="192.168.122.255">
<item id="3000" dbserver="DBServer1" infserver="InfoServer" ip="127.0.0.1" name="LocalhostNode" textname="Локальный узел" unet_ignore="0" unet_port="2048">
<iocards>
<item card="1" name="DI32"/>
<item card="2" name="DO32"/>
<item baddr="0x110" card="3" dev="/dev/null" name="UNIO48" subdev1="TBI24_0" subdev2="TBI16_8"/>
</iocards>
</item>
<item id="3001" infserver="InfoServer" ip="127.0.0.1" name="LocalhostNode1" textname="Локальный узел" unet_ignore="0" unet_port="2049"/>
<item id="3002" ip="192.168.56.10" name="Node1" textname="Node1" unet_ignore="0" unet_ip="192.168.56.255" unet_port="3001" unet_respond_id="Input1_S" unet_respond_invert="1"/>
<item id="3003" ip="192.168.56.11" name="Node2" textname="Node2" unet_ignore="0" unet_ip="192.168.56.255" unet_port="3002"/>
</nodes>
<!-- ************************ Датчики ********************** -->
<sensors name="Sensors">
<item dbignore="1" default="1" id="1" iotype="DI" name="Input1_S" priority="Medium" textname="Команда 1"/>
<item id="2" iotype="DI" mbaddr="0x01" mbfunc="0x06" mbreg="0x02" nbit="11" mbtype="rtu" name="Input2_S" priority="Medium" rs="4" textname="Команда 2"/>
<item id="3" iotype="DI" mbtcp="1" mbtcp_mbaddr="0x02" mbtcp_mbfunc="0x03" mbtcp_mbreg="0x02" mbtcp_mbtype="rtu" name="Input3_S" priority="Medium" textname="Команда 3"/>
<item id="4" iotype="DI" mbaddr="0x02" mbfunc="0x04" mbreg="0x02" mbtype="rtu" name="Input4_S" priority="Medium" rs="2" textname="Команда 4"/>
<item id="5" iotype="DI" name="Input5_S" priority="Medium" textname="Команда 5" udp="2" depend="Input4_S"/>
<item id="6" iotype="DI" name="Input6_S" priority="Medium" textname="Команда 6" udp="2"/>
<item id="11" iotype="AI" name="AI11_AS" priority="Medium" textname="AI 11" depend="Input4_S" depend_off_value="-50"/>
<item id="12" iotype="DI" name="Input12_S" priority="Medium" textname="Команда 12" iofront="01"/>
<item id="60" iotype="DI" name="Input60_S" priority="Medium" textname="Команда 61" iofront="10"/>
<item id="7" iotype="DO" name="DO_C" priority="Medium" textname="Digital output"/>
<item id="8" iotype="DO" name="DO1_C" priority="Medium" textname="Digital output"/>
<item default="1000" id="9" iotype="AO" name="AO_AS" precision="2" priority="Medium" rs="2" rs_channel="1" rs_jack="j1" rs_mbaddr="0x01" rs_mbfunc="0x06" rs_mbreg="0x02" rs_mbtype="rtu188" textname="Analog output"/>
<item default="378" id="10" iotype="AI" mbaddr="0x01" mbfunc="0x04" mbreg="0x01" mbtype="rtu" name="AI_AS" precision="45" priority="Medium" rs="1" textname="Analog input" vtype="F2">
<consumers>
<consumer cfilter="test1" name="TestProc" type="objects"/>
<consumer name="PLCProcessor" type="objects"/>
</consumers>
</item>
<item id="30044" iotype="DI" depend="AlarmFuse2_AS" depend_value="3" name="DI1_S" priority="Medium" rs="1" rs_mbaddr="0x01" rs_mbfunc="0x02" rs_mbreg="30044" rs_mbtype="rtu" textname="Test DI sensor"/>
<item id="30045" iotype="DI" name="DI2_S" priority="Medium" rs="1" rs_mbaddr="0x01" rs_mbfunc="0x02" rs_mbreg="30045" rs_mbtype="rtu" textname="Test DI sensor"/>
<item id="13" iotype="DI" name="Threshold1_S" priority="Medium" textname="Порог"/>
<item id="14" iotype="DI" name="TestMode_S" priority="Medium" textname="test"/>
<item id="15" iotype="DI" name="RespondRTU_S" textname="respond rtu"/>
<item id="16" iotype="DI" name="NoRespondRTU2_S" textname="no respond rtu"/>
<item id="17" iotype="DI" name="AlarmFuse1_S" priority="Medium" textname="alarm fuse sensor 1"/>
<item id="18" iotype="AI" name="AlarmFuse2_AS" priority="Medium" textname="alarm fuse sensor 2"/>
<item a1="1" id="19" iotype="DI" name="DumpSensor1_S" priority="Medium" textname="alarm dumpm sensor 1"/>
<item a1="1" id="20" iotype="DI" name="DumpSensor2_S" priority="Medium" textname="alarm dumpm sensor 2"/>
<item a1="1" id="21" iotype="DI" name="DumpSensor3_S" priority="Medium" textname="alarm dumpm sensor 3"/>
<item a1="1" id="22" iotype="DI" name="DumpSensor4_S" priority="Medium" textname="alarm dumpm sensor 4"/>
<item a2="1" id="23" iotype="DI" name="DumpSensor5_S" priority="Medium" textname="alarm dumpm sensor 5"/>
<item a2="1" id="24" iotype="DI" name="DumpSensor6_S" priority="Medium" textname="alarm dumpm sensor 6"/>
<item a2="1" id="25" iotype="DI" name="DumpSensor7_S" priority="Medium" textname="alarm dumpm sensor 7"/>
<item a2="1" id="26" iotype="DI" name="DumpSensor8_S" priority="Medium" textname="alarm dumpm sensor 8"/>
<item default="-655360" id="27" iotype="AI" mb_vtype="I2" mbaddr="0x01" mbreg="0x12" mbtcp="2" mbtype="rtu" name="MB1_AS" priority="Medium" textname="Analog input"/>
<item default="6553604" id="28" iotype="AI" mb_vtype="U2" mbaddr="0x01" mbreg="0x14" mbtcp="2" mbtype="rtu" name="MB2_AS" priority="Medium" textname="Analog input"/>
<item default="65536045" id="29" iotype="AI" mb_vtype="F2" mbaddr="0x01" mbreg="0x17" mbtcp="2" mbtype="rtu" name="MB3_AS" priority="Medium" textname="Analog input"/>
<item id="30" iotype="AI" name="IOTestMode_AS" priority="Medium" textname="testmode for IOControl"/>
<item id="31" iotype="AI" mb_vtype="I2" mbreg="43" name="imitator_performance1" precision="6" rs="mbslave" textname="Производительность танка 1"/>
<item id="32" iotype="AI" mbtcp_mbaddr="1" mbtcp_mbfunc="0x04" mbtcp_mbreg="43" mbtcp_mbtype="rtu" mbtcp_vtype="I2" name="performance1" noprecision="1" precision="6" rs="mbmaster" textname="Производительность танка 1"/>
<item id="33" iotype="DI" name="Message1" priority="Medium" textname="Текст сообщения 1"/>
<item id="34" iotype="AI" name="MB1_Mode_AS" priority="Medium" textname="ModbusExchange Mode"/>
<item id="50" iotype="DI" mbaddr="0x01" mbfunc="0x06" mbreg="0x02" nbit="0" mbtype="rtu" name="Input50_S" priority="Medium" rs="5" textname="Команда 2"/>
<item id="51" iotype="DI" mbaddr="0x01" mbfunc="0x03" mbreg="0x01" ntit="1" mbtype="rtu" name="Input51_S" priority="Medium" rs="5" textname="Команда 2"/>
<item id="52" iotype="DI" mbaddr="0x01" mbfunc="0x06" mbreg="0x02" nbit="1" mbtype="rtu" name="Input52_S" priority="Medium" rs="5" textname="Команда 2"/>
<item id="53" iotype="DI" mbaddr="0x01" mbfunc="0x03" mbreg="0x01" nbit="2" mbtype="rtu" name="Input53_S" priority="Medium" rs="5" textname="Команда 2"/>
<item id="54" iotype="AI" name="AI54_S" textname="AI sensor 54" rrd="1" rrd1_ds="GAUGE:20:U:U"/>
<item id="55" iotype="AI" name="AI55_S" textname="AI sensor 55" rrd="1" rrd1_ds="GAUGE:20:U:U"/>
<item id="56" iotype="AI" name="AI56_S" textname="AI sensor 56" rrd="2" rrd2_ds="COUNTER:20:U:U"/>
<item id="57" iotype="AI" name="AI57_S" textname="AI sensor 57" rrd="2" rrd2_ds="DERIVE:20:U:U"/>
<item id="58" iotype="AO" name="Lamp58_C" textname="Lamp 58" rrd="1" rrd1_ds="GAUGE:20:U:U"/>
<item id="62" iotype="AI" name="LogLevel_S" textname="LogLevel control"/>
<item id="63" iotype="AI" name="SVU_AskCount_AS" textname="svu asl count"/>
<item id="64" iotype="AI" name="AI64_AS" textname="AI64" mbaddr="0x01" mbfunc="0x03" mbreg="64" mbtype="rtu" rs="5"/>
<item id="65" iotype="DI" name="D65_S" textname="D65" threshold_aid="AI64_AS" lowlimit="3" hilimit="5" threshold_invert="1" rs="5" />
</sensors>
<thresholds name="thresholds">
<sensor iotype="AI" name="AI_AS">
<threshold hilimit="376" id="1" lowlimit="374" name="t1" sensibility="0" sid="Threshold1_S">
<consumers>
<consumer name="TestProc" type="objects"/>
</consumers>
</threshold>
</sensor>
</thresholds>
<controllers name="Controllers">
<item id="5000" name="SharedMemory1"/>
<item id="5003" name="SharedMemory"/>
<item id="5001" name="UniExchange"/>
<item id="5002" name="UniExchange2"/>
</controllers>
<!-- ******************* Идентификаторы сервисов ***************** -->
<services name="Services">
<item id="5010" name="InfoServer"/>
<item id="5011" name="DBServer1"/>
<item id="5012" name="PrintServer"/>
<item id="5013" name="TimeService"/>
</services>
<!-- ******************* Идентификаторы объектов ***************** -->
<objects name="UniObjects">
<item id="6000" name="TestProc"/>
<item id="6001" name="LProcessor"/>
<item id="6002" name="IOControl"/>
<item id="6003" name="RTUExchange"/>
<item id="6004" name="MBSlave1"/>
<item id="6005" name="MBMaster1"/>
<item id="6006" name="UDPExchange"/>
<item id="6007" name="UDPExchange2"/>
<item id="6008" name="UNetExchange"/>
<item id="6009" name="MBMaster2"/>
<item id="6010" name="MBMultiMaster1"/>
<item id="6011" name="RRDServer1"/>
<item id="6012" name="TestProc1"/>
<item id="6013" name="TestProc2"/>
<item id="6014" name="TestProc3"/>
<item id="6015" name="TestProc4"/>
<item id="6016" name="TestProc5"/>
<item id="6017" name="TestProc6"/>
<item id="6018" name="TestProc7"/>
<item id="6019" name="TestProc8"/>
<item id="6020" name="TestProc9"/>
<item id="6021" name="TestProc10"/>
<item id="6022" name="TestProc11"/>
<item id="6023" name="TestProc12"/>
<item id="6024" name="TestProc13"/>
<item id="6025" name="TestProc14"/>
<item id="6026" name="TestProc15"/>
<item id="6027" name="TestProc16"/>
<item id="6028" name="TestProc17"/>
<item id="6029" name="TestProc18"/>
<item id="6030" name="TestProc19"/>
<item id="6031" name="TestProc20"/>
<item id="6032" name="TestProc21"/>
<item id="6033" name="TestProc22"/>
<item id="6034" name="TestProc23"/>
<item id="6035" name="TestProc24"/>
<item id="6036" name="TestProc25"/>
<item id="6037" name="TestProc26"/>
<item id="6038" name="TestProc27"/>
<item id="6039" name="TestProc28"/>
<item id="6040" name="TestProc29"/>
<item id="6041" name="TestProc30"/>
<item id="6042" name="TestProc31"/>
<item id="6043" name="TestProc32"/>
<item id="6044" name="TestProc33"/>
<item id="6045" name="TestProc34"/>
<item id="6046" name="TestProc35"/>
<item id="6047" name="TestProc36"/>
<item id="6048" name="TestProc37"/>
<item id="6049" name="TestProc38"/>
<item id="6050" name="TestProc39"/>
<item id="6051" name="TestProc40"/>
<item id="6052" name="TestProc41"/>
<item id="6053" name="TestProc42"/>
<item id="6054" name="TestProc43"/>
<item id="6055" name="TestProc44"/>
<item id="6056" name="TestProc45"/>
<item id="6057" name="TestProc46"/>
<item id="6058" name="TestProc47"/>
<item id="6059" name="TestProc48"/>
<item id="6060" name="TestProc49"/>
<item id="6061" name="TestProc50"/>
<item id="6062" name="MBSlave2"/>
<item id="6063" name="MBMultiSlave1"/>
</objects>
</ObjectsMap>
<messages idfromfile="1" name="messages">
<item id="101" name="midMsg1" text="Text for message 1"/>
<item id="102" name="midMsg2" text="Text for message 2"/>
<item id="103" name="midMsg3" text="Text for message 3"/>
<item id="104" name="midMsg4" text="Text for message 4"/>
<item id="105" name="midMsg5" text="Text for message 5"/>
</messages>
<!-- <xi:include href="testID.xml"/> -->
<!-- <xi:include href="testIDnon-exist.xml"/> -->
<Calibrations name="Calibrations">
<diagram name="testcal">
<point x="-1000" y="-300"/>
<point x="-900" y="-250"/>
<point x="-800" y="-200"/>
<point x="-700" y="-150"/>
<point x="-600" y="-100"/>
<point x="-500" y="-80"/>
<point x="-200" y="-60"/>
<point x="-100" y="-60"/>
<point x="-50" y="-20"/>
<point x="0" y="0"/>
<point x="50" y="20"/>
<point x="100" y="60"/>
<point x="200" y="60"/>
<point x="300" y="80"/>
<point x="400" y="100"/>
<point x="500" y="150"/>
<point x="600" y="200"/>
<point x="700" y="250"/>
<point x="800" y="300"/>
<point x="900" y="400"/>
<point x="1000" y="600"/>
</diagram>
</Calibrations>
</UNISETPLC>
...@@ -361,20 +361,21 @@ void UniSetActivator::work() ...@@ -361,20 +361,21 @@ void UniSetActivator::work()
ucrit << myname << "(work): line: " << fe.line() << endl; ucrit << myname << "(work): line: " << fe.line() << endl;
ucrit << myname << "(work): mesg: " << fe.errmsg() << endl; ucrit << myname << "(work): mesg: " << fe.errmsg() << endl;
} }
catch(...)
{
ucrit << myname << "(work): catch ..." << endl;
}
ulogsys << myname << "(work): orb thread stopped!" << endl; ulogsys << myname << "(work): orb thread stopped!" << endl;
try
ulogsys << myname << "(oaDestroy): orb destroy... " << endl; {
try ulogsys << myname << "(oaDestroy): orb destroy... " << endl;
orb->destroy();
}
catch(omniORB::fatalException& fe)
{ {
orb->destroy(); ucrit << myname << "(work): : поймали omniORB::fatalException:" << endl;
ucrit << myname << "(work): file: " << fe.file() << endl;
ucrit << myname << "(work): line: " << fe.line() << endl;
ucrit << myname << "(work): mesg: " << fe.errmsg() << endl;
} }
catch(...){}
ulogsys << myname << "(oaDestroy): orb destroy ok."<< endl; ulogsys << myname << "(oaDestroy): orb destroy ok."<< endl;
} }
......
#include <string.h>
// http://www.cpptalk.net/invalid-conversion-from-char-to-const-char-vt13716.html
main(int argc, char **argv)
{
char **t1;
const char **t2;
const char **t3 = new const char *[10]; // t3 - массив указателей на const char*
char * const *t4 = new char*[10]; // t4 - константный массив указателей на char*
const char * const * t5;
t1 = argv;
// t2 = argv; // error: invalid conversion from 'char**' to 'const char**'
t2 = (const char**) argv;
t4 = argv;
t3[0] = argv[0];
// t4[0] = argv[0]; // error: assignment of read-only location '* t4'
t3[0] = new char[100];
//strcpy(t3[0],"text"); // error: invalid conversion from 'const char*' to 'char*'
strcpy(t4[0],"text"); // error: invalid conversion from 'const char*' to 'char*'
t3[0] = "test";
// t4[0] = "test"; // error: assignment of read-only location '* t4', warning: deprecated conversion from string constant to 'char*'
t5 = argv;
t5 = t3;
t5 = t4;
}
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string str;
getline(cin, str);
cout << "size of str=" << str.size() << ", strlen=" << strlen(str.c_str()) << endl;
}
#include <iostream>
#include <algorithm>
using namespace std;
#include "Exceptions.h"
#include "UniXML.h"
#include "UniSetTypes.h"
void check( const std::string& name, const std::string& true_res, const std::string& your_res )
{
cout<<name<<endl;
cout<<"Correct result: "<<true_res<<endl;
if( your_res == true_res )
cout<<"Your result: "<<your_res<<"\n"<<endl;
else
cout<<"Your result - ERROR!"<<"\n"<<endl;
}
void myf(xmlNode it)
{
cout<<it.name<<endl;
}
int main()
{
UniXML xml("iterator_test.xml");
UniXML::iterator it=xml.begin();
it.find("messages");
check( "Check find():", "messages", it.getName() );
it=xml.begin();
it.find("d7");
check( "Check find():", "d7", it.getName() );
it=xml.begin();
it.findName("c5","6abc");
check( "Check findName():", "c5", it.getName() );
it=xml.begin();
it.findName("messages","messages");
check( "Check findName():", "messages", it.getName() );
it=xml.begin();
it.find("UniSet");
it++;
++it;
check( "Check iterator ++ :", "ObjectsMap", it.getName() );
it=xml.begin();
it.find("testII");
it++;
it--;
--it;
check( "Check iterator -- :", "a2", it.getName() );
it=xml.begin();
it.goChildren();
cout<<"Check algorythm 'for_each()':\n";
for_each(it,xml.end(),myf);
cout<<"\nCorrect result for algoryhtm 'for_each()':\n"<<"UniSet \n"<<"dlog \n"
<<"ObjectsMap \n"<<"messages \n";
it=xml.begin();
it.find("test");
if( it.find("messages") )
cout << "ERROR! begin=<UniSet> but find <messages>!" << endl;
return 0;
}
<?xml version = '1.0' encoding = 'UTF-8' ?>
<UNISETPLC>
<UniSet>
<test name="testattr_0">
<a1 name="1abc"/>
<a2 name="2abc"/>
<testI name="testattr_1">
<b3 name="3abc"/>
<a2 name="3abc"/>
<testII name="testattr_2">
<c4 name="4abc"/>
<c5 name="5abc"/>
</testII>
<testIII name="testattr_3">
<d6 name="6abc"/>
<d7 name="7abc"/>
<a2 name="4abc"/>
<c5 name="6abc"/>
</testIII>
</testI>
<testIV name="testattr_4">
<e8 name="8abc"/>
<e9>
<f10 name="10abc">
</f10>
</e9>
</testIV>
<a2 name="5abc"/>
<c5 name="7abc"/>
</test>
</UniSet>
<dlog name="dlog" levels="" file=""/>
<ObjectsMap idfromfile="1">
</ObjectsMap>
<messages name="messages" idfromfile="1" >
<child>
</child>
</messages>
</UNISETPLC>
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