#ifndef __SYSDATA_H #define __SYSDATA_H typedef union { uint16_t w; int16_t sw; uint8_t b[2]; int8_t sb[2]; } bword_t; typedef struct __attribute__((packed)) { //STATISCHE GERÄTE INFORMATIONEN //---- GERÄTE INFORMATIONEN --- uint16_t device_type_id; // 0 uint16_t fw_major; // 1 uint16_t fw_minor; // 2 uint16_t fw_revision; // 3 uint32_t device_sn; // 4,5 uint16_t reserved0[4]; // 6-9 --- Reserved for 96bit STM32 UID uint16_t reserved1; // 10 //--- GERÄTE PARAMETER ALLGEMEIN --- uint32_t baudrate; // 11,12 uint16_t parity_mode; // 13 uint16_t stopBits; // 14 Aktuell nicht ausgewert, automatische Auswahl nach Modbus standard abhängig vom Parity Mode uint16_t slave_address; // 15 uint16_t command; // 16 uint16_t reserved2[3]; // 17-19 //--- GERÄTE PARAMETER GERÄTE SPEZIFISCH --- uint16_t temperature_shutdown; // 20 uint16_t dip_mode; // 21 uint16_t user_button_mode; // 22 int32_t ursense_voltage_shutdown_min; // 23,24 int32_t ursense_voltage_shutdown_max; // 25,26 int16_t ursense_volt_correct; // 27 int16_t ba_resistence; // 28 int16_t ab_middle_point_offset; // 29 uint16_t copper_v_drop; // 30 uint16_t copper_v_drop_adc; // 31 int16_t copper_v_drop_adc_limit; // 32 uint16_t shortcut_current_in_mV; // 33 uint16_t inrush_max_current_in_mV; // 34 uint16_t inrush_max_current_in_adc; // 35 uint16_t inrush_curr_period; // 36 uint16_t inrush_curr_integral_steps; // 37 uint16_t i_plus_offset; // 38 uint16_t i_minus_offset; // 39 uint16_t writeLocked; // 40 1= (Einige) Register sind geschützt, 0 = Kein Schutz vorhanden uint16_t keyAccepted; // 41 1= lockKey is correct, gesperrte Register sind freigegeben zum beschreiben uint16_t lockKey; // 42 EINGABE ENTSPERR CODE uint16_t newLockKey; // 43 EINGABE NEUER Sperrcode uint16_t reserved3[56]; // 44-99 // --- AKTUELLE DATEN ab Adresse 100 --- uint16_t lvp_state; // 100 uint16_t ovp_state; // 101 uint16_t ubsensea_voltage; // 102 uint16_t min_ubsensea_voltage; // 103 uint16_t max_ubsensea_voltage; // 104 uint16_t ubsenseb_voltage; // 105 uint16_t min_ubsenseb_voltage; // 106 uint16_t max_ubsenseb_voltage; // 107 int16_t ursense_voltage; // 108 uint16_t min_charge_ursense_voltage; // 109 uint16_t max_charge_ursense_voltage; // 110 uint16_t min_discharge_ursense_voltage; // 111 uint16_t max_discharge_ursense_voltage; // 112 int16_t temperature; // 113 int16_t min_temperature; // 114 int16_t max_temperature; // 115 int16_t ab_raw_adc_value_with_offset; // 116 uint16_t relay_status; // 117 int16_t current; // 118 uint16_t min_charge_current; // 119 uint16_t max_charge_current; // 120 uint16_t min_discharge_current; // 121 uint16_t max_discharge_current; // 122 uint16_t device_status; // 123 int16_t adc_plus_current_sensor; // 124 int16_t adc_minus_current_sensor; // 125 int16_t ubbsense_voltage; // 126 uint16_t heater_status; // 127 // Counters uint16_t startup_cnt; // 128 uint16_t overtemp_error_cnt; // 129 uint16_t overcurrent_error_cnt; // 130 uint16_t lowbat_error_cnt; // 131 uint16_t lvp_cnt; // 132 uint16_t ovp_cnt; // 133 uint16_t switch_cnt; // 134 uint16_t mosfets_voltagedrop_error_cnt; // 135 uint16_t overload_error_cnt; // 136 uint16_t last_shortcut_during_charge; // 137 uint16_t last_shortcut_during_discharge; // 138 } sys_data_struct_t; // This union maps typedef union sys_data_union { sys_data_struct_t s; bword_t mb[sizeof(sys_data_struct_t)/2]; } sys_data_t; #endif