Commit a50d838a authored by Pavel Vainerman's avatar Pavel Vainerman

(ModvusSlave): Исправил ошибку в реализации функции 0x02 (ReadInputStatus)

parent c7e6ec5b
......@@ -3,7 +3,7 @@
Name: libuniset
Version: 1.0
Release: alt54
Release: alt55
Summary: UniSet - library for building distributed industrial control systems
License: GPL
Group: Development/C++
......@@ -212,6 +212,9 @@ rm -f %buildroot%_libdir/*.la
%changelog
* Sat Nov 26 2011 Pavel Vainerman <pv@altlinux.ru> 1.0-alt55
- (modbus): fixed bug in ModbusSlave::readInputStatus(0x02)
* Fri Nov 25 2011 Pavel Vainerman <pv@altlinux.ru> 1.0-alt54
- (modbus): added 'const-reply' for modbustcptester
......
......@@ -1328,10 +1328,9 @@ ModbusRTU::mbErrCode MBSlave::readInputStatus( ReadInputStatusMessage& query,
ModbusRTU::ModbusData d = 0;
ModbusRTU::mbErrCode ret = real_read(query.start,d);
if( ret == ModbusRTU::erNoError )
reply.addData(d);
reply.setBit(0,0,d);
else
reply.addData(0);
reply.setBit(0,0,0);
pingOK = true;
return ret;
......@@ -1339,29 +1338,13 @@ ModbusRTU::mbErrCode MBSlave::readInputStatus( ReadInputStatusMessage& query,
// Фомирование ответа:
much_real_read(query.start,buf,query.count);
for( int i=0; i<query.count; i++ )
reply.addData( buf[i] );
/*
int num=0; // добавленное количество данных
ModbusRTU::ModbusData d = 0;
ModbusRTU::ModbusData reg = query.start;
for( ; num<query.count; num++, reg++ )
int bnum = 0;
for( int i=0; i<query.count; i++, bnum++ )
{
ModbusRTU::mbErrCode ret = real_read(reg,d);
if( ret == ModbusRTU::erNoError )
reply.addData(d);
else
reply.addData(0);
reply.addData(0);
for( int nbit=0; nbit<BitsPerByte && i<query.count; nbit++,i++ )
reply.setBit(bnum,nbit,buf[i]);
}
*/
// Если мы в начале проверили, что запрос входит в разрешёный диапазон
// то теоретически этой ситуации возникнуть не может...
// if( reply.bcnt < query.count )
// {
// dlog[Debug::WARN] << myname
// << "(readInputStatus): query.count=" << query.count
// << " > reply.count=" << reply.count << endl;
// }
pingOK = true;
return ModbusRTU::erNoError;
......
......@@ -265,8 +265,8 @@ namespace ModbusRTU
bool addData( DataBits d );
/*! установить бит.
* \param dnum - номер байта
* \param bnum - номер бита
* \param dnum - номер байта (0..MAXLENPACKET)
* \param bnum - номер бита (0..7)
* \param state - состояние
* \return TRUE - если есть
* \return FALSE - если НЕ найдено
......@@ -274,7 +274,7 @@ namespace ModbusRTU
bool setBit( unsigned char dnum, unsigned char bnum, bool state );
/*! получение данных.
* \param bnum - номер байта
* \param bnum - номер байта(0..MAXLENPACKET)
* \param d - найденные данные
* \return TRUE - если есть
* \return FALSE - если НЕ найдено
......@@ -359,8 +359,8 @@ namespace ModbusRTU
bool addData( DataBits d );
/*! установить бит.
* \param dnum - номер байта
* \param bnum - номер бита
* \param dnum - номер байта (0..MAXLENPACKET)
* \param bnum - номер бита (0...7)
* \param state - состояние
* \return TRUE - если есть
* \return FALSE - если НЕ найдено
......@@ -368,7 +368,7 @@ namespace ModbusRTU
bool setBit( unsigned char dnum, unsigned char bnum, bool state );
/*! получение данных.
* \param dnum - номер байта
* \param dnum - номер байта (0..MAXLENPACKET)
* \param d - найденные данные
* \return TRUE - если есть
* \return FALSE - если НЕ найдено
......
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