Commit 7e4bf858 authored by Pavel Vainerman's avatar Pavel Vainerman

(ModbusSlave): сделал реализацию функций 0x05 и 0x0F

parent d47ed581
...@@ -117,8 +117,8 @@ prefix(prefix) ...@@ -117,8 +117,8 @@ prefix(prefix)
mbslot->connectReadInputStatus( sigc::mem_fun(this, &MBSlave::readInputStatus) ); mbslot->connectReadInputStatus( sigc::mem_fun(this, &MBSlave::readInputStatus) );
mbslot->connectReadOutput( sigc::mem_fun(this, &MBSlave::readOutputRegisters) ); mbslot->connectReadOutput( sigc::mem_fun(this, &MBSlave::readOutputRegisters) );
mbslot->connectReadInput( sigc::mem_fun(this, &MBSlave::readInputRegisters) ); mbslot->connectReadInput( sigc::mem_fun(this, &MBSlave::readInputRegisters) );
// mbslot->connectForceSingleCoil( sigc::mem_fun(this, &MBSlave::forceSingleCoil) ); mbslot->connectForceSingleCoil( sigc::mem_fun(this, &MBSlave::forceSingleCoil) );
// mbslot->connectForceCoils( sigc::mem_fun(this, &MBSlave::forceMultipleCoils) ); mbslot->connectForceCoils( sigc::mem_fun(this, &MBSlave::forceMultipleCoils) );
mbslot->connectWriteOutput( sigc::mem_fun(this, &MBSlave::writeOutputRegisters) ); mbslot->connectWriteOutput( sigc::mem_fun(this, &MBSlave::writeOutputRegisters) );
mbslot->connectWriteSingleOutput( sigc::mem_fun(this, &MBSlave::writeOutputSingleRegister) ); mbslot->connectWriteSingleOutput( sigc::mem_fun(this, &MBSlave::writeOutputSingleRegister) );
...@@ -1381,15 +1381,40 @@ ModbusRTU::mbErrCode MBSlave::readInputStatus( ReadInputStatusMessage& query, ...@@ -1381,15 +1381,40 @@ ModbusRTU::mbErrCode MBSlave::readInputStatus( ReadInputStatusMessage& query,
ModbusRTU::mbErrCode MBSlave::forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query, ModbusRTU::mbErrCode MBSlave::forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
ModbusRTU::ForceCoilsRetMessage& reply ) ModbusRTU::ForceCoilsRetMessage& reply )
{ {
// cout << "(forceMultipleCoils): " << query << endl; if( dlog.debugging(Debug::INFO) )
return ModbusRTU::erOperationFailed; dlog[Debug::INFO] << myname << "(forceMultipleCoils): " << query << endl;
}
ModbusRTU::mbErrCode ret = ModbusRTU::erNoError;
int nbit = 0;
for( int i = 0; i<query.bcnt; i++ )
{
ModbusRTU::DataBits b(query.data[i]);
for( int k=0; k<ModbusRTU::BitsPerByte && nbit<query.quant; k++, nbit++ )
{
// ModbusRTU::mbErrCode ret =
real_write(query.start+nbit, (b[k] ? 1 : 0) );
//if( ret == ModbusRTU::erNoError )
}
}
//if( ret == ModbusRTU::erNoError )
if( nbit == query.quant )
reply.set(query.start,query.quant);
return ret;
}
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode MBSlave::forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query, ModbusRTU::mbErrCode MBSlave::forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
ModbusRTU::ForceSingleCoilRetMessage& reply ) ModbusRTU::ForceSingleCoilRetMessage& reply )
{ {
// cout << "(forceSingleCoil): " << query << endl; if( dlog.debugging(Debug::INFO) )
return ModbusRTU::erOperationFailed; dlog[Debug::INFO] << myname << "(forceSingleCoil): " << query << endl;
ModbusRTU::mbErrCode ret = real_write(query.start, (query.cmd() ? 1 : 0) );
if( ret == ModbusRTU::erNoError )
reply.set(query.start,query.data);
return ret;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusRTU::mbErrCode MBSlave::diagnostics( ModbusRTU::DiagnosticMessage& query, ModbusRTU::mbErrCode MBSlave::diagnostics( ModbusRTU::DiagnosticMessage& query,
......
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