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
...
@@ -395,23 +395,30 @@ ModbusRTU::mbErrCode MBSlave::fileTransfer( ModbusRTU::FileTransferMessage& quer
int fd = open(fname.c_str(), O_RDONLY | O_NONBLOCK );
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;
dwarn << "(fileTransfer): open '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
return ModbusRTU::erOperationFailed;
}
}
int seek = query.numpacket * ModbusRTU::FileTransferRetMessage::MaxDataLen;
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];
ModbusRTU::ModbusByte buf[ModbusRTU::FileTransferRetMessage::MaxDataLen];
int
ret = ::read(fd, &buf, sizeof(buf));
ret = ::read(fd, &buf, sizeof(buf));
if( ret < 0 )
if( ret < 0 )
{
{
dwarn << "(fileTransfer): read from '" << fname << "' with error: " << strerror(errno) << endl;
close(fd);
close(fd);
dwarn << "(fileTransfer): read from '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
return ModbusRTU::erOperationFailed;
}
}
...
@@ -425,8 +432,8 @@ ModbusRTU::mbErrCode MBSlave::fileTransfer( ModbusRTU::FileTransferMessage& quer
...
@@ -425,8 +432,8 @@ ModbusRTU::mbErrCode MBSlave::fileTransfer( ModbusRTU::FileTransferMessage& quer
if( fstat(fd, &fs) < 0 )
if( fstat(fd, &fs) < 0 )
{
{
dwarn << "(fileTransfer): fstat for '" << fname << "' with error: " << strerror(errno) << endl;
close(fd);
close(fd);
dwarn << "(fileTransfer): fstat for '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
return ModbusRTU::erOperationFailed;
}
}
...
...
Utilities/MBTester/MBTCPServer.cc
View file @
fe804c9f
...
@@ -390,23 +390,29 @@ ModbusRTU::mbErrCode MBTCPServer::fileTransfer( ModbusRTU::FileTransferMessage&
...
@@ -390,23 +390,29 @@ ModbusRTU::mbErrCode MBTCPServer::fileTransfer( ModbusRTU::FileTransferMessage&
int fd = open(fname.c_str(), O_RDONLY | O_NONBLOCK );
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;
dwarn << "(fileTransfer): open '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
return ModbusRTU::erOperationFailed;
}
}
int seek = query.numpacket * ModbusRTU::FileTransferRetMessage::MaxDataLen;
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];
ModbusRTU::ModbusByte buf[ModbusRTU::FileTransferRetMessage::MaxDataLen];
int
ret = ::read(fd, &buf, sizeof(buf));
ret = ::read(fd, &buf, sizeof(buf));
if( ret < 0 )
if( ret < 0 )
{
{
dwarn << "(fileTransfer): read from '" << fname << "' with error: " << strerror(errno) << endl;
close(fd);
close(fd);
dwarn << "(fileTransfer): read from '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
return ModbusRTU::erOperationFailed;
}
}
...
@@ -420,8 +426,8 @@ ModbusRTU::mbErrCode MBTCPServer::fileTransfer( ModbusRTU::FileTransferMessage&
...
@@ -420,8 +426,8 @@ ModbusRTU::mbErrCode MBTCPServer::fileTransfer( ModbusRTU::FileTransferMessage&
if( fstat(fd, &fs) < 0 )
if( fstat(fd, &fs) < 0 )
{
{
dwarn << "(fileTransfer): fstat for '" << fname << "' with error: " << strerror(errno) << endl;
close(fd);
close(fd);
dwarn << "(fileTransfer): fstat for '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
return ModbusRTU::erOperationFailed;
}
}
...
...
Utilities/codegen/ctl-cpp-common.xsl
View file @
fe804c9f
...
@@ -846,6 +846,9 @@ end_private(false)
...
@@ -846,6 +846,9 @@ end_private(false)
</xsl:if>
</xsl:if>
</xsl:for-each>
</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>
);
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>
");
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))
...
@@ -1252,6 +1255,8 @@ askPause(uniset_conf()->getPIntProp(cnode,"askPause",2000))
maxHeartBeat = conf->getArgPInt("--" + argprefix + "heartbeat-max",it.getProp("heartbeat_max"), 10);
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>
);
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,
...
@@ -37,7 +37,7 @@ IOControl::IOControl(UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID,
blink_state
(
true
),
blink_state
(
true
),
blink2_state
(
true
),
blink2_state
(
true
),
blink3_state
(
true
),
blink3_state
(
true
),
testLamp_
S
(
UniSetTypes
::
DefaultObjectId
),
testLamp_
s
(
UniSetTypes
::
DefaultObjectId
),
isTestLamp
(
false
),
isTestLamp
(
false
),
sidHeartBeat
(
UniSetTypes
::
DefaultObjectId
),
sidHeartBeat
(
UniSetTypes
::
DefaultObjectId
),
force
(
false
),
force
(
false
),
...
@@ -173,9 +173,9 @@ IOControl::IOControl(UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID,
...
@@ -173,9 +173,9 @@ IOControl::IOControl(UniSetTypes::ObjectId id, UniSetTypes::ObjectId icID,
if
(
!
testlamp
.
empty
()
)
if
(
!
testlamp
.
empty
()
)
{
{
testLamp_
S
=
conf
->
getSensorID
(
testlamp
);
testLamp_
s
=
conf
->
getSensorID
(
testlamp
);
if
(
testLamp_
S
==
DefaultObjectId
)
if
(
testLamp_
s
==
DefaultObjectId
)
{
{
ostringstream
err
;
ostringstream
err
;
err
<<
myname
<<
": Unkown ID for "
<<
testlamp
;
err
<<
myname
<<
": Unkown ID for "
<<
testlamp
;
...
@@ -557,7 +557,7 @@ void IOControl::ioread( IOInfo* it )
...
@@ -557,7 +557,7 @@ void IOControl::ioread( IOInfo* it )
// немного оптимизации
// немного оптимизации
// сразу выставляем.сбрасываем флаг тестирования
// сразу выставляем.сбрасываем флаг тестирования
if
(
it
->
si
.
id
==
testLamp_
S
)
if
(
it
->
si
.
id
==
testLamp_
s
)
isTestLamp
=
set
;
isTestLamp
=
set
;
}
}
else
if
(
it
->
stype
==
UniversalIO
::
AO
)
else
if
(
it
->
stype
==
UniversalIO
::
AO
)
...
@@ -1094,13 +1094,13 @@ void IOControl::check_testmode()
...
@@ -1094,13 +1094,13 @@ void IOControl::check_testmode()
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
void
IOControl
::
check_testlamp
()
void
IOControl
::
check_testlamp
()
{
{
if
(
testLamp_
S
==
DefaultObjectId
)
if
(
testLamp_
s
==
DefaultObjectId
)
return
;
return
;
try
try
{
{
if
(
force_out
)
if
(
force_out
)
isTestLamp
=
shm
->
localGetValue
(
itTestLamp
,
testLamp_
S
);
isTestLamp
=
shm
->
localGetValue
(
itTestLamp
,
testLamp_
s
);
if
(
!
trTestLamp
.
change
(
isTestLamp
)
)
if
(
!
trTestLamp
.
change
(
isTestLamp
)
)
return
;
// если состояние не менялось, то продолжаем работу...
return
;
// если состояние не менялось, то продолжаем работу...
...
@@ -1348,8 +1348,8 @@ void IOControl::askSensors( UniversalIO::UIOCommand cmd )
...
@@ -1348,8 +1348,8 @@ void IOControl::askSensors( UniversalIO::UIOCommand cmd )
try
try
{
{
if
(
testLamp_
S
!=
DefaultObjectId
)
if
(
testLamp_
s
!=
DefaultObjectId
)
shm
->
askSensor
(
testLamp_
S
,
cmd
);
shm
->
askSensor
(
testLamp_
s
,
cmd
);
}
}
catch
(
const
Exception
&
ex
)
catch
(
const
Exception
&
ex
)
{
{
...
@@ -1398,7 +1398,7 @@ void IOControl::sensorInfo( const UniSetTypes::SensorMessage* sm )
...
@@ -1398,7 +1398,7 @@ void IOControl::sensorInfo( const UniSetTypes::SensorMessage* sm )
if
(
force_out
)
if
(
force_out
)
return
;
return
;
if
(
sm
->
id
==
testLamp_
S
)
if
(
sm
->
id
==
testLamp_
s
)
{
{
ioinfo
<<
myname
<<
"(sensorInfo): test_lamp="
<<
sm
->
value
<<
endl
;
ioinfo
<<
myname
<<
"(sensorInfo): test_lamp="
<<
sm
->
value
<<
endl
;
isTestLamp
=
(
bool
)
sm
->
value
;
isTestLamp
=
(
bool
)
sm
->
value
;
...
...
extensions/IOControl/IOControl.h
View file @
fe804c9f
...
@@ -322,11 +322,11 @@ class IOControl:
...
@@ -322,11 +322,11 @@ class IOControl:
bool
checkCards
(
const
std
::
string
&
func
=
""
);
bool
checkCards
(
const
std
::
string
&
func
=
""
);
xmlNode
*
cnode
;
/*!< xml-узел в настроечном файле */
xmlNode
*
cnode
=
{
0
}
;
/*!< xml-узел в настроечном файле */
int
polltime
;
/*!< переодичность обновления данных (опроса карт в/в), [мсек] */
int
polltime
=
{
150
}
;
/*!< переодичность обновления данных (опроса карт в/в), [мсек] */
CardList
cards
;
/*!< список карт - массив созданных ComediInterface */
CardList
cards
;
/*!< список карт - массив созданных ComediInterface */
bool
noCards
;
bool
noCards
=
{
false
}
;
typedef
std
::
vector
<
IOInfo
>
IOMap
;
typedef
std
::
vector
<
IOInfo
>
IOMap
;
IOMap
iomap
;
/*!< список входов/выходов */
IOMap
iomap
;
/*!< список входов/выходов */
...
@@ -334,16 +334,16 @@ class IOControl:
...
@@ -334,16 +334,16 @@ class IOControl:
typedef
std
::
deque
<
IOPriority
>
PIOMap
;
typedef
std
::
deque
<
IOPriority
>
PIOMap
;
PIOMap
pmap
;
/*!< список приоритетных входов/выходов */
PIOMap
pmap
;
/*!< список приоритетных входов/выходов */
unsigned
int
maxItem
;
/*!< количество элементов (используется на момент инициализации) */
unsigned
int
maxItem
=
{
0
}
;
/*!< количество элементов (используется на момент инициализации) */
unsigned
int
maxHalf
;
unsigned
int
maxHalf
=
{
0
}
;
int
filtersize
;
int
filtersize
=
{
0
}
;
float
filterT
;
float
filterT
=
{
0
.
0
}
;
std
::
string
s_field
;
std
::
string
s_field
;
std
::
string
s_fvalue
;
std
::
string
s_fvalue
;
std
::
shared_ptr
<
SMInterface
>
shm
;
std
::
shared_ptr
<
SMInterface
>
shm
;
UniSetTypes
::
ObjectId
myid
;
UniSetTypes
::
ObjectId
myid
=
{
UniSetTypes
::
DefaultObjectId
}
;
std
::
string
prefix
;
std
::
string
prefix
;
typedef
std
::
list
<
IOInfo
*>
BlinkList
;
typedef
std
::
list
<
IOInfo
*>
BlinkList
;
...
@@ -355,46 +355,46 @@ class IOControl:
...
@@ -355,46 +355,46 @@ class IOControl:
// обычное мигание
// обычное мигание
BlinkList
lstBlink
;
BlinkList
lstBlink
;
PassiveTimer
ptBlink
;
PassiveTimer
ptBlink
;
bool
blink_state
;
bool
blink_state
=
{
false
}
;
// мигание с двойной частотой
// мигание с двойной частотой
BlinkList
lstBlink2
;
BlinkList
lstBlink2
;
PassiveTimer
ptBlink2
;
PassiveTimer
ptBlink2
;
bool
blink2_state
;
bool
blink2_state
=
{
false
}
;
// мигание с тройной частотой
// мигание с тройной частотой
BlinkList
lstBlink3
;
BlinkList
lstBlink3
;
PassiveTimer
ptBlink3
;
PassiveTimer
ptBlink3
;
bool
blink3_state
;
bool
blink3_state
=
{
false
}
;
UniSetTypes
::
ObjectId
testLamp_
S
;
UniSetTypes
::
ObjectId
testLamp_
s
=
{
UniSetTypes
::
DefaultObjectId
}
;
Trigger
trTestLamp
;
Trigger
trTestLamp
;
bool
isTestLamp
;
bool
isTestLamp
=
{
false
}
;
IOController
::
IOStateList
::
iterator
itTestLamp
;
IOController
::
IOStateList
::
iterator
itTestLamp
;
PassiveTimer
ptHeartBeat
;
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
int
maxHeartBeat
;
int
maxHeartBeat
=
{
10
}
;
IOController
::
IOStateList
::
iterator
itHeartBeat
;
IOController
::
IOStateList
::
iterator
itHeartBeat
;
bool
force
;
/*!< флаг, означающий, что надо сохранять в SM, даже если значение не менялось */
bool
force
=
{
false
}
;
/*!< флаг, означающий, что надо сохранять в SM, даже если значение не менялось */
bool
force_out
;
/*!< флаг, включающий принудительное чтения выходов */
bool
force_out
=
{
false
}
;
/*!< флаг, включающий принудительное чтения выходов */
timeout_t
smReadyTimeout
;
/*!< время ожидания готовности SM к работе, мсек */
timeout_t
smReadyTimeout
=
{
15000
}
;
/*!< время ожидания готовности SM к работе, мсек */
int
defCardNum
;
/*!< номер карты по умолчанию */
int
defCardNum
=
{
-
1
}
;
/*!< номер карты по умолчанию */
int
maxCardNum
;
/*! максимально разрешённый номер для карты */
int
maxCardNum
=
{
10
}
;
/*! максимально разрешённый номер для карты */
UniSetTypes
::
uniset_mutex
iopollMutex
;
UniSetTypes
::
uniset_mutex
iopollMutex
;
std
::
atomic_bool
activated
;
std
::
atomic_bool
activated
=
{
false
}
;
bool
readconf_ok
;
bool
readconf_ok
=
{
false
}
;
int
activateTimeout
;
int
activateTimeout
;
UniSetTypes
::
ObjectId
sidTestSMReady
;
UniSetTypes
::
ObjectId
sidTestSMReady
=
{
UniSetTypes
::
DefaultObjectId
}
;
bool
term
;
bool
term
=
{
false
}
;
UniSetTypes
::
ObjectId
testMode_as
;
UniSetTypes
::
ObjectId
testMode_as
=
{
UniSetTypes
::
DefaultObjectId
}
;
IOController
::
IOStateList
::
iterator
itTestMode
;
IOController
::
IOStateList
::
iterator
itTestMode
;
long
testmode
;
long
testmode
=
{
false
}
;
long
prev_testmode
;
long
prev_testmode
=
{
false
}
;
std
::
shared_ptr
<
LogAgregator
>
loga
;
std
::
shared_ptr
<
LogAgregator
>
loga
;
std
::
shared_ptr
<
DebugStream
>
iolog
;
std
::
shared_ptr
<
DebugStream
>
iolog
;
...
...
extensions/LogicProcessor/LProcessor.h
View file @
fe804c9f
...
@@ -157,10 +157,10 @@ class LProcessor
...
@@ -157,10 +157,10 @@ class LProcessor
std
::
shared_ptr
<
SchemaXML
>
sch
;
std
::
shared_ptr
<
SchemaXML
>
sch
;
UInterface
ui
;
UInterface
ui
;
int
sleepTime
;
int
sleepTime
=
{
200
}
;
int
smReadyTimeout
;
/*!< время ожидания готовности SM
*/
int
smReadyTimeout
=
{
30000
}
;
/*!< время ожидания готовности SM, мсек
*/
std
::
string
logname
;
std
::
string
logname
=
{
""
}
;
std
::
atomic_bool
canceled
=
{
false
};
std
::
atomic_bool
canceled
=
{
false
};
...
...
extensions/LogicProcessor/PassiveLProcessor.h
View file @
fe804c9f
...
@@ -55,8 +55,8 @@ class PassiveLProcessor:
...
@@ -55,8 +55,8 @@ class PassiveLProcessor:
private
:
private
:
PassiveTimer
ptHeartBeat
;
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
=
{
UniSetTypes
::
DefaultObjectId
}
;
int
maxHeartBeat
;
int
maxHeartBeat
=
{
10
}
;
IOController
::
IOStateList
::
iterator
itHeartBeat
;
IOController
::
IOStateList
::
iterator
itHeartBeat
;
UniSetTypes
::
uniset_mutex
mutex_start
;
UniSetTypes
::
uniset_mutex
mutex_start
;
};
};
...
...
extensions/ModbusMaster/MBExchange.cc
View file @
fe804c9f
...
@@ -17,7 +17,7 @@ MBExchange::MBExchange(UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
...
@@ -17,7 +17,7 @@ MBExchange::MBExchange(UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId,
const
std
::
shared_ptr
<
SharedMemory
>&
_ic
,
const
std
::
string
&
prefix
)
:
const
std
::
shared_ptr
<
SharedMemory
>&
_ic
,
const
std
::
string
&
prefix
)
:
UniSetObject_LT
(
objId
),
UniSetObject_LT
(
objId
),
allInitOK
(
false
),
allInitOK
(
false
),
initPause
(
0
),
initPause
(
300
0
),
force
(
false
),
force
(
false
),
force_out
(
false
),
force_out
(
false
),
mbregFromID
(
false
),
mbregFromID
(
false
),
...
...
extensions/ModbusMaster/MBExchange.h
View file @
fe804c9f
...
@@ -311,41 +311,41 @@ class MBExchange:
...
@@ -311,41 +311,41 @@ class MBExchange:
void
rtuQueryOptimization
(
RTUDeviceMap
&
m
);
void
rtuQueryOptimization
(
RTUDeviceMap
&
m
);
xmlNode
*
cnode
;
xmlNode
*
cnode
=
{
0
}
;
std
::
string
s_field
;
std
::
string
s_field
;
std
::
string
s_fvalue
;
std
::
string
s_fvalue
;
std
::
shared_ptr
<
SMInterface
>
shm
;
std
::
shared_ptr
<
SMInterface
>
shm
;
bool
initPause
;
timeout_t
initPause
=
{
3000
}
;
UniSetTypes
::
uniset_rwmutex
mutex_start
;
UniSetTypes
::
uniset_rwmutex
mutex_start
;
bool
force
;
/*!< флаг означающий, что надо сохранять в SM, даже если значение не менялось */
bool
force
=
{
false
}
;
/*!< флаг означающий, что надо сохранять в SM, даже если значение не менялось */
bool
force_out
;
/*!< флаг означающий, принудительного чтения выходов */
bool
force_out
=
{
false
}
;
/*!< флаг означающий, принудительного чтения выходов */
bool
mbregFromID
;
bool
mbregFromID
=
{
false
}
;
int
polltime
;
/*!< переодичность обновления данных, [мсек] */
int
polltime
=
{
100
}
;
/*!< переодичность обновления данных, [мсек] */
timeout_t
sleepPause_usec
;
timeout_t
sleepPause_usec
;
unsigned
int
maxQueryCount
;
/*!< максимальное количество регистров для одного запроса */
unsigned
int
maxQueryCount
=
{
ModbusRTU
::
MAXDATALEN
}
;
/*!< максимальное количество регистров для одного запроса */
PassiveTimer
ptHeartBeat
;
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
=
{
UniSetTypes
::
DefaultObjectId
}
;
int
maxHeartBeat
;
int
maxHeartBeat
=
{
10
}
;
IOController
::
IOStateList
::
iterator
itHeartBeat
;
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
;
IOController
::
IOStateList
::
iterator
itExchangeMode
;
long
exchangeMode
=
{
emNone
};
/*!< режим работы см. ExchangeMode */
long
exchangeMode
=
{
emNone
};
/*!< режим работы см. ExchangeMode */
std
::
atomic_bool
activated
;
std
::
atomic_bool
activated
=
{
false
}
;
int
activateTimeout
;
int
activateTimeout
=
{
20000
};
// msec
bool
noQueryOptimization
;
bool
noQueryOptimization
=
{
false
}
;
bool
no_extimer
;
bool
no_extimer
=
{
false
}
;
std
::
string
prefix
;
std
::
string
prefix
;
timeout_t
stat_time
;
/*!< время сбора статистики обм
ена */
timeout_t
stat_time
=
{
0
};
/*!< время сбора статистики обмена, 0 - отключ
ена */
unsigned
int
poll_count
;
unsigned
int
poll_count
=
{
0
}
;
PassiveTimer
ptStatistic
;
/*!< таймер для сбора статистики обмена */
PassiveTimer
ptStatistic
;
/*!< таймер для сбора статистики обмена */
std
::
string
prop_prefix
;
/*!< префикс для считывания параметров обмена */
std
::
string
prop_prefix
;
/*!< префикс для считывания параметров обмена */
...
@@ -353,10 +353,10 @@ class MBExchange:
...
@@ -353,10 +353,10 @@ class MBExchange:
std
::
shared_ptr
<
ModbusClient
>
mb
;
std
::
shared_ptr
<
ModbusClient
>
mb
;
// определение timeout для соединения
// определение timeout для соединения
timeout_t
recv_timeout
;
timeout_t
recv_timeout
=
{
500
};
// msec
timeout_t
default_timeout
;
timeout_t
default_timeout
=
{
5000
};
// msec
int
aftersend_pause
;
int
aftersend_pause
=
{
0
}
;
PassiveTimer
ptReopen
;
/*!< таймер для переоткрытия соединения */
PassiveTimer
ptReopen
;
/*!< таймер для переоткрытия соединения */
Trigger
trReopen
;
Trigger
trReopen
;
...
@@ -370,7 +370,7 @@ class MBExchange:
...
@@ -370,7 +370,7 @@ class MBExchange:
std
::
string
defaultMBtype
;
std
::
string
defaultMBtype
;
std
::
string
defaultMBaddr
;
std
::
string
defaultMBaddr
;
bool
defaultMBinitOK
;
// флаг определяющий нужно ли ждать "первого обмена" или при запуске сохранять в SM значение default.
bool
defaultMBinitOK
=
{
false
}
;
// флаг определяющий нужно ли ждать "первого обмена" или при запуске сохранять в SM значение default.
std
::
shared_ptr
<
LogAgregator
>
loga
;
std
::
shared_ptr
<
LogAgregator
>
loga
;
std
::
shared_ptr
<
DebugStream
>
mblog
;
std
::
shared_ptr
<
DebugStream
>
mblog
;
...
...
extensions/ModbusMaster/tests/MBTCPTestServer.cc
View file @
fe804c9f
...
@@ -475,23 +475,29 @@ ModbusRTU::mbErrCode MBTCPTestServer::fileTransfer( ModbusRTU::FileTransferMessa
...
@@ -475,23 +475,29 @@ ModbusRTU::mbErrCode MBTCPTestServer::fileTransfer( ModbusRTU::FileTransferMessa
int fd = open(fname.c_str(), O_RDONLY | O_NONBLOCK );
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;
dwarn << "(fileTransfer): open '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
return ModbusRTU::erOperationFailed;
}
}
int seek = query.numpacket * ModbusRTU::FileTransferRetMessage::MaxDataLen;
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];
ModbusRTU::ModbusByte buf[ModbusRTU::FileTransferRetMessage::MaxDataLen];
int
ret = ::read(fd, &buf, sizeof(buf));
ret = ::read(fd, &buf, sizeof(buf));
if( ret < 0 )
if( ret < 0 )
{
{
dwarn << "(fileTransfer): read from '" << fname << "' with error: " << strerror(errno) << endl;
close(fd);
close(fd);
dwarn << "(fileTransfer): read from '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
return ModbusRTU::erOperationFailed;
}
}
...
@@ -505,8 +511,8 @@ ModbusRTU::mbErrCode MBTCPTestServer::fileTransfer( ModbusRTU::FileTransferMessa
...
@@ -505,8 +511,8 @@ ModbusRTU::mbErrCode MBTCPTestServer::fileTransfer( ModbusRTU::FileTransferMessa
if( fstat(fd, &fs) < 0 )
if( fstat(fd, &fs) < 0 )
{
{
dwarn << "(fileTransfer): fstat for '" << fname << "' with error: " << strerror(errno) << endl;
close(fd);
close(fd);
dwarn << "(fileTransfer): fstat for '" << fname << "' with error: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed;
return ModbusRTU::erOperationFailed;
}
}
...
...
extensions/ModbusSlave/MBSlave.cc
View file @
fe804c9f
...
@@ -14,7 +14,7 @@ using namespace ModbusRTU;
...
@@ -14,7 +14,7 @@ using namespace ModbusRTU;
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
MBSlave
::
MBSlave
(
UniSetTypes
::
ObjectId
objId
,
UniSetTypes
::
ObjectId
shmId
,
const
std
::
shared_ptr
<
SharedMemory
>&
ic
,
const
string
&
prefix
)
:
MBSlave
::
MBSlave
(
UniSetTypes
::
ObjectId
objId
,
UniSetTypes
::
ObjectId
shmId
,
const
std
::
shared_ptr
<
SharedMemory
>&
ic
,
const
string
&
prefix
)
:
UniSetObject_LT
(
objId
),
UniSetObject_LT
(
objId
),
initPause
(
0
),
initPause
(
300
0
),
test_id
(
DefaultObjectId
),
test_id
(
DefaultObjectId
),
askcount_id
(
DefaultObjectId
),
askcount_id
(
DefaultObjectId
),
respond_id
(
DefaultObjectId
),
respond_id
(
DefaultObjectId
),
...
...
extensions/ModbusSlave/MBSlave.h
View file @
fe804c9f
...
@@ -445,11 +445,11 @@ class MBSlave:
...
@@ -445,11 +445,11 @@ class MBSlave:
std
::
shared_ptr
<
ModbusServerSlot
>
mbslot
;
std
::
shared_ptr
<
ModbusServerSlot
>
mbslot
;
std
::
unordered_set
<
ModbusRTU
::
ModbusAddr
>
vaddr
;
/*!< адреса данного узла */
std
::
unordered_set
<
ModbusRTU
::
ModbusAddr
>
vaddr
;
/*!< адреса данного узла */
std
::
string
default_mbaddr
;
std
::
string
default_mbaddr
=
{
""
}
;
xmlNode
*
cnode
;
xmlNode
*
cnode
=
{
0
}
;
std
::
string
s_field
;
std
::
string
s_field
=
{
""
}
;
std
::
string
s_fvalue
;
std
::
string
s_fvalue
=
{
""
}
;
int
default_mbfunc
=
{
0
};
// функция по умолчанию, для вычисления RegID
int
default_mbfunc
=
{
0
};
// функция по умолчанию, для вычисления RegID
std
::
shared_ptr
<
SMInterface
>
shm
;
std
::
shared_ptr
<
SMInterface
>
shm
;
...
@@ -490,7 +490,7 @@ class MBSlave:
...
@@ -490,7 +490,7 @@ class MBSlave:
ModbusRTU
::
mbErrCode
real_write_prop
(
IOProperty
*
p
,
ModbusRTU
::
ModbusData
*
dat
,
int
&
i
,
int
count
);
ModbusRTU
::
mbErrCode
real_write_prop
(
IOProperty
*
p
,
ModbusRTU
::
ModbusData
*
dat
,
int
&
i
,
int
count
);
MBSlave
();
MBSlave
();
bool
initPause
;
timeout_t
initPause
=
{
3000
}
;
UniSetTypes
::
uniset_rwmutex
mutex_start
;
UniSetTypes
::
uniset_rwmutex
mutex_start
;
std
::
shared_ptr
<
ThreadCreator
<
MBSlave
>
>
thr
;
std
::
shared_ptr
<
ThreadCreator
<
MBSlave
>
>
thr
;
...
@@ -498,29 +498,29 @@ class MBSlave:
...
@@ -498,29 +498,29 @@ class MBSlave:
std
::
condition_variable
startNotifyEvent
;
std
::
condition_variable
startNotifyEvent
;
PassiveTimer
ptHeartBeat
;
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
=
{
UniSetTypes
::
DefaultObjectId
}
;
int
maxHeartBeat
;
int
maxHeartBeat
=
{
10
}
;
IOController
::
IOStateList
::
iterator
itHeartBeat
;
IOController
::
IOStateList
::
iterator
itHeartBeat
;
UniSetTypes
::
ObjectId
test_id
;
UniSetTypes
::
ObjectId
test_id
=
{
UniSetTypes
::
DefaultObjectId
}
;
IOController
::
IOStateList
::
iterator
itAskCount
;
IOController
::
IOStateList
::
iterator
itAskCount
;
UniSetTypes
::
ObjectId
askcount_id
;
UniSetTypes
::
ObjectId
askcount_id
=
{
UniSetTypes
::
DefaultObjectId
}
;
IOController
::
IOStateList
::
iterator
itRespond
;
IOController
::
IOStateList
::
iterator
itRespond
;
UniSetTypes
::
ObjectId
respond_id
;
UniSetTypes
::
ObjectId
respond_id
=
{
UniSetTypes
::
DefaultObjectId
}
;
bool
respond_invert
;
bool
respond_invert
=
{
false
}
;
PassiveTimer
ptTimeout
;
PassiveTimer
ptTimeout
;
long
askCount
;
long
askCount
=
{
0
}
;
typedef
std
::
unordered_map
<
ModbusRTU
::
mbErrCode
,
unsigned
int
>
ExchangeErrorMap
;
typedef
std
::
unordered_map
<
ModbusRTU
::
mbErrCode
,
unsigned
int
>
ExchangeErrorMap
;
ExchangeErrorMap
errmap
;
/*!< статистика обмена */
ExchangeErrorMap
errmap
;
/*!< статистика обмена */
std
::
atomic_bool
activated
;
std
::
atomic_bool
activated
=
{
false
}
;
std
::
atomic_bool
cancelled
;
std
::
atomic_bool
cancelled
=
{
false
}
;
int
activateTimeout
;
int
activateTimeout
=
{
20000
};
// msec
bool
pingOK
;
bool
pingOK
=
{
false
}
;
timeout_t
wait_msec
;
timeout_t
wait_msec
=
{
3000
}
;
bool
force
;
/*!< флаг означающий, что надо сохранять в SM, даже если значение не менялось */
bool
force
=
{
false
}
;
/*!< флаг означающий, что надо сохранять в SM, даже если значение не менялось */
bool
mbregFromID
=
{
0
};
bool
mbregFromID
=
{
0
};
bool
checkMBFunc
=
{
0
};
bool
checkMBFunc
=
{
0
};
...
@@ -530,8 +530,8 @@ class MBSlave:
...
@@ -530,8 +530,8 @@ class MBSlave:
typedef
std
::
unordered_map
<
int
,
std
::
string
>
FileList
;
typedef
std
::
unordered_map
<
int
,
std
::
string
>
FileList
;
FileList
flist
;
FileList
flist
;
std
::
string
prefix
;
std
::
string
prefix
=
{
""
}
;
std
::
string
prop_prefix
;
std
::
string
prop_prefix
=
{
""
}
;
ModbusRTU
::
ModbusData
buf
[
ModbusRTU
::
MAXLENPACKET
/
2
+
1
];
/*!< буфер для формирования ответов */
ModbusRTU
::
ModbusData
buf
[
ModbusRTU
::
MAXLENPACKET
/
2
+
1
];
/*!< буфер для формирования ответов */
...
...
extensions/ModbusSlave/tests/test_mbslave.cc
View file @
fe804c9f
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#include <time.h>
#include <time.h>
#include <limits>
#include <limits>
#include <memory>
#include "MBSlave.h"
#include "MBSlave.h"
#include "UniSetTypes.h"
#include "UniSetTypes.h"
#include "modbus/ModbusTCPMaster.h"
#include "modbus/ModbusTCPMaster.h"
...
@@ -14,26 +15,26 @@ static ModbusRTU::ModbusAddr slaveaddr2 = 0x02;
...
@@ -14,26 +15,26 @@ static ModbusRTU::ModbusAddr slaveaddr2 = 0x02;
static
int
port
=
20048
;
// conf->getArgInt("--mbs-inet-port");
static
int
port
=
20048
;
// conf->getArgInt("--mbs-inet-port");
static
string
addr
(
"127.0.0.1"
);
// conf->getArgParam("--mbs-inet-addr");
static
string
addr
(
"127.0.0.1"
);
// conf->getArgParam("--mbs-inet-addr");
static
ObjectId
slaveID
=
6004
;
// conf->getObjectID( conf->getArgParam("--mbs-name"));
static
ObjectId
slaveID
=
6004
;
// conf->getObjectID( conf->getArgParam("--mbs-name"));
static
ModbusTCPMaster
*
mb
=
nullptr
;
static
std
::
shared_ptr
<
ModbusTCPMaster
>
mb
;
static
UInterface
*
ui
=
nullptr
;
static
std
::
shared_ptr
<
UInterface
>
ui
;
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
static
void
InitTest
()
static
void
InitTest
()
{
{
auto
conf
=
uniset_conf
();
auto
conf
=
uniset_conf
();
CHECK
(
conf
!=
nullptr
);
CHECK
(
conf
!=
nullptr
);
if
(
ui
==
nullptr
)
if
(
!
ui
)
{
{
ui
=
new
UInterface
();
ui
=
std
::
make_shared
<
UInterface
>
();
// UI понадобиться для проверки записанных в SM значений.
// UI понадобиться для проверки записанных в SM значений.
CHECK
(
ui
->
getObjectIndex
()
!=
nullptr
);
CHECK
(
ui
->
getObjectIndex
()
!=
nullptr
);
CHECK
(
ui
->
getConf
()
==
conf
);
CHECK
(
ui
->
getConf
()
==
conf
);
CHECK
(
ui
->
waitReady
(
slaveID
,
5000
)
);
CHECK
(
ui
->
waitReady
(
slaveID
,
5000
)
);
}
}
if
(
mb
==
nullptr
)
if
(
!
mb
)
{
{
mb
=
new
ModbusTCPMaster
();
mb
=
std
::
make_shared
<
ModbusTCPMaster
>
();
ost
::
InetAddress
ia
(
addr
.
c_str
());
ost
::
InetAddress
ia
(
addr
.
c_str
());
mb
->
setTimeout
(
2000
);
mb
->
setTimeout
(
2000
);
REQUIRE_NOTHROW
(
mb
->
connect
(
ia
,
port
)
);
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[] )
...
@@ -59,7 +59,7 @@ int main(int argc, char* argv[] )
int
tout
=
6000
;
int
tout
=
6000
;
PassiveTimer
pt
(
tout
);
PassiveTimer
pt
(
tout
);
while
(
!
pt
.
checkTime
()
&&
!
act
->
exist
()
)
while
(
!
pt
.
checkTime
()
&&
!
act
->
exist
()
&&
!
mbs
->
exist
()
)
msleep
(
100
);
msleep
(
100
);
if
(
!
act
->
exist
()
)
if
(
!
act
->
exist
()
)
...
@@ -68,6 +68,12 @@ int main(int argc, char* argv[] )
...
@@ -68,6 +68,12 @@ int main(int argc, char* argv[] )
return
1
;
return
1
;
}
}
if
(
!
mbs
->
exist
()
)
{
cerr
<<
"(tests_with_sm): ModbusSlave not exist! (timeout="
<<
tout
<<
")"
<<
endl
;
return
1
;
}
return
session
.
run
();
return
session
.
run
();
}
}
catch
(
const
SystemError
&
err
)
catch
(
const
SystemError
&
err
)
...
...
extensions/ModbusSlave/tests/tests_with_sm.sh
View file @
fe804c9f
...
@@ -11,6 +11,6 @@ cd -
...
@@ -11,6 +11,6 @@ cd -
./uniset2-start.sh
-f
./tests-with-sm
$*
--
--confile
mbslave-test-configure.xml
--e-startup-pause
10
\
./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-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-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
#--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 -
...
@@ -11,4 +11,5 @@ cd -
./uniset2-start.sh
-f
./tests-with-sm
$*
--
--apart
--confile
mbslave-test-configure.xml
--e-startup-pause
10
\
./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-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-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,
...
@@ -1543,18 +1543,27 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string& fname,
}
}
int
seek
=
query
.
numpacket
*
ModbusRTU
::
FileTransferRetMessage
::
MaxDataLen
;
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
];
ModbusRTU
::
ModbusByte
buf
[
ModbusRTU
::
FileTransferRetMessage
::
MaxDataLen
];
int
ret
=
::
read
(
fd
,
&
buf
,
sizeof
(
buf
));
ret
=
::
read
(
fd
,
&
buf
,
sizeof
(
buf
));
if
(
ret
<
0
)
if
(
ret
<
0
)
{
{
close
(
fd
);
if
(
dlog
&&
dlog
->
is_warn
()
)
if
(
dlog
&&
dlog
->
is_warn
()
)
(
*
dlog
)[
Debug
::
WARN
]
<<
"(replyFileTransfer): read from '"
<<
fname
<<
"' with error: "
<<
strerror
(
errno
)
<<
endl
;
(
*
dlog
)[
Debug
::
WARN
]
<<
"(replyFileTransfer): read from '"
<<
fname
<<
"' with error: "
<<
strerror
(
errno
)
<<
endl
;
close
(
fd
);
return
ModbusRTU
::
erOperationFailed
;
return
ModbusRTU
::
erOperationFailed
;
}
}
...
@@ -1562,10 +1571,10 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string& fname,
...
@@ -1562,10 +1571,10 @@ ModbusRTU::mbErrCode ModbusServer::replyFileTransfer( const std::string& fname,
if
(
fstat
(
fd
,
&
fs
)
<
0
)
if
(
fstat
(
fd
,
&
fs
)
<
0
)
{
{
close
(
fd
);
if
(
dlog
&&
dlog
->
is_warn
()
)
if
(
dlog
&&
dlog
->
is_warn
()
)
(
*
dlog
)[
Debug
::
WARN
]
<<
"(replyFileTransfer): fstat for '"
<<
fname
<<
"' with error: "
<<
strerror
(
errno
)
<<
endl
;
(
*
dlog
)[
Debug
::
WARN
]
<<
"(replyFileTransfer): fstat for '"
<<
fname
<<
"' with error: "
<<
strerror
(
errno
)
<<
endl
;
close
(
fd
);
return
ModbusRTU
::
erOperationFailed
;
return
ModbusRTU
::
erOperationFailed
;
}
}
...
...
src/Various/RunLock.cc
View file @
fe804c9f
...
@@ -43,51 +43,52 @@ bool RunLock::isLocked( const string& name )
...
@@ -43,51 +43,52 @@ bool RunLock::isLocked( const string& name )
{
{
FILE
*
out
=
fopen
(
string
(
name
+
".lock"
).
c_str
(),
"r"
);
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
];
fclose
(
out
);
int
n
=
fscanf
(
out
,
"%9s"
,
ptr
);
return
false
;
if
(
n
<
1
)
}
return
false
;
DIR
*
d
=
opendir
(
"/proc"
);
DIR
*
d
=
opendir
(
"/proc"
);
dirent
*
dir
;
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";
string path(dir->d_name);
FILE *out_st = fopen( path.c_str(), "r" );
path = "/proc/" + path + "/status";
if(out_st)
FILE *out_st = fopen( path.c_str(), "r" );
{
if(out_st)
char ptr_st[1000];
{
fread(ptr_st, sizeof(ptr_st), 1, out_st);
char ptr_st[1000];
string str(ptr_st);
fread(ptr_st, sizeof(ptr_st), 1, out_st);
if(str.find(exename) == str.npos)
string str(ptr_st);
{
if(str.find(exename) == str.npos)
fclose(out_st);
{
break;
fclose(out_st);
}
break;
}
}
}
*/
*/
uinfo
<<
"(RunLock): programm "
<<
name
<<
" already run"
<<
endl
;
uinfo
<<
"(RunLock): programm "
<<
name
<<
" already run"
<<
endl
;
fclose
(
out
);
fclose
(
out
);
closedir
(
d
);
closedir
(
d
);
return
true
;
return
true
;
}
}
}
fclose
(
out
);
closedir
(
d
);
}
}
return
false
;
fclose
(
out
);
closedir
(
d
);
}
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
bool
RunLock
::
lock
(
const
string
&
name
)
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