更新存储数据

This commit is contained in:
许晟昊 2024-11-26 15:22:04 +08:00
parent cbacb87051
commit 8c2face088
3 changed files with 166 additions and 174 deletions

Binary file not shown.

View File

@ -52,11 +52,11 @@ static void _adjust_stop(void)
static uint8_t _adjust_result(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; 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; 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) static void _adjust_data(mode_adjust_data_t *data)
{ {
data->pos0 = mode_pwmp_hd->pwmp_save->storage.trip_0; ///< 位置0 ad data->pos0 = mode_pwmp_hd->pwmp_save->trip_0; ///< 位置0 ad
data->pos100 = mode_pwmp_hd->pwmp_save->storage.trip_100; ///< 位置100 ad data->pos100 = mode_pwmp_hd->pwmp_save->trip_100; ///< 位置100 ad
data->pot0 = mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; ///< 位置0 输出 data->pot0 = mode_pwmp_hd->pwmp_save->pwmp_min_origin; ///< 位置0 输出
data->pot100 = mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin; ///< 位置100 输出 data->pot100 = mode_pwmp_hd->pwmp_save->pwmp_max_origin; ///< 位置100 输出
data->current0 = mode_pwmp_hd->pwmp_save->storage.current0; ///< 位置0 电流(毫安放大100倍, 0.01ma=1) data->current0 = mode_pwmp_hd->pwmp_save->current0; ///< 位置0 电流(毫安放大100倍, 0.01ma=1)
data->current100 = mode_pwmp_hd->pwmp_save->storage.current100; ///< 位置100 电流(毫安,放大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->storage.all_open_time; ///< 全开时间(秒) data->open_time = mode_pwmp_hd->pwmp_save->all_open_time; ///< 全开时间(秒)
data->close_time = mode_pwmp_hd->pwmp_save->storage.all_close_time; ///< 全关时间(秒) data->close_time = mode_pwmp_hd->pwmp_save->all_close_time; ///< 全关时间(秒)
data->kp = mode_pwmp_hd->pwmp_save->storage.kp; ///< pid 比例系数 data->kp = mode_pwmp_hd->pwmp_save->kp; ///< pid 比例系数
data->ki = mode_pwmp_hd->pwmp_save->storage.ki; ///< pid 积分系数 data->ki = mode_pwmp_hd->pwmp_save->ki; ///< pid 积分系数
data->kd = mode_pwmp_hd->pwmp_save->storage.kd; ///< pid 微分系数 data->kd = mode_pwmp_hd->pwmp_save->kd; ///< pid 微分系数
} }
static BOOL _control_idle(void) static BOOL _control_idle(void)
@ -187,39 +187,39 @@ static void pwmp_control_update(filter_e type)
/*PID参数获取*/ /*PID参数获取*/
static float32 get_pwmp_hd_control_kp(void) 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->kp * 6;
return mode_pwmp_hd->pwmp_save->storage.kp * 15; return mode_pwmp_hd->pwmp_save->kp * 15;
} }
else 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) 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) 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) 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 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 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() static void pwmp_public_params_update()
{ {
udevice.pos0_travel_vol = mode_pwmp_hd->pwmp_save->storage.trip_0; udevice.pos0_travel_vol = mode_pwmp_hd->pwmp_save->trip_0;
udevice.pos100_travel_vol = mode_pwmp_hd->pwmp_save->storage.trip_100; udevice.pos100_travel_vol = mode_pwmp_hd->pwmp_save->trip_100;
udevice.output_min = mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; udevice.output_min = mode_pwmp_hd->pwmp_save->pwmp_min_origin;
udevice.output_max = mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin; udevice.output_max = mode_pwmp_hd->pwmp_save->pwmp_max_origin;
udevice.spid_kp = mode_pwmp_hd->pwmp_save->storage.kp; udevice.spid_kp = mode_pwmp_hd->pwmp_save->kp;
udevice.spid_ki = mode_pwmp_hd->pwmp_save->storage.ki; udevice.spid_ki = mode_pwmp_hd->pwmp_save->ki;
udevice.spid_kd = mode_pwmp_hd->pwmp_save->storage.kd; udevice.spid_kd = mode_pwmp_hd->pwmp_save->kd;
udevice.tuned_flag = mode_pwmp_hd->pwmp_save->storage.prov_flag; udevice.tuned_flag = mode_pwmp_hd->pwmp_save->prov_flag;
} }
//////////////////////////////*控制BEGIN*////////////////////////////////////////////////////// //////////////////////////////*控制BEGIN*//////////////////////////////////////////////////////
@ -259,11 +259,11 @@ static float32_t convert_target_to_controlvalue()
{ {
if (mode_pwmp_hd->action == INFLATE) 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) 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 else
@ -271,12 +271,12 @@ static float32_t convert_target_to_controlvalue()
if (mode_pwmp_hd->action == INFLATE) if (mode_pwmp_hd->action == INFLATE)
{ {
tmp = ((mode_pwmp_hd->control.ctrl_target - (i * 10)) / (10)); 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) else if (mode_pwmp_hd->action == DEFLATE)
{ {
tmp = ((mode_pwmp_hd->control.ctrl_target - (i * 10)) / (10)); 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) if (mode_pwmp_hd->action == INFLATE)
{ {
tmp = ((up_value - (up * 10.0)) / (10.0)); 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)); 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)); 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) else if (mode_pwmp_hd->action == DEFLATE)
{ {
// tmp = ((up_value - (up * 10.0)) / (10.0)); // 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)); // 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)); // 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)); 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)); 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)); 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) 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 execute_rsp_hd_t *execute_dac_plan1()
{ {
static float32 Control_diff; 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; 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 (mode_pwmp_hd->process_state == PWMP_HD_PROCESS_ADJUST)
{ {
if (fabs(mode_pwmp_hd->control.real_error) >= 5.7) if (fabs(mode_pwmp_hd->control.real_error) >= 5.7)
{ // 对PID输出结果进行归一化处理 { // 对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->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->storage.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) else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) >= 1)
{ // 对PID输出结果进行归一化处理 { // 对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->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->storage.pwmp_min_origin - Control_diff * index_min_second; out += mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_second;
} }
else 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->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; out += mode_pwmp_hd->pwmp_save->pwmp_min_origin;
} }
} }
else else
{ {
if (fabs(mode_pwmp_hd->control.real_error) >= 5.7) if (fabs(mode_pwmp_hd->control.real_error) >= 5.7)
{ // 对PID输出结果进行归一化处理 { // 对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->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->storage.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; 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) else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) >= 1)
{ // 对PID输出结果进行归一化处理 { // 对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->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->storage.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; 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) 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->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; out += mode_pwmp_hd->pwmp_save->pwmp_min_origin;
mode_pwmp_hd->pid_mode = INAUTO_C; mode_pwmp_hd->pid_mode = INAUTO_C;
} }
else 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))); float32 index = fabs(1 - exp(-(pow(mode_pwmp_hd->control.real_error, 2) - 1)));
if (fabs(mode_pwmp_hd->control.real_error) >= 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->pwmp_max_origin + Control_diff * index) - (mode_pwmp_hd->pwmp_save->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_min_origin - Control_diff * index;
} }
else if (fabs(mode_pwmp_hd->control.real_error) > 0.99 && fabs(mode_pwmp_hd->control.real_error) < 1) 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) 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->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围
out += (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); out += (mode_pwmp_hd->pwmp_save->pwmp_min_origin);
} }
#endif #endif
} }
@ -513,36 +513,36 @@ static execute_rsp_hd_t *execute_dac_plan1()
static float32 index_max_third = 0; static float32 index_max_third = 0;
if (fabs(mode_pwmp_hd->control.real_error) >= 5.7) if (fabs(mode_pwmp_hd->control.real_error) >= 5.7)
{ // 对PID输出结果进行归一化处理 { // 对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->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->storage.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) else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) >= 1)
{ // 对PID输出结果进行归一化处理 { // 对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->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->storage.pwmp_min_origin - Control_diff * index_min_second; out += mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_second;
} }
else 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->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->storage.pwmp_min_origin + Control_diff * index_min_third); out += (mode_pwmp_hd->pwmp_save->pwmp_min_origin + Control_diff * index_min_third);
} }
#else #else
float32 index = fabs(1 - exp(-(pow(mode_pwmp_hd->control.real_error, 2) - 1))); float32 index = fabs(1 - exp(-(pow(mode_pwmp_hd->control.real_error, 2) - 1)));
if (fabs(mode_pwmp_hd->control.real_error) >= 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->pwmp_max_origin + Control_diff * index) - (mode_pwmp_hd->pwmp_save->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_min_origin - Control_diff * index;
} }
else if (fabs(mode_pwmp_hd->control.real_error) > 0.99 && fabs(mode_pwmp_hd->control.real_error) < 1) 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) 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) 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->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围
out += (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); out += (mode_pwmp_hd->pwmp_save->pwmp_min_origin);
} }
else else
{ {
@ -568,7 +568,7 @@ static execute_rsp_hd_t *execute_dac_plan2()
{ {
float32 out = 0.0; float32 out = 0.0;
static float32 Control_diff; 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(); inflate_or_deflate();
/*获取目标值对应的控制值大小*/ /*获取目标值对应的控制值大小*/
@ -593,19 +593,19 @@ static execute_rsp_hd_t *execute_dac_plan2()
static float32 index_min_second = 0; static float32 index_min_second = 0;
static float32 index_max_second = 0; static float32 index_max_second = 0;
if (fabs(mode_pwmp_hd->control.real_error) >= 5.7) if (fabs(mode_pwmp_hd->control.real_error) >= 5.7)
{ // 对PID输出结果进行归一化处理 { // 对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->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->storage.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) else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) >= 1)
{ // 对PID输出结果进行归一化处理 { // 对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->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->storage.pwmp_min_origin - Control_diff * index_min_second; out += mode_pwmp_hd->pwmp_save->pwmp_min_origin - Control_diff * index_min_second;
} }
else 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->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; out += mode_pwmp_hd->pwmp_save->pwmp_min_origin;
} }
} }
else else
@ -615,20 +615,20 @@ static execute_rsp_hd_t *execute_dac_plan2()
{ {
if (mode_pwmp_hd->action == INFLATE) 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->pwmp_max_origin * 1.3) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.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->pwmp_max_origin * 1.1) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.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) 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->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; out += mode_pwmp_hd->pwmp_save->pwmp_min_origin;
} }
else if (fabs(mode_pwmp_hd->control.real_error) <= 0.5) 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) 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->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin * 0.8); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.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->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin * 0.95); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.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) 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->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; out += mode_pwmp_hd->pwmp_save->pwmp_min_origin;
} }
else if (fabs(mode_pwmp_hd->control.real_error) <= 0.5) else if (fabs(mode_pwmp_hd->control.real_error) <= 0.5)
{ {
@ -662,20 +662,20 @@ static execute_rsp_hd_t *execute_dac_plan2()
} }
else 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->pwmp_max_origin * 1.3) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.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->pwmp_max_origin * 1.1) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; out += mode_pwmp_hd->pwmp_save->pwmp_min_origin;
} }
else if (fabs(mode_pwmp_hd->control.real_error) < 5.7) 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->pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.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; mode_pwmp_hd->auto_tune_state = PWMP_HD_ADJUST_RESULT_TUNING;
sys_millis_reset(); sys_millis_reset();
osel_memset((uint8_t *)&mode_pwmp_hd->pwmp_save->storage, 0, sizeof(mode_pwmp_hd_storage_data_t)); osel_memset((uint8_t *)mode_pwmp_hd->pwmp_save, 0, sizeof(mode_pwmp_hd_storage_data_t));
mode_pwmp_hd->pwmp_save->storage.tuned_flag = TUNED_ONGOING; mode_pwmp_hd->pwmp_save->tuned_flag = TUNED_ONGOING;
/*为指针开辟存储空间*/ /*为指针开辟存储空间*/
if (mode_pwmp_hd_adjust == NULL) 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)) 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->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->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->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->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->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->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->pwmp_max = mode_pwmp_hd_adjust->arr_record_2 + (mode_pwmp_hd->pwmp_save->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_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阀位位置*/ /*0与100阀位位置*/
mode_pwmp_hd->pwmp_save->storage.current0 = mode_pwmp_hd_adjust->current_0; mode_pwmp_hd->pwmp_save->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->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->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->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->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_close_time_full = mode_pwmp_hd_adjust->all_close_time_full;
/*判断调节阀类型(气开/气关),对最低行程和最高行程进行标定*/ /*判断调节阀类型(气开/气关),对最低行程和最高行程进行标定*/
if (udevice.zero_power_condition == VALVE_OPEN) 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->trip_100 = mode_pwmp_hd->pwmp_save->trip_100;
mode_pwmp_hd->pwmp_save->storage.trip_0 = mode_pwmp_hd->pwmp_save->storage.trip_0; mode_pwmp_hd->pwmp_save->trip_0 = mode_pwmp_hd->pwmp_save->trip_0;
} }
else else
{ {
uint16_t tmp = mode_pwmp_hd->pwmp_save->storage.trip_100; uint16_t tmp = mode_pwmp_hd->pwmp_save->trip_100;
mode_pwmp_hd->pwmp_save->storage.trip_100 = mode_pwmp_hd->pwmp_save->storage.trip_0; mode_pwmp_hd->pwmp_save->trip_100 = mode_pwmp_hd->pwmp_save->trip_0;
mode_pwmp_hd->pwmp_save->storage.trip_0 = tmp; 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; 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.invert_feedback = 0;
} }
udevice.pos0_travel_vol = mode_pwmp_hd->pwmp_save->storage.trip_0; udevice.pos0_travel_vol = mode_pwmp_hd->pwmp_save->trip_0;
udevice.pos100_travel_vol = mode_pwmp_hd->pwmp_save->storage.trip_100; udevice.pos100_travel_vol = mode_pwmp_hd->pwmp_save->trip_100;
udevice.output_min = mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; udevice.output_min = mode_pwmp_hd->pwmp_save->pwmp_min_origin;
udevice.output_max = mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin; udevice.output_max = mode_pwmp_hd->pwmp_save->pwmp_max_origin;
calib_parapos_perent(); calib_parapos_perent();
mode_pwmp_hd_adjust->adjust_state = (mode_pwmp_hd_adjust_state_e)*state; 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: default:
break; break;
} }
mode_pwmp_hd->pwmp_save->storage.kp = fabs(pid_autotune_hd->p_auto_hd); mode_pwmp_hd->pwmp_save->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->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->kd = fabs(pid_autotune_hd->d_auto_hd);
*state = next_state; // 将状态切换 *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) static void pwmp_adjust_hd_save(uint8_t *state, mode_pwmp_hd_adjust_state_e next_state)
{ {
*state = 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; mode_pwmp_hd->auto_tune_state = PWMP_HD_ADJUST_RESULT_SUCCESS;
pwmp_public_params_update(); pwmp_public_params_update();
} }
else 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(); 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) 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 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) else if (mode_pwmp_hd_adjust->ctrl_target == 100)
{ {
if (udevice.zero_power_condition == VALVE_OPEN) 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 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 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) 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) 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 else
{ {
@ -1838,19 +1838,19 @@ static void pwmp_hd_adjust_valvepos_calculate(uint8_t *state, mode_pwmp_hd_adjus
{ {
*state = next_state; *state = next_state;
mode_pwmp_hd_adjust->overimpulse_ex = mode_pwmp_hd_adjust->overimpulse_in; 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->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_ex = mode_pwmp_hd_adjust->overimpulse_ex;
for (unsigned int i = 0; i < 9; i++) 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->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_de[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i];
} }
for (unsigned int i = 0; i < 8; 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->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->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->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_de_b[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i];
} }
mode_pwmp_hd->params_save_cb(); mode_pwmp_hd->params_save_cb();
} }
@ -2434,25 +2434,25 @@ void mode_pwmp_hd_process(void)
{ {
// if (udevice.zero_power_condition == VALVE_OPEN) // 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 // 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) else if (rt_data.loop_current > 19.5)
{ {
// if (udevice.zero_power_condition == VALVE_OPEN) // 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 // 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) 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*////////////////////////////////////////////////////// //////////////////////////////*入口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(req != NULL __DBG_LINE);
DBG_ASSERT(params != NULL __DBG_LINE); // 断言检查 DBG_ASSERT(params != NULL __DBG_LINE); // 断言检查

View File

@ -94,14 +94,6 @@ typedef struct
uint16_t value; uint16_t value;
} mode_pwmp_hd_filter_t; } 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 typedef enum
{ {
INAUTO_C, // PID控制器开始模式 INAUTO_C, // PID控制器开始模式
@ -130,7 +122,7 @@ typedef struct
mode_pwmp_hd_control_t control; mode_pwmp_hd_control_t control;
mode_pwmp_hd_filter_t filter; 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); void (*params_save_cb)(void);
} mode_pwmp_hd_t; } mode_pwmp_hd_t;
@ -370,7 +362,7 @@ typedef struct
} execute_rsp_hd_t; } execute_rsp_hd_t;
/////////////////////////////////////////*控制算法END*//////////////////////////////////////// /////////////////////////////////////////*控制算法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_dinit(void);
void mode_pwmp_hd_process(void); void mode_pwmp_hd_process(void);
void pwmp_hd_process_state_set(mode_pwmp_hd_process_state_e state); void pwmp_hd_process_state_set(mode_pwmp_hd_process_state_e state);