Progress in error handling

This commit is contained in:
Mario Hüttel 2020-06-14 23:36:49 +02:00
parent 62a3e06baa
commit 78417e0c8c
4 changed files with 43 additions and 13 deletions

View File

@ -45,7 +45,7 @@ struct oven_pid_errors {
struct oven_pid_status { struct oven_pid_status {
bool active; bool active;
bool aborted; bool error_set;
struct oven_pid_errors error_flags; struct oven_pid_errors error_flags;
float target_temp; float target_temp;
float current_temp; float current_temp;
@ -58,6 +58,8 @@ void oven_driver_set_power(uint8_t power);
void oven_driver_disable(void); void oven_driver_disable(void);
void oven_pid_ack_errors(void);
void oven_pid_init(struct pid_controller *controller_to_copy); void oven_pid_init(struct pid_controller *controller_to_copy);
void oven_pid_handle(float target_temp); void oven_pid_handle(float target_temp);

View File

@ -244,12 +244,12 @@ int main(void)
} }
pt1000_status = adc_pt1000_check_error(); pt1000_status = adc_pt1000_check_error();
global_error_state = pid_status->aborted || !!safety_adc_get_errors() || !!pt1000_status; global_error_state = pid_status->error_set || !!safety_adc_get_errors() || !!pt1000_status;
menu_wait_request = reflow_menu_handle(); menu_wait_request = reflow_menu_handle();
/* Deactivate oven output in case of error! */ /* Deactivate oven output in case of error! */
if (!pid_status->active || pid_status->aborted || global_error_state) if (!pid_status->active || global_error_state)
oven_driver_set_power(0U); oven_driver_set_power(0U);
handle_shell_uart_input(shell_handle); handle_shell_uart_input(shell_handle);

View File

@ -29,7 +29,7 @@ static struct pid_controller oven_pid;
static struct oven_pid_status oven_pid_current_status = { static struct oven_pid_status oven_pid_current_status = {
.active = false, .active = false,
.aborted = false, .error_set = false,
.target_temp = 0.0f, .target_temp = 0.0f,
.current_temp = 0.0f, .current_temp = 0.0f,
.timestamp_last_run = 0ULL .timestamp_last_run = 0ULL
@ -71,6 +71,17 @@ void oven_driver_disable()
rcc_manager_disable_clock(&RCC->APB1ENR, BITMASK_TO_BITNO(OVEN_CONTROLLER_TIM_RCC_MASK)); rcc_manager_disable_clock(&RCC->APB1ENR, BITMASK_TO_BITNO(OVEN_CONTROLLER_TIM_RCC_MASK));
} }
void oven_pid_ack_errors(void)
{
oven_pid_current_status.error_set = false;
oven_pid_current_status.error_flags.vref_tol = false;
oven_pid_current_status.error_flags.pt1000_other = false;
oven_pid_current_status.error_flags.generic_error = false;
oven_pid_current_status.error_flags.pt1000_adc_off = false;
oven_pid_current_status.error_flags.controller_overtemp = false;
oven_pid_current_status.error_flags.pt1000_adc_watchdog = false;
}
void oven_pid_init(struct pid_controller *controller_to_copy) void oven_pid_init(struct pid_controller *controller_to_copy)
{ {
pid_copy(&oven_pid, controller_to_copy); pid_copy(&oven_pid, controller_to_copy);
@ -78,12 +89,7 @@ void oven_pid_init(struct pid_controller *controller_to_copy)
oven_pid.output_sat_max = 100.0f; oven_pid.output_sat_max = 100.0f;
oven_pid_current_status.timestamp_last_run = 0ULL; oven_pid_current_status.timestamp_last_run = 0ULL;
oven_pid_current_status.active = true; oven_pid_current_status.active = true;
oven_pid_current_status.error_flags.vref_tol = false; oven_pid_ack_errors();
oven_pid_current_status.error_flags.pt1000_other = false;
oven_pid_current_status.error_flags.generic_error = false;
oven_pid_current_status.error_flags.pt1000_adc_off = false;
oven_pid_current_status.error_flags.controller_overtemp = false;
oven_pid_current_status.error_flags.pt1000_adc_watchdog = false;
} }
void oven_pid_handle(float target_temp) void oven_pid_handle(float target_temp)
@ -93,7 +99,7 @@ void oven_pid_handle(float target_temp)
int resistance_status; int resistance_status;
enum adc_pt1000_error pt1000_error; enum adc_pt1000_error pt1000_error;
if (oven_pid_current_status.active && !oven_pid_current_status.aborted) { if (oven_pid_current_status.active && !oven_pid_current_status.error_set) {
if (systick_ticks_have_passed(oven_pid_current_status.timestamp_last_run, if (systick_ticks_have_passed(oven_pid_current_status.timestamp_last_run,
(uint64_t)(oven_pid.sample_period * 1000))) { (uint64_t)(oven_pid.sample_period * 1000))) {
@ -127,7 +133,7 @@ void oven_pid_report_error(enum oven_pid_error_report report)
struct oven_pid_errors *e = &oven_pid_current_status.error_flags; struct oven_pid_errors *e = &oven_pid_current_status.error_flags;
oven_pid_current_status.active = false; oven_pid_current_status.active = false;
oven_pid_current_status.aborted = true; oven_pid_current_status.error_set = true;
if (report == 0) { if (report == 0) {
e->generic_error = true; e->generic_error = true;

View File

@ -361,6 +361,20 @@ static shellmatta_retCode_t shell_cmd_safety_adc(const shellmatta_handle_t handl
shellmatta_printf(handle, "VREF:\t%8.2f\tmV\r\n", safety_adc_get_vref()); shellmatta_printf(handle, "VREF:\t%8.2f\tmV\r\n", safety_adc_get_vref());
shellmatta_printf(handle, "TEMP:\t%8.2f\tdeg. Celsius\r\n", safety_adc_get_temp()); shellmatta_printf(handle, "TEMP:\t%8.2f\tdeg. Celsius\r\n", safety_adc_get_temp());
shellmatta_printf(handle, "Errors:\t%X", safety_adc_get_errors());
return SHELLMATTA_OK;
}
static shellmatta_retCode_t shell_cmd_safety_adc_clear_error(const shellmatta_handle_t handle, const char *arguments,
uint32_t length)
{
(void)length;
(void)arguments;
(void)handle;
safety_adc_clear_errors();
return SHELLMATTA_OK; return SHELLMATTA_OK;
} }
@ -374,7 +388,7 @@ static shellmatta_retCode_t shell_cmd_safety_adc(const shellmatta_handle_t handl
// struct shellmatta_cmd *next; /**< pointer to next command or NULL */ // struct shellmatta_cmd *next; /**< pointer to next command or NULL */
//} shellmatta_cmd_t; //} shellmatta_cmd_t;
static shellmatta_cmd_t cmd[14] = { static shellmatta_cmd_t cmd[15] = {
{ {
.cmd = "version", .cmd = "version",
.cmdAlias = "ver", .cmdAlias = "ver",
@ -485,6 +499,14 @@ static shellmatta_cmd_t cmd[14] = {
.helpText = "", .helpText = "",
.usageText = "", .usageText = "",
.cmdFct = shell_cmd_safety_adc, .cmdFct = shell_cmd_safety_adc,
.next = &cmd[14],
},
{
.cmd = "safety-adc-clear-error",
.cmdAlias = NULL,
.helpText = "",
.usageText = "",
.cmdFct = shell_cmd_safety_adc_clear_error,
.next = NULL, .next = NULL,
}, },