diff --git a/MDK-ARM/controller/controller.axf b/MDK-ARM/controller/controller.axf new file mode 100644 index 0000000..01bca1e Binary files /dev/null and b/MDK-ARM/controller/controller.axf differ diff --git a/User/application/mode/mode_pwmp_hd.c b/User/application/mode/mode_pwmp_hd.c index d4b20a6..f4641c0 100644 --- a/User/application/mode/mode_pwmp_hd.c +++ b/User/application/mode/mode_pwmp_hd.c @@ -52,11 +52,11 @@ static void _adjust_stop(void) static uint8_t _adjust_result(void) { - if (mode_pwmp_hd->pwmp_save->storage.tuned_flag == TUNED_ONGOING) + if (mode_pwmp_hd->pwmp_save->tuned_flag == TUNED_ONGOING) { udevice.tuned_flag = TUNED_ONGOING; } - else if (mode_pwmp_hd->pwmp_save->storage.tuned_flag == TUNED_SUCCESS) + else if (mode_pwmp_hd->pwmp_save->tuned_flag == TUNED_SUCCESS) { udevice.tuned_flag = TUNED_SUCCESS; } @@ -80,17 +80,17 @@ static uint8_t _adjust_step_current(void) static void _adjust_data(mode_adjust_data_t *data) { - data->pos0 = mode_pwmp_hd->pwmp_save->storage.trip_0; ///< 位置0 ad - data->pos100 = mode_pwmp_hd->pwmp_save->storage.trip_100; ///< 位置100 ad - data->pot0 = mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; ///< 位置0 输出 - data->pot100 = mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin; ///< 位置100 输出 - data->current0 = mode_pwmp_hd->pwmp_save->storage.current0; ///< 位置0 电流(毫安,放大100倍, 0.01ma=1) - data->current100 = mode_pwmp_hd->pwmp_save->storage.current100; ///< 位置100 电流(毫安,放大100倍,0.01ma=1) - data->open_time = mode_pwmp_hd->pwmp_save->storage.all_open_time; ///< 全开时间(秒) - data->close_time = mode_pwmp_hd->pwmp_save->storage.all_close_time; ///< 全关时间(秒) - data->kp = mode_pwmp_hd->pwmp_save->storage.kp; ///< pid 比例系数 - data->ki = mode_pwmp_hd->pwmp_save->storage.ki; ///< pid 积分系数 - data->kd = mode_pwmp_hd->pwmp_save->storage.kd; ///< pid 微分系数 + data->pos0 = mode_pwmp_hd->pwmp_save->trip_0; ///< 位置0 ad + data->pos100 = mode_pwmp_hd->pwmp_save->trip_100; ///< 位置100 ad + data->pot0 = mode_pwmp_hd->pwmp_save->pwmp_min_origin; ///< 位置0 输出 + data->pot100 = mode_pwmp_hd->pwmp_save->pwmp_max_origin; ///< 位置100 输出 + data->current0 = mode_pwmp_hd->pwmp_save->current0; ///< 位置0 电流(毫安,放大100倍, 0.01ma=1) + data->current100 = mode_pwmp_hd->pwmp_save->current100; ///< 位置100 电流(毫安,放大100倍,0.01ma=1) + data->open_time = mode_pwmp_hd->pwmp_save->all_open_time; ///< 全开时间(秒) + data->close_time = mode_pwmp_hd->pwmp_save->all_close_time; ///< 全关时间(秒) + data->kp = mode_pwmp_hd->pwmp_save->kp; ///< pid 比例系数 + data->ki = mode_pwmp_hd->pwmp_save->ki; ///< pid 积分系数 + data->kd = mode_pwmp_hd->pwmp_save->kd; ///< pid 微分系数 } static BOOL _control_idle(void) @@ -187,39 +187,39 @@ static void pwmp_control_update(filter_e type) /*PID参数获取*/ static float32 get_pwmp_hd_control_kp(void) { - if (mode_pwmp_hd->pwmp_save->storage.kp < 2) + if (mode_pwmp_hd->pwmp_save->kp < 2) { - // return mode_pwmp_hd->pwmp_save->storage.kp * 6; - return mode_pwmp_hd->pwmp_save->storage.kp * 15; + // return mode_pwmp_hd->pwmp_save->kp * 6; + return mode_pwmp_hd->pwmp_save->kp * 15; } else { - return mode_pwmp_hd->pwmp_save->storage.kp * 4; + return mode_pwmp_hd->pwmp_save->kp * 4; } } static float32 get_pwmp_hd_control_ki(void) { - return mode_pwmp_hd->pwmp_save->storage.ki < 0.001 ? mode_pwmp_hd->pwmp_save->storage.ki * 20 : 0.02; + return mode_pwmp_hd->pwmp_save->ki < 0.001 ? mode_pwmp_hd->pwmp_save->ki * 20 : 0.02; } static float32 get_pwmp_hd_control_kd(void) { - // return mode_pwmp_hd->pwmp_save->storage.kd < 0.01 ? mode_pwmp_hd->pwmp_save->storage.kd : 0.001; + // return mode_pwmp_hd->pwmp_save->kd < 0.01 ? mode_pwmp_hd->pwmp_save->kd : 0.001; if (udevice.act_style.bits.value_travel_type == TRAVEL_TYPE_STRAIGHT) { - return mode_pwmp_hd->pwmp_save->storage.kd = 0; + return mode_pwmp_hd->pwmp_save->kd = 0; } else { - if (mode_pwmp_hd->pwmp_save->storage.kd <= 20) + if (mode_pwmp_hd->pwmp_save->kd <= 20) { - return mode_pwmp_hd->pwmp_save->storage.kd; + return mode_pwmp_hd->pwmp_save->kd; } else { - return mode_pwmp_hd->pwmp_save->storage.kd = 20; + return mode_pwmp_hd->pwmp_save->kd = 20; } } } @@ -227,14 +227,14 @@ static float32 get_pwmp_hd_control_kd(void) /*将自己结构体变量中的参数保存到公共参数中*/ static void pwmp_public_params_update() { - udevice.pos0_travel_vol = mode_pwmp_hd->pwmp_save->storage.trip_0; - udevice.pos100_travel_vol = mode_pwmp_hd->pwmp_save->storage.trip_100; - udevice.output_min = mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; - udevice.output_max = mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin; - udevice.spid_kp = mode_pwmp_hd->pwmp_save->storage.kp; - udevice.spid_ki = mode_pwmp_hd->pwmp_save->storage.ki; - udevice.spid_kd = mode_pwmp_hd->pwmp_save->storage.kd; - udevice.tuned_flag = mode_pwmp_hd->pwmp_save->storage.prov_flag; + udevice.pos0_travel_vol = mode_pwmp_hd->pwmp_save->trip_0; + udevice.pos100_travel_vol = mode_pwmp_hd->pwmp_save->trip_100; + udevice.output_min = mode_pwmp_hd->pwmp_save->pwmp_min_origin; + udevice.output_max = mode_pwmp_hd->pwmp_save->pwmp_max_origin; + udevice.spid_kp = mode_pwmp_hd->pwmp_save->kp; + udevice.spid_ki = mode_pwmp_hd->pwmp_save->ki; + udevice.spid_kd = mode_pwmp_hd->pwmp_save->kd; + udevice.tuned_flag = mode_pwmp_hd->pwmp_save->prov_flag; } //////////////////////////////*控制BEGIN*////////////////////////////////////////////////////// @@ -259,11 +259,11 @@ static float32_t convert_target_to_controlvalue() { if (mode_pwmp_hd->action == INFLATE) { - control_value = mode_pwmp_hd->pwmp_save->storage.valvepos_in[i - 1]; + control_value = mode_pwmp_hd->pwmp_save->valvepos_in[i - 1]; } else if (mode_pwmp_hd->action == DEFLATE) { - control_value = mode_pwmp_hd->pwmp_save->storage.valvepos_de[i - 1]; + control_value = mode_pwmp_hd->pwmp_save->valvepos_de[i - 1]; } } else @@ -271,12 +271,12 @@ static float32_t convert_target_to_controlvalue() if (mode_pwmp_hd->action == INFLATE) { tmp = ((mode_pwmp_hd->control.ctrl_target - (i * 10)) / (10)); - control_value = (tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[i - 1]) + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[i - 1]; + control_value = (tmp * mode_pwmp_hd->pwmp_save->valvepos_in_k[i - 1]) + mode_pwmp_hd->pwmp_save->valvepos_in_b[i - 1]; } else if (mode_pwmp_hd->action == DEFLATE) { tmp = ((mode_pwmp_hd->control.ctrl_target - (i * 10)) / (10)); - control_value = (tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_de_k[i - 1]) + mode_pwmp_hd->pwmp_save->storage.valvepos_de_b[i - 1]; + control_value = (tmp * mode_pwmp_hd->pwmp_save->valvepos_de_k[i - 1]) + mode_pwmp_hd->pwmp_save->valvepos_de_b[i - 1]; } } @@ -331,26 +331,26 @@ static void calculate_pwmp_stable_range(float32 *target, float32 *err) if (mode_pwmp_hd->action == INFLATE) { tmp = ((up_value - (up * 10.0)) / (10.0)); - mode_pwmp_hd->control.pwmp_max_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[up - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[up - 1]; + mode_pwmp_hd->control.pwmp_max_stable = tmp * mode_pwmp_hd->pwmp_save->valvepos_in_k[up - 1] + mode_pwmp_hd->pwmp_save->valvepos_in_b[up - 1]; tmp = ((down_value - (down * 10.0)) / (10.0)); - mode_pwmp_hd->control.pwmp_min_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[down - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[down - 1]; + mode_pwmp_hd->control.pwmp_min_stable = tmp * mode_pwmp_hd->pwmp_save->valvepos_in_k[down - 1] + mode_pwmp_hd->pwmp_save->valvepos_in_b[down - 1]; tmp = ((*target - (i * 10.0)) / (10.0)); - mode_pwmp_hd->valvepos_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[i - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[i - 1]; + mode_pwmp_hd->valvepos_stable = tmp * mode_pwmp_hd->pwmp_save->valvepos_in_k[i - 1] + mode_pwmp_hd->pwmp_save->valvepos_in_b[i - 1]; } else if (mode_pwmp_hd->action == DEFLATE) { // tmp = ((up_value - (up * 10.0)) / (10.0)); - // mode_pwmp_hd->control.pwmp_max_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_de_k[up - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_de_b[up - 1]; + // mode_pwmp_hd->control.pwmp_max_stable = tmp * mode_pwmp_hd->pwmp_save->valvepos_de_k[up - 1] + mode_pwmp_hd->pwmp_save->valvepos_de_b[up - 1]; // tmp = ((down_value - (down * 10.0)) / (10.0)); - // mode_pwmp_hd->control.pwmp_min_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_de_k[down - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_de_b[down - 1]; + // mode_pwmp_hd->control.pwmp_min_stable = tmp * mode_pwmp_hd->pwmp_save->valvepos_de_k[down - 1] + mode_pwmp_hd->pwmp_save->valvepos_de_b[down - 1]; // tmp = ((*target - (i * 10.0)) / (10.0)); - // mode_pwmp_hd->valvepos_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_de_k[i - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_de_b[i - 1]; + // mode_pwmp_hd->valvepos_stable = tmp * mode_pwmp_hd->pwmp_save->valvepos_de_k[i - 1] + mode_pwmp_hd->pwmp_save->valvepos_de_b[i - 1]; tmp = ((up_value - (up * 10.0)) / (10.0)); - mode_pwmp_hd->control.pwmp_max_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[up - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[up - 1]; + mode_pwmp_hd->control.pwmp_max_stable = tmp * mode_pwmp_hd->pwmp_save->valvepos_in_k[up - 1] + mode_pwmp_hd->pwmp_save->valvepos_in_b[up - 1]; tmp = ((down_value - (down * 10.0)) / (10.0)); - mode_pwmp_hd->control.pwmp_min_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[down - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[down - 1]; + mode_pwmp_hd->control.pwmp_min_stable = tmp * mode_pwmp_hd->pwmp_save->valvepos_in_k[down - 1] + mode_pwmp_hd->pwmp_save->valvepos_in_b[down - 1]; tmp = ((*target - (i * 10.0)) / (10.0)); - mode_pwmp_hd->valvepos_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[i - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[i - 1]; + mode_pwmp_hd->valvepos_stable = tmp * mode_pwmp_hd->pwmp_save->valvepos_in_k[i - 1] + mode_pwmp_hd->pwmp_save->valvepos_in_b[i - 1]; } if (fabs(*err) <= 0.5) { @@ -416,7 +416,7 @@ execute_rsp_hd_t *execute_dac(execute_plan_hd_e plan) static execute_rsp_hd_t *execute_dac_plan1() { static float32 Control_diff; - Control_diff = mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin - mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; + Control_diff = mode_pwmp_hd->pwmp_save->pwmp_max_origin - mode_pwmp_hd->pwmp_save->pwmp_min_origin; float32 out = 0.0; /*判断此时的充排气状态*/ @@ -440,39 +440,39 @@ static execute_rsp_hd_t *execute_dac_plan1() if (mode_pwmp_hd->process_state == PWMP_HD_PROCESS_ADJUST) { if (fabs(mode_pwmp_hd->control.real_error) >= 5.7) - { // 对PID输出结果进行归一化处理 - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_first) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first; + { // 对PID输出结果进行归一化处理 + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin + Control_diff * index_max_first) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_first); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_first; } else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) >= 1) - { // 对PID输出结果进行归一化处理 - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_second) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second; + { // 对PID输出结果进行归一化处理 + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin + Control_diff * index_max_second) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_second); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_second; } else { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin; } } else { if (fabs(mode_pwmp_hd->control.real_error) >= 5.7) - { // 对PID输出结果进行归一化处理 - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_first) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first; + { // 对PID输出结果进行归一化处理 + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin + Control_diff * index_max_first) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_first); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_first; mode_pwmp_hd->pid_mode = INAUTO_C; } else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) >= 1) - { // 对PID输出结果进行归一化处理 - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_second) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second; + { // 对PID输出结果进行归一化处理 + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin + Control_diff * index_max_second) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_second); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_second; mode_pwmp_hd->pid_mode = INAUTO_C; } else if (fabs(mode_pwmp_hd->control.real_error) < 1 && fabs(mode_pwmp_hd->control.real_error) > 0.7) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin; mode_pwmp_hd->pid_mode = INAUTO_C; } else @@ -485,17 +485,17 @@ static execute_rsp_hd_t *execute_dac_plan1() float32 index = fabs(1 - exp(-(pow(mode_pwmp_hd->control.real_error, 2) - 1))); if (fabs(mode_pwmp_hd->control.real_error) >= 1) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin + Control_diff * index) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index; } else if (fabs(mode_pwmp_hd->control.real_error) > 0.99 && fabs(mode_pwmp_hd->control.real_error) < 1) { - out = mode_pwmp_hd->pwmp_save->storage.startup_value; + out = mode_pwmp_hd->pwmp_save->startup_value; } else if (fabs(mode_pwmp_hd->control.real_error) <= 0.99) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 - out += (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围 + out += (mode_pwmp_hd->pwmp_save->pwmp_min_origin); } #endif } @@ -513,36 +513,36 @@ static execute_rsp_hd_t *execute_dac_plan1() static float32 index_max_third = 0; if (fabs(mode_pwmp_hd->control.real_error) >= 5.7) { // 对PID输出结果进行归一化处理 - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_first) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin + Control_diff * index_max_first) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_first); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_first; } else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) >= 1) { // 对PID输出结果进行归一化处理 - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_second) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin + Control_diff * index_max_second) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_second); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_second; } else { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin - Control_diff * index_max_third) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin + Control_diff * index_min_third); // 映射实际控制器的范围 - out += (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin + Control_diff * index_min_third); + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin - Control_diff * index_max_third) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin + Control_diff * index_min_third); // 映射实际控制器的范围 + out += (mode_pwmp_hd->pwmp_save->pwmp_min_origin + Control_diff * index_min_third); } #else float32 index = fabs(1 - exp(-(pow(mode_pwmp_hd->control.real_error, 2) - 1))); if (fabs(mode_pwmp_hd->control.real_error) >= 1) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin + Control_diff * index) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index; } else if (fabs(mode_pwmp_hd->control.real_error) > 0.99 && fabs(mode_pwmp_hd->control.real_error) < 1) { - out = mode_pwmp_hd->pwmp_save->storage.startup_value; + out = mode_pwmp_hd->pwmp_save->startup_value; } else if (fabs(mode_pwmp_hd->control.real_error) <= 0.99) { if (mode_pwmp_hd_adjust->adjust_state == PWMP_HD_ADJUST_STEP_BY_10_TO_100 || mode_pwmp_hd_adjust->adjust_state == PWMP_HD_ADJUST_STEP_BY_10_TO_0) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 - out += (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围 + out += (mode_pwmp_hd->pwmp_save->pwmp_min_origin); } else { @@ -568,7 +568,7 @@ static execute_rsp_hd_t *execute_dac_plan2() { float32 out = 0.0; static float32 Control_diff; - Control_diff = mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin - mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; + Control_diff = mode_pwmp_hd->pwmp_save->pwmp_max_origin - mode_pwmp_hd->pwmp_save->pwmp_min_origin; /*判断此时的充排气状态*/ inflate_or_deflate(); /*获取目标值对应的控制值大小*/ @@ -593,19 +593,19 @@ static execute_rsp_hd_t *execute_dac_plan2() static float32 index_min_second = 0; static float32 index_max_second = 0; if (fabs(mode_pwmp_hd->control.real_error) >= 5.7) - { // 对PID输出结果进行归一化处理 - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_first) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first; + { // 对PID输出结果进行归一化处理 + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin + Control_diff * index_max_first) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_first); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_first; } else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) >= 1) - { // 对PID输出结果进行归一化处理 - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_second) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second; + { // 对PID输出结果进行归一化处理 + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin + Control_diff * index_max_second) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_second); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_second; } else { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin; } } else @@ -615,20 +615,20 @@ static execute_rsp_hd_t *execute_dac_plan2() { if (mode_pwmp_hd->action == INFLATE) { - if (fabs(mode_pwmp_hd->control.real_error) >= mode_pwmp_hd->pwmp_save->storage.overimpulse_in) + if (fabs(mode_pwmp_hd->control.real_error) >= mode_pwmp_hd->pwmp_save->overimpulse_in) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.3) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin * 1.3) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin; } - else if (fabs(mode_pwmp_hd->control.real_error) >= 5.7 && fabs(mode_pwmp_hd->control.real_error) < mode_pwmp_hd->pwmp_save->storage.overimpulse_in) + else if (fabs(mode_pwmp_hd->control.real_error) >= 5.7 && fabs(mode_pwmp_hd->control.real_error) < mode_pwmp_hd->pwmp_save->overimpulse_in) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.1) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin * 1.1) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin; } else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) > 0.5) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin; } else if (fabs(mode_pwmp_hd->control.real_error) <= 0.5) { @@ -638,20 +638,20 @@ static execute_rsp_hd_t *execute_dac_plan2() } else if (mode_pwmp_hd->action == DEFLATE) { - if (fabs(mode_pwmp_hd->control.real_error) >= mode_pwmp_hd->pwmp_save->storage.overimpulse_ex) + if (fabs(mode_pwmp_hd->control.real_error) >= mode_pwmp_hd->pwmp_save->overimpulse_ex) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin * 0.8); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin * 0.8; } - else if (fabs(mode_pwmp_hd->control.real_error) >= 5.7 && fabs(mode_pwmp_hd->control.real_error) < mode_pwmp_hd->pwmp_save->storage.overimpulse_ex) + else if (fabs(mode_pwmp_hd->control.real_error) >= 5.7 && fabs(mode_pwmp_hd->control.real_error) < mode_pwmp_hd->pwmp_save->overimpulse_ex) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.95); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.95; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin * 0.95); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin * 0.95; } else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) > 0.5) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin; } else if (fabs(mode_pwmp_hd->control.real_error) <= 0.5) { @@ -662,20 +662,20 @@ static execute_rsp_hd_t *execute_dac_plan2() } else { - if (fabs(mode_pwmp_hd->control.real_error) >= mode_pwmp_hd->pwmp_save->storage.overimpulse_in) + if (fabs(mode_pwmp_hd->control.real_error) >= mode_pwmp_hd->pwmp_save->overimpulse_in) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.3) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin * 1.3) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin; } - else if (fabs(mode_pwmp_hd->control.real_error) >= 5.7 && fabs(mode_pwmp_hd->control.real_error) < mode_pwmp_hd->pwmp_save->storage.overimpulse_in) + else if (fabs(mode_pwmp_hd->control.real_error) >= 5.7 && fabs(mode_pwmp_hd->control.real_error) < mode_pwmp_hd->pwmp_save->overimpulse_in) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.1) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin * 1.1) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin; } else if (fabs(mode_pwmp_hd->control.real_error) < 5.7) { - out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 - out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; + out *= (mode_pwmp_hd->pwmp_save->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围 + out += mode_pwmp_hd->pwmp_save->pwmp_min_origin; } } } @@ -768,8 +768,8 @@ static void pwmp_adjust_hd_idle(uint8_t *state, mode_pwmp_hd_adjust_state_e next { mode_pwmp_hd->auto_tune_state = PWMP_HD_ADJUST_RESULT_TUNING; sys_millis_reset(); - osel_memset((uint8_t *)&mode_pwmp_hd->pwmp_save->storage, 0, sizeof(mode_pwmp_hd_storage_data_t)); - mode_pwmp_hd->pwmp_save->storage.tuned_flag = TUNED_ONGOING; + osel_memset((uint8_t *)mode_pwmp_hd->pwmp_save, 0, sizeof(mode_pwmp_hd_storage_data_t)); + mode_pwmp_hd->pwmp_save->tuned_flag = TUNED_ONGOING; /*为指针开辟存储空间*/ if (mode_pwmp_hd_adjust == NULL) { @@ -1368,45 +1368,45 @@ static void pwmp_adjust_hd_calculate(uint8_t *state, mode_pwmp_hd_adjust_state_e if (!FSM_IS_WAIT(*state)) { /*行程上下限*/ - mode_pwmp_hd->pwmp_save->storage.trip_0 = mode_pwmp_hd_adjust->adc_record_0; - mode_pwmp_hd->pwmp_save->storage.trip_100 = mode_pwmp_hd_adjust->adc_record_2; - mode_pwmp_hd->pwmp_save->storage.ad_diff = ABS(mode_pwmp_hd->pwmp_save->storage.trip_0 - mode_pwmp_hd->pwmp_save->storage.trip_100); + mode_pwmp_hd->pwmp_save->trip_0 = mode_pwmp_hd_adjust->adc_record_0; + mode_pwmp_hd->pwmp_save->trip_100 = mode_pwmp_hd_adjust->adc_record_2; + mode_pwmp_hd->pwmp_save->ad_diff = ABS(mode_pwmp_hd->pwmp_save->trip_0 - mode_pwmp_hd->pwmp_save->trip_100); /*控制区间*/ - mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin = mode_pwmp_hd_adjust->arr_record_2; - mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin = mode_pwmp_hd_adjust->arr_record_0; - mode_pwmp_hd->pwmp_save->storage.arr_diff = ABS(mode_pwmp_hd_adjust->arr_record_2 - mode_pwmp_hd_adjust->arr_record_0); - mode_pwmp_hd->pwmp_save->storage.pwmp_max = mode_pwmp_hd_adjust->arr_record_2 + (mode_pwmp_hd->pwmp_save->storage.arr_diff); - mode_pwmp_hd->pwmp_save->storage.pwmp_min = mode_pwmp_hd_adjust->arr_record_0 - (mode_pwmp_hd->pwmp_save->storage.arr_diff); + mode_pwmp_hd->pwmp_save->pwmp_max_origin = mode_pwmp_hd_adjust->arr_record_2; + mode_pwmp_hd->pwmp_save->pwmp_min_origin = mode_pwmp_hd_adjust->arr_record_0; + mode_pwmp_hd->pwmp_save->arr_diff = ABS(mode_pwmp_hd_adjust->arr_record_2 - mode_pwmp_hd_adjust->arr_record_0); + mode_pwmp_hd->pwmp_save->pwmp_max = mode_pwmp_hd_adjust->arr_record_2 + (mode_pwmp_hd->pwmp_save->arr_diff); + mode_pwmp_hd->pwmp_save->pwmp_min = mode_pwmp_hd_adjust->arr_record_0 - (mode_pwmp_hd->pwmp_save->arr_diff); /*启动值*/ - mode_pwmp_hd->pwmp_save->storage.startup_value = mode_pwmp_hd_adjust->arr_record_1; + mode_pwmp_hd->pwmp_save->startup_value = mode_pwmp_hd_adjust->arr_record_1; /*0与100阀位位置*/ - mode_pwmp_hd->pwmp_save->storage.current0 = mode_pwmp_hd_adjust->current_0; - mode_pwmp_hd->pwmp_save->storage.current100 = mode_pwmp_hd_adjust->current_100; + mode_pwmp_hd->pwmp_save->current0 = mode_pwmp_hd_adjust->current_0; + mode_pwmp_hd->pwmp_save->current100 = mode_pwmp_hd_adjust->current_100; /*全开及全关时间*/ - mode_pwmp_hd->pwmp_save->storage.all_open_time = mode_pwmp_hd_adjust->all_open_time; - mode_pwmp_hd->pwmp_save->storage.all_close_time = mode_pwmp_hd_adjust->all_close_time; - mode_pwmp_hd->pwmp_save->storage.all_open_time_full = mode_pwmp_hd_adjust->all_open_time_full; - mode_pwmp_hd->pwmp_save->storage.all_close_time_full = mode_pwmp_hd_adjust->all_close_time_full; + mode_pwmp_hd->pwmp_save->all_open_time = mode_pwmp_hd_adjust->all_open_time; + mode_pwmp_hd->pwmp_save->all_close_time = mode_pwmp_hd_adjust->all_close_time; + mode_pwmp_hd->pwmp_save->all_open_time_full = mode_pwmp_hd_adjust->all_open_time_full; + mode_pwmp_hd->pwmp_save->all_close_time_full = mode_pwmp_hd_adjust->all_close_time_full; /*判断调节阀类型(气开/气关),对最低行程和最高行程进行标定*/ if (udevice.zero_power_condition == VALVE_OPEN) { - mode_pwmp_hd->pwmp_save->storage.trip_100 = mode_pwmp_hd->pwmp_save->storage.trip_100; - mode_pwmp_hd->pwmp_save->storage.trip_0 = mode_pwmp_hd->pwmp_save->storage.trip_0; + mode_pwmp_hd->pwmp_save->trip_100 = mode_pwmp_hd->pwmp_save->trip_100; + mode_pwmp_hd->pwmp_save->trip_0 = mode_pwmp_hd->pwmp_save->trip_0; } else { - uint16_t tmp = mode_pwmp_hd->pwmp_save->storage.trip_100; - mode_pwmp_hd->pwmp_save->storage.trip_100 = mode_pwmp_hd->pwmp_save->storage.trip_0; - mode_pwmp_hd->pwmp_save->storage.trip_0 = tmp; + uint16_t tmp = mode_pwmp_hd->pwmp_save->trip_100; + mode_pwmp_hd->pwmp_save->trip_100 = mode_pwmp_hd->pwmp_save->trip_0; + mode_pwmp_hd->pwmp_save->trip_0 = tmp; } // 保存安装方向 - if (mode_pwmp_hd->pwmp_save->storage.trip_100 > mode_pwmp_hd->pwmp_save->storage.trip_0) // 上大下小,正装 + if (mode_pwmp_hd->pwmp_save->trip_100 > mode_pwmp_hd->pwmp_save->trip_0) // 上大下小,正装 { udevice.invert_feedback = 1; } @@ -1415,10 +1415,10 @@ static void pwmp_adjust_hd_calculate(uint8_t *state, mode_pwmp_hd_adjust_state_e udevice.invert_feedback = 0; } - udevice.pos0_travel_vol = mode_pwmp_hd->pwmp_save->storage.trip_0; - udevice.pos100_travel_vol = mode_pwmp_hd->pwmp_save->storage.trip_100; - udevice.output_min = mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; - udevice.output_max = mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin; + udevice.pos0_travel_vol = mode_pwmp_hd->pwmp_save->trip_0; + udevice.pos100_travel_vol = mode_pwmp_hd->pwmp_save->trip_100; + udevice.output_min = mode_pwmp_hd->pwmp_save->pwmp_min_origin; + udevice.output_max = mode_pwmp_hd->pwmp_save->pwmp_max_origin; calib_parapos_perent(); mode_pwmp_hd_adjust->adjust_state = (mode_pwmp_hd_adjust_state_e)*state; @@ -1633,9 +1633,9 @@ static void pwmp_adjust_hd_pid_calculate(uint8_t *state, mode_pwmp_hd_adjust_sta default: break; } - mode_pwmp_hd->pwmp_save->storage.kp = fabs(pid_autotune_hd->p_auto_hd); - mode_pwmp_hd->pwmp_save->storage.ki = fabs(pid_autotune_hd->i_auto_hd); - mode_pwmp_hd->pwmp_save->storage.kd = fabs(pid_autotune_hd->d_auto_hd); + mode_pwmp_hd->pwmp_save->kp = fabs(pid_autotune_hd->p_auto_hd); + mode_pwmp_hd->pwmp_save->ki = fabs(pid_autotune_hd->i_auto_hd); + mode_pwmp_hd->pwmp_save->kd = fabs(pid_autotune_hd->d_auto_hd); *state = next_state; // 将状态切换 } @@ -1643,15 +1643,15 @@ static void pwmp_adjust_hd_pid_calculate(uint8_t *state, mode_pwmp_hd_adjust_sta static void pwmp_adjust_hd_save(uint8_t *state, mode_pwmp_hd_adjust_state_e next_state) { *state = next_state; - if (mode_pwmp_hd->pwmp_save->storage.tuned_flag == TUNED_ONGOING) + if (mode_pwmp_hd->pwmp_save->tuned_flag == TUNED_ONGOING) { - mode_pwmp_hd->pwmp_save->storage.tuned_flag = TUNED_SUCCESS; + mode_pwmp_hd->pwmp_save->tuned_flag = TUNED_SUCCESS; mode_pwmp_hd->auto_tune_state = PWMP_HD_ADJUST_RESULT_SUCCESS; pwmp_public_params_update(); } else { - mode_pwmp_hd->pwmp_save->storage.tuned_flag = TUNED_FAILED; + mode_pwmp_hd->pwmp_save->tuned_flag = TUNED_FAILED; } mode_pwmp_hd->params_save_cb(); } @@ -1688,22 +1688,22 @@ static void pwmp_hd_adjust_step_by_10_to_100(uint8_t *state, mode_pwmp_hd_adjust { if (udevice.zero_power_condition == VALVE_OPEN) { - pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8); + pdctrl_out(mode_pwmp_hd->pwmp_save->pwmp_min_origin * 0.8); } else { - pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.5); + pdctrl_out(mode_pwmp_hd->pwmp_save->pwmp_max_origin * 1.5); } } else if (mode_pwmp_hd_adjust->ctrl_target == 100) { if (udevice.zero_power_condition == VALVE_OPEN) { - pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 1.5); + pdctrl_out(mode_pwmp_hd->pwmp_save->pwmp_min_origin * 1.5); } else { - pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 0.8); + pdctrl_out(mode_pwmp_hd->pwmp_save->pwmp_max_origin * 0.8); } } else @@ -1790,11 +1790,11 @@ static void pwmp_hd_adjust_step_by_10_to_0(uint8_t *state, mode_pwmp_hd_adjust_s { if (mode_pwmp_hd_adjust->ctrl_target == 0) { - pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8); + pdctrl_out(mode_pwmp_hd->pwmp_save->pwmp_min_origin * 0.8); } else if (mode_pwmp_hd_adjust->ctrl_target == 100) { - pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.5); + pdctrl_out(mode_pwmp_hd->pwmp_save->pwmp_max_origin * 1.5); } else { @@ -1838,19 +1838,19 @@ static void pwmp_hd_adjust_valvepos_calculate(uint8_t *state, mode_pwmp_hd_adjus { *state = next_state; mode_pwmp_hd_adjust->overimpulse_ex = mode_pwmp_hd_adjust->overimpulse_in; - mode_pwmp_hd->pwmp_save->storage.overimpulse_in = mode_pwmp_hd_adjust->overimpulse_in; - mode_pwmp_hd->pwmp_save->storage.overimpulse_ex = mode_pwmp_hd_adjust->overimpulse_ex; + mode_pwmp_hd->pwmp_save->overimpulse_in = mode_pwmp_hd_adjust->overimpulse_in; + mode_pwmp_hd->pwmp_save->overimpulse_ex = mode_pwmp_hd_adjust->overimpulse_ex; for (unsigned int i = 0; i < 9; i++) { - mode_pwmp_hd->pwmp_save->storage.valvepos_in[i] = mode_pwmp_hd_adjust->valvepos.valvepos_in[i]; - // mode_pwmp_hd->pwmp_save->storage.valvepos_de[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i]; + mode_pwmp_hd->pwmp_save->valvepos_in[i] = mode_pwmp_hd_adjust->valvepos.valvepos_in[i]; + // mode_pwmp_hd->pwmp_save->valvepos_de[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i]; } for (unsigned int i = 0; i < 8; i++) { - mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[i] = mode_pwmp_hd_adjust->valvepos.valvepos_in[i + 1] - mode_pwmp_hd_adjust->valvepos.valvepos_in[i]; - // mode_pwmp_hd->pwmp_save->storage.valvepos_de_k[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i + 1] - mode_pwmp_hd_adjust->valvepos.valvepos_de[i]; - mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[i] = mode_pwmp_hd_adjust->valvepos.valvepos_in[i]; - // mode_pwmp_hd->pwmp_save->storage.valvepos_de_b[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i]; + mode_pwmp_hd->pwmp_save->valvepos_in_k[i] = mode_pwmp_hd_adjust->valvepos.valvepos_in[i + 1] - mode_pwmp_hd_adjust->valvepos.valvepos_in[i]; + // mode_pwmp_hd->pwmp_save->valvepos_de_k[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i + 1] - mode_pwmp_hd_adjust->valvepos.valvepos_de[i]; + mode_pwmp_hd->pwmp_save->valvepos_in_b[i] = mode_pwmp_hd_adjust->valvepos.valvepos_in[i]; + // mode_pwmp_hd->pwmp_save->valvepos_de_b[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i]; } mode_pwmp_hd->params_save_cb(); } @@ -2434,25 +2434,25 @@ void mode_pwmp_hd_process(void) { // if (udevice.zero_power_condition == VALVE_OPEN) // { - // pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8); + // pdctrl_out(mode_pwmp_hd->pwmp_save->pwmp_min_origin * 0.8); // } // else // { - // pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.2); + // pdctrl_out(mode_pwmp_hd->pwmp_save->pwmp_max_origin * 1.2); // } - pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8); + pdctrl_out(mode_pwmp_hd->pwmp_save->pwmp_min_origin * 0.8); } else if (rt_data.loop_current > 19.5) { // if (udevice.zero_power_condition == VALVE_OPEN) // { - // pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.2); + // pdctrl_out(mode_pwmp_hd->pwmp_save->pwmp_max_origin * 1.2); // } // else // { - // pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8); + // pdctrl_out(mode_pwmp_hd->pwmp_save->pwmp_min_origin * 0.8); // } - pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.2); + pdctrl_out(mode_pwmp_hd->pwmp_save->pwmp_max_origin * 1.2); } else if (rt_data.loop_current >= 4.5 && rt_data.loop_current <= 19.5) { @@ -2496,7 +2496,7 @@ void mode_pwmp_hd_process(void) //////////////////////////////*入口END*////////////////////////////////////////////////////// /*程序初始化*/ -void mode_pwmp_hd_init(mode_interface_req_t *req, uint16_t positioner_model, mode_pwmp_hd_params_u *params, void (*params_save_cb)(void)) +void mode_pwmp_hd_init(mode_interface_req_t *req, uint16_t positioner_model, mode_pwmp_hd_storage_data_t *params, void (*params_save_cb)(void)) { DBG_ASSERT(req != NULL __DBG_LINE); DBG_ASSERT(params != NULL __DBG_LINE); // 断言检查 diff --git a/User/application/mode/mode_pwmp_hd.h b/User/application/mode/mode_pwmp_hd.h index 7d3a414..684f114 100644 --- a/User/application/mode/mode_pwmp_hd.h +++ b/User/application/mode/mode_pwmp_hd.h @@ -94,14 +94,6 @@ typedef struct uint16_t value; } mode_pwmp_hd_filter_t; -typedef union -{ - // - uint8_t data[300]; - // 自定义数据结构 - mode_pwmp_hd_storage_data_t storage; -} mode_pwmp_hd_params_u; - typedef enum { INAUTO_C, // PID控制器开始模式 @@ -130,7 +122,7 @@ typedef struct mode_pwmp_hd_control_t control; mode_pwmp_hd_filter_t filter; - mode_pwmp_hd_params_u *pwmp_save; + mode_pwmp_hd_storage_data_t *pwmp_save; void (*params_save_cb)(void); } mode_pwmp_hd_t; @@ -370,7 +362,7 @@ typedef struct } execute_rsp_hd_t; /////////////////////////////////////////*控制算法END*//////////////////////////////////////// -void mode_pwmp_hd_init(mode_interface_req_t *req, uint16_t positioner_model, mode_pwmp_hd_params_u *params, void (*params_save_cb)(void)); +void mode_pwmp_hd_init(mode_interface_req_t *req, uint16_t positioner_model, mode_pwmp_hd_storage_data_t *params, void (*params_save_cb)(void)); void mode_pwmp_hd_dinit(void); void mode_pwmp_hd_process(void); void pwmp_hd_process_state_set(mode_pwmp_hd_process_state_e state);