sggt/App/APP_WU/Src/apps_gather.c

765 lines
17 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @Author: wujunchao wujunchao@wuxismart.com
* @Date: 2024-12-27 11:50:56
* @LastEditors: wujunchao wujunchao@wuxismart.com
* @LastEditTime: 2025-03-20 15:09:02
* @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; //热电阻
// 热电偶真值表电压mV
// 行:[0,7]->[K, S, N, B, E, J, R, T],列:[0,10]->[mV_Tmin,...,mV_Tmax](均分成10个间隔11个端点)
static float32 TC_TABLE_MV[8][11] =
{
{-6.458, -3.734, 2.354, 9.061, 15.849, 22.819, 29.757, 36.484, 42.980, 49.130, 54.886},
{-0.236, 0.888, 2.451, 4.184, 6.034, 7.992, 10.063, 12.228, 14.421, 16.611, 18.693},
{-4.345, -2.672, 1.174, 5.946, 11.428, 17.323, 23.428, 29.592, 35.714, 41.713, 47.513},
{0.000, 0.144, 0.647, 1.483, 2.625, 4.041, 5.702, 7.567, 9.593, 11.708, 13.820},
{-9.835, -7.021, -0.925, 7.066, 16.269, 26.154, 36.358, 46.624, 56.764, 66.705, 76.373},
{-8.095, -3.300, 3.757, 11.501, 19.311, 27.113, 35.230, 44.010, 52.996, 61.415, 69.553},
{-0.226, 0.895, 2.538, 4.417, 6.472, 8.685, 11.052, 13.549, 16.097, 18.654, 21.101},
{-6.258, -5.650, -4.324, -2.444, -0.077, 2.687, 5.812, 9.235, 12.912, 16.802, 20.872}
};
//热电偶真值表,温度℃
// 行:[0,7]->[K, S, N, B, E, J, R, T],列:[0,10]->[Tmin,...,Tmax](均分成10个间隔11个端点)
static float32 TC_TABLE_TEMP[8][11] =
{
{-270.0, -105.8, 58.4, 222.6, 386.8, 551.0, 715.2, 879.4, 1043.6, 1207.8, 1372.0},
{-50.0, 131.8, 313.6, 495.4, 677.2, 859.0, 1040.8, 1222.6, 1404.4, 1586.2, 1768.0},
{-270.0, -113.0, 44.0, 201.0, 358.0, 515.0, 672.0, 829.0, 986.0, 1143.0, 1300.0},
{0.0, 182.0, 364.0, 546.0, 728.0, 910.0, 1092.0, 1274.0, 1456.0, 1638.0, 1820.0},
{-270.0, -143.0, -16.0, 111.0, 238.0, 365.0, 492.0, 619.0, 746.0, 873.0, 1000.0},
{-210.0, -69.0, 72.0, 213.0, 354.0, 495.0, 636.0, 777.0, 918.0, 1059.0, 1200.0},
{-50.0, 131.8, 313.6, 495.4, 677.2, 859.0, 1040.8, 1222.6, 1404.4, 1586.2, 1768.0},
{-270.0, -203.0, -136.0, -69.0, -2.0, 65.0, 132.0, 199.0, 266.0, 333.0, 400.0}
};
//热电偶数据初始化
void TC_init(void)
{
//热电偶K
TC[0].tag = SIG_TC;
TC[0].typ = TC_K;
TC[0].low = TC_TABLE_TEMP[0][0];
TC[0].up = TC_TABLE_TEMP[0][10];
TC[0].pv = 0;
//热电偶S
TC[1].tag = SIG_TC;
TC[1].typ = TC_S;
TC[1].low = TC_TABLE_TEMP[1][0];
TC[1].up = TC_TABLE_TEMP[1][10];
TC[1].pv = 0;
//热电偶N
TC[2].tag = SIG_TC;
TC[2].typ = TC_N;
TC[2].low = TC_TABLE_TEMP[2][0];
TC[2].up = TC_TABLE_TEMP[2][10];
TC[2].pv = 0;
//热电偶B
TC[3].tag = SIG_TC;
TC[3].typ = TC_B;
TC[3].low = TC_TABLE_TEMP[3][0];;
TC[3].up = TC_TABLE_TEMP[3][10];;
TC[3].pv = 0;
//热电偶E
TC[4].tag = SIG_TC;
TC[4].typ = TC_E;
TC[4].low = TC_TABLE_TEMP[4][0];
TC[4].up = TC_TABLE_TEMP[4][10];
TC[4].pv = 0;
//热电偶J
TC[5].tag = SIG_TC;
TC[5].typ = TC_J;
TC[5].low = TC_TABLE_TEMP[5][0];
TC[5].up = TC_TABLE_TEMP[5][10];
TC[5].pv = 0;
//热电偶R
TC[6].tag = SIG_TC;
TC[6].typ = TC_R;
TC[6].low = TC_TABLE_TEMP[6][0];
TC[6].up = TC_TABLE_TEMP[6][10];
TC[6].pv = 0;
//热电偶T
TC[7].tag = SIG_TC;
TC[7].typ = TC_T;
TC[7].low = TC_TABLE_TEMP[7][0];
TC[7].up = TC_TABLE_TEMP[7][10];
TC[7].pv = 0;
}
//物理量内容初始化
//底层数据,无法通过按键&菜单修改用户使用时仅修改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;
TC_init();
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 = CH7_IN_MVOL;
}
break;
case VOLTAGE_V:
{
mux_signal.channel = CH6_IN_VOL;
}
break;
case CURRENT_MA:
{
mux_signal.channel = CH8_IN_CUR;
}
break;
case RESISTANT_OHM:
{
//与热电阻一致
mux_signal.channel = CH11_IN_RTD;
}
break;
case FREQUENCE_KHZ:
{
mux_signal.channel = CH9_IN_FRE;
}
break;
case TC_K:
{
mux_signal.channel = CH10_IN_TC;
}
break;
case TC_S:
{
mux_signal.channel = CH10_IN_TC;
}
break;
case TC_N:
{
mux_signal.channel = CH10_IN_TC;
}
break;
case TC_B:
{
mux_signal.channel = CH10_IN_TC;
}
break;
case TC_E:
{
mux_signal.channel = CH10_IN_TC;
}
break;
case TC_J:
{
mux_signal.channel = CH10_IN_TC;
}
break;
case TC_R:
{
mux_signal.channel = CH10_IN_TC;
}
break;
case TC_T:
{
mux_signal.channel = CH10_IN_TC;
}
break;
case RTD_DC:
{
mux_signal.channel = CH11_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;
}