parent
5eb02c4eb1
commit
bab58a6493
|
@ -14,6 +14,9 @@
|
|||
//最大循环次数
|
||||
#define CIRCULATIONS_MAX 10
|
||||
|
||||
//三角波每个周期的间隔数量
|
||||
#define TRIANLE_PLOT_INTERVAL_MAX 20
|
||||
|
||||
//CONFIG1
|
||||
#define CONF1_OUTPUT_UNIT 0
|
||||
#define CONF1_OUTPUT_MODE 1
|
||||
|
@ -93,6 +96,12 @@ void program_out_step(void);
|
|||
//执行编程输出,三角波
|
||||
void program_out_triangle(void);
|
||||
|
||||
//置于mux任务内,实时性更强
|
||||
void running_process_step(void);
|
||||
|
||||
//置于mux任务内,实时性更强
|
||||
void running_process_triangle(void);
|
||||
|
||||
//百分比转化为数值输出, perc:[0, 100]
|
||||
void percent2val_out(float32 perc);
|
||||
|
||||
|
|
|
@ -236,12 +236,11 @@ uint8_t init_set_bar(uint8_t start, uint8_t end, uint16_t interval)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void scr_main_run(void)
|
||||
{
|
||||
//实时更新设定值
|
||||
sig_sv_update(); //不做延时,尽快响应
|
||||
|
||||
sig_sv_update();
|
||||
|
||||
//运行时间显示
|
||||
runtime_show(); //1000ms
|
||||
|
||||
|
|
|
@ -250,8 +250,8 @@ void set_item1_value(ITEM_CONTENTS con, int8_t step)
|
|||
{
|
||||
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 < 100 ) tabdata.item1_page0_sample_interval = 100;
|
||||
if( tabdata.item1_page0_sample_interval > 10000 ) tabdata.item1_page0_sample_interval = 10000;
|
||||
if( tabdata.item1_page0_sample_interval < 500 ) tabdata.item1_page0_sample_interval = 500;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -595,49 +595,7 @@ void program_out_step(void)
|
|||
|
||||
case PROGOUT_RUNNING:
|
||||
{
|
||||
if(progout_tick_flag == 0)
|
||||
{
|
||||
//计时开始
|
||||
progout_tick_flag = 1;
|
||||
progout_tick = 0;
|
||||
|
||||
progout_data.out_percent += step_dir * progout_data.step_percent;
|
||||
|
||||
if(progout_data.out_percent <= progout_data.start_percent)
|
||||
{
|
||||
//向下触底后本次循环结束
|
||||
progout_data.out_percent = progout_data.start_percent;
|
||||
step_dir = 1;
|
||||
|
||||
cir_times++;
|
||||
if( progout_data.circulations < 11 )
|
||||
{
|
||||
//循环次数达到目标后,跳转至终止步骤
|
||||
if(cir_times >= progout_data.circulations) progout_data.process = PROGOUT_END;
|
||||
}
|
||||
else
|
||||
{
|
||||
//无限循环
|
||||
cir_times = 0;
|
||||
}
|
||||
}
|
||||
else if(progout_data.out_percent >= progout_data.end_percent)
|
||||
{
|
||||
//向上触顶后反向
|
||||
progout_data.out_percent = progout_data.end_percent;
|
||||
step_dir = -1;
|
||||
}
|
||||
percent2val_out(progout_data.out_percent);
|
||||
}
|
||||
else
|
||||
{
|
||||
if( progout_tick > progout_data.hold_time )
|
||||
{
|
||||
//计时结束
|
||||
progout_tick_flag = 0;
|
||||
progout_tick = 0;
|
||||
}
|
||||
}
|
||||
//迁移至mux任务内
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -677,7 +635,199 @@ void program_out_step(void)
|
|||
}
|
||||
}
|
||||
|
||||
void running_process_step(void)
|
||||
{
|
||||
if(progout_tick_flag == 0)
|
||||
{
|
||||
//计时开始
|
||||
progout_tick_flag = 1;
|
||||
progout_tick = 0;
|
||||
|
||||
progout_data.out_percent += step_dir * progout_data.step_percent;
|
||||
|
||||
if(progout_data.out_percent <= progout_data.start_percent)
|
||||
{
|
||||
//向下触底后本次循环结束
|
||||
progout_data.out_percent = progout_data.start_percent;
|
||||
step_dir = 1;
|
||||
|
||||
cir_times++;
|
||||
if( progout_data.circulations < 11 )
|
||||
{
|
||||
//循环次数达到目标后,跳转至终止步骤
|
||||
if(cir_times >= progout_data.circulations) progout_data.process = PROGOUT_END;
|
||||
}
|
||||
else
|
||||
{
|
||||
//无限循环
|
||||
cir_times = 0;
|
||||
}
|
||||
}
|
||||
else if(progout_data.out_percent >= progout_data.end_percent)
|
||||
{
|
||||
//向上触顶后反向
|
||||
progout_data.out_percent = progout_data.end_percent;
|
||||
step_dir = -1;
|
||||
}
|
||||
percent2val_out(progout_data.out_percent);
|
||||
}
|
||||
else
|
||||
{
|
||||
if( progout_tick > progout_data.hold_time )
|
||||
{
|
||||
//计时结束
|
||||
progout_tick_flag = 0;
|
||||
progout_tick = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
case PROGOUT_END:
|
||||
{
|
||||
step_dir = 0;
|
||||
cir_times = 0;
|
||||
progout_tick_flag = 0;
|
||||
progout_tick = 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_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 */
|
||||
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);
|
||||
|
||||
|
@ -326,7 +348,7 @@ void start_mux_analog(void const * argument)
|
|||
mux_signal_switch(&mux_signal);
|
||||
|
||||
my_monitor_cnt++;
|
||||
if(my_monitor_cnt >= 5)
|
||||
if( my_monitor_cnt * MUX_TASK_PERIOD >= 200)
|
||||
{
|
||||
my_monitor_cnt = 0;
|
||||
|
||||
|
|
|
@ -260,6 +260,31 @@
|
|||
<WinNumber>1</WinNumber>
|
||||
<ItemText>progout_data,0x0A</ItemText>
|
||||
</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>
|
||||
<WatchWindow2>
|
||||
<Ww>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue