/** ********************************************************************* * @file main.c * @author liaodeyun * @version V1.0 * @date 2025-7-6 * @brief RT-Thread 3.0 + STM32 天然气流量计算 ********************************************************************* * @attention * * 实验平台:野火 H750 PRO STM32 开发板 * 论坛 :http://www.firebbs.cn * 淘宝 :https://fire-stm32.taobao.com * ********************************************************************** */ /* ************************************************************************* * 包含的头文件 ************************************************************************* */ #include "board.h" #include "rtthread.h" #include #include "NGCal.h" #include "Therm.h" #include "Detail.h" #include "FlowCal.h" /* ************************************************************************* * 变量 ************************************************************************* */ /* 定义线程控制块 */ static rt_thread_t OFlowCal_thread = RT_NULL; static rt_thread_t key_thread = RT_NULL; /* ************************************************************************* * 函数声明 ************************************************************************* */ static void OFlowCal_thread_entry(void* parameter); static void key_thread_entry(void* parameter); /* ************************************************************************* * main 函数 ************************************************************************* */ /** * @brief 主函数 * @param 无 * @retval 无 */ int main(void) { /* * 开发板硬件初始化,RTT系统初始化已经在main函数之前完成, * 即在component.c文件中的rtthread_startup()函数中完成了。 * 所以在main函数中,只需要创建线程和启动线程即可。 */ rt_kprintf("这是一个[野火]-STM32H750天然气流量计算机实验程序!\n\n"); rt_kprintf("按下K1挂起线程,按下K2恢复线程\n"); OFlowCal_thread = /* 线程控制块指针 */ rt_thread_create( "OFlowCal", /* 线程名字 */ OFlowCal_thread_entry, /* 线程入口函数 */ RT_NULL, /* 线程入口函数参数 */ 512, /* 线程栈大小 */ 3, /* 线程的优先级 */ 20); /* 线程时间片 */ /* 启动线程,开启调度 */ if (OFlowCal_thread != RT_NULL) rt_thread_startup(OFlowCal_thread); else return -1; key_thread = /* 线程控制块指针 */ rt_thread_create( "key", /* 线程名字 */ key_thread_entry, /* 线程入口函数 */ RT_NULL, /* 线程入口函数参数 */ 512, /* 线程栈大小 */ 2, /* 线程的优先级 */ 20); /* 线程时间片 */ /* 启动线程,开启调度 */ if (key_thread != RT_NULL) rt_thread_startup(key_thread); else return -1; } /* ************************************************************************* * 线程定义 ************************************************************************* */ static void OFlowCal_thread_entry(void* parameter) { while (1) { // 初始化结构体 FlowParSTRUCT flowParams = {0}; NGParSTRUCT ngParams = {0}; // 设置基本参数 flowParams.dPatm = 0.0981; // 标准大气压(bar) flowParams.dPf = 1.48; // 压力(MPa) flowParams.dPfType = 0; // 0=表压,1=绝压 flowParams.dDp = 12.50; // 差压(kPa) flowParams.dTf = 15.0; // 温度(°C) flowParams.dCbtj = 0; // 参比条件类型(0=标准状态) // 设置管道参数 flowParams.dPipeD = 259.38; // 管道内径(mm) flowParams.dOrificeD = 150.25; // 孔板孔径(mm) flowParams.dPipeType = 0; // 管道类型 flowParams.dPtmode = 0; // 取压方式(0=法兰取压,1=角接取压) // 设置材料参数 flowParams.dPipeMaterial = 2; // 20号钢 flowParams.dOrificeMaterial = 10; // 镍铬合金 // 设置天然气组分(示例: 95%甲烷,5%其他) // 初始化天然气组分数组(GB/T 21446-2008 典型示例组成) for(int i=0; i