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,6 +1055,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
}
catch( mbException& ex )
{
if( dlog.debugging(Debug::CRIT) )
dlog[Debug::CRIT] << "(recv): " << ex << endl;
return ex.err;
}
......@@ -1064,6 +1065,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
}
catch( Exception& ex ) // SystemError
{
if( dlog.debugging(Debug::CRIT) )
dlog[Debug::CRIT] << "(recv): " << ex << endl;
return erHardwareError;
}
......
......@@ -1262,12 +1262,20 @@ 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
{
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