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
d6629a3f
Commit
d6629a3f
authored
Mar 19, 2013
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(Modbus): сделана предварительная реализация запроса и ответа на функцию 43/14 (0x2B/0x0E)
parent
9a9332fb
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
61 additions
and
37 deletions
+61
-37
MBSlave.cc
Utilities/MBTester/MBSlave.cc
+36
-1
MBSlave.h
Utilities/MBTester/MBSlave.h
+3
-0
MBTCPServer.h
Utilities/MBTester/MBTCPServer.h
+3
-0
configure.ac
configure.ac
+1
-1
ModbusRTUSlaveSlot.h
include/modbus/ModbusRTUSlaveSlot.h
+3
-0
ModbusServer.h
include/modbus/ModbusServer.h
+8
-0
ModbusTypes.cc
src/Communications/Modbus/ModbusTypes.cc
+7
-35
No files found.
Utilities/MBTester/MBSlave.cc
View file @
d6629a3f
...
@@ -3,8 +3,9 @@
...
@@ -3,8 +3,9 @@
//#include <string.h>
//#include <string.h>
//#include <errno.h>
//#include <errno.h>
#include <sstream>
#include <sstream>
#include
<UniSetTypes.h>
#include
"UniSetTypes.h"
#include "MBSlave.h"
#include "MBSlave.h"
#include "config.h"
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
using
namespace
std
;
using
namespace
std
;
using
namespace
UniSetTypes
;
using
namespace
UniSetTypes
;
...
@@ -48,6 +49,7 @@ MBSlave::MBSlave( ModbusRTU::ModbusAddr addr, const std::string dev, const std::
...
@@ -48,6 +49,7 @@ MBSlave::MBSlave( ModbusRTU::ModbusAddr addr, const std::string dev, const std::
rscomm
->
connectRemoteService
(
sigc
::
mem_fun
(
this
,
&
MBSlave
::
remoteService
)
);
rscomm
->
connectRemoteService
(
sigc
::
mem_fun
(
this
,
&
MBSlave
::
remoteService
)
);
rscomm
->
connectFileTransfer
(
sigc
::
mem_fun
(
this
,
&
MBSlave
::
fileTransfer
)
);
rscomm
->
connectFileTransfer
(
sigc
::
mem_fun
(
this
,
&
MBSlave
::
fileTransfer
)
);
rscomm
->
connectDiagnostics
(
sigc
::
mem_fun
(
this
,
&
MBSlave
::
diagnostics
)
);
rscomm
->
connectDiagnostics
(
sigc
::
mem_fun
(
this
,
&
MBSlave
::
diagnostics
)
);
rscomm
->
connectMEIRDI
(
sigc
::
mem_fun
(
this
,
&
MBSlave
::
read4314
)
);
rscomm
->
setRecvTimeout
(
2000
);
rscomm
->
setRecvTimeout
(
2000
);
...
@@ -467,3 +469,36 @@ ModbusRTU::mbErrCode MBSlave::diagnostics( ModbusRTU::DiagnosticMessage& query,
...
@@ -467,3 +469,36 @@ ModbusRTU::mbErrCode MBSlave::diagnostics( ModbusRTU::DiagnosticMessage& query,
return
ModbusRTU
::
erOperationFailed
;
return
ModbusRTU
::
erOperationFailed
;
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
ModbusRTU
::
mbErrCode
MBSlave
::
read4314
(
ModbusRTU
::
MEIMessageRDI
&
query
,
ModbusRTU
::
MEIMessageRetRDI
&
reply
)
{
if
(
verbose
)
cout
<<
"(read4314): "
<<
query
<<
endl
;
if
(
query
.
devID
==
rdiVendorName
)
{
reply
.
mf
=
0
;
reply
.
conformity
=
0
;
reply
.
addData
(
rdiVendorName
,
"etersoft"
);
reply
.
addData
(
rdiProductCode
,
PACKAGE_NAME
);
reply
.
addData
(
rdiMajorMinorRevision
,
PACKAGE_VERSION
);
return
erNoError
;
}
else
if
(
query
.
devID
==
rdiProductCode
)
{
reply
.
mf
=
0
;
reply
.
conformity
=
0
;
reply
.
addData
(
rdiProductCode
,
PACKAGE_NAME
);
return
erNoError
;
}
else
if
(
query
.
devID
==
rdiMajorMinorRevision
)
{
reply
.
mf
=
0
;
reply
.
conformity
=
0
;
reply
.
addData
(
rdiMajorMinorRevision
,
PACKAGE_VERSION
);
return
erNoError
;
}
return
ModbusRTU
::
erOperationFailed
;
}
// -------------------------------------------------------------------------
Utilities/MBTester/MBSlave.h
View file @
d6629a3f
...
@@ -94,6 +94,9 @@ class MBSlave
...
@@ -94,6 +94,9 @@ class MBSlave
ModbusRTU
::
mbErrCode
read4314
(
ModbusRTU
::
MEIMessageRDI
&
query
,
ModbusRTU
::
mbErrCode
read4314
(
ModbusRTU
::
MEIMessageRDI
&
query
,
ModbusRTU
::
MEIMessageRetRDI
&
reply
);
ModbusRTU
::
MEIMessageRetRDI
&
reply
);
ModbusRTU
::
mbErrCode
read4314
(
ModbusRTU
::
MEIMessageRDI
&
query
,
ModbusRTU
::
MEIMessageRetRDI
&
reply
);
/*! интерфейс ModbusRTUSlave для обмена по RS */
/*! интерфейс ModbusRTUSlave для обмена по RS */
ModbusRTUSlaveSlot
*
rscomm
;
ModbusRTUSlaveSlot
*
rscomm
;
ModbusRTU
::
ModbusAddr
addr
;
/*!< адрес данного узла */
ModbusRTU
::
ModbusAddr
addr
;
/*!< адрес данного узла */
...
...
Utilities/MBTester/MBTCPServer.h
View file @
d6629a3f
...
@@ -80,6 +80,9 @@ class MBTCPServer
...
@@ -80,6 +80,9 @@ class MBTCPServer
ModbusRTU
::
mbErrCode
read4314
(
ModbusRTU
::
MEIMessageRDI
&
query
,
ModbusRTU
::
mbErrCode
read4314
(
ModbusRTU
::
MEIMessageRDI
&
query
,
ModbusRTU
::
MEIMessageRetRDI
&
reply
);
ModbusRTU
::
MEIMessageRetRDI
&
reply
);
ModbusRTU
::
mbErrCode
read4314
(
ModbusRTU
::
MEIMessageRDI
&
query
,
ModbusRTU
::
MEIMessageRetRDI
&
reply
);
/*! обработка запросов на чтение ошибок */
/*! обработка запросов на чтение ошибок */
ModbusRTU
::
mbErrCode
journalCommand
(
ModbusRTU
::
JournalCommandMessage
&
query
,
ModbusRTU
::
mbErrCode
journalCommand
(
ModbusRTU
::
JournalCommandMessage
&
query
,
ModbusRTU
::
JournalCommandRetMessage
&
reply
);
ModbusRTU
::
JournalCommandRetMessage
&
reply
);
...
...
configure.ac
View file @
d6629a3f
...
@@ -147,7 +147,7 @@ fi
...
@@ -147,7 +147,7 @@ fi
AC_SUBST(UNISET_CODEGEN)
AC_SUBST(UNISET_CODEGEN)
echo "UNISET_CODEGEN: $UNISET_CODEGEN"
echo "UNISET_CODEGEN: $UNISET_CODEGEN"
UNISET_CFLAGS="-I \$(top_builddir)/include"
UNISET_CFLAGS="-I \$(top_builddir)
-I \$(top_builddir)
/include"
AC_SUBST(UNISET_CFLAGS)
AC_SUBST(UNISET_CFLAGS)
UNISET_LIBS="\$(top_builddir)/lib/libUniSet.la"
UNISET_LIBS="\$(top_builddir)/lib/libUniSet.la"
AC_SUBST(UNISET_LIBS)
AC_SUBST(UNISET_LIBS)
...
...
include/modbus/ModbusRTUSlaveSlot.h
View file @
d6629a3f
...
@@ -60,6 +60,9 @@ class ModbusRTUSlaveSlot:
...
@@ -60,6 +60,9 @@ class ModbusRTUSlaveSlot:
virtual
ModbusRTU
::
mbErrCode
diagnostics
(
ModbusRTU
::
DiagnosticMessage
&
query
,
virtual
ModbusRTU
::
mbErrCode
diagnostics
(
ModbusRTU
::
DiagnosticMessage
&
query
,
ModbusRTU
::
DiagnosticRetMessage
&
reply
);
ModbusRTU
::
DiagnosticRetMessage
&
reply
);
virtual
ModbusRTU
::
mbErrCode
read4314
(
ModbusRTU
::
MEIMessageRDI
&
query
,
ModbusRTU
::
MEIMessageRetRDI
&
reply
);
virtual
ModbusRTU
::
mbErrCode
journalCommand
(
ModbusRTU
::
JournalCommandMessage
&
query
,
virtual
ModbusRTU
::
mbErrCode
journalCommand
(
ModbusRTU
::
JournalCommandMessage
&
query
,
ModbusRTU
::
JournalCommandRetMessage
&
reply
);
ModbusRTU
::
JournalCommandRetMessage
&
reply
);
...
...
include/modbus/ModbusServer.h
View file @
d6629a3f
...
@@ -167,6 +167,14 @@ class ModbusServer
...
@@ -167,6 +167,14 @@ class ModbusServer
virtual
ModbusRTU
::
mbErrCode
diagnostics
(
ModbusRTU
::
DiagnosticMessage
&
query
,
virtual
ModbusRTU
::
mbErrCode
diagnostics
(
ModbusRTU
::
DiagnosticMessage
&
query
,
ModbusRTU
::
DiagnosticRetMessage
&
reply
)
=
0
;
ModbusRTU
::
DiagnosticRetMessage
&
reply
)
=
0
;
/*! Обработка запроса 43(0x2B).
\param query - запрос
\param reply - ответ. Заполняется в обработчике.
\return Результат обработки
*/
virtual
ModbusRTU
::
mbErrCode
read4314
(
ModbusRTU
::
MEIMessageRDI
&
query
,
ModbusRTU
::
MEIMessageRetRDI
&
reply
)
=
0
;
/*! Обработка запроса по журналу (0x65)
/*! Обработка запроса по журналу (0x65)
\param query - запрос
\param query - запрос
...
...
src/Communications/Modbus/ModbusTypes.cc
View file @
d6629a3f
...
@@ -972,7 +972,7 @@ ModbusMessage ReadOutputRetMessage::transport_msg()
...
@@ -972,7 +972,7 @@ ModbusMessage ReadOutputRetMessage::transport_msg()
// копируем
// копируем
memcpy
(
&
(
mm
.
data
[
ind
]),
dtmp
,
bcnt
);
memcpy
(
&
(
mm
.
data
[
ind
]),
dtmp
,
bcnt
);
delete
[]
dtmp
;
delete
dtmp
;
ind
+=
bcnt
;
ind
+=
bcnt
;
...
@@ -1183,7 +1183,7 @@ ModbusMessage ReadInputRetMessage::transport_msg()
...
@@ -1183,7 +1183,7 @@ ModbusMessage ReadInputRetMessage::transport_msg()
// копируем
// копируем
memcpy
(
&
(
mm
.
data
[
ind
]),
dtmp
,
bcnt
);
memcpy
(
&
(
mm
.
data
[
ind
]),
dtmp
,
bcnt
);
delete
[]
dtmp
;
delete
dtmp
;
ind
+=
bcnt
;
ind
+=
bcnt
;
...
@@ -1547,7 +1547,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
...
@@ -1547,7 +1547,7 @@ ModbusMessage WriteOutputMessage::transport_msg()
// копируем данные
// копируем данные
memcpy
(
&
(
mm
.
data
[
ind
]),
dtmp
,
bcnt
);
memcpy
(
&
(
mm
.
data
[
ind
]),
dtmp
,
bcnt
);
delete
[]
dtmp
;
delete
dtmp
;
ind
+=
bcnt
;
ind
+=
bcnt
;
...
@@ -2250,7 +2250,7 @@ ModbusMessage DiagnosticMessage::transport_msg()
...
@@ -2250,7 +2250,7 @@ ModbusMessage DiagnosticMessage::transport_msg()
// копируем
// копируем
memcpy
(
&
(
mm
.
data
[
ind
]),
dtmp
,
sizeof
(
ModbusData
)
*
count
);
memcpy
(
&
(
mm
.
data
[
ind
]),
dtmp
,
sizeof
(
ModbusData
)
*
count
);
delete
[]
dtmp
;
delete
dtmp
;
ind
+=
sizeof
(
ModbusData
)
*
count
;
ind
+=
sizeof
(
ModbusData
)
*
count
;
...
@@ -2617,7 +2617,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRetRDI& m )
...
@@ -2617,7 +2617,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRetRDI& m )
{
{
os
<<
endl
;
os
<<
endl
;
for
(
RDIObjectList
::
iterator
it
=
m
.
dlist
.
begin
();
it
!=
m
.
dlist
.
end
();
it
++
)
for
(
RDIObjectList
::
iterator
it
=
m
.
dlist
.
begin
();
it
!=
m
.
dlist
.
end
();
it
++
)
os
<<
" "
<<
rdi2str
(
it
->
id
)
<<
" : "
<<
it
->
val
<<
endl
;
os
<<
" "
<<
(
int
)
(
it
->
id
)
<<
" : "
<<
it
->
val
<<
endl
;
}
}
return
os
;
return
os
;
...
@@ -2633,7 +2633,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os,RDIObjectList& dlist )
...
@@ -2633,7 +2633,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os,RDIObjectList& dlist )
if
(
!
dlist
.
empty
()
)
if
(
!
dlist
.
empty
()
)
{
{
for
(
RDIObjectList
::
iterator
it
=
dlist
.
begin
();
it
!=
dlist
.
end
();
it
++
)
for
(
RDIObjectList
::
iterator
it
=
dlist
.
begin
();
it
!=
dlist
.
end
();
it
++
)
os
<<
" "
<<
rdi2str
(
it
->
id
)
<<
" : "
<<
it
->
val
<<
endl
;
os
<<
" "
<<
(
int
)
(
it
->
id
)
<<
" : "
<<
it
->
val
<<
endl
;
}
}
return
os
;
return
os
;
...
@@ -2745,7 +2745,7 @@ ModbusMessage JournalCommandRetMessage::transport_msg()
...
@@ -2745,7 +2745,7 @@ ModbusMessage JournalCommandRetMessage::transport_msg()
// копируем
// копируем
memcpy
(
&
(
mm
.
data
[
ind
]),
dtmp
,
bcnt
);
memcpy
(
&
(
mm
.
data
[
ind
]),
dtmp
,
bcnt
);
delete
[]
dtmp
;
delete
dtmp
;
ind
+=
bcnt
;
ind
+=
bcnt
;
...
@@ -3493,31 +3493,3 @@ void ModbusTCP::MBAPHeader::swapdata()
...
@@ -3493,31 +3493,3 @@ void ModbusTCP::MBAPHeader::swapdata()
len
=
SWAPSHORT
(
len
);
len
=
SWAPSHORT
(
len
);
}
}
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
std
::
string
ModbusRTU
::
rdi2str
(
int
id
)
{
if
(
id
==
rdiVendorName
)
return
"VendorName"
;
if
(
id
==
rdiProductCode
)
return
"ProductName"
;
if
(
id
==
rdiMajorMinorRevision
)
return
"MajorMinorRevision"
;
if
(
id
==
rdiVendorURL
)
return
"VendorURL"
;
if
(
id
==
rdiProductName
)
return
"ProductName"
;
if
(
id
==
rdiModelName
)
return
"ModelName"
;
if
(
id
==
rdiUserApplicationName
)
return
"UserApplicationName"
;
ostringstream
s
;
s
<<
id
;
return
s
.
str
();
}
// -----------------------------------------------------------------------
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