tempMeasurement#

Executive Summary#

Models the addition of noise, bias, and faults to temperature measurements.

Message Connection Descriptions#

The following table lists all module input and output messages. The module msg connection is set by the user from python. The msg type contains a link to the message structure definition, while the description provides information on what this message is used for.

Module I/O Messages#

Msg Variable Name

Msg Type

Description

tempInMsg

TemperatureMsgPayload

True temperature measurement

tempOutMsg

TemperatureMsgPayload

Sensed temperature measurement with corruptions

Detailed Module Description#

This module simulates the corruption of a true thermal measurement by noise, bias, and three faults:

  • TEMP_FAULT_STUCK_VALUE is faulty behavior where the measurement sticks to a specific value

  • TEMP_FAULT_STUCK_CURRENT fixes the measurement to the value

  • TEMP_FAULT_SPIKING is faulty behavior where the measurement spikes to a specified multiplier times the actual value, with a given probability

  • TEMP_FAULT_NOMINAL has no faulty behavior but may still have noise and bias

User Guide#

Fault Parameters#

This module has several parameters that are set to default values:

Default Module Parameters#

Parameter

Description

Default Value

faultState

Sets the fault status.

TEMP_FAULT_NOMINAL

senBias

Sets the bias value.

0.0

senNoiseStd

Sets the standard deviation for sensor noise.

0.0

walkBounds

Sets the random walk bounds for sensor noise.

1E-15

stuckValue

Temperature at which the reading is stuck for fault mode TEMP_FAULT_STUCK_VALUE.

0.0

spikeProbability

Probability of a spike when in fault mode TEMP_FAULT_SPIKING. Between 0 and 1.

0.1

spikeAmount

Sensed temperature multiplier when spiking for fault mode TEMP_FAULT_SPIKING.

2.0

Module Setup#

The module is created in python using, for example:

1tempMeasurementModel = tempMeasurement.TempMeasurement()
2tempMeasurementModel.modelTag = 'tempMeasModel'

A sample setup is done using:

1tempMeasurementModel.senBias = 1.0  # [C] bias amount
2tempMeasurementModel.senNoiseStd = 5.0  # [C] noise standard devation
3tempMeasurementModel.walkBounds = 2.0  #
4tempMeasurementModel.stuckValue = 10.0  # [C] if the sensor gets stuck, stuck at 10 degrees C
5tempMeasurementModel.spikeProbability = 0.3  # [-] 30% chance of spiking at each time step
6tempMeasurementModel.spikeAmount = 10.0  # [-] 10x the actual sensed value if the spike happens

The incomping temperature message must be connected to the module:

1tempMeasurementModel.tempInMsg.subscribeTo(sensorThermalModel.temperatureOutMsg)

The fault state is changed by the user to spiking, for example, by setting:

1tempMeasurementModel.faultState = tempMeasurement.TEMP_FAULT_SPIKING

Class TempMeasurement#

class TempMeasurement : public SysModel#

Models a sensor to add noise, bias, and faults to temperature measurements.

Public Functions

TempMeasurement()#

This is the constructor for the module class. It sets default variable values and initializes the various parts of the model. Don’t allow random walk by default.

void reset(uint64_t currentSimNanos)#

This method is used to reset the module and checks that required input messages are connected.

Returns:

void

void updateState(uint64_t currentSimNanos)#

This is the main method that gets called every time the module is updated.

Returns:

void

Public Members

ReadFunctor<TemperatureMsgPayload> tempInMsg#

True temperature measurement.

Message<TemperatureMsgPayload> tempOutMsg#

Sensed temperature measurement.

BSKLogger bskLogger#

&#8212; BSK Logging

TempFaultState_t faultState#

[-] Fault status variable

double senBias = {}#

[-] Sensor bias value

double senNoiseStd = {}#

[-] Sensor noise value

double walkBounds#

[-] Gauss Markov walk bounds

double stuckValue = {}#

[C] Value for temp sensor to get stuck at

double spikeProbability#

[-] Probability of spiking at each time step (between 0 and 1)

double spikeAmount#

[-] Spike multiplier