modify:调整变量

This commit is contained in:
许晟昊 2024-01-26 11:39:08 +08:00
parent 96e487b379
commit 3b35db3b48
9 changed files with 73 additions and 67 deletions

View File

@ -103,7 +103,7 @@
<bEvRecOn>1</bEvRecOn> <bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf> <bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf> <bTchkAxf>0</bTchkAxf>
<nTsel>4</nTsel> <nTsel>6</nTsel>
<sDll></sDll> <sDll></sDll>
<sDllPa></sDllPa> <sDllPa></sDllPa>
<sDlgDll></sDlgDll> <sDlgDll></sDlgDll>
@ -114,13 +114,13 @@
<tDlgDll></tDlgDll> <tDlgDll></tDlgDll>
<tDlgPa></tDlgPa> <tDlgPa></tDlgPa>
<tIfile></tIfile> <tIfile></tIfile>
<pMon>Segger\JL2CM3.dll</pMon> <pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt> </DebugOpt>
<TargetDriverDllRegistry> <TargetDriverDllRegistry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>DLGUARM</Key> <Key>DLGUARM</Key>
<Name>d</Name> <Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>

View File

@ -10,7 +10,7 @@
<TargetName>controller-v2</TargetName> <TargetName>controller-v2</TargetName>
<ToolsetNumber>0x4</ToolsetNumber> <ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName> <ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060061::V5.06 update 1 (build 61)::ARMCC</pCCUsed> <pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6> <uAC6>0</uAC6>
<TargetOption> <TargetOption>
<TargetCommonOption> <TargetCommonOption>

View File

@ -9,6 +9,7 @@
#ifndef __MODE_H__ #ifndef __MODE_H__
#define __MODE_H__ #define __MODE_H__
#include "lib.h" #include "lib.h"
#include "mode_def.h"
#include "mode_dac.h" #include "mode_dac.h"
#include "mode_pwm.h" #include "mode_pwm.h"
#include "mode_pwmp.h" #include "mode_pwmp.h"

View File

@ -0,0 +1,35 @@
#ifndef __MODE_DEF_H__
#define __MODE_DEF_H__
typedef enum
{
POSITION_CHANGE, // 位置发生变化
POSITION_NO_CHANGE, // 位置没变化,但是等待次数没到
POSITION_NO_CHANGE_FOREVER, // 位置不再发生变化
} valve_position_change_e; // 位置变化
typedef enum
{
VALUE_POSITION_MIN, // 位置值最小
VALUE_POSITION_MAX, // 位置值最大
} mode_pwm_value_position_e; // 位置值
typedef enum
{
// 这一部分只用于LCD整定界面
LCD_ADJUST_IDEL = 1, // 准备中
LCD_ADJUST_POSITION0, // 位置0
LCD_ADJUST_POSITION100, // 位置100
LCD_ADJUST_TIMER, // 计时
LCD_ADJUST_TUNING, // 自整定
LCD_ADJUST_SAVE, // 存储变量
LCD_ADJUST_STOP, // 停止
} lcd_adjust_step_e; // 整定步骤
typedef enum
{
LCD_ADJUST_RESULT_OK, ///< 整定成功
LCD_ADJUST_RESULT_FAIL, ///< 整定失败
LCD_ADJUST_RESULT_ING, ///< 整定中
} lcd_adjust_result_e; ///< 整定结果
#endif // __MODE_DEF_H__

View File

