STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
ValveControlMessage.hpp
Go to the documentation of this file.
1#ifndef VALVE_CONTROL_MESSAGE_HPP
2#define VALVE_CONTROL_MESSAGE_HPP
3
4#include <array>
5#include <cstdint>
6
7#include "CommsMessage.hpp"
8
9/**
10 * @brief Valve Control Message
11 *
12 * Contains valve position, commands, and status for individual valves
13 */
15 comms::CommsMessage<double, // (0) timestamp (s) - timestamp
16 uint8_t, // (1) valve_id - valve identifier
17 uint8_t, // (2) valve_type - ValveType enum (motor/solenoid)
18 double, // (3) commanded_position (0-1) - commanded position
19 double, // (4) actual_position (0-1) - actual position from encoder
20 double, // (5) position_error - position error
21 double, // (6) velocity (1/s) - current velocity
22 double, // (7) current (A) - motor current
23 double, // (8) temperature (°C) - motor temperature
24 double, // (9) rate_limit (1/s) - position rate limit
25 bool, // (10) emergency_close - emergency close flag
26 bool, // (11) fault_detected - fault status
27 uint8_t, // (12) valve_state - ValveState enum
28 double, // (13) command_confidence (0-1) - command confidence
29 uint64_t>; // (14) time_monotonic (ns) - monotonic timestamp
30
31// Function to set valve control measurements
33 ValveControlMessage& message, double timestamp, uint8_t valve_id, uint8_t valve_type,
34 double commanded_position, double actual_position, double position_error, double velocity,
35 double current, double temperature, double rate_limit, bool emergency_close,
36 bool fault_detected, uint8_t valve_state, double command_confidence, uint64_t time_monotonic) {
37 message.setField<0>(timestamp);
38 message.setField<1>(valve_id);
39 message.setField<2>(valve_type);
40 message.setField<3>(commanded_position);
41 message.setField<4>(actual_position);
42 message.setField<5>(position_error);
43 message.setField<6>(velocity);
44 message.setField<7>(current);
45 message.setField<8>(temperature);
46 message.setField<9>(rate_limit);
47 message.setField<10>(emergency_close);
48 message.setField<11>(fault_detected);
49 message.setField<12>(valve_state);
50 message.setField<13>(command_confidence);
51 message.setField<14>(time_monotonic);
52}
53
55 ValveControlMessage message;
56 set_valve_control_measurement(message, 0.0, 1, 0, 0.0, 0.0, 0.0, 0.0, 0.0, 25.0, 0.5, false,
57 false, 0, 1.0, 0);
58 return message;
59}
60
61#endif // VALVE_CONTROL_MESSAGE_HPP
static void set_valve_control_measurement(ValveControlMessage &message, double timestamp, uint8_t valve_id, uint8_t valve_type, double commanded_position, double actual_position, double position_error, double velocity, double current, double temperature, double rate_limit, bool emergency_close, bool fault_detected, uint8_t valve_state, double command_confidence, uint64_t time_monotonic)
comms::CommsMessage< double, uint8_t, uint8_t, double, double, double, double, double, double, double, bool, bool, uint8_t, double, uint64_t > ValveControlMessage
Valve Control Message.
static ValveControlMessage generateTestMessageValveControl()
CommsMessage - Template-based message serialization.