Commit 77545c5a authored by Pavel Vainerman's avatar Pavel Vainerman

(modbus0x08): Исправил ошибку в функции преобразования сообщения для посылки.…

(modbus0x08): Исправил ошибку в функции преобразования сообщения для посылки. Исправил ошибку в объявлении для mbException. Из-за этого они не ловились по catch(UniSetTypes::Exception).
parent 3671ba14
......@@ -34,7 +34,7 @@ namespace ModbusRTU
std::string mbErr2Str( mbErrCode e );
// ---------------------------------------------------------------------
class mbException:
UniSetTypes::Exception
public UniSetTypes::Exception
{
public:
mbException():
......
......@@ -1055,7 +1055,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
}
catch( mbException& ex )
{
dlog[Debug::CRIT] << "(recv): " << ex << endl;
if( dlog.debugging(Debug::CRIT) )
dlog[Debug::CRIT] << "(recv): " << ex << endl;
return ex.err;
}
catch( UniSetTypes::TimeOut )
......@@ -1064,7 +1065,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
}
catch( Exception& ex ) // SystemError
{
dlog[Debug::CRIT] << "(recv): " << ex << endl;
if( dlog.debugging(Debug::CRIT) )
dlog[Debug::CRIT] << "(recv): " << ex << endl;
return erHardwareError;
}
......
......@@ -1039,7 +1039,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erInvalidFormat;
}
return erNoError;
return erNoError;
}
else if( rbuf.func == fnDiagnostics )
{
......@@ -1262,13 +1262,21 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
return erUnExpectedPacketType;
}
}
catch( ModbusRTU::mbException& ex ) // SystemError
{
if( dlog.debugging(Debug::CRIT) )
dlog[Debug::CRIT] << "(recv): mbException: " << ex << endl;
cleanupChannel();
return ex.err;
}
catch( UniSetTypes::TimeOut )
{
// cout << "(recv): catch TimeOut " << endl;
}
catch( Exception& ex ) // SystemError
catch( UniSetTypes::Exception& ex ) // SystemError
{
dlog[Debug::CRIT] << "(recv): " << ex << endl;
if( dlog.debugging(Debug::CRIT) )
dlog[Debug::CRIT] << "(recv): " << ex << endl;
cleanupChannel();
return erHardwareError;
}
......
......@@ -2164,7 +2164,7 @@ void DiagnosticMessage::init( ModbusMessage& m )
addr = m.addr;
func = m.func;
memcpy( &subf,m.data,sizeof(subf) );
memcpy( &subf,&(m.data[0]),sizeof(subf) );
int last = sizeof(subf);
subf = SWAPSHORT(subf);
......@@ -2238,7 +2238,8 @@ ModbusMessage DiagnosticMessage::transport_msg()
int ind=0;
// copy bcnt
memcpy(&mm.data,&subf,sizeof(subf));
ModbusData d = SWAPSHORT(subf);
memcpy(&mm.data,&d,sizeof(d));
ind+=sizeof(subf);
// Создаём временно массив, переворачиваем байты
......
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