Commit c1064d45 authored by Pavel Vainerman's avatar Pavel Vainerman

(PassiveTimer): исправил ошибку в начальной инициализации t_start.

(Pulse): переделал рассчёт оставшегося времени по импульсам..
parent 347f7bc0
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
Name: libuniset2 Name: libuniset2
Version: 2.1 Version: 2.1
Release: alt24 Release: alt25
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
...@@ -456,6 +456,10 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -456,6 +456,10 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# .. # ..
%changelog %changelog
* Mon Sep 14 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt25
- (PassiveTimer): fixed bug in default init
- (Pulse): refactoring
* Thu Sep 10 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt24 * Thu Sep 10 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt24
- (LogServer): refactoring (more use shared_ptr) - (LogServer): refactoring (more use shared_ptr)
......
...@@ -113,7 +113,7 @@ class PassiveTimer: ...@@ -113,7 +113,7 @@ class PassiveTimer:
virtual void terminate(); /*!< прервать работу таймера */ virtual void terminate(); /*!< прервать работу таймера */
protected: protected:
timeout_t t_msec; /*!< интервал таймера, в милисекундах */ timeout_t t_msec = { 0 }; /*!< интервал таймера, в милисекундах */
std::chrono::high_resolution_clock::time_point t_start; /*!< время установки таймера (сброса) */ std::chrono::high_resolution_clock::time_point t_start; /*!< время установки таймера (сброса) */
private: private:
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#define Pulse_H_ #define Pulse_H_
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#include <iostream> #include <iostream>
#include <algorithm>
#include "PassiveTimer.h" #include "PassiveTimer.h"
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/*! Класс реализующий формирование импульсов заданной длительности(t1) и заданных пауз между ними(t0). /*! Класс реализующий формирование импульсов заданной длительности(t1) и заданных пауз между ними(t0).
...@@ -11,6 +12,8 @@ ...@@ -11,6 +12,8 @@
Формирование импульсов включается функцией run() либо функцией set(true). Формирование импульсов включается функцией run() либо функцией set(true).
Вызов reset() тоже включает формирование импульсов. Вызов reset() тоже включает формирование импульсов.
Выключается формирование вызовом set(false). Выключается формирование вызовом set(false).
\warning Точность поддержания "импульсов" зависит от частоты вызова step() или out()
*/ */
class Pulse class Pulse
{ {
...@@ -53,17 +56,13 @@ class Pulse ...@@ -53,17 +56,13 @@ class Pulse
if( ostate && t1.checkTime() ) if( ostate && t1.checkTime() )
{ {
ostate = false; ostate = false;
t0.setTiming(t0_msec);
// учитываем что step мог вызваться гораздо позже..
t0.setTiming( t0_msec - t1.getCurrent() % t1.getInterval() );
} }
if( !ostate && t0.checkTime() ) if( !ostate && t0.checkTime() )
{ {
ostate = true; ostate = true;
t1.setTiming(t1_msec);
// учитываем что step мог вызваться гораздо позже..
t1.setTiming(t1_msec - t0.getCurrent() % t0.getInterval() );
} }
return ostate; return ostate;
...@@ -102,9 +101,19 @@ class Pulse ...@@ -102,9 +101,19 @@ class Pulse
} }
inline long getT1()
{
return t1_msec;
}
inline long getT0()
{
return t0_msec;
}
protected: protected:
PassiveTimer t1; // таймер "1" PassiveTimer t1; // таймер "1"
PassiveTimer t0; // таймер "0" PassiveTimer t0; // таймер "0"
PassiveTimer tCorr; // корректирующий таймер
bool ostate; bool ostate;
bool isOn; bool isOn;
long t1_msec; long t1_msec;
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
PassiveTimer::PassiveTimer( ): PassiveTimer::PassiveTimer( ):
PassiveTimer(WaitUpTime) PassiveTimer(WaitUpTime)
{ {
reset();
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
......
...@@ -10,6 +10,10 @@ TEST_CASE("Pulse", "[Test for class 'Pulse' - impulse generator]" ) ...@@ -10,6 +10,10 @@ TEST_CASE("Pulse", "[Test for class 'Pulse' - impulse generator]" )
{ {
// Работа без задержки..(нулевые задержки) // Работа без задержки..(нулевые задержки)
Pulse p; Pulse p;
REQUIRE( p.getT1() == 0 );
REQUIRE( p.getT0() == 0 );
CHECK_FALSE( p.out() ); CHECK_FALSE( p.out() );
p.step(); p.step();
...@@ -51,5 +55,18 @@ TEST_CASE("Pulse", "[Test for class 'Pulse' - impulse generator]" ) ...@@ -51,5 +55,18 @@ TEST_CASE("Pulse", "[Test for class 'Pulse' - impulse generator]" )
CHECK( p.step() ); CHECK( p.step() );
msleep(110); msleep(110);
CHECK_FALSE( p.step() ); CHECK_FALSE( p.step() );
// проверка того, что при познем вызове step
// тоже всё будет хорошо..
p.reset();
CHECK( p.step() );
msleep(110);
CHECK_FALSE( p.step() );
msleep(2050);
CHECK( p.step() );
msleep(110);
CHECK_FALSE( p.step() );
msleep(70);
CHECK( p.step() );
} }
} }
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