parent
5eb02c4eb1
commit
bab58a6493
|
@ -14,6 +14,9 @@
|
||||||
//最大循环次数
|
//最大循环次数
|
||||||
#define CIRCULATIONS_MAX 10
|
#define CIRCULATIONS_MAX 10
|
||||||
|
|
||||||
|
//三角波每个周期的间隔数量
|
||||||
|
#define TRIANLE_PLOT_INTERVAL_MAX 20
|
||||||
|
|
||||||
//CONFIG1
|
//CONFIG1
|
||||||
#define CONF1_OUTPUT_UNIT 0
|
#define CONF1_OUTPUT_UNIT 0
|
||||||
#define CONF1_OUTPUT_MODE 1
|
#define CONF1_OUTPUT_MODE 1
|
||||||
|
@ -93,6 +96,12 @@ void program_out_step(void);
|
||||||
//执行编程输出,三角波
|
//执行编程输出,三角波
|
||||||
void program_out_triangle(void);
|
void program_out_triangle(void);
|
||||||
|
|
||||||
|
//置于mux任务内,实时性更强
|
||||||
|
void running_process_step(void);
|
||||||
|
|
||||||
|
//置于mux任务内,实时性更强
|
||||||
|
void running_process_triangle(void);
|
||||||
|
|
||||||
//百分比转化为数值输出, perc:[0, 100]
|
//百分比转化为数值输出, perc:[0, 100]
|
||||||
void percent2val_out(float32 perc);
|
void percent2val_out(float32 perc);
|
||||||
|
|
||||||
|
|
|
@ -236,11 +236,10 @@ uint8_t init_set_bar(uint8_t start, uint8_t end, uint16_t interval)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void scr_main_run(void)
|
void scr_main_run(void)
|
||||||
{
|
{
|
||||||
//实时更新设定值
|
//实时更新设定值
|
||||||
sig_sv_update(); //不做延时,尽快响应
|
sig_sv_update();
|
||||||
|
|
||||||
//运行时间显示
|
//运行时间显示
|
||||||
runtime_show(); //1000ms
|
runtime_show(); //1000ms
|
||||||
|
|
|
@ -250,8 +250,8 @@ void set_item1_value(ITEM_CONTENTS con, int8_t step)
|
||||||
{
|
{
|
||||||
tabdata.item1_page0_sample_interval += step * 100;
|
tabdata.item1_page0_sample_interval += step * 100;
|
||||||
|
|
||||||
if( tabdata.item1_page0_sample_interval > 60000 ) tabdata.item1_page0_sample_interval = 60000;
|
if( tabdata.item1_page0_sample_interval > 10000 ) tabdata.item1_page0_sample_interval = 10000;
|
||||||
if( tabdata.item1_page0_sample_interval < 100 ) tabdata.item1_page0_sample_interval = 100;
|
if( tabdata.item1_page0_sample_interval < 500 ) tabdata.item1_page0_sample_interval = 500;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -594,6 +594,48 @@ void program_out_step(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROGOUT_RUNNING:
|
case PROGOUT_RUNNING:
|
||||||
|
{
|
||||||
|
//迁移至mux任务内
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROGOUT_END:
|
||||||
|
{
|
||||||
|
step_dir = 0;
|
||||||
|
cir_times = 0;
|
||||||
|
|
||||||
|
menu_data.io_on2off = IO_OFF;
|
||||||
|
mux_signal.data_sv = 0;
|
||||||
|
|
||||||
|
//加载菜单界面
|
||||||
|
lv_scr_load(guider_ui.screen_setting);
|
||||||
|
scr_setting_recover();
|
||||||
|
lv_obj_clear_flag(guider_ui.screen_setting, LV_OBJ_FLAG_HIDDEN);
|
||||||
|
|
||||||
|
//隐藏主界面对象
|
||||||
|
lv_obj_add_flag(guider_ui.screen_main, LV_OBJ_FLAG_HIDDEN);
|
||||||
|
|
||||||
|
menu_data.scr_now = SCREEN_SETTING; //当前界面为详细设置菜单
|
||||||
|
|
||||||
|
tabdata.item_cursor_prv = ITEM_0;
|
||||||
|
tabdata.item_cursor = ITEM_2;
|
||||||
|
setting_items_check(tabdata.item_cursor, tabdata.item_cursor_prv);
|
||||||
|
|
||||||
|
//返回config2界面
|
||||||
|
program_out_config2();
|
||||||
|
current_operation = PROG_OUT_CONFIG_2;
|
||||||
|
key_config_update(current_operation);
|
||||||
|
|
||||||
|
progout_data.process = PROGOUT_WAITING;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void running_process_step(void)
|
||||||
{
|
{
|
||||||
if(progout_tick_flag == 0)
|
if(progout_tick_flag == 0)
|
||||||
{
|
{
|
||||||
|
@ -639,12 +681,73 @@ void program_out_step(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t tri_interval = 0; //控制周期,调整输出的时间间隔
|
||||||
|
uint8_t tri_step_up = 0; //上升阶段每次变化的步长
|
||||||
|
uint8_t tri_step_down = 0; //下降阶段每次变化的步长
|
||||||
|
uint8_t tri_up2down = 0; //上升和下降的分界点,第几个间隔
|
||||||
|
void program_out_triangle(void)
|
||||||
|
{
|
||||||
|
switch (progout_data.process)
|
||||||
|
{
|
||||||
|
case PROGOUT_START:
|
||||||
|
{
|
||||||
|
if( progout_tick_flag == 0 )
|
||||||
|
{
|
||||||
|
//计时开始
|
||||||
|
progout_tick_flag = 1;
|
||||||
|
progout_tick = 0;
|
||||||
|
|
||||||
|
progout_data.out_percent = progout_data.start_percent;
|
||||||
|
percent2val_out(progout_data.out_percent);
|
||||||
|
|
||||||
|
//初始方向、控制间隔、上升&下降的分界点、上升&下降各自的步长
|
||||||
|
step_dir = 1;
|
||||||
|
tri_interval = progout_data.period / TRIANLE_PLOT_INTERVAL_MAX;
|
||||||
|
tri_up2down = ( (float32)progout_data.rising_percent/(float32)100 ) * TRIANLE_PLOT_INTERVAL_MAX;
|
||||||
|
if( tri_up2down == 0 )
|
||||||
|
{
|
||||||
|
tri_step_up = progout_data.end_percent - progout_data.start_percent;
|
||||||
|
tri_step_down = (progout_data.end_percent - progout_data.start_percent)/TRIANLE_PLOT_INTERVAL_MAX;
|
||||||
|
}
|
||||||
|
else if( tri_up2down == TRIANLE_PLOT_INTERVAL_MAX)
|
||||||
|
{
|
||||||
|
tri_step_up = (progout_data.end_percent - progout_data.start_percent)/TRIANLE_PLOT_INTERVAL_MAX;
|
||||||
|
tri_step_down = progout_data.end_percent - progout_data.start_percent;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tri_step_up = (progout_data.end_percent - progout_data.start_percent)/tri_up2down;
|
||||||
|
tri_step_down = (progout_data.end_percent - progout_data.start_percent)/(TRIANLE_PLOT_INTERVAL_MAX - tri_up2down);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//到达起点%后等待一段时间
|
||||||
|
if(progout_tick >= 5000)
|
||||||
|
{
|
||||||
|
//计时结束
|
||||||
|
progout_tick_flag = 0;
|
||||||
|
progout_tick = 0;
|
||||||
|
|
||||||
|
progout_data.process = PROGOUT_RUNNING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROGOUT_RUNNING:
|
||||||
|
{
|
||||||
|
//迁移至mux任务内
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROGOUT_END:
|
case PROGOUT_END:
|
||||||
{
|
{
|
||||||
step_dir = 0;
|
step_dir = 0;
|
||||||
cir_times = 0;
|
cir_times = 0;
|
||||||
|
progout_tick_flag = 0;
|
||||||
|
progout_tick = 0;
|
||||||
|
|
||||||
menu_data.io_on2off = IO_OFF;
|
menu_data.io_on2off = IO_OFF;
|
||||||
mux_signal.data_sv = 0;
|
mux_signal.data_sv = 0;
|
||||||
|
@ -677,7 +780,54 @@ void program_out_step(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void program_out_triangle(void)
|
void running_process_triangle(void)
|
||||||
{}
|
{
|
||||||
|
if( progout_tick_flag == 0 )
|
||||||
|
{
|
||||||
|
//计时开始
|
||||||
|
progout_tick_flag = 1;
|
||||||
|
progout_tick = 0;
|
||||||
|
|
||||||
|
if(step_dir == 1)
|
||||||
|
{
|
||||||
|
progout_data.out_percent += tri_step_up;
|
||||||
|
if(progout_data.out_percent >= progout_data.end_percent)
|
||||||
|
{
|
||||||
|
progout_data.out_percent = progout_data.end_percent;
|
||||||
|
step_dir = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(step_dir == -1)
|
||||||
|
{
|
||||||
|
progout_data.out_percent -= tri_step_down;
|
||||||
|
if( (progout_data.out_percent <= progout_data.start_percent)||(progout_data.out_percent > 101) )
|
||||||
|
{
|
||||||
|
progout_data.out_percent = progout_data.start_percent;
|
||||||
|
|
||||||
|
cir_times++;
|
||||||
|
step_dir = 1;
|
||||||
|
if( progout_data.circulations < 11 )
|
||||||
|
{
|
||||||
|
//循环次数达到目标后,跳转至终止步骤
|
||||||
|
if(cir_times >= progout_data.circulations) progout_data.process = PROGOUT_END;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//无限循环
|
||||||
|
cir_times = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
percent2val_out(progout_data.out_percent);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(progout_tick >= tri_interval)
|
||||||
|
{
|
||||||
|
//计时结束
|
||||||
|
progout_tick_flag = 0;
|
||||||
|
progout_tick = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -319,6 +319,28 @@ void start_mux_analog(void const * argument)
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
|
//编程输出过程,放在此处实时性更好
|
||||||
|
if( progout_data.process == PROGOUT_RUNNING)
|
||||||
|
{
|
||||||
|
switch (progout_data.output_mode)
|
||||||
|
{
|
||||||
|
case PROG_OUT_STEP:
|
||||||
|
{
|
||||||
|
running_process_step();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROG_OUT_TRIANGLE:
|
||||||
|
{
|
||||||
|
running_process_triangle();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//按键扫描
|
//按键扫描
|
||||||
tm1650_read_key(&hi2c1, &kp_flag, COMMAND_READ_KEY_DATA, &key);
|
tm1650_read_key(&hi2c1, &kp_flag, COMMAND_READ_KEY_DATA, &key);
|
||||||
|
|
||||||
|
@ -326,7 +348,7 @@ void start_mux_analog(void const * argument)
|
||||||
mux_signal_switch(&mux_signal);
|
mux_signal_switch(&mux_signal);
|
||||||
|
|
||||||
my_monitor_cnt++;
|
my_monitor_cnt++;
|
||||||
if(my_monitor_cnt >= 5)
|
if( my_monitor_cnt * MUX_TASK_PERIOD >= 200)
|
||||||
{
|
{
|
||||||
my_monitor_cnt = 0;
|
my_monitor_cnt = 0;
|
||||||
|
|
||||||
|
|
|
@ -260,6 +260,31 @@
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>progout_data,0x0A</ItemText>
|
<ItemText>progout_data,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>21</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>tri_interval,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>22</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>tri_step_up,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>23</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>tri_step_down,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>24</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>tri_up2down,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>25</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>cir_times</ItemText>
|
||||||
|
</Ww>
|
||||||
</WatchWindow1>
|
</WatchWindow1>
|
||||||
<WatchWindow2>
|
<WatchWindow2>
|
||||||
<Ww>
|
<Ww>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue