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,
if( verbose )
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.conformity = 0;
reply.addData(rdiVendorName,"etersoft");
reply.addData(rdiProductCode, PACKAGE_NAME);
reply.addData(rdiMajorMinorRevision,PACKAGE_VERSION);
reply.mf = 0xFF;
reply.conformity = rdevBasicDevice;
reply.addData(query.objID,"etersoft");
// reply.addData(rdiProductCode, PACKAGE_NAME);
// reply.addData(rdiMajorMinorRevision,PACKAGE_VERSION);
return erNoError;
}
else if( query.devID == rdiProductCode )
else if( query.objID == rdiProductCode )
{
reply.mf = 0;
reply.conformity = 0;
reply.addData(rdiProductCode,PACKAGE_NAME);
reply.mf = 0xFF;
reply.conformity = rdevBasicDevice;
reply.addData(query.objID,PACKAGE_NAME);
return erNoError;
}
else if( query.devID == rdiMajorMinorRevision )
else if( query.objID == rdiMajorMinorRevision )
{
reply.mf = 0;
reply.conformity = 0;
reply.addData(rdiMajorMinorRevision,PACKAGE_VERSION);
reply.mf = 0xFF;
reply.conformity = rdevBasicDevice;
reply.addData(query.objID,PACKAGE_VERSION);
return erNoError;
}
return ModbusRTU::erOperationFailed;
else if( query.objID == rdiVendorURL )
{
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 )
{
os << endl;
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;
......@@ -2633,7 +2633,7 @@ std::ostream& ModbusRTU::operator<<(std::ostream& os,RDIObjectList& dlist )
if( !dlist.empty() )
{
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;
......@@ -3493,3 +3493,31 @@ void ModbusTCP::MBAPHeader::swapdata()
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