Commit d6629a3f authored by Pavel Vainerman's avatar Pavel Vainerman

(Modbus): сделана предварительная реализация запроса и ответа на функцию 43/14 (0x2B/0x0E)

parent 9a9332fb
...@@ -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;
}
// -------------------------------------------------------------------------
...@@ -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; /*!< адрес данного узла */
......
...@@ -80,8 +80,11 @@ class MBTCPServer ...@@ -80,8 +80,11 @@ 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 );
/*! обработка запроса на установку времени */ /*! обработка запроса на установку времени */
......
...@@ -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)
......
...@@ -60,7 +60,10 @@ class ModbusRTUSlaveSlot: ...@@ -60,7 +60,10 @@ 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 journalCommand( ModbusRTU::JournalCommandMessage& query, virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
ModbusRTU::MEIMessageRetRDI& reply );
virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
ModbusRTU::JournalCommandRetMessage& reply ); ModbusRTU::JournalCommandRetMessage& reply );
virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query, virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
......
...@@ -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 - запрос
......
...@@ -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;
...@@ -2099,46 +2099,46 @@ int ModbusRTU::szRequestDiagnosticData( DiagnosticsSubFunction f ) ...@@ -2099,46 +2099,46 @@ int ModbusRTU::szRequestDiagnosticData( DiagnosticsSubFunction f )
if( f == subEcho ) if( f == subEcho )
return 1; // тут странно, вроде в стандарте количество динамическое return 1; // тут странно, вроде в стандарте количество динамическое
// но везде вроде в примерах.. "одно слово".. // но везде вроде в примерах.. "одно слово"..
if( f == dgRestartComm ) if( f == dgRestartComm )
return 1; return 1;
if( f == dgDiagReg ) if( f == dgDiagReg )
return 1; return 1;
if( f == dgChangeASCII ) if( f == dgChangeASCII )
return 1; return 1;
if( f == dgForceListen ) if( f == dgForceListen )
return 1; return 1;
if( f == dgClearCounters) if( f == dgClearCounters)
return 1; return 1;
if( f == dgBusMsgCount ) if( f == dgBusMsgCount )
return 1; return 1;
if( f == dgBusErrCount ) if( f == dgBusErrCount )
return 1; return 1;
if( f == dgBusExceptCount ) if( f == dgBusExceptCount )
return 1; return 1;
if( f == dgMsgSlaveCount ) if( f == dgMsgSlaveCount )
return 1; return 1;
if( f == dgNoNoResponseCount ) if( f == dgNoNoResponseCount )
return 1; return 1;
if( f == dgSlaveNAKCount ) if( f == dgSlaveNAKCount )
return 1; return 1;
if( f == dgSlaveBusyCount ) if( f == dgSlaveBusyCount )
return 1; return 1;
if( f == dgBusCharOverrunCount ) if( f == dgBusCharOverrunCount )
return 1; return 1;
if( f == dgClearOverrunCounter ) if( f == dgClearOverrunCounter )
return 1; return 1;
...@@ -2159,14 +2159,14 @@ DiagnosticMessage& DiagnosticMessage::operator=( ModbusMessage& m ) ...@@ -2159,14 +2159,14 @@ DiagnosticMessage& DiagnosticMessage::operator=( ModbusMessage& m )
void DiagnosticMessage::init( ModbusMessage& m ) void DiagnosticMessage::init( ModbusMessage& m )
{ {
assert( m.func == fnDiagnostics ); assert( m.func == fnDiagnostics );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
addr = m.addr; addr = m.addr;
func = m.func; func = m.func;
memcpy( &subf,&(m.data[0]),sizeof(subf) ); memcpy( &subf,&(m.data[0]),sizeof(subf) );
int last = sizeof(subf); int last = sizeof(subf);
subf = SWAPSHORT(subf); subf = SWAPSHORT(subf);
count = szRequestDiagnosticData((DiagnosticsSubFunction)subf ); count = szRequestDiagnosticData((DiagnosticsSubFunction)subf );
if( count > MAXDATALEN ) if( count > MAXDATALEN )
...@@ -2177,13 +2177,13 @@ void DiagnosticMessage::init( ModbusMessage& m ) ...@@ -2177,13 +2177,13 @@ void DiagnosticMessage::init( ModbusMessage& m )
memcpy(&data,&(m.data[last]),sizeof(ModbusData)*count); memcpy(&data,&(m.data[last]),sizeof(ModbusData)*count);
last +=sizeof(ModbusData)*count; last +=sizeof(ModbusData)*count;
// переворачиваем данные // переворачиваем данные
for( int i=0; i<count; i++ ) for( int i=0; i<count; i++ )
data[i] = SWAPSHORT(data[i]); data[i] = SWAPSHORT(data[i]);
memcpy(&crc,&(m.data[last]),szCRC); memcpy(&crc,&(m.data[last]),szCRC);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int DiagnosticMessage::getDataLen( ModbusMessage& m ) int DiagnosticMessage::getDataLen( ModbusMessage& m )
{ {
...@@ -2216,7 +2216,7 @@ bool DiagnosticMessage::addData( ModbusData d ) ...@@ -2216,7 +2216,7 @@ bool DiagnosticMessage::addData( ModbusData d )
{ {
if( isFull() ) if( isFull() )
return false; return false;
data[count++] = d; data[count++] = d;
return true; return true;
} }
...@@ -2235,7 +2235,7 @@ ModbusMessage DiagnosticMessage::transport_msg() ...@@ -2235,7 +2235,7 @@ ModbusMessage DiagnosticMessage::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
int ind=0; int ind=0;
// copy bcnt // copy bcnt
ModbusData d = SWAPSHORT(subf); ModbusData d = SWAPSHORT(subf);
...@@ -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;
...@@ -2258,11 +2258,11 @@ ModbusMessage DiagnosticMessage::transport_msg() ...@@ -2258,11 +2258,11 @@ ModbusMessage DiagnosticMessage::transport_msg()
ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader+sizeof(subf)+sizeof(ModbusData)*count ); ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader+sizeof(subf)+sizeof(ModbusData)*count );
// копируем CRC (последний элемент). Без переворачивания... // копируем CRC (последний элемент). Без переворачивания...
memcpy(&(mm.data[ind]),&crc,szCRC); memcpy(&(mm.data[ind]),&crc,szCRC);
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
mm.len = szData(); mm.len = szData();
return mm; return mm;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -2297,9 +2297,9 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, DiagnosticMessage& m ) ...@@ -2297,9 +2297,9 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, DiagnosticMessage& m )
for( int i=0; i<m.count; i++ ) for( int i=0; i<m.count; i++ )
os << dat2str(m.data[i]) << " "; os << dat2str(m.data[i]) << " ";
os << "}"; os << "}";
return os; return os;
} }
...@@ -2317,9 +2317,9 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, DiagnosticRetMessage& m ) ...@@ -2317,9 +2317,9 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os, DiagnosticRetMessage& m )
for( int i=0; i<m.count; i++ ) for( int i=0; i<m.count; i++ )
os << dat2str(m.data[i]) << " "; os << dat2str(m.data[i]) << " ";
os << "}"; os << "}";
return os; return os;
} }
...@@ -2354,7 +2354,7 @@ ModbusMessage MEIMessageRDI::transport_msg() ...@@ -2354,7 +2354,7 @@ ModbusMessage MEIMessageRDI::transport_msg()
ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader+ind ); ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader+ind );
// копируем CRC (последний элемент). Без переворачивания... // копируем CRC (последний элемент). Без переворачивания...
memcpy(&(mm.data[ind]),&crc,szCRC); memcpy(&(mm.data[ind]),&crc,szCRC);
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
...@@ -2377,12 +2377,12 @@ MEIMessageRDI& MEIMessageRDI::operator=( ModbusMessage& m ) ...@@ -2377,12 +2377,12 @@ MEIMessageRDI& MEIMessageRDI::operator=( ModbusMessage& m )
void MEIMessageRDI::init( ModbusMessage& m ) void MEIMessageRDI::init( ModbusMessage& m )
{ {
assert( m.func == fnMEI ); assert( m.func == fnMEI );
memset(this,0,sizeof(*this)); memset(this,0,sizeof(*this));
// copy not include CRC // copy not include CRC
memcpy(this,&m,szModbusHeader+m.len); memcpy(this,&m,szModbusHeader+m.len);
// потом проверяем // потом проверяем
if( !checkFormat() ) if( !checkFormat() )
{ {
...@@ -2404,13 +2404,13 @@ bool MEIMessageRDI::checkFormat() ...@@ -2404,13 +2404,13 @@ bool MEIMessageRDI::checkFormat()
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRDI& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRDI& m )
{ {
os << "addr=" << addr2str(m.addr) os << "addr=" << addr2str(m.addr)
<< " func=0x" << b2str(m.func) << " func=0x" << b2str(m.func)
<< " type=0x" << b2str(m.type) << " type=0x" << b2str(m.type)
<< " devID=0x" << b2str(m.devID) << " devID=0x" << b2str(m.devID)
<< " objID=0x" << b2str(m.objID); << " objID=0x" << b2str(m.objID);
return os; return os;
} }
std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRDI* m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRDI* m )
{ {
...@@ -2448,7 +2448,7 @@ RDIObjectInfo::RDIObjectInfo( ModbusByte id, ModbusByte* dat, ModbusByte len ): ...@@ -2448,7 +2448,7 @@ RDIObjectInfo::RDIObjectInfo( ModbusByte id, ModbusByte* dat, ModbusByte len ):
void MEIMessageRetRDI::pre_init( ModbusMessage& m ) void MEIMessageRetRDI::pre_init( ModbusMessage& m )
{ {
assert( m.func == fnMEI ); assert( m.func == fnMEI );
addr = m.addr; addr = m.addr;
func = m.func; func = m.func;
...@@ -2470,7 +2470,7 @@ void MEIMessageRetRDI::pre_init( ModbusMessage& m ) ...@@ -2470,7 +2470,7 @@ void MEIMessageRetRDI::pre_init( ModbusMessage& m )
void MEIMessageRetRDI::init( ModbusMessage& m ) void MEIMessageRetRDI::init( ModbusMessage& m )
{ {
assert( m.func == fnMEI ); assert( m.func == fnMEI );
addr = m.addr; addr = m.addr;
func = m.func; func = m.func;
type = m.data[0]; type = m.data[0];
...@@ -2494,11 +2494,11 @@ void MEIMessageRetRDI::init( ModbusMessage& m ) ...@@ -2494,11 +2494,11 @@ void MEIMessageRetRDI::init( ModbusMessage& m )
{ {
if( m.len < 7 ) if( m.len < 7 )
throw mbException(erInvalidFormat); throw mbException(erInvalidFormat);
while( i < m.len && dlist.size() < objNum ) while( i < m.len && dlist.size() < objNum )
{ {
ModbusByte id = m.data[i]; ModbusByte id = m.data[i];
int dlen = (int)(m.data[i+1]); int dlen = (int)(m.data[i+1]);
if( m.len < (i+1+dlen) ) if( m.len < (i+1+dlen) )
throw mbException(erInvalidFormat); throw mbException(erInvalidFormat);
...@@ -2510,8 +2510,8 @@ void MEIMessageRetRDI::init( ModbusMessage& m ) ...@@ -2510,8 +2510,8 @@ void MEIMessageRetRDI::init( ModbusMessage& m )
} }
} }
memcpy(&crc,&(m.data[i]),szCRC); memcpy(&crc,&(m.data[i]),szCRC);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
MEIMessageRetRDI::MEIMessageRetRDI(): MEIMessageRetRDI::MEIMessageRetRDI():
type(0x00), type(0x00),
...@@ -2543,7 +2543,7 @@ bool MEIMessageRetRDI::addData( ModbusByte id, const std::string val ) ...@@ -2543,7 +2543,7 @@ bool MEIMessageRetRDI::addData( ModbusByte id, const std::string val )
{ {
if( isFull() ) if( isFull() )
return false; return false;
RDIObjectInfo r(id,val); RDIObjectInfo r(id,val);
dlist.push_back(r); dlist.push_back(r);
objNum = dlist.size(); objNum = dlist.size();
...@@ -2565,7 +2565,7 @@ ModbusMessage MEIMessageRetRDI::transport_msg() ...@@ -2565,7 +2565,7 @@ ModbusMessage MEIMessageRetRDI::transport_msg()
// копируем заголовок и данные // копируем заголовок и данные
memcpy(&mm,this,szModbusHeader); memcpy(&mm,this,szModbusHeader);
mm.data[0] = type; mm.data[0] = type;
mm.data[1] = devID; mm.data[1] = devID;
mm.data[2] = conformity; mm.data[2] = conformity;
...@@ -2581,13 +2581,13 @@ ModbusMessage MEIMessageRetRDI::transport_msg() ...@@ -2581,13 +2581,13 @@ ModbusMessage MEIMessageRetRDI::transport_msg()
mm.data[ind++] = dlen; mm.data[ind++] = dlen;
memcpy(&(mm.data[ind]), it->val.data(), dlen ); memcpy(&(mm.data[ind]), it->val.data(), dlen );
ind += dlen; ind += dlen;
} }
// пересчитываем CRC по перевёрнутым данным // пересчитываем CRC по перевёрнутым данным
ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader+ind ); ModbusData crc = checkCRC( (ModbusByte*)(&mm), szModbusHeader+ind );
// копируем CRC (последний элемент). Без переворачивания... // копируем CRC (последний элемент). Без переворачивания...
memcpy(&(mm.data[ind]),&crc,szCRC); memcpy(&(mm.data[ind]),&crc,szCRC);
ind+=szCRC; ind+=szCRC;
// длина сообщения... // длина сообщения...
...@@ -2604,11 +2604,11 @@ int MEIMessageRetRDI::szData() ...@@ -2604,11 +2604,11 @@ int MEIMessageRetRDI::szData()
std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRetRDI& m ) std::ostream& ModbusRTU::operator<<(std::ostream& os, MEIMessageRetRDI& m )
{ {
// return mbPrintMessage(os,(ModbusByte*)(&m), szModbusHeader + m.szData() ); // return mbPrintMessage(os,(ModbusByte*)(&m), szModbusHeader + m.szData() );
os << "addr=" << addr2str(m.addr) os << "addr=" << addr2str(m.addr)
<< " func=0x" << b2str(m.func) << " func=0x" << b2str(m.func)
<< " type=0x" << b2str(m.type) << " type=0x" << b2str(m.type)
<< " devID=0x" << b2str(m.devID) << " devID=0x" << b2str(m.devID)
<< " conformity=0x" << b2str(m.conformity) << " conformity=0x" << b2str(m.conformity)
<< " mf=0x" << b2str(m.mf) << " mf=0x" << b2str(m.mf)
<< " objID=0x" << b2str(m.objID) << " objID=0x" << b2str(m.objID)
<< " objNum=" << (int)(m.objNum); << " objNum=" << (int)(m.objNum);
...@@ -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();
}
// -----------------------------------------------------------------------
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