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

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

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