@ -3,11 +3,6 @@
#include "lib.h" #include "lib.h"
#include "filter.h" #include "filter.h"
typedef enum
{
VALUE_POSITION_MIN,
VALUE_POSITION_MAX,
} mode_pwm_value_position_e;
typedef enum typedef enum
{ {

View File

@ -33,25 +33,25 @@ typedef enum
/*需要存储的变量*/ /*需要存储的变量*/
typedef struct typedef struct
{ {
uint8_t tuned_flag; // 是否整定过 1整定过 0未整定过 uint8_t tuned_flag; // 是否整定过 1整定过 0未整定过
uint8_t tuned_state; // 自整定结果 uint8_t tuned_state; // 自整定结果
uint16_t bleeding; // 放气值 uint16_t bleeding; // 放气值
uint16_t inflation; // 充气值 uint16_t inflation; // 充气值
uint16_t arr_diff; // 控制区间 uint16_t arr_diff; // 控制区间
uint16_t ad_diff; // 磁条区间 uint16_t ad_diff; // 磁条区间
uint16_t pwmp_min; // 控制最小值 uint16_t pwmp_min; // 控制最小值
uint16_t pwmp_max; // 控制最大值 uint16_t pwmp_max; // 控制最大值
uint16_t trip_0; // 磁条0位置AD uint16_t trip_0; // 磁条0位置AD
uint16_t trip_100; // 词条100位置AD uint16_t trip_100; // 词条100位置AD
uint16_t trip_min0; // 小回路行程0位置AD uint16_t trip_min0; // 小回路行程0位置AD
uint16_t trip_min100; // 小回路行程100位置AD uint16_t trip_min100; // 小回路行程100位置AD
uint16_t current0; // 电流最小值 uint16_t current0; // 电流最小值
uint16_t current100; // 电流最大值 uint16_t current100; // 电流最大值
uint16_t all_open_time;// 全开时间 uint16_t all_open_time; // 全开时间
uint16_t all_close_time;// 全关时间 uint16_t all_close_time; // 全关时间
uint16_t prov_flag; // 磁条安装的正反倒装0 正装1 uint16_t prov_flag; // 磁条安装的正反倒装0 正装1
uint16_t valve_type; // 阀门正反行程气开ATO 气关ATC uint16_t valve_type; // 阀门正反行程气开ATO 气关ATC
float32 kp; float32 kp;
float32 ki; float32 ki;
float32 kd; float32 kd;
@ -104,13 +104,6 @@ typedef struct
/////////////////////////////////////////*共用部分BEGIN*//////////////////////////////////////////////// /////////////////////////////////////////*共用部分BEGIN*////////////////////////////////////////////////
typedef enum
{
POSITION_CHANGE, // 位置发生变化
POSITION_NO_CHANGE, // 位置没变化,但是等待次数没到
POSITION_NO_CHANGE_FOREVER, // 位置不再发生变化
} valve_position_change_hd_e;
typedef enum typedef enum
{ {
PWMP_HD_ADJUST_IDEL, PWMP_HD_ADJUST_IDEL,
@ -247,8 +240,8 @@ typedef enum
/// 操作标志 /// 操作标志
typedef enum typedef enum
{ {
EXECUTE_NONE = 0, ///< 不执行任何操作 EXECUTE_HD_NONE = 0, ///< 不执行任何操作
EXECUTE_DAC = 1, ///< 执行DAC输出 EXECUTE_HD_OUT = 1, ///< 执行输出
} execute_hd_e; } execute_hd_e;
/// 返回内容 /// 返回内容

View File

@ -240,7 +240,7 @@ execute_rsp_hd_t *execute_dac(execute_plan_hd_e plan)
case EXECUTE_PLAN_4: case EXECUTE_PLAN_4:
return execute_dac_plan4(); return execute_dac_plan4();
default: default:
rsp.code = EXECUTE_NONE; rsp.code = EXECUTE_HD_NONE;
return &rsp; return &rsp;
} }
} }
@ -261,7 +261,7 @@ static execute_rsp_hd_t *execute_dac_plan1()
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max + Control_diff * index_max) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min - Control_diff * index_min); // 映射实际控制器的范围 out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max + Control_diff * index_max) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min - Control_diff * index_min); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min - Control_diff * index_min; // 对输出结果进行偏移处理 out += mode_pwmp_hd->pwmp_save->storage.pwmp_min - Control_diff * index_min; // 对输出结果进行偏移处理
rsp.code = EXECUTE_DAC; rsp.code = EXECUTE_HD_OUT;
rsp.dac = (uint32_t)out; rsp.dac = (uint32_t)out;
/// 在执行了十次之后若系统认为稳定进入以下程序进行微调 /// 在执行了十次之后若系统认为稳定进入以下程序进行微调
@ -359,7 +359,7 @@ static void set_step_signal(uint16_t signal_in)
} }
/*判断阀门状态:移动、停止、停止但仍在等待*/ /*判断阀门状态:移动、停止、停止但仍在等待*/
static valve_position_change_hd_e pwmp_adjust_hd_valve_position_change(uint8_t *state, uint8_t next_state, uint8_t diff_adc_max) static valve_position_change_e pwmp_adjust_hd_valve_position_change(uint8_t *state, uint8_t next_state, uint8_t diff_adc_max)
{ {
uint16_t diff_adc = 0; uint16_t diff_adc = 0;
// uint16_t adc = get_actual_travel_adc(); // uint16_t adc = get_actual_travel_adc();
@ -437,7 +437,7 @@ static void pwmp_adjust_hd_idle(uint8_t *state, mode_pwmp_hd_adjust_state_e next
} }
else else
{ {
valve_position_change_hd_e s = pwmp_adjust_hd_valve_position_change(state, next_state, DIFF_ADC_MAX); valve_position_change_e s = pwmp_adjust_hd_valve_position_change(state, next_state, DIFF_ADC_MAX);
switch (s) switch (s)
{ {
@ -475,7 +475,7 @@ static void pwmp_adjust_hd_rough_position0(uint8_t *state, mode_pwmp_hd_adjust_s
} }
else else
{ {
valve_position_change_hd_e s = pwmp_adjust_hd_valve_position_change(state, next_state, DIFF_ADC_MAX); valve_position_change_e s = pwmp_adjust_hd_valve_position_change(state, next_state, DIFF_ADC_MAX);
current_adc = mode_pwmp_hd_adjust->psb_adc; current_adc = mode_pwmp_hd_adjust->psb_adc;
if (ABS(current_adc - mode_pwmp_hd_adjust->adc_record_1) >= DIFF_ADC_MAX) if (ABS(current_adc - mode_pwmp_hd_adjust->adc_record_1) >= DIFF_ADC_MAX)
@ -627,7 +627,7 @@ static void pwmp_adjust_hd_accurate_position0(uint8_t *state, mode_pwmp_hd_adjus
} }
else else
{ {
valve_position_change_hd_e s = pwmp_adjust_hd_valve_position_change(state, next_state, DIFF_ADC_MAX * 10); valve_position_change_e s = pwmp_adjust_hd_valve_position_change(state, next_state, DIFF_ADC_MAX * 10);
current_adc = mode_pwmp_hd_adjust->psb_adc; current_adc = mode_pwmp_hd_adjust->psb_adc;
/*执行器发生动作*/ /*执行器发生动作*/
@ -695,7 +695,7 @@ static void pwmp_adjust_hd_rough_position100(uint8_t *state, mode_pwmp_hd_adjust
} }
else else
{ {
valve_position_change_hd_e s = pwmp_adjust_hd_valve_position_change(state, next_state, DIFF_ADC_MAX); valve_position_change_e s = pwmp_adjust_hd_valve_position_change(state, next_state, DIFF_ADC_MAX);
switch (s) switch (s)
{ {
@ -738,7 +738,7 @@ static void pwmp_adjust_hd_accurate_position100(uint8_t *state, mode_pwmp_hd_adj
} }
else else
{ {
valve_position_change_hd_e s = pwmp_adjust_hd_valve_position_change(state, next_state, DIFF_ADC_MAX); valve_position_change_e s = pwmp_adjust_hd_valve_position_change(state, next_state, DIFF_ADC_MAX);
current_adc = mode_pwmp_hd_adjust->psb_adc; current_adc = mode_pwmp_hd_adjust->psb_adc;
uint16_t adc_diff = ABS(current_adc - mode_pwmp_hd_adjust->adc_record_2); uint16_t adc_diff = ABS(current_adc - mode_pwmp_hd_adjust->adc_record_2);
@ -875,7 +875,7 @@ static void pwmp_adjust_hd_bleeding(uint8_t *state)
} }
else else
{ {
valve_position_change_hd_e s = pwmp_adjust_hd_valve_position_change(state, mode_pwmp_hd_adjust->adjust_state, DIFF_ADC_MAX); valve_position_change_e s = pwmp_adjust_hd_valve_position_change(state, mode_pwmp_hd_adjust->adjust_state, DIFF_ADC_MAX);
current_adc = mode_pwmp_hd_adjust->psb_adc; current_adc = mode_pwmp_hd_adjust->psb_adc;
switch (s) switch (s)
{ {
@ -973,7 +973,7 @@ static void pwmp_adjust_hd_PID_tuning(uint8_t *state, mode_pwmp_hd_adjust_state_
} }
else else
{ {
valve_position_change_hd_e s = pwmp_adjust_hd_valve_position_change(state, next_state, DIFF_ADC_MAX); valve_position_change_e s = pwmp_adjust_hd_valve_position_change(state, next_state, DIFF_ADC_MAX);
s_watch = s; s_watch = s;
/*获取实时行程*/ /*获取实时行程*/
pid_autotune_hd->data.cur_actual = pid_autotune_hd->data.adjust_tmp_actual; pid_autotune_hd->data.cur_actual = pid_autotune_hd->data.adjust_tmp_actual;
@ -1234,7 +1234,7 @@ void mode_pwmp_hd_process(void)
else if (loop_current >= 4.5 && loop_current <= 19.5) else if (loop_current >= 4.5 && loop_current <= 19.5)
{ {
execute_res = execute_dac(EXECUTE_PLAN); // PID计算结果经过执行器处理 execute_res = execute_dac(EXECUTE_PLAN); // PID计算结果经过执行器处理
if (execute_res->code == EXECUTE_DAC) // 执行DAC输出 if (execute_res->code == EXECUTE_HD_OUT) // 执行DAC输出
{ {
pdctrl_out(execute_res->dac); pdctrl_out(execute_res->dac);
} }
@ -1258,7 +1258,7 @@ void mode_pwmp_hd_process(void)
{ {
pdctrl_out(mode_pwmp_hd->output); pdctrl_out(mode_pwmp_hd->output);
mode_pwmp_hd->current_adc = get_actual_travel_adc(); mode_pwmp_hd->current_adc = get_actual_travel_adc();
mode_pwmp_hd->duty_percent = ((float32)mode_pwmp_hd->output / (float32)ADC_OUT_MAX) * 100; mode_pwmp_hd->duty_percent = ((float32)mode_pwmp_hd->output / (float32)OUT_MAX) * 100;
mode_pwmp_hd->current_electric = ip2current(); mode_pwmp_hd->current_electric = ip2current();
break; break;
} }

View File

@ -42,7 +42,7 @@
#define SELF_VCHART_LEN 17 ///< 自定义阀门特性长度 #define SELF_VCHART_LEN 17 ///< 自定义阀门特性长度
#define VALVE_SERIAL_NUM_LEN 16 ///< 阀门序列号长度 #define VALVE_SERIAL_NUM_LEN 16 ///< 阀门序列号长度
#define INST_SERIAL_NUM_LEN 16 ///< 定位器序列号长度 #define INST_SERIAL_NUM_LEN 16 ///< 定位器序列号长度
#define ADC_OUT_MAX 4095 ///< ADC输出最大值 #define OUT_MAX 4095 ///< 输出最大值
/** /**
* ADC通道定义: 416 TCONV() = ( + 12.5 )/(/ADC分频系数) * ADC通道定义: 416 TCONV() = ( + 12.5 )/(/ADC分频系数)
@ -383,24 +383,6 @@ typedef union
} Bits; } Bits;
} driver_icon_enable_u; } driver_icon_enable_u;
typedef enum
{
// 这一部分只用于LCD整定界面
LCD_ADJUST_IDEL = 1, // 准备中
LCD_ADJUST_POSITION0, // 位置0
LCD_ADJUST_POSITION100, // 位置100
LCD_ADJUST_TIMER, // 计时
LCD_ADJUST_TUNING, // 自整定
LCD_ADJUST_SAVE, // 存储变量
LCD_ADJUST_STOP, // 停止
} lcd_adjust_step_e;
typedef enum
{
LCD_ADJUST_RESULT_OK, ///< 整定成功
LCD_ADJUST_RESULT_FAIL, ///< 整定失败
LCD_ADJUST_RESULT_ING, ///< 整定中
} lcd_adjust_result_e;
#pragma pack() // 编译器中提供了#pragma pack(n)来设定变量以n字节对齐方式 #pragma pack() // 编译器中提供了#pragma pack(n)来设定变量以n字节对齐方式
extern volatile float32 calib_param[CALIBPARA_NUM][2]; ///< 校准参数 extern volatile float32 calib_param[CALIBPARA_NUM][2]; ///< 校准参数