This commit is contained in:
Zps 2024-11-26 17:04:15 +08:00
commit 88e7c6ff77
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)
{
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); // 断言检查

View File

@ -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);