Commit fb2c35d3 authored by Pavel Vainerman's avatar Pavel Vainerman

(Modus): добавил разрешённые коды DeviceID для функции 43/14. Подправил реализацию echo-сервера.

parent d6629a3f
...@@ -475,30 +475,60 @@ ModbusRTU::mbErrCode MBSlave::read4314( ModbusRTU::MEIMessageRDI& query, ...@@ -475,30 +475,60 @@ ModbusRTU::mbErrCode MBSlave::read4314( ModbusRTU::MEIMessageRDI& query,
if( verbose ) if( verbose )
cout << "(read4314): " << query << endl; cout << "(read4314): " << query << endl;
if( query.devID == rdiVendorName ) if( query.devID <= rdevMinNum || query.devID >= rdevMaxNum )
return erOperationFailed;
if( query.objID == rdiVendorName )
{ {
reply.mf = 0; reply.mf = 0xFF;
reply.conformity = 0; reply.conformity = rdevBasicDevice;
reply.addData(rdiVendorName,"etersoft"); reply.addData(query.objID,"etersoft");
reply.addData(rdiProductCode, PACKAGE_NAME); // reply.addData(rdiProductCode, PACKAGE_NAME);
reply.addData(rdiMajorMinorRevision,PACKAGE_VERSION); // reply.addData(rdiMajorMinorRevision,PACKAGE_VERSION);
return erNoError; return erNoError;
} }
else if( query.devID == rdiProductCode ) else if( query.objID == rdiProductCode )
{ {
reply.mf = 0; reply.mf = 0xFF;
reply.conformity = 0; reply.conformity = rdevBasicDevice;
reply.addData(rdiProductCode,PACKAGE_NAME); reply.addData(query.objID,PACKAGE_NAME);
return erNoError; return erNoError;
} }
else if( query.devID == rdiMajorMinorRevision ) else if( query.objID == rdiMajorMinorRevision )
{ {
reply.mf = 0; reply.mf = 0xFF;
reply.conformity = 0; reply.conformity = rdevBasicDevice;
reply.addData(rdiMajorMinorRevision,PACKAGE_VERSION); reply.addData(query.objID,PACKAGE_VERSION);
return erNoError; return erNoError;
} }
else if( query.objID == rdiVendorURL )
return ModbusRTU::erOperationFailed; {
reply.mf = 0xFF;
reply.conformity = rdevRegularDevice;
reply.addData(query.objID,PACKAGE_URL);
return erNoError;
}
else if( query.objID == rdiProductName )
{
reply.mf = 0xFF;
reply.conformity = rdevRegularDevice;
reply.addData(query.objID,PACKAGE_NAME);
return erNoError;
}
else if( query.objID == rdiModelName )
{
reply.mf = 0xFF;
reply.conformity = rdevRegularDevice;
reply.addData(query.objID,"MBSlaveEcho");
return erNoError;
}
else if( query.objID == rdiUserApplicationName )
{
reply.mf = 0xFF;
reply.conformity = rdevRegularDevice;
reply.addData(query.objID,"uniset-mbrtuslave-echo");
return erNoError;
}
return ModbusRTU::erBadDataAddress;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
...@@ -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 << " " << (int)(it->id) << " : " << it->val << endl; os << " " << rdi2str(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 << " " << (int)(it->id) << " : " << it->val << endl; os << " " << rdi2str(it->id) << " : " << it->val << endl;
} }
return os; return os;
...@@ -3493,3 +3493,31 @@ void ModbusTCP::MBAPHeader::swapdata() ...@@ -3493,3 +3493,31 @@ 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