Commit b3b9007d authored by Pavel Vainerman's avatar Pavel Vainerman

Merge branch 'master' into utf8

Conflicts: conf/libuniset.spec include/SandClock.h
parents 99070f67 b324364c
......@@ -3,7 +3,7 @@
Name: libuniset
Version: 0.97
Release: eter59
Release: eter62
Summary: UniSet - library for building distributed industrial control systems
License: GPL
Group: Development/C++
......@@ -184,6 +184,17 @@ rm -f %buildroot%_libdir/*.la
%exclude %_pkgconfigdir/libUniSet.pc
%changelog
* Sat Mar 27 2010 Pavel Vainerman <pv@altlinux.ru> 0.97-eter62
- minor fixes in SM (add virtual function)
* Thu Mar 18 2010 Pavel Vainerman <pv@etersoft.ru> 0.97-eter61
- fixed bug in SandClock interface
* Thu Mar 18 2010 Pavel Vainerman <pv@etersoft.ru> 0.97-eter60
- new build
* Thu Mar 18 2010 Pavel Vainerman <pv@etersoft.ru> 0.97-eter59
- fixed bug in ModbuRTU::autedetect slave adress function
* Sun Mar 14 2010 Pavel Vainerman <pv@altlinux.ru> 0.97-eter58
- minor fixes in MTR setup API
......
......@@ -95,6 +95,11 @@ int main( int argc, char **argv )
ComPort::StopBits sbits = ComPort::OneBit;
ComPort::Parity parity = ComPort::NoParity;
// ModbusRTU::ModbusAddr b=255;
//
// cout << "b=" << (int)b << " b++=" << (int)(b++) << endl;
// return 0;
try
{
while( (opt = getopt_long(argc, argv, "hvw:r:x:d:s:t:l:n:yb:e:x:z:",longopts,&optindex)) != -1 )
......
......@@ -262,12 +262,11 @@ class SharedMemory:
ReadSlotList lstRSlot;
virtual void processingMessage( UniSetTypes::VoidMessage *msg );
void sysCommand( UniSetTypes::SystemMessage *sm );
void sensorInfo( UniSetTypes::SensorMessage *sm );
void timerInfo( UniSetTypes::TimerMessage *tm );
void askSensors( UniversalIO::UIOCommand cmd );
void sendEvent( UniSetTypes::SystemMessage& sm );
virtual void sysCommand( UniSetTypes::SystemMessage *sm );
virtual void sensorInfo( UniSetTypes::SensorMessage *sm );
virtual void timerInfo( UniSetTypes::TimerMessage *tm );
virtual void askSensors( UniversalIO::UIOCommand cmd );
virtual void sendEvent( UniSetTypes::SystemMessage& sm );
virtual void localSaveValue( AIOStateList::iterator& it, const IOController_i::SensorInfo& si,
CORBA::Long newvalue, UniSetTypes::ObjectId sup_id );
......
......@@ -29,26 +29,26 @@
class SandClock
{
public:
SandClock(): state(false),sand(0),size(0){}
SandClock(): _state(false),_sand(0),_size(0){}
~SandClock(){}
// запустить часы (заново)
inline void run( int msec )
{
t.setTiming(msec);
state = true;
sand = msec;
size = msec;
_state = true;
_sand = msec;
_size = msec;
}
inline void reset ()
{
run(size);
run(_size);
}
inline int duration()
{
return size;
return _size;
}
// перевернуть часы
// true - засечь время
......@@ -56,17 +56,17 @@ class SandClock
// возвращает аргумент (т.е. идёт ли отсчёт времени)
inline bool rotate( bool st )
{
if( st == state )
if( st == _state )
return st;
state = st;
if( !state )
_state = st;
if( !_state )
{
int cur = t.getCurrent();
sand -= cur;
_sand -= cur;
if( sand < 0 )
sand = 0;
if( _sand < 0 )
_sand = 0;
// std::cout << "перевернули: прошло " << cur
// << " осталось " << sand
......@@ -76,15 +76,15 @@ class SandClock
}
else
{
sand += t.getCurrent();
if( sand > size )
sand = size;
_sand += t.getCurrent();
if( _sand > _size )
_sand = _size;
// std::cout << "вернули: прошло " << t.getCurrent()
// << " осталось " << sand
// << " засекам " << sand << endl;
t.setTiming(sand);
t.setTiming(_sand);
}
return st;
}
......@@ -108,19 +108,19 @@ class SandClock
{
// пока часы не "стоят"
// всегда false
if( !state )
if( !_state )
return false;
return t.checkTime();
}
inline bool state(){ return state; }
inline bool state(){ return _state; }
protected:
PassiveTimer t;
bool state;
int sand;
int size;
bool _state;
int _sand;
int _size;
};
// --------------------------------------------------------------------------
#endif
......
......@@ -25,6 +25,13 @@ ModbusAddr ModbusHelpers::autodetectSlave( ModbusRTUMaster* m,
ModbusData reg,
SlaveFunctionCode fn )
{
if( beg > end )
{
ModbusAddr tmp = beg;
beg = end;
end = tmp;
}
for( ModbusAddr a=beg; a<=end; a++ )
{
try
......@@ -56,6 +63,9 @@ ModbusAddr ModbusHelpers::autodetectSlave( ModbusRTUMaster* m,
return a; // узел ответил ошибкой (но связь то есть)
}
catch(...){}
if( (beg == 0xff) || (end == 0xff) )
break;
}
throw TimeOut();
......
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