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