Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
uniset2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UniSet project repositories
uniset2
Commits
fe804c9f
Commit
fe804c9f
authored
Oct 25, 2015
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Исправления по результатам проверки coverity // часть вторая
parent
90a6fa8c
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
190 additions
and
147 deletions
+190
-147
MBSlave.cc
Utilities/MBTester/MBSlave.cc
+12
-5
MBTCPServer.cc
Utilities/MBTester/MBTCPServer.cc
+11
-5
ctl-cpp-common.xsl
Utilities/codegen/ctl-cpp-common.xsl
+5
-0
IOControl.cc
extensions/IOControl/IOControl.cc
+9
-9
IOControl.h
extensions/IOControl/IOControl.h
+26
-26
LProcessor.h
extensions/LogicProcessor/LProcessor.h
+3
-3
PassiveLProcessor.h
extensions/LogicProcessor/PassiveLProcessor.h
+2
-2
MBExchange.cc
extensions/ModbusMaster/MBExchange.cc
+1
-1
MBExchange.h
extensions/ModbusMaster/MBExchange.h
+21
-21
MBTCPTestServer.cc
extensions/ModbusMaster/tests/MBTCPTestServer.cc
+11
-5
MBSlave.cc
extensions/ModbusSlave/MBSlave.cc
+1
-1
MBSlave.h
extensions/ModbusSlave/MBSlave.h
+20
-20
test_mbslave.cc
extensions/ModbusSlave/tests/test_mbslave.cc
+7
-6
tests_with_sm.cc
extensions/ModbusSlave/tests/tests_with_sm.cc
+7
-1
tests_with_sm.sh
extensions/ModbusSlave/tests/tests_with_sm.sh
+2
-1
tests_with_sm_apart.sh
extensions/ModbusSlave/tests/tests_with_sm_apart.sh
+2
-1
ModbusServer.cc
src/Communications/Modbus/ModbusServer.cc
+13
-4
RunLock.cc
src/Various/RunLock.cc
+37
-36
No files found.
Utilities/MBTester/MBSlave.cc
View file @
fe804c9f
...
...
@@ -395,23 +395,30 @@ ModbusRTU::mbErrCode MBSlave::fileTransfer( ModbusRTU::FileTransferMessage& quer
int fd = open(fname.c_str(), O_RDONLY | O_NONBLOCK );
if( fd <
=
0 )
if( fd < 0 )
{
dwarn << "(fileTransfer): open '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
int seek = query.numpacket * ModbusRTU::FileTransferRetMessage::MaxDataLen;
(void)lseek(fd, seek, SEEK_SET);
int ret = lseek(fd, seek, SEEK_SET);
if( ret < 0 )
{
close(fd);
dwarn << "(fileTransfer): lseek '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
ModbusRTU::ModbusByte buf[ModbusRTU::FileTransferRetMessage::MaxDataLen];
int
ret = ::read(fd, &buf, sizeof(buf));
ret = ::read(fd, &buf, sizeof(buf));
if( ret < 0 )
{
dwarn << "(fileTransfer): read from '" << fname << "' with error: " << strerror(errno) << endl;
close(fd);
dwarn << "(fileTransfer): read from '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
...
...
@@ -425,8 +432,8 @@ ModbusRTU::mbErrCode MBSlave::fileTransfer( ModbusRTU::FileTransferMessage& quer
if( fstat(fd, &fs) < 0 )
{
dwarn << "(fileTransfer): fstat for '" << fname << "' with error: " << strerror(errno) << endl;
close(fd);
dwarn << "(fileTransfer): fstat for '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
...
...
Utilities/MBTester/MBTCPServer.cc
View file @
fe804c9f
...
...
@@ -390,23 +390,29 @@ ModbusRTU::mbErrCode MBTCPServer::fileTransfer( ModbusRTU::FileTransferMessage&
int fd = open(fname.c_str(), O_RDONLY | O_NONBLOCK );
if( fd <
=
0 )
if( fd < 0 )
{
dwarn << "(fileTransfer): open '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
int seek = query.numpacket * ModbusRTU::FileTransferRetMessage::MaxDataLen;
(void)lseek(fd, seek, SEEK_SET);
int ret = lseek(fd, seek, SEEK_SET);
if( ret < 0 )
{
close(fd);
dwarn << "(fileTransfer): open '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
ModbusRTU::ModbusByte buf[ModbusRTU::FileTransferRetMessage::MaxDataLen];
int
ret = ::read(fd, &buf, sizeof(buf));
ret = ::read(fd, &buf, sizeof(buf));
if( ret < 0 )
{
dwarn << "(fileTransfer): read from '" << fname << "' with error: " << strerror(errno) << endl;
close(fd);
dwarn << "(fileTransfer): read from '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
...
...
@@ -420,8 +426,8 @@ ModbusRTU::mbErrCode MBTCPServer::fileTransfer( ModbusRTU::FileTransferMessage&
if( fstat(fd, &fs) < 0 )
{
dwarn << "(fileTransfer): fstat for '" << fname << "' with error: " << strerror(errno) << endl;
close(fd);
dwarn << "(fileTransfer): fstat for '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
...
...
Utilities/codegen/ctl-cpp-common.xsl
View file @
fe804c9f
...
...
@@ -846,6 +846,9 @@ end_private(false)
</xsl:if>
</xsl:for-each>
si.id = UniSetTypes::DefaultObjectId;
si.node = conf->getLocalNode();
sleep_msec = conf->getArgPInt("--" + argprefix + "sleep-msec","
<xsl:call-template
name=
"settings"
><xsl:with-param
name=
"varname"
select=
"'sleep-msec'"
/></xsl:call-template>
",
<xsl:call-template
name=
"settings"
><xsl:with-param
name=
"varname"
select=
"'sleep-msec'"
/></xsl:call-template>
);
string s_resetTime("
<xsl:call-template
name=
"settings"
><xsl:with-param
name=
"varname"
select=
"'resetMsgTime'"
/></xsl:call-template>
");
...
...
@@ -1252,6 +1255,8 @@ askPause(uniset_conf()->getPIntProp(cnode,"askPause",2000))
maxHeartBeat = conf->getArgPInt("--" + argprefix + "heartbeat-max",it.getProp("heartbeat_max"), 10);
}
si.id = UniSetTypes::DefaultObjectId;
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>
);
...
...
extensions/IOControl/IOControl.cc
View file @
fe804c9f
...
...
@@ -37,7 +37,7 @@ IOControl::IOControl(UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID,
blink_state
(
true
),
blink2_state
(
true
),
blink3_state
(
true
),
testLamp_
S
(
UniSetTypes
::
DefaultObjectId
),
testLamp_
s
(
UniSetTypes
::
DefaultObjectId
),
isTestLamp
(
false
),
sidHeartBeat
(
UniSetTypes
::
DefaultObjectId
),
force
(
false
),
...
...
@@ -173,9 +173,9 @@ IOControl::IOControl(UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID,
if
(
!
testlamp
.
empty
()
)
{
testLamp_
S
=
conf
->
getSensorID
(
testlamp
);
testLamp_
s
=
conf
->
getSensorID
(
testlamp
);
if
(
testLamp_
S
==
DefaultObjectId
)
if
(
testLamp_
s
==
DefaultObjectId
)
{
ostringstream
err
;
err
<<
myname
<<
": Unkown ID for "
<<
testlamp
;
...
...
@@ -557,7 +557,7 @@ void IOControl::ioread( IOInfo* it )
// немного оптимизации
// сразу выставляем.сбрасываем флаг тестирования
if
(
it
->
si
.
id
==
testLamp_
S
)
if
(
it
->
si
.
id
==
testLamp_
s
)
isTestLamp
=
set
;
}
else
if
(
it
->
stype
==
UniversalIO
::
AO
)
...
...
@@ -1094,13 +1094,13 @@ void IOControl::check_testmode()
// -----------------------------------------------------------------------------
void
IOControl
::
check_testlamp
()
{
if
(
testLamp_
S
==
DefaultObjectId
)
if
(
testLamp_
s
==
DefaultObjectId
)
return
;
try
{
if
(
force_out
)
isTestLamp
=
shm
->
localGetValue
(
itTestLamp
,
testLamp_
S
);
isTestLamp
=
shm
->
localGetValue
(
itTestLamp
,
testLamp_
s
);
if
(
!
trTestLamp
.
change
(
isTestLamp
)
)
return
;
// если состояние не менялось, то продолжаем работу...
...
...
@@ -1348,8 +1348,8 @@ void IOControl::askSensors( UniversalIO::UIOCommand cmd )
try
{
if
(
testLamp_
S
!=
DefaultObjectId
)
shm
->
askSensor
(
testLamp_
S
,
cmd
);
if
(
testLamp_
s
!=
DefaultObjectId
)
shm
->
askSensor
(
testLamp_
s
,
cmd
);
}
catch
(
const
Exception
&
ex
)
{
...
...
@@ -1398,7 +1398,7 @@ void IOControl::sensorInfo( const UniSetTypes::SensorMessage* sm )
if
(
force_out
)
return
;
if
(
sm
->
id
==
testLamp_
S
)
if
(
sm
->
id
==
testLamp_
s
)
{
ioinfo
<<
myname
<<
"(sensorInfo): test_lamp="
<<
sm
->
value
<<
endl
;
isTestLamp
=
(
bool
)
sm
->
value
;
...
...
extensions/IOControl/IOControl.h
View file @
fe804c9f
...
...
@@ -322,11 +322,11 @@ class IOControl:
bool
checkCards
(
const
std
::
string
&
func
=
""
);
xmlNode
*
cnode
;
/*!< xml-узел в настроечном файле */
xmlNode
*
cnode
=
{
0
}
;
/*!< xml-узел в настроечном файле */
int
polltime
;
/*!< переодичность обновления данных (опроса карт в/в), [мсек] */
int
polltime
=
{
150
}
;
/*!< переодичность обновления данных (опроса карт в/в), [мсек] */
CardList
cards
;
/*!< список карт - массив созданных ComediInterface */
bool
noCards
;
bool
noCards
=
{
false
}
;
typedef
std
::
vector
<
IOInfo
>
IOMap
;
IOMap
iomap
;
/*!< список входов/выходов */
...
...
@@ -334,16 +334,16 @@ class IOControl:
typedef
std
::
deque
<
IOPriority
>
PIOMap
;
PIOMap
pmap
;
/*!< список приоритетных входов/выходов */
unsigned
int
maxItem
;
/*!< количество элементов (используется на момент инициализации) */
unsigned
int
maxHalf
;
int
filtersize
;
float
filterT
;
unsigned
int
maxItem
=
{
0
}
;
/*!< количество элементов (используется на момент инициализации) */
unsigned
int
maxHalf
=
{
0
}
;
int
filtersize
=
{
0
}
;
float
filterT
=
{
0
.
0
}
;
std
::
string
s_field
;
std
::
string
s_fvalue
;
std
::
shared_ptr
<
SMInterface
>
shm
;
UniSetTypes
::
ObjectId
myid
;
UniSetTypes
::
ObjectId
myid
=
{
UniSetTypes
::
DefaultObjectId
}
;
std
::
string
prefix
;
typedef
std
::
list
<
IOInfo
*>
BlinkList
;
...
...
@@ -355,46 +355,46 @@ class IOControl:
// обычное мигание
BlinkList
lstBlink
;
PassiveTimer
ptBlink
;
bool
blink_state
;
bool
blink_state
=
{
false
}
;
// мигание с двойной частотой
BlinkList
lstBlink2
;
PassiveTimer
ptBlink2
;
bool
blink2_state
;
bool
blink2_state
=
{
false
}
;
// мигание с тройной частотой
BlinkList
lstBlink3
;
PassiveTimer
ptBlink3
;
bool
blink3_state
;
bool
blink3_state
=
{
false
}
;
UniSetTypes
::
ObjectId
testLamp_
S
;
UniSetTypes
::
ObjectId
testLamp_
s
=
{
UniSetTypes
::
DefaultObjectId
}
;
Trigger
trTestLamp
;
bool
isTestLamp
;
bool
isTestLamp
=
{
false
}
;
IOController
::
IOStateList
::
iterator
itTestLamp
;
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
int
maxHeartBeat
;
int
maxHeartBeat
=
{
10
}
;
IOController
::
IOStateList
::
iterator
itHeartBeat
;
bool
force
;
/*!< флаг, означающий, что надо сохранять в SM, даже если значение не менялось */
bool
force_out
;
/*!< флаг, включающий принудительное чтения выходов */
timeout_t
smReadyTimeout
;
/*!< время ожидания готовности SM к работе, мсек */
int
defCardNum
;
/*!< номер карты по умолчанию */
int
maxCardNum
;
/*! максимально разрешённый номер для карты */
bool
force
=
{
false
}
;
/*!< флаг, означающий, что надо сохранять в SM, даже если значение не менялось */
bool
force_out
=
{
false
}
;
/*!< флаг, включающий принудительное чтения выходов */
timeout_t
smReadyTimeout
=
{
15000
}
;
/*!< время ожидания готовности SM к работе, мсек */
int
defCardNum
=
{
-
1
}
;
/*!< номер карты по умолчанию */
int
maxCardNum
=
{
10
}
;
/*! максимально разрешённый номер для карты */
UniSetTypes
::
uniset_mutex
iopollMutex
;
std
::
atomic_bool
activated
;
bool
readconf_ok
;
std
::
atomic_bool
activated
=
{
false
}
;
bool
readconf_ok
=
{
false
}
;
int
activateTimeout
;
UniSetTypes
::
ObjectId
sidTestSMReady
;
bool
term
;
UniSetTypes
::
ObjectId
sidTestSMReady
=
{
UniSetTypes
::
DefaultObjectId
}
;
bool
term
=
{
false
}
;
UniSetTypes
::
ObjectId
testMode_as
;
UniSetTypes
::
ObjectId
testMode_as
=
{
UniSetTypes
::
DefaultObjectId
}
;
IOController
::
IOStateList
::
iterator
itTestMode
;
long
testmode
;
long
prev_testmode
;
long
testmode
=
{
false
}
;
long
prev_testmode
=
{
false
}
;
std
::
shared_ptr
<
LogAgregator
>
loga
;
std
::
shared_ptr
<
DebugStream
>
iolog
;
...
...
extensions/LogicProcessor/LProcessor.h
View file @
fe804c9f
...
...
@@ -157,10 +157,10 @@ class LProcessor
std
::
shared_ptr
<
SchemaXML
>
sch
;
UInterface
ui
;
int
sleepTime
;
int
smReadyTimeout
;
/*!< время ожидания готовности SM
*/
int
sleepTime
=
{
200
}
;
int
smReadyTimeout
=
{
30000
}
;
/*!< время ожидания готовности SM, мсек
*/
std
::
string
logname
;
std
::
string
logname
=
{
""
}
;
std
::
atomic_bool
canceled
=
{
false
};
...
...
extensions/LogicProcessor/PassiveLProcessor.h
View file @
fe804c9f
...
...
@@ -55,8 +55,8 @@ class PassiveLProcessor:
private
:
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
int
maxHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
=
{
UniSetTypes
::
DefaultObjectId
}
;
int
maxHeartBeat
=
{
10
}
;
IOController
::
IOStateList
::
iterator
itHeartBeat
;
UniSetTypes
::
uniset_mutex
mutex_start
;
};
...
...
extensions/ModbusMaster/MBExchange.cc
View file @
fe804c9f
...
...
@@ -17,7 +17,7 @@ MBExchange::MBExchange(UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
const
std
::
shared_ptr
<
SharedMemory
>&
_ic
,
const
std
::
string
&
prefix
)
:
UniSetObject_LT
(
objId
),
allInitOK
(
false
),
initPause
(
0
),
initPause
(
300
0
),
force
(
false
),
force_out
(
false
),
mbregFromID
(
false
),
...
...
extensions/ModbusMaster/MBExchange.h
View file @
fe804c9f
...
...
@@ -311,41 +311,41 @@ class MBExchange:
void
rtuQueryOptimization
(
RTUDeviceMap
&
m
);
xmlNode
*
cnode
;
xmlNode
*
cnode
=
{
0
}
;
std
::
string
s_field
;
std
::
string
s_fvalue
;
std
::
shared_ptr
<
SMInterface
>
shm
;
bool
initPause
;
timeout_t
initPause
=
{
3000
}
;
UniSetTypes
::
uniset_rwmutex
mutex_start
;
bool
force
;
/*!< флаг означающий, что надо сохранять в SM, даже если значение не менялось */
bool
force_out
;
/*!< флаг означающий, принудительного чтения выходов */
bool
mbregFromID
;
int
polltime
;
/*!< переодичность обновления данных, [мсек] */
bool
force
=
{
false
}
;
/*!< флаг означающий, что надо сохранять в SM, даже если значение не менялось */
bool
force_out
=
{
false
}
;
/*!< флаг означающий, принудительного чтения выходов */
bool
mbregFromID
=
{
false
}
;
int
polltime
=
{
100
}
;
/*!< переодичность обновления данных, [мсек] */
timeout_t
sleepPause_usec
;
unsigned
int
maxQueryCount
;
/*!< максимальное количество регистров для одного запроса */
unsigned
int
maxQueryCount
=
{
ModbusRTU
::
MAXDATALEN
}
;
/*!< максимальное количество регистров для одного запроса */
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
int
maxHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
=
{
UniSetTypes
::
DefaultObjectId
}
;
int
maxHeartBeat
=
{
10
}
;
IOController
::
IOStateList
::
iterator
itHeartBeat
;
UniSetTypes
::
ObjectId
test_id
;
UniSetTypes
::
ObjectId
test_id
=
{
UniSetTypes
::
DefaultObjectId
}
;
UniSetTypes
::
ObjectId
sidExchangeMode
;
/*!< иденидентификатор для датчика режима работы */
UniSetTypes
::
ObjectId
sidExchangeMode
=
{
UniSetTypes
::
DefaultObjectId
}
;
/*!< иденидентификатор для датчика режима работы */
IOController
::
IOStateList
::
iterator
itExchangeMode
;
long
exchangeMode
=
{
emNone
};
/*!< режим работы см. ExchangeMode */
std
::
atomic_bool
activated
;
int
activateTimeout
;
bool
noQueryOptimization
;
bool
no_extimer
;
std
::
atomic_bool
activated
=
{
false
}
;
int
activateTimeout
=
{
20000
};
// msec
bool
noQueryOptimization
=
{
false
}
;
bool
no_extimer
=
{
false
}
;
std
::
string
prefix
;
timeout_t
stat_time
;
/*!< время сбора статистики обм
ена */
unsigned
int
poll_count
;
timeout_t
stat_time
=
{
0
};
/*!< время сбора статистики обмена, 0 - отключ
ена */
unsigned
int
poll_count
=
{
0
}
;
PassiveTimer
ptStatistic
;
/*!< таймер для сбора статистики обмена */
std
::
string
prop_prefix
;
/*!< префикс для считывания параметров обмена */
...
...
@@ -353,10 +353,10 @@ class MBExchange:
std
::
shared_ptr
<
ModbusClient
>
mb
;
// определение timeout для соединения
timeout_t
recv_timeout
;
timeout_t
default_timeout
;
timeout_t
recv_timeout
=
{
500
};
// msec
timeout_t
default_timeout
=
{
5000
};
// msec
int
aftersend_pause
;
int
aftersend_pause
=
{
0
}
;
PassiveTimer
ptReopen
;
/*!< таймер для переоткрытия соединения */
Trigger
trReopen
;
...
...
@@ -370,7 +370,7 @@ class MBExchange:
std
::
string
defaultMBtype
;
std
::
string
defaultMBaddr
;
bool
defaultMBinitOK
;
// флаг определяющий нужно ли ждать "первого обмена" или при запуске сохранять в SM значение default.
bool
defaultMBinitOK
=
{
false
}
;
// флаг определяющий нужно ли ждать "первого обмена" или при запуске сохранять в SM значение default.
std
::
shared_ptr
<
LogAgregator
>
loga
;
std
::
shared_ptr
<
DebugStream
>
mblog
;
...
...
extensions/ModbusMaster/tests/MBTCPTestServer.cc
View file @
fe804c9f
...
...
@@ -475,23 +475,29 @@ ModbusRTU::mbErrCode MBTCPTestServer::fileTransfer( ModbusRTU::FileTransferMessa
int fd = open(fname.c_str(), O_RDONLY | O_NONBLOCK );
if( fd <
=
0 )
if( fd < 0 )
{
dwarn << "(fileTransfer): open '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
int seek = query.numpacket * ModbusRTU::FileTransferRetMessage::MaxDataLen;
(void)lseek(fd, seek, SEEK_SET);
int ret = lseek(fd, seek, SEEK_SET);
if( ret < 0 )
{
close(fd);
dwarn << "(fileTransfer): lseek '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
ModbusRTU::ModbusByte buf[ModbusRTU::FileTransferRetMessage::MaxDataLen];
int
ret = ::read(fd, &buf, sizeof(buf));
ret = ::read(fd, &buf, sizeof(buf));
if( ret < 0 )
{
dwarn << "(fileTransfer): read from '" << fname << "' with error: " << strerror(errno) << endl;
close(fd);
dwarn << "(fileTransfer): read from '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
...
...
@@ -505,8 +511,8 @@ ModbusRTU::mbErrCode MBTCPTestServer::fileTransfer( ModbusRTU::FileTransferMessa
if( fstat(fd, &fs) < 0 )
{
dwarn << "(fileTransfer): fstat for '" << fname << "' with error: " << strerror(errno) << endl;
close(fd);
dwarn << "(fileTransfer): fstat for '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
}
...
...
extensions/ModbusSlave/MBSlave.cc
View file @
fe804c9f
...
...
@@ -14,7 +14,7 @@ using namespace ModbusRTU;
// -----------------------------------------------------------------------------
MBSlave
::
MBSlave
(
UniSetTypes
::
ObjectId
objId
,
UniSetTypes
::
ObjectId
shmId
,
const
std
::
shared_ptr
<
SharedMemory
>&
ic
,
const
string
&
prefix
)
:
UniSetObject_LT
(
objId
),
initPause
(
0
),
initPause
(
300
0
),
test_id
(
DefaultObjectId
),
askcount_id
(
DefaultObjectId
),
respond_id
(
DefaultObjectId
),
...
...
extensions/ModbusSlave/MBSlave.h
View file @
fe804c9f
...
...
@@ -445,11 +445,11 @@ class MBSlave:
std
::
shared_ptr
<
ModbusServerSlot
>
mbslot
;
std
::
unordered_set
<
ModbusRTU
::
ModbusAddr
>
vaddr
;
/*!< адреса данного узла */
std
::
string
default_mbaddr
;
std
::
string
default_mbaddr
=
{
""
}
;
xmlNode
*
cnode
;
std
::
string
s_field
;
std
::
string
s_fvalue
;
xmlNode
*
cnode
=
{
0
}
;
std
::
string
s_field
=
{
""
}
;
std
::
string
s_fvalue
=
{
""
}
;
int
default_mbfunc
=
{
0
};
// функция по умолчанию, для вычисления RegID
std
::
shared_ptr
<
SMInterface
>
shm
;
...
...
@@ -490,7 +490,7 @@ class MBSlave:
ModbusRTU
::
mbErrCode
real_write_prop
(
IOProperty
*
p
,
ModbusRTU
::
ModbusData
*
dat
,
int
&
i
,
int
count
);
MBSlave
();
bool
initPause
;
timeout_t
initPause
=
{
3000
}
;
UniSetTypes
::
uniset_rwmutex
mutex_start
;
std
::
shared_ptr
<
ThreadCreator
<
MBSlave
>
>
thr
;
...
...
@@ -498,29 +498,29 @@ class MBSlave:
std
::
condition_variable
startNotifyEvent
;
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
int
maxHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
=
{
UniSetTypes
::
DefaultObjectId
}
;
int
maxHeartBeat
=
{
10
}
;
IOController
::
IOStateList
::
iterator
itHeartBeat
;
UniSetTypes
::
ObjectId
test_id
;
UniSetTypes
::
ObjectId
test_id
=
{
UniSetTypes
::
DefaultObjectId
}
;
IOController
::
IOStateList
::
iterator
itAskCount
;
UniSetTypes
::
ObjectId
askcount_id
;
UniSetTypes
::
ObjectId
askcount_id
=
{
UniSetTypes
::
DefaultObjectId
}
;
IOController
::
IOStateList
::
iterator
itRespond
;
UniSetTypes
::
ObjectId
respond_id
;
bool
respond_invert
;
UniSetTypes
::
ObjectId
respond_id
=
{
UniSetTypes
::
DefaultObjectId
}
;
bool
respond_invert
=
{
false
}
;
PassiveTimer
ptTimeout
;
long
askCount
;
long
askCount
=
{
0
}
;
typedef
std
::
unordered_map
<
ModbusRTU
::
mbErrCode
,
unsigned
int
>
ExchangeErrorMap
;
ExchangeErrorMap
errmap
;
/*!< статистика обмена */
std
::
atomic_bool
activated
;
std
::
atomic_bool
cancelled
;
int
activateTimeout
;
bool
pingOK
;
timeout_t
wait_msec
;
bool
force
;
/*!< флаг означающий, что надо сохранять в SM, даже если значение не менялось */
std
::
atomic_bool
activated
=
{
false
}
;
std
::
atomic_bool
cancelled
=
{
false
}
;
int
activateTimeout
=
{
20000
};
// msec
bool
pingOK
=
{
false
}
;
timeout_t
wait_msec
=
{
3000
}
;
bool
force
=
{
false
}
;
/*!< флаг означающий, что надо сохранять в SM, даже если значение не менялось */
bool
mbregFromID
=
{
0
};
bool
checkMBFunc
=
{
0
};
...
...
@@ -530,8 +530,8 @@ class MBSlave:
typedef
std
::
unordered_map
<
int
,
std
::
string
>
FileList
;
FileList
flist
;
std
::
string
prefix
;
std
::
string
prop_prefix
;
std
::
string
prefix
=
{
""
}
;
std
::
string
prop_prefix
=
{
""
}
;
ModbusRTU
::
ModbusData
buf
[
ModbusRTU
::
MAXLENPACKET
/
2
+
1
];
/*!< буфер для формирования ответов */
...
...
extensions/ModbusSlave/tests/test_mbslave.cc
View file @
fe804c9f
...
...
@@ -2,6 +2,7 @@
// -----------------------------------------------------------------------------
#include <time.h>
#include <limits>
#include <memory>
#include "MBSlave.h"
#include "UniSetTypes.h"
#include "modbus/ModbusTCPMaster.h"
...
...
@@ -14,26 +15,26 @@ static ModbusRTU::ModbusAddr slaveaddr2 = 0x02;
static
int
port
=
20048
;
// conf->getArgInt("--mbs-inet-port");
static
string
addr
(
"127.0.0.1"
);
// conf->getArgParam("--mbs-inet-addr");
static
ObjectId
slaveID
=
6004
;
// conf->getObjectID( conf->getArgParam("--mbs-name"));
static
ModbusTCPMaster
*
mb
=
nullptr
;
static
UInterface
*
ui
=
nullptr
;
static
std
::
shared_ptr
<
ModbusTCPMaster
>
mb
;
static
std
::
shared_ptr
<
UInterface
>
ui
;
// -----------------------------------------------------------------------------
static
void
InitTest
()
{
auto
conf
=
uniset_conf
();
CHECK
(
conf
!=
nullptr
);
if
(
ui
==
nullptr
)
if
(
!
ui
)
{
ui
=
new
UInterface
();
ui
=
std
::
make_shared
<
UInterface
>
();
// UI понадобиться для проверки записанных в SM значений.
CHECK
(
ui
->
getObjectIndex
()
!=
nullptr
);
CHECK
(
ui
->
getConf
()
==
conf
);
CHECK
(
ui
->
waitReady
(
slaveID
,
5000
)
);
}
if
(
mb
==
nullptr
)
if
(
!
mb
)
{
mb
=
new
ModbusTCPMaster
();
mb
=
std
::
make_shared
<
ModbusTCPMaster
>
();
ost
::
InetAddress
ia
(
addr
.
c_str
());
mb
->
setTimeout
(
2000
);
REQUIRE_NOTHROW
(
mb
->
connect
(
ia
,
port
)
);
...
...
extensions/ModbusSlave/tests/tests_with_sm.cc
View file @
fe804c9f
...
...
@@ -59,7 +59,7 @@ int main(int argc, char* argv[] )
int
tout
=
6000
;
PassiveTimer
pt
(
tout
);
while
(
!
pt
.
checkTime
()
&&
!
act
->
exist
()
)
while
(
!
pt
.
checkTime
()
&&
!
act
->
exist
()
&&
!
mbs
->
exist
()
)
msleep
(
100
);
if
(
!
act
->
exist
()
)
...
...
@@ -68,6 +68,12 @@ int main(int argc, char* argv[] )
return
1
;
}
if
(
!
mbs
->
exist
()
)
{
cerr
<<
"(tests_with_sm): ModbusSlave not exist! (timeout="
<<
tout
<<
")"
<<
endl
;
return
1
;
}
return
session
.
run
();
}
catch
(
const
SystemError
&
err
)
...
...
extensions/ModbusSlave/tests/tests_with_sm.sh
View file @
fe804c9f
...
...
@@ -11,6 +11,6 @@ cd -
./uniset2-start.sh
-f
./tests-with-sm
$*
--
--confile
mbslave-test-configure.xml
--e-startup-pause
10
\
--mbs-name
MBSlave1
--mbs-type
TCP
--mbs-inet-addr
127.0.0.1
--mbs-inet-port
20048
\
--mbs-askcount-id
SVU_AskCount_AS
--mbs-respond-id
RespondRTU_S
--mbs-respond-invert
1
\
--mbs-filter-field
mbs
--mbs-filter-value
1
--mbs-filter-field
mbs
--mbs-filter-value
1
--mbs-initPause
100
#--mbs-log-add-levels any
\ No newline at end of file
extensions/ModbusSlave/tests/tests_with_sm_apart.sh
View file @
fe804c9f
...
...
@@ -11,4 +11,5 @@ cd -
./uniset2-start.sh
-f
./tests-with-sm
$*
--
--apart
--confile
mbslave-test-configure.xml
--e-startup-pause
10
\
--mbs-name
MBSlave1
--mbs-type
TCP
--mbs-inet-addr
127.0.0.1
--mbs-inet-port
20048
\
--mbs-askcount-id
SVU_AskCount_AS
--mbs-respond-id
RespondRTU_S
--mbs-respond-invert
1
\
--mbs-filter-field
mbs
--mbs-filter-value
1
--mbs-filter-field
mbs
--mbs-filter-value
1
--mbs-initPause
100
src/Communications/Modbus/ModbusServer.cc
View file @
fe804c9f
...
...
@@ -1543,18 +1543,27 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string& fname,
}
int
seek
=
query
.
numpacket
*
ModbusRTU
::
FileTransferRetMessage
::
MaxDataLen
;
(
void
)
lseek
(
fd
,
seek
,
SEEK_SET
);
int
ret
=
lseek
(
fd
,
seek
,
SEEK_SET
);
if
(
ret
==
-
1
)
{
close
(
fd
);
if
(
dlog
&&
dlog
->
is_warn
()
)
(
*
dlog
)[
Debug
::
WARN
]
<<
"(replyFileTransfer): open '"
<<
fname
<<
"' with error: "
<<
strerror
(
errno
)
<<
endl
;
return
ModbusRTU
::
erOperationFailed
;
}
ModbusRTU
::
ModbusByte
buf
[
ModbusRTU
::
FileTransferRetMessage
::
MaxDataLen
];
int
ret
=
::
read
(
fd
,
&
buf
,
sizeof
(
buf
));
ret
=
::
read
(
fd
,
&
buf
,
sizeof
(
buf
));
if
(
ret
<
0
)
{
close
(
fd
);
if
(
dlog
&&
dlog
->
is_warn
()
)
(
*
dlog
)[
Debug
::
WARN
]
<<
"(replyFileTransfer): read from '"
<<
fname
<<
"' with error: "
<<
strerror
(
errno
)
<<
endl
;
close
(
fd
);
return
ModbusRTU
::
erOperationFailed
;
}
...
...
@@ -1562,10 +1571,10 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string& fname,
if
(
fstat
(
fd
,
&
fs
)
<
0
)
{
close
(
fd
);
if
(
dlog
&&
dlog
->
is_warn
()
)
(
*
dlog
)[
Debug
::
WARN
]
<<
"(replyFileTransfer): fstat for '"
<<
fname
<<
"' with error: "
<<
strerror
(
errno
)
<<
endl
;
close
(
fd
);
return
ModbusRTU
::
erOperationFailed
;
}
...
...
src/Various/RunLock.cc
View file @
fe804c9f
...
...
@@ -43,51 +43,52 @@ bool RunLock::isLocked( const string& name )
{
FILE
*
out
=
fopen
(
string
(
name
+
".lock"
).
c_str
(),
"r"
);
if
(
out
)
if
(
out
==
NULL
)
return
false
;
char
ptr
[
10
];
int
n
=
fscanf
(
out
,
"%9s"
,
ptr
);
if
(
n
<
1
)
{
char
ptr
[
10
];
int
n
=
fscanf
(
out
,
"%9s"
,
ptr
);
if
(
n
<
1
)
return
false
;
fclose
(
out
);
return
false
;
}
DIR
*
d
=
opendir
(
"/proc"
);
dirent
*
dir
;
DIR
*
d
=
opendir
(
"/proc"
);
dirent
*
dir
;
while
((
dir
=
readdir
(
d
)))
while
((
dir
=
readdir
(
d
)))
{
if
(
!
strcmp
(
ptr
,
dir
->
d_name
)
)
{
if
(
!
strcmp
(
ptr
,
dir
->
d_name
)
)
{
// по хорошему здесь надо бы проверять
// статус на зомби
/*
string path(dir->d_name);
path = "/proc/" + path + "/status";
FILE *out_st = fopen( path.c_str(), "r" );
if(out_st)
{
char ptr_st[1000];
fread(ptr_st, sizeof(ptr_st), 1, out_st);
string str(ptr_st);
if(str.find(exename) == str.npos)
{
fclose(out_st);
break;
}
}
// по хорошему здесь надо бы проверять
// статус на зомби
/*
string path(dir->d_name);
path = "/proc/" + path + "/status";
FILE *out_st = fopen( path.c_str(), "r" );
if(out_st)
{
char ptr_st[1000];
fread(ptr_st, sizeof(ptr_st), 1, out_st);
string str(ptr_st);
if(str.find(exename) == str.npos)
{
fclose(out_st);
break;
}
}
*/
uinfo
<<
"(RunLock): programm "
<<
name
<<
" already run"
<<
endl
;
uinfo
<<
"(RunLock): programm "
<<
name
<<
" already run"
<<
endl
;
fclose
(
out
);
closedir
(
d
);
return
true
;
}
fclose
(
out
);
closedir
(
d
);
return
true
;
}
fclose
(
out
);
closedir
(
d
);
}
return
false
;
fclose
(
out
);
closedir
(
d
);
}
// --------------------------------------------------------------------------
bool
RunLock
::
lock
(
const
string
&
name
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment