power equalization
This commit is contained in:
parent
fab7eb8a5d
commit
08d0e09493
@ -1,7 +1,8 @@
|
||||
#include "Fuse.h"
|
||||
|
||||
#include "../monitoring/LimitViolationReporter.h"
|
||||
#include "../monitoring/MonitoringMessageContent.h"
|
||||
#include "../objectmanager/ObjectManagerIF.h"
|
||||
#include "../power/Fuse.h"
|
||||
#include "../serialize/SerialFixedArrayListAdapter.h"
|
||||
#include "../ipc/QueueFactory.h"
|
||||
|
||||
@ -10,13 +11,16 @@ object_id_t Fuse::powerSwitchId = 0;
|
||||
Fuse::Fuse(object_id_t fuseObjectId, uint8_t fuseId, VariableIds ids,
|
||||
float maxCurrent, uint16_t confirmationCount) :
|
||||
SystemObject(fuseObjectId), oldFuseState(0), fuseId(fuseId), powerIF(
|
||||
NULL), currentLimit(fuseObjectId, 1, ids.pidCurrent, confirmationCount,
|
||||
maxCurrent, FUSE_CURRENT_HIGH), powerMonitor(fuseObjectId, 2,
|
||||
GlobalDataPool::poolIdAndPositionToPid(ids.poolIdPower, 0),
|
||||
confirmationCount), set(), voltage(ids.pidVoltage, &set), current(
|
||||
ids.pidCurrent, &set), state(ids.pidState, &set), power(
|
||||
ids.poolIdPower, &set, PoolVariableIF::VAR_READ_WRITE), commandQueue(
|
||||
NULL), parameterHelper(this), healthHelper(this, fuseObjectId) {
|
||||
NULL),
|
||||
currentLimit(fuseObjectId, 1, ids.pidCurrent, confirmationCount,
|
||||
maxCurrent, FUSE_CURRENT_HIGH),
|
||||
powerMonitor(fuseObjectId, 2,
|
||||
GlobalDataPool::poolIdAndPositionToPid(ids.poolIdPower, 0),
|
||||
confirmationCount),
|
||||
set(), voltage(ids.pidVoltage, &set), current(ids.pidCurrent, &set),
|
||||
state(ids.pidState, &set),
|
||||
power(ids.poolIdPower, &set, PoolVariableIF::VAR_READ_WRITE),
|
||||
parameterHelper(this), healthHelper(this, fuseObjectId) {
|
||||
commandQueue = QueueFactory::instance()->createMessageQueue();
|
||||
}
|
||||
|
||||
|
13
power/Fuse.h
13
power/Fuse.h
@ -1,13 +1,14 @@
|
||||
#ifndef FUSE_H_
|
||||
#define FUSE_H_
|
||||
#ifndef FSFW_POWER_FUSE_H_
|
||||
#define FSFW_POWER_FUSE_H_
|
||||
|
||||
#include "PowerComponentIF.h"
|
||||
#include "PowerSwitchIF.h"
|
||||
|
||||
#include "../datapoolglob/GlobalDataSet.h"
|
||||
#include "../datapoolglob/GlobalPoolVariable.h"
|
||||
#include "../datapoolglob/PIDReader.h"
|
||||
#include "../devicehandlers/HealthDevice.h"
|
||||
#include "../monitoring/AbsLimitMonitor.h"
|
||||
#include "../power/PowerComponentIF.h"
|
||||
#include "../power/PowerSwitchIF.h"
|
||||
#include "../returnvalues/HasReturnvaluesIF.h"
|
||||
#include "../parameters/ParameterHelper.h"
|
||||
#include <list>
|
||||
@ -90,7 +91,7 @@ private:
|
||||
PIDReader<float> current;
|
||||
PIDReader<uint8_t> state;
|
||||
gp_float_t power;
|
||||
MessageQueueIF* commandQueue;
|
||||
MessageQueueIF* commandQueue = nullptr;
|
||||
ParameterHelper parameterHelper;
|
||||
HealthHelper healthHelper;
|
||||
static object_id_t powerSwitchId;
|
||||
@ -103,4 +104,4 @@ private:
|
||||
bool areSwitchesOfComponentOn(DeviceList::iterator iter);
|
||||
};
|
||||
|
||||
#endif /* FUSE_H_ */
|
||||
#endif /* FSFW_POWER_FUSE_H_ */
|
||||
|
@ -1,20 +1,14 @@
|
||||
/**
|
||||
* @file PowerComponent.cpp
|
||||
* @brief This file defines the PowerComponent class.
|
||||
* @date 28.08.2014
|
||||
* @author baetz
|
||||
*/
|
||||
#include "PowerComponent.h"
|
||||
|
||||
#include "../power/PowerComponent.h"
|
||||
|
||||
PowerComponent::PowerComponent() :
|
||||
deviceObjectId(0), switchId1(0xFF), switchId2(0xFF), doIHaveTwoSwitches(
|
||||
false), min(0.0), max(0.0), moduleId(0) {
|
||||
PowerComponent::PowerComponent(): switchId1(0xFF), switchId2(0xFF),
|
||||
doIHaveTwoSwitches(false) {
|
||||
}
|
||||
PowerComponent::PowerComponent(object_id_t setId, uint8_t moduleId, float min, float max,
|
||||
uint8_t switchId1, bool twoSwitches, uint8_t switchId2) :
|
||||
deviceObjectId(setId), switchId1(switchId1), switchId2(switchId2), doIHaveTwoSwitches(
|
||||
twoSwitches), min(min), max(max), moduleId(moduleId) {
|
||||
|
||||
PowerComponent::PowerComponent(object_id_t setId, uint8_t moduleId, float min,
|
||||
float max, uint8_t switchId1, bool twoSwitches, uint8_t switchId2) :
|
||||
deviceObjectId(setId), switchId1(switchId1), switchId2(switchId2),
|
||||
doIHaveTwoSwitches(twoSwitches), min(min), max(max),
|
||||
moduleId(moduleId) {
|
||||
}
|
||||
|
||||
ReturnValue_t PowerComponent::serialize(uint8_t** buffer, size_t* size,
|
||||
|
@ -1,13 +1,17 @@
|
||||
#ifndef POWERCOMPONENT_H_
|
||||
#define POWERCOMPONENT_H_
|
||||
#ifndef FSFW_POWER_POWERCOMPONENT_H_
|
||||
#define FSFW_POWER_POWERCOMPONENT_H_
|
||||
|
||||
#include "PowerComponentIF.h"
|
||||
|
||||
#include "../objectmanager/frameworkObjects.h"
|
||||
#include "../objectmanager/SystemObjectIF.h"
|
||||
#include "../power/PowerComponentIF.h"
|
||||
|
||||
|
||||
class PowerComponent: public PowerComponentIF {
|
||||
public:
|
||||
PowerComponent(object_id_t setId, uint8_t moduleId, float min, float max, uint8_t switchId1,
|
||||
bool twoSwitches = false, uint8_t switchId2 = 0xFF);
|
||||
PowerComponent(object_id_t setId, uint8_t moduleId, float min, float max,
|
||||
uint8_t switchId1, bool twoSwitches = false,
|
||||
uint8_t switchId2 = 0xFF);
|
||||
|
||||
virtual object_id_t getDeviceObjectId();
|
||||
|
||||
@ -31,18 +35,18 @@ public:
|
||||
ParameterWrapper *parameterWrapper,
|
||||
const ParameterWrapper *newValues, uint16_t startAtIndex);
|
||||
private:
|
||||
const object_id_t deviceObjectId;
|
||||
const object_id_t deviceObjectId = objects::NO_OBJECT;
|
||||
const uint8_t switchId1;
|
||||
const uint8_t switchId2;
|
||||
|
||||
const bool doIHaveTwoSwitches;
|
||||
|
||||
float min;
|
||||
float max;
|
||||
float min = 0.0;
|
||||
float max = 0.0;
|
||||
|
||||
uint8_t moduleId;
|
||||
uint8_t moduleId = 0;
|
||||
|
||||
PowerComponent();
|
||||
};
|
||||
|
||||
#endif /* POWERCOMPONENT_H_ */
|
||||
#endif /* FSFW_POWER_POWERCOMPONENT_H_ */
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifndef POWERCOMPONENTIF_H_
|
||||
#define POWERCOMPONENTIF_H_
|
||||
#ifndef FSFW_POWER_POWERCOMPONENTIF_H_
|
||||
#define FSFW_POWER_POWERCOMPONENTIF_H_
|
||||
|
||||
#include "../serialize/SerializeIF.h"
|
||||
#include "../parameters/HasParametersIF.h"
|
||||
@ -10,15 +10,15 @@ public:
|
||||
|
||||
}
|
||||
|
||||
virtual object_id_t getDeviceObjectId()=0;
|
||||
virtual object_id_t getDeviceObjectId() = 0;
|
||||
|
||||
virtual uint8_t getSwitchId1()=0;
|
||||
virtual uint8_t getSwitchId2()=0;
|
||||
virtual bool hasTwoSwitches()=0;
|
||||
virtual uint8_t getSwitchId1() = 0;
|
||||
virtual uint8_t getSwitchId2() = 0;
|
||||
virtual bool hasTwoSwitches() = 0;
|
||||
|
||||
virtual float getMin() = 0;
|
||||
virtual float getMax() = 0;
|
||||
|
||||
};
|
||||
|
||||
#endif /* POWERCOMPONENTIF_H_ */
|
||||
#endif /* FSFW_POWER_POWERCOMPONENTIF_H_ */
|
||||
|
@ -1,14 +1,16 @@
|
||||
#include "../power/PowerSensor.h"
|
||||
#include "PowerSensor.h"
|
||||
|
||||
#include "../ipc/QueueFactory.h"
|
||||
|
||||
PowerSensor::PowerSensor(object_id_t setId, VariableIds ids,
|
||||
DefaultLimits limits, SensorEvents events, uint16_t confirmationCount) :
|
||||
SystemObject(setId), commandQueue(NULL), parameterHelper(this), healthHelper(this, setId), set(), current(
|
||||
ids.pidCurrent, &set), voltage(ids.pidVoltage, &set), power(
|
||||
ids.poolIdPower, &set, PoolVariableIF::VAR_WRITE), currentLimit(
|
||||
setId, MODULE_ID_CURRENT, ids.pidCurrent, confirmationCount,
|
||||
SystemObject(setId), parameterHelper(this), healthHelper(this, setId),
|
||||
set(), current(ids.pidCurrent, &set), voltage(ids.pidVoltage, &set),
|
||||
power(ids.poolIdPower, &set, PoolVariableIF::VAR_WRITE),
|
||||
currentLimit(setId, MODULE_ID_CURRENT, ids.pidCurrent, confirmationCount,
|
||||
limits.currentMin, limits.currentMax, events.currentLow,
|
||||
events.currentHigh), voltageLimit(setId, MODULE_ID_VOLTAGE,
|
||||
events.currentHigh),
|
||||
voltageLimit(setId, MODULE_ID_VOLTAGE,
|
||||
ids.pidVoltage, confirmationCount, limits.voltageMin,
|
||||
limits.voltageMax, events.voltageLow, events.voltageHigh) {
|
||||
commandQueue = QueueFactory::instance()->createMessageQueue();
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifndef POWERSENSOR_H_
|
||||
#define POWERSENSOR_H_
|
||||
#ifndef FSFW_POWER_POWERSENSOR_H_
|
||||
#define FSFW_POWER_POWERSENSOR_H_
|
||||
|
||||
#include "../datapoolglob/GlobalDataSet.h"
|
||||
#include "../datapoolglob/GlobalPoolVariable.h"
|
||||
@ -50,7 +50,7 @@ public:
|
||||
ParameterWrapper *parameterWrapper,
|
||||
const ParameterWrapper *newValues, uint16_t startAtIndex);
|
||||
private:
|
||||
MessageQueueIF* commandQueue;
|
||||
MessageQueueIF* commandQueue = nullptr;
|
||||
ParameterHelper parameterHelper;
|
||||
HealthHelper healthHelper;
|
||||
GlobDataSet set;
|
||||
@ -68,4 +68,4 @@ protected:
|
||||
LimitMonitor<float> voltageLimit;
|
||||
};
|
||||
|
||||
#endif /* POWERSENSOR_H_ */
|
||||
#endif /* FSFW_POWER_POWERSENSOR_H_ */
|
||||
|
@ -1,22 +1,15 @@
|
||||
/**
|
||||
* @file PowerSwitchIF.h
|
||||
* @brief This file defines the PowerSwitchIF class.
|
||||
* @date 20.03.2013
|
||||
* @author baetz
|
||||
*/
|
||||
|
||||
#ifndef POWERSWITCHIF_H_
|
||||
#define POWERSWITCHIF_H_
|
||||
#ifndef FSFW_POWER_POWERSWITCHIF_H_
|
||||
#define FSFW_POWER_POWERSWITCHIF_H_
|
||||
|
||||
#include "../events/Event.h"
|
||||
#include "../returnvalues/HasReturnvaluesIF.h"
|
||||
/**
|
||||
*
|
||||
* @brief This interface defines a connection to a device that is capable of turning on and off
|
||||
* switches of devices identified by a switch ID.
|
||||
* @details The virtual functions of this interface do not allow to make any assignments
|
||||
* because they can be called asynchronosuly (const ending).
|
||||
*
|
||||
* @brief This interface defines a connection to a device that is capable of
|
||||
* turning on and off switches of devices identified by a switch ID.
|
||||
* @details
|
||||
* The virtual functions of this interface do not allow to make any assignments
|
||||
* because they can be called asynchronosuly (const ending).
|
||||
* @ingroup interfaces
|
||||
*/
|
||||
class PowerSwitchIF : public HasReturnvaluesIF {
|
||||
@ -77,4 +70,4 @@ public:
|
||||
};
|
||||
|
||||
|
||||
#endif /* POWERSWITCHIF_H_ */
|
||||
#endif /* FSFW_POWER_POWERSWITCHIF_H_ */
|
||||
|
@ -1,15 +1,17 @@
|
||||
#include "PowerSwitcher.h"
|
||||
|
||||
#include "../objectmanager/ObjectManagerIF.h"
|
||||
#include "../power/PowerSwitcher.h"
|
||||
#include "../serviceinterface/ServiceInterfaceStream.h"
|
||||
|
||||
PowerSwitcher::PowerSwitcher(uint8_t setSwitch1, uint8_t setSwitch2,
|
||||
PowerSwitcher::State_t setStartState) :
|
||||
state(setStartState), firstSwitch(setSwitch1), secondSwitch(setSwitch2), power(NULL) {
|
||||
PowerSwitcher::State_t setStartState):
|
||||
state(setStartState), firstSwitch(setSwitch1),
|
||||
secondSwitch(setSwitch2) {
|
||||
}
|
||||
|
||||
ReturnValue_t PowerSwitcher::initialize(object_id_t powerSwitchId) {
|
||||
power = objectManager->get<PowerSwitchIF>(powerSwitchId);
|
||||
if (power == NULL) {
|
||||
if (power == nullptr) {
|
||||
return HasReturnvaluesIF::RETURN_FAILED;
|
||||
}
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
@ -17,17 +19,22 @@ ReturnValue_t PowerSwitcher::initialize(object_id_t powerSwitchId) {
|
||||
|
||||
ReturnValue_t PowerSwitcher::getStateOfSwitches() {
|
||||
SwitchReturn_t result = howManySwitches();
|
||||
|
||||
switch (result) {
|
||||
case ONE_SWITCH:
|
||||
return power->getSwitchState(firstSwitch);
|
||||
case TWO_SWITCHES:
|
||||
if ((power->getSwitchState(firstSwitch) == PowerSwitchIF::SWITCH_ON)
|
||||
&& (power->getSwitchState(secondSwitch) == PowerSwitchIF::SWITCH_ON)) {
|
||||
ReturnValue_t firstSwitchState = power->getSwitchState(firstSwitch);
|
||||
ReturnValue_t secondSwitchState = power->getSwitchState(firstSwitch);
|
||||
if ((firstSwitchState == PowerSwitchIF::SWITCH_ON)
|
||||
&& (secondSwitchState == PowerSwitchIF::SWITCH_ON)) {
|
||||
return PowerSwitchIF::SWITCH_ON;
|
||||
} else if ((power->getSwitchState(firstSwitch) == PowerSwitchIF::SWITCH_OFF)
|
||||
&& (power->getSwitchState(secondSwitch) == PowerSwitchIF::SWITCH_OFF)) {
|
||||
}
|
||||
else if ((firstSwitchState == PowerSwitchIF::SWITCH_OFF)
|
||||
&& (secondSwitchState == PowerSwitchIF::SWITCH_OFF)) {
|
||||
return PowerSwitchIF::SWITCH_OFF;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
return HasReturnvaluesIF::RETURN_FAILED;
|
||||
}
|
||||
default:
|
||||
|
@ -1,10 +1,13 @@
|
||||
#ifndef POWERSWITCHER_H_
|
||||
#define POWERSWITCHER_H_
|
||||
#include "../power/PowerSwitchIF.h"
|
||||
#ifndef FSFW_POWER_POWERSWITCHER_H_
|
||||
#define FSFW_POWER_POWERSWITCHER_H_
|
||||
|
||||
#include "PowerSwitchIF.h"
|
||||
|
||||
#include "../objectmanager/SystemObjectIF.h"
|
||||
#include "../returnvalues/HasReturnvaluesIF.h"
|
||||
#include "../timemanager/Countdown.h"
|
||||
|
||||
class PowerSwitcher : public HasReturnvaluesIF {
|
||||
class PowerSwitcher: public HasReturnvaluesIF {
|
||||
public:
|
||||
enum State_t {
|
||||
WAIT_OFF,
|
||||
@ -16,7 +19,8 @@ public:
|
||||
static const uint8_t INTERFACE_ID = CLASS_ID::POWER_SWITCHER;
|
||||
static const ReturnValue_t IN_POWER_TRANSITION = MAKE_RETURN_CODE(1);
|
||||
static const ReturnValue_t SWITCH_STATE_MISMATCH = MAKE_RETURN_CODE(2);
|
||||
PowerSwitcher( uint8_t setSwitch1, uint8_t setSwitch2 = NO_SWITCH, State_t setStartState = SWITCH_IS_OFF );
|
||||
PowerSwitcher( uint8_t setSwitch1, uint8_t setSwitch2 = NO_SWITCH,
|
||||
State_t setStartState = SWITCH_IS_OFF );
|
||||
ReturnValue_t initialize(object_id_t powerSwitchId);
|
||||
void turnOn();
|
||||
void turnOff();
|
||||
@ -29,7 +33,8 @@ public:
|
||||
private:
|
||||
uint8_t firstSwitch;
|
||||
uint8_t secondSwitch;
|
||||
PowerSwitchIF* power;
|
||||
PowerSwitchIF* power = nullptr;
|
||||
|
||||
static const uint8_t NO_SWITCH = 0xFF;
|
||||
enum SwitchReturn_t {
|
||||
ONE_SWITCH = 1,
|
||||
@ -42,4 +47,4 @@ private:
|
||||
|
||||
|
||||
|
||||
#endif /* POWERSWITCHER_H_ */
|
||||
#endif /* FSFW_POWER_POWERSWITCHER_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user