You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.2 KiB
C++

/*
* ContactorFault.h
*
* Author: Aleksey Gerasimenko
* gerasimenko.aleksey.n@gmail.com
*/
#include <math.h>
#include <stdint.h>
#include "SYSCTRL/BaseComponent.h"
#ifndef SYSCTRL_CONTACTORFAULT_H_
#define SYSCTRL_CONTACTORFAULT_H_
namespace SYSCTRL
{
struct ContactorFaultConfiguration
{
float period;
ContactorFaultConfiguration():
period(-1.0)
{}
};
struct ContactorFaultBitField
{
uint16_t fault: 1;
};
union ContactorFaultRegister
{
uint16_t all;
ContactorFaultBitField signal;
ContactorFaultRegister():
all((uint16_t)0)
{}
};
class ContactorFault
{
private:
float m_time_sample;
float m_period;
float m_counter;
ContactorFaultRegister m_status;
public:
ContactorFaultRegister status;
public:
ContactorFault();
void setup(float time_sample);
void configure(ContactorFaultConfiguration& config);
public:
void reset(bool ref);
public:
void execute(bool ref, bool current);
private:
void (ContactorFault::*_execute)(bool ref, bool current);
void _execute_undef(bool ref, bool current);
void _execute_operational(bool ref, bool current);
};
} /* namespace SYSCTRL */
#endif /* SYSCTRL_CONTACTORFAULT_H_ */