728 lines
14 KiB
C
728 lines
14 KiB
C
/*
|
||
* @Author: wujunchao wujunchao@wuxismart.com
|
||
* @Date: 2024-12-27 11:50:56
|
||
* @LastEditors: wujunchao wujunchao@wuxismart.com
|
||
* @LastEditTime: 2025-03-20 09:47:34
|
||
* @FilePath: \signal_generator\App\APP_WU\Src\apps_gather.c
|
||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||
*/
|
||
#include "apps_gather.h" //用于头文件打包汇总,函数声明和变量定义
|
||
// lv_conf.h { line:282->CPU&FPS; line:289->MEM used }
|
||
|
||
TABVIEW_DATA tabdata; //设置页面参数初始化
|
||
PHYSICAL_QUANTITY VOL[2]; //电压,VOL[0]-V, VOL[1]-mV
|
||
PHYSICAL_QUANTITY CUR; //电流,mA
|
||
PHYSICAL_QUANTITY RES; //电阻,Ω
|
||
PHYSICAL_QUANTITY FRE; //频率,KHz
|
||
PHYSICAL_QUANTITY TC[8]; //热电偶,共8种
|
||
PHYSICAL_QUANTITY RTD; //热电阻
|
||
|
||
//物理量内容初始化
|
||
//底层数据,无法通过按键&菜单修改,用户使用时,仅修改tabdata里的变量
|
||
void physical_quantity_init(void)
|
||
{
|
||
VOL[0].tag = SIG_VOLTAGE;
|
||
VOL[0].typ = VOLTAGE_V;
|
||
VOL[0].low = 0;
|
||
VOL[0].up = 30;
|
||
VOL[0].pv = 0;
|
||
|
||
VOL[1].tag = SIG_VOLTAGE;
|
||
VOL[1].typ = VOLTAGE_MV;
|
||
VOL[1].low = -2500;
|
||
VOL[1].up = 2500;
|
||
VOL[1].pv = 0;
|
||
|
||
CUR.tag = SIG_CURRENT;
|
||
CUR.typ = CURRENT_MA;
|
||
CUR.low = 0;
|
||
CUR.up = 25;
|
||
CUR.pv = 0;
|
||
|
||
RES.tag = SIG_RESISTANT;
|
||
RES.typ = RESISTANT_OHM;
|
||
RES.low = 0;
|
||
RES.up = 4000;
|
||
RES.pv = 0;
|
||
|
||
FRE.tag = SIG_FREQUENCE;
|
||
FRE.typ = FREQUENCE_KHZ;
|
||
FRE.low = 0;
|
||
FRE.up = 100;
|
||
FRE.pv = 0;
|
||
|
||
//热电偶K
|
||
TC[0].tag = SIG_TC;
|
||
TC[0].typ = TC_K;
|
||
TC[0].low = -270;
|
||
TC[0].up = 1372;
|
||
TC[0].pv = 0;
|
||
|
||
//热电偶S
|
||
TC[1].tag = SIG_TC;
|
||
TC[1].typ = TC_S;
|
||
TC[1].low = -50;
|
||
TC[1].up = 1768;
|
||
TC[1].pv = 0;
|
||
|
||
//热电偶N
|
||
TC[2].tag = SIG_TC;
|
||
TC[2].typ = TC_N;
|
||
TC[2].low = -270;
|
||
TC[2].up = 1300;
|
||
TC[2].pv = 0;
|
||
|
||
//热电偶B
|
||
TC[3].tag = SIG_TC;
|
||
TC[3].typ = TC_B;
|
||
TC[3].low = 0;
|
||
TC[3].up = 1820;
|
||
TC[3].pv = 0;
|
||
|
||
//热电偶E
|
||
TC[4].tag = SIG_TC;
|
||
TC[4].typ = TC_E;
|
||
TC[4].low = -270;
|
||
TC[4].up = 1000;
|
||
TC[4].pv = 0;
|
||
|
||
//热电偶J
|
||
TC[5].tag = SIG_TC;
|
||
TC[5].typ = TC_J;
|
||
TC[5].low = -210;
|
||
TC[5].up = 1200;
|
||
TC[5].pv = 0;
|
||
|
||
//热电偶R
|
||
TC[6].tag = SIG_TC;
|
||
TC[6].typ = TC_R;
|
||
TC[6].low = -50;
|
||
TC[6].up = 1768;
|
||
TC[6].pv = 0;
|
||
|
||
//热电偶T
|
||
TC[7].tag = SIG_TC;
|
||
TC[7].typ = TC_T;
|
||
TC[7].low = -270;
|
||
TC[7].up = 400;
|
||
TC[7].pv = 0;
|
||
|
||
RTD.tag = SIG_RTD;
|
||
RTD.typ = RTD_DC;
|
||
RTD.low = -200;
|
||
RTD.up = 660;
|
||
RTD.pv = 0;
|
||
}
|
||
|
||
void screen_run(void)
|
||
{
|
||
if(m5data.menu_reset_flag)
|
||
{
|
||
menu_reset(); //触发显示内容复位
|
||
|
||
m5data.menu_reset_flag = 0;
|
||
|
||
return;
|
||
}
|
||
|
||
if(m5data.scr_init_flag == 0)
|
||
{
|
||
scr_init_run(); //播放开机动画
|
||
}
|
||
else
|
||
{
|
||
switch (m5data.scr_now)
|
||
{
|
||
case SCREEN_MAIN:
|
||
{
|
||
scr_main_run(); //主界面显示
|
||
key_functions_main(); //主界面的按键功能
|
||
}
|
||
break;
|
||
|
||
case SCREEN_SETTING:
|
||
{
|
||
scr_setting_run(); //设置界面
|
||
key_functions_setting(); //设置界面的按键功能
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
//通道选择与切换
|
||
void sig_channel_select(uint8_t io, SIG_FUNCTIONS_TYPE type)
|
||
{
|
||
switch (io)
|
||
{
|
||
case IO_INPUT:
|
||
{
|
||
switch (type)
|
||
{
|
||
case VOLTAGE_MV:
|
||
{
|
||
mux_signal.channel = CH6_IN_MVOL;
|
||
}
|
||
break;
|
||
|
||
case VOLTAGE_V:
|
||
{
|
||
mux_signal.channel = CH5_IN_VOL;
|
||
}
|
||
break;
|
||
|
||
case CURRENT_MA:
|
||
{
|
||
mux_signal.channel = CH7_IN_CUR;
|
||
}
|
||
break;
|
||
|
||
case RESISTANT_OHM:
|
||
{}
|
||
break;
|
||
|
||
case FREQUENCE_KHZ:
|
||
{
|
||
mux_signal.channel = CH8_IN_FRE;
|
||
}
|
||
break;
|
||
|
||
case TC_K:
|
||
{
|
||
mux_signal.channel = CH9_IN_TC;
|
||
}
|
||
break;
|
||
|
||
case TC_S:
|
||
{
|
||
mux_signal.channel = CH9_IN_TC;
|
||
}
|
||
break;
|
||
|
||
case TC_N:
|
||
{
|
||
mux_signal.channel = CH9_IN_TC;
|
||
}
|
||
break;
|
||
|
||
case TC_B:
|
||
{
|
||
mux_signal.channel = CH9_IN_TC;
|
||
}
|
||
break;
|
||
|
||
case TC_E:
|
||
{
|
||
mux_signal.channel = CH9_IN_TC;
|
||
}
|
||
break;
|
||
|
||
case TC_J:
|
||
{
|
||
mux_signal.channel = CH9_IN_TC;
|
||
}
|
||
break;
|
||
|
||
case TC_R:
|
||
{
|
||
mux_signal.channel = CH9_IN_TC;
|
||
}
|
||
break;
|
||
|
||
case TC_T:
|
||
{
|
||
mux_signal.channel = CH9_IN_TC;
|
||
}
|
||
break;
|
||
|
||
case RTD_DC:
|
||
{
|
||
mux_signal.channel = CH10_IN_RTD;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case IO_OUTPUT:
|
||
{
|
||
switch (type)
|
||
{
|
||
case VOLTAGE_MV:
|
||
{
|
||
mux_signal.channel = CH1_OUT_VOL_MV;
|
||
}
|
||
break;
|
||
|
||
case VOLTAGE_V:
|
||
{
|
||
mux_signal.channel = CH0_OUT_VOL_V;
|
||
}
|
||
break;
|
||
|
||
case CURRENT_MA:
|
||
{
|
||
mux_signal.channel = CH2_OUT_CUR;
|
||
}
|
||
break;
|
||
|
||
case RESISTANT_OHM:
|
||
{
|
||
mux_signal.channel = CH4_OUT_RES;
|
||
}
|
||
break;
|
||
|
||
case FREQUENCE_KHZ:
|
||
{
|
||
mux_signal.channel = CH3_OUT_FRE;
|
||
}
|
||
break;
|
||
|
||
case TC_K:
|
||
{
|
||
}
|
||
break;
|
||
|
||
case TC_S:
|
||
{
|
||
}
|
||
break;
|
||
|
||
case TC_N:
|
||
{
|
||
}
|
||
break;
|
||
|
||
case TC_B:
|
||
{
|
||
}
|
||
break;
|
||
|
||
case TC_E:
|
||
{
|
||
}
|
||
break;
|
||
|
||
case TC_J:
|
||
{
|
||
}
|
||
break;
|
||
|
||
case TC_R:
|
||
{
|
||
}
|
||
break;
|
||
|
||
case TC_T:
|
||
{
|
||
}
|
||
break;
|
||
|
||
case RTD_DC:
|
||
{
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//更新设定值(根据ON\OFF状态)
|
||
void sig_sv_update(void)
|
||
{
|
||
switch (m5data.io_on2off)
|
||
{
|
||
case IO_ON:
|
||
{
|
||
mux_signal.data_sv = real2mux( get_output_value() );
|
||
}
|
||
break;
|
||
|
||
case IO_OFF:
|
||
{
|
||
mux_signal.data_sv = 0;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//数据转换,mux_signal.pv -> real_value
|
||
float32 mux2real(float32 mux_pv)
|
||
{
|
||
float32 result = 0;
|
||
SIG_FUNCTIONS mode;
|
||
SIG_FUNCTIONS_TYPE type;
|
||
|
||
switch (m5data.io_mode)
|
||
{
|
||
case IO_INPUT:
|
||
{
|
||
mode = m5data.input_mode;
|
||
type = m5data.input_mode_type;
|
||
}
|
||
break;
|
||
|
||
case IO_OUTPUT:
|
||
{
|
||
mode = m5data.output_mode;
|
||
type = m5data.output_mode_type;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
switch (mode)
|
||
{
|
||
//电压
|
||
case SIG_VOLTAGE:
|
||
{
|
||
switch (type)
|
||
{
|
||
//[-2.5, 2.5V] -> [-2500mv, 2500mv]
|
||
case VOLTAGE_MV:
|
||
{
|
||
result = mux_pv * 1000;
|
||
}
|
||
break;
|
||
|
||
//1:1
|
||
case VOLTAGE_V:
|
||
{
|
||
result = mux_pv;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|
||
break;
|
||
|
||
//电流
|
||
case SIG_CURRENT:
|
||
{
|
||
switch (type)
|
||
{
|
||
//1:1
|
||
case CURRENT_MA:
|
||
{
|
||
result = mux_pv;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
//电阻
|
||
case SIG_RESISTANT:
|
||
{
|
||
switch (type)
|
||
{
|
||
case RESISTANT_OHM:
|
||
{
|
||
result = mux_pv;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
//频率
|
||
case SIG_FREQUENCE:
|
||
{
|
||
switch (type)
|
||
{
|
||
case FREQUENCE_KHZ:
|
||
{
|
||
//Hz -> KHz
|
||
result = mux_pv / 1000;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
//热电偶
|
||
case SIG_TC:
|
||
{
|
||
switch (type)
|
||
{
|
||
case TC_K:
|
||
{
|
||
result = mux_pv;
|
||
}
|
||
break;
|
||
|
||
case TC_N:
|
||
{
|
||
result = mux_pv;
|
||
}
|
||
break;
|
||
|
||
case TC_S:
|
||
{
|
||
result = mux_pv;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
//热电阻
|
||
case SIG_RTD:
|
||
{
|
||
switch (type)
|
||
{
|
||
case RTD_DC:
|
||
{
|
||
result = mux_pv;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
//数据转换,real_value -> mux_signal.sv
|
||
float32 real2mux(float32 real_value)
|
||
{
|
||
float32 result = 0;
|
||
|
||
SIG_FUNCTIONS mode;
|
||
SIG_FUNCTIONS_TYPE type;
|
||
|
||
switch (m5data.io_mode)
|
||
{
|
||
case IO_INPUT:
|
||
{
|
||
mode = m5data.input_mode;
|
||
type = m5data.input_mode_type;
|
||
}
|
||
break;
|
||
|
||
case IO_OUTPUT:
|
||
{
|
||
mode = m5data.output_mode;
|
||
type = m5data.output_mode_type;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
switch (mode)
|
||
{
|
||
//电压
|
||
case SIG_VOLTAGE:
|
||
{
|
||
switch (type)
|
||
{
|
||
//[-2500mV, 2500mV] -> [-2.5V, 2.5V]
|
||
case VOLTAGE_MV:
|
||
{
|
||
result = real_value / (float32)1000;
|
||
}
|
||
break;
|
||
|
||
//1:1
|
||
case VOLTAGE_V:
|
||
{
|
||
result = real_value;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|
||
break;
|
||
|
||
//电流
|
||
case SIG_CURRENT:
|
||
{
|
||
switch (type)
|
||
{
|
||
//1:1
|
||
case CURRENT_MA:
|
||
{
|
||
result = real_value;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
//电阻
|
||
case SIG_RESISTANT:
|
||
{
|
||
switch (type)
|
||
{
|
||
case RESISTANT_OHM:
|
||
{
|
||
result = real_value;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
//频率
|
||
case SIG_FREQUENCE:
|
||
{
|
||
switch (type)
|
||
{
|
||
case FREQUENCE_KHZ:
|
||
{
|
||
//KHz -> Hz
|
||
result = real_value * 1000;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
//热电偶
|
||
case SIG_TC:
|
||
{
|
||
switch (type)
|
||
{
|
||
case TC_K:
|
||
{
|
||
result = real_value;
|
||
}
|
||
break;
|
||
|
||
case TC_N:
|
||
{
|
||
result = real_value;
|
||
}
|
||
break;
|
||
|
||
case TC_S:
|
||
{
|
||
result = real_value;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
//热电阻
|
||
case SIG_RTD:
|
||
{
|
||
switch (type)
|
||
{
|
||
case RTD_DC:
|
||
{
|
||
result = real_value;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
//计算a的b次方
|
||
float32 my_power(int a, int b)
|
||
{
|
||
if(a == 0)
|
||
{
|
||
return 0;
|
||
}
|
||
|
||
if(b == 0)
|
||
{
|
||
return 1;
|
||
}
|
||
|
||
float32 result = 1;
|
||
|
||
if( b > 0 )
|
||
{
|
||
for(uint8_t i = 0; i < b; i++)
|
||
{
|
||
result *= a;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for(uint8_t i = 0; i < (-b); i++)
|
||
{
|
||
result /= (float32)a;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|