Реализация функционального блока ПЛК «Импульс таймера» в C ++ - PullRequest
0 голосов
/ 01 июля 2019

Я реализую библиотеку функциональных блоков ПЛК.Одним из функциональных блоков является функциональный блок «Импульс таймера», поведение которого следующее: enter image description here

Я реализовал этот функциональный блок следующим образом

Tpulse.h:

#include <stdint.h>
#include "LogicBlk.h"

namespace LogicBlocks
{

// Timer Pulse i.e. logic one at the output for specified time as soon as 0->1 at the input
class Tpulse : public LogicBlk{
public:
    Tpulse(uint32_t*, uint32_t, uint32_t, uint32_t);
    virtual ~Tpulse();

    void Update(void);

private:

    uint32_t *m_BitsArray;
    uint32_t m_Input;
    uint32_t m_Output;
    uint32_t m_PulseTime;
    uint32_t m_StartTime;
    uint32_t m_ElapsedTime;
    uint32_t m_CurrentTime;

};

}

Tpulse.cpp:

LogicBlocks::Tpulse::Tpulse(uint32_t *bitsArray, uint32_t input, uint32_t output, uint32_t pulseTime):
                            m_BitsArray{bitsArray}, m_Input{input}, m_Output{output}, m_PulseTime{pulseTime}{
                                m_StartTime     = 0;
                                m_ElapsedTime   = 0;
                                m_CurrentTime   = 0;
}

LogicBlocks::Tpulse::~Tpulse(){
}

void LogicBlocks::Tpulse::Update(void){

    if(Utils::TestBitSet(m_BitsArray, m_Input) && Utils::TestBitClr(m_BitsArray, m_Output) && !m_ElapsedTime){

        m_StartTime = GetTick();
        SetBit(m_BitsArray, m_Output);

    }else if(Utils::TestBitSet(m_BitsArray, m_Output)){

        m_CurrentTime = GetTick();
        m_ElapsedTime = m_CurrentTime - m_StartTime;

        if(m_ElapsedTime >= m_PulseTime){

            ClrBit(m_BitsArray, m_Output);
            if(TestBitClr(m_BitsArray, m_Input)){

                m_ElapsedTime = 0;
            }
        }

    }else if(TestBitClr(m_BitsArray, m_Input) && TestBitClr(m_BitsArray, m_Output)){

        m_ElapsedTime = 0;

    }

}

Основываясь на уже проведенных мною тестах, мне кажется, что он работает нормально, но я не уверен.Кто-нибудь может оценить мой код с точки зрения функциональности и стиля программирования?Заранее благодарю за любые предложения.

...