Commit be3c8fbf authored by Pavel Vainerman's avatar Pavel Vainerman

(Modbus): немного подправил вывод логов и ошибок связи

Conflicts: extensions/ModbusMaster/MBExchange.cc src/Communications/Modbus/ModbusTCPMaster.cc
parent 62de689b
...@@ -28,7 +28,7 @@ no_extimer(false), ...@@ -28,7 +28,7 @@ no_extimer(false),
prefix(prefix), prefix(prefix),
poll_count(0), poll_count(0),
prop_prefix(""), prop_prefix(""),
mb(0), mb(nullptr),
pollActivated(false) pollActivated(false)
{ {
if( objId == DefaultObjectId ) if( objId == DefaultObjectId )
...@@ -374,7 +374,7 @@ MBExchange::RegID MBExchange::genRegID( const ModbusRTU::ModbusData mbreg, const ...@@ -374,7 +374,7 @@ MBExchange::RegID MBExchange::genRegID( const ModbusRTU::ModbusData mbreg, const
// 1. ID > диапазона возможных регистров // 1. ID > диапазона возможных регистров
// 2. одинаковые регистры, но разные функции должны давать разный ID // 2. одинаковые регистры, но разные функции должны давать разный ID
// 3. регистры идущие подряд, должна давать ID идущие тоже подряд // 3. регистры идущие подряд, должна давать ID идущие тоже подряд
// Вообще диапазоны: // Вообще диапазоны:
// mbreg: 0..65535 // mbreg: 0..65535
// fn: 0...255 // fn: 0...255
...@@ -649,7 +649,7 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty ...@@ -649,7 +649,7 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
if( p->nbit >= 0 ) if( p->nbit >= 0 )
{ {
bool set = b[p->nbit]; bool set = b[p->nbit];
IOBase::processingAsDI( p, set, shm, force ); IOBase::processingAsDI( p, set, shm, true );
return true; return true;
} }
...@@ -658,10 +658,10 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty ...@@ -658,10 +658,10 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
if( p->stype == UniversalIO::DI || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO ) p->stype == UniversalIO::DO )
{ {
IOBase::processingAsDI( p, data[0], shm, force ); IOBase::processingAsDI( p, data[0], shm, true );
} }
else else
IOBase::processingAsAI( p, (signed short)(data[0]), shm, force ); IOBase::processingAsAI( p, (signed short)(data[0]), shm, true );
return true; return true;
} }
...@@ -676,10 +676,10 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty ...@@ -676,10 +676,10 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
if( p->stype == UniversalIO::DI || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO ) p->stype == UniversalIO::DO )
{ {
IOBase::processingAsDI( p, data[0], shm, force ); IOBase::processingAsDI( p, data[0], shm, true );
} }
else else
IOBase::processingAsAI( p, (signed short)(data[0]), shm, force ); IOBase::processingAsAI( p, (signed short)(data[0]), shm, true );
return true; return true;
} }
...@@ -688,10 +688,10 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty ...@@ -688,10 +688,10 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
if( p->stype == UniversalIO::DI || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO ) p->stype == UniversalIO::DO )
{ {
IOBase::processingAsDI( p, data[0], shm, force ); IOBase::processingAsDI( p, data[0], shm, true );
} }
else else
IOBase::processingAsAI( p, (unsigned short)data[0], shm, force ); IOBase::processingAsAI( p, (unsigned short)data[0], shm, true );
return true; return true;
} }
...@@ -705,28 +705,28 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty ...@@ -705,28 +705,28 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
} }
VTypes::Byte b(data[0]); VTypes::Byte b(data[0]);
IOBase::processingAsAI( p, b.raw.b[p->nbyte-1], shm, force ); IOBase::processingAsAI( p, b.raw.b[p->nbyte-1], shm, true );
return true; return true;
} }
else if( p->vType == VTypes::vtF2 ) else if( p->vType == VTypes::vtF2 )
{ {
VTypes::F2 f(data,VTypes::F2::wsize()); VTypes::F2 f(data,VTypes::F2::wsize());
IOBase::processingFasAI( p, (float)f, shm, force ); IOBase::processingFasAI( p, (float)f, shm, true );
} }
else if( p->vType == VTypes::vtF4 ) else if( p->vType == VTypes::vtF4 )
{ {
VTypes::F4 f(data,VTypes::F4::wsize()); VTypes::F4 f(data,VTypes::F4::wsize());
IOBase::processingFasAI( p, (float)f, shm, force ); IOBase::processingFasAI( p, (float)f, shm, true );
} }
else if( p->vType == VTypes::vtI2 ) else if( p->vType == VTypes::vtI2 )
{ {
VTypes::I2 i2(data,VTypes::I2::wsize()); VTypes::I2 i2(data,VTypes::I2::wsize());
IOBase::processingAsAI( p, (int)i2, shm, force ); IOBase::processingAsAI( p, (int)i2, shm, true );
} }
else if( p->vType == VTypes::vtU2 ) else if( p->vType == VTypes::vtU2 )
{ {
VTypes::U2 u2(data,VTypes::U2::wsize()); VTypes::U2 u2(data,VTypes::U2::wsize());
IOBase::processingAsAI( p, (unsigned int)u2, shm, force ); IOBase::processingAsAI( p, (unsigned int)u2, shm, true );
} }
return true; return true;
...@@ -1064,7 +1064,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1064,7 +1064,7 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
if( save && !r->mb_initOK ) if( save && !r->mb_initOK )
return; return;
dlog3 << myname << "updateP: sid=" << p->si.id dlog3 << myname << "(updateP): sid=" << p->si.id
<< " mbval=" << r->mbval << " mbval=" << r->mbval
<< " vtype=" << p->vType << " vtype=" << p->vType
<< " rnum=" << p->rnum << " rnum=" << p->rnum
...@@ -2038,6 +2038,16 @@ bool MBExchange::initItem( UniXML_iterator& it ) ...@@ -2038,6 +2038,16 @@ bool MBExchange::initItem( UniXML_iterator& it )
} }
mbreg = ModbusRTU::str2mbData(reg); mbreg = ModbusRTU::str2mbData(reg);
} }
if( p.nbit != -1 )
{
if( fn == ModbusRTU::fnReadCoilStatus || fn == ModbusRTU::fnReadInputStatus )
{
dcrit << myname << "(initItem): MISMATCHED CONFIGURATION! nbit=" << p.nbit << " func=" << fn
<< " for " << it.getProp("name") << endl;
return false;
}
}
} }
// формула для вычисления ID // формула для вычисления ID
......
...@@ -125,7 +125,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg, ...@@ -125,7 +125,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
return erTimeOut; return erTimeOut;
} }
cleanInputStream(); cleanInputStream();
if( dlog.is_info() ) if( dlog.is_info() )
dlog.info() << "(ModbusTCPMaster::query): no write pending.. reconnnect OK" << endl; dlog.info() << "(ModbusTCPMaster::query): no write pending.. reconnnect OK" << endl;
} }
......
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