GasFlowMeter/User/NG/main.c

180 lines
8.3 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.

#include <stdio.h>
#include "NGCal.h"
#include "FlowCal.h"
int main() {
// 定义并初始化 FlowParSTRUCT 结构体变量
FlowParSTRUCT flowParams = {0};
NGParSTRUCT ngParams = {0};
// 设置基本参数
flowParams.dPatm = 0.0981; // 标准大气压(bar)
flowParams.dPf = 4; // 压力(MPa)
flowParams.dPfType = 1; // 0=表压1=绝压
flowParams.dDp = 12.50; // 差压(kPa)
flowParams.dTf = 10; // 温度(°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 < NUMBEROFCOMPONENTS; i++) {
flowParams.dNG_Compents[i] = 0.0; // 先全部初始化为0
}
// 按照GB/T 21446-2008标准中典型天然气组分赋值(体积百分比)
flowParams.dNG_Compents[0] = 90.6724; // 甲烷(CH4)
flowParams.dNG_Compents[1] = 3.1284; // 氮气(N2)
flowParams.dNG_Compents[2] = 0.4676; // 二氧化碳(CO2)
flowParams.dNG_Compents[3] =4.5279; // 乙烷(C2H6)
flowParams.dNG_Compents[4] = 0.8280; // 丙烷(C3H8)
flowParams.dNG_Compents[5] = 0.00; // 水(H2O)
flowParams.dNG_Compents[6] = 0.00; // 硫化氢(H2S)
flowParams.dNG_Compents[7] = 0.0; // 氢气(H2)
flowParams.dNG_Compents[8] = 0.00; // 一氧化碳(CO)
flowParams.dNG_Compents[9] = 0.00; // 氧气(O2)
flowParams.dNG_Compents[10] = 0.1037; // 异丁烷(i-C4H10)
flowParams.dNG_Compents[11] = 0.1563; // 正丁烷(n-C4H10)
flowParams.dNG_Compents[12] = 0.0321; // 异戊烷(i-C5H12)
flowParams.dNG_Compents[13] = 0.0443; // 正戊烷(n-C5H12)
flowParams.dNG_Compents[14] = 0.0393; // 己烷(C6H14)
flowParams.dNG_Compents[15] = 0.0; // 庚烷(C7H16)
flowParams.dNG_Compents[16] = 0.0; // 辛烷(C8H18)
flowParams.dNG_Compents[17] = 0.0; // 壬烷(C9H20)
flowParams.dNG_Compents[18] = 0.0; // 癸烷(C10H22)
flowParams.dNG_Compents[19] = 0.0; // 氦气(He)
flowParams.dNG_Compents[20] = 0.0; // 其他组分
// flowParams.dNG_Compents[0] =96.5; // 甲烷(CH4)
// flowParams.dNG_Compents[1] =0.30; // 氮气(N2)
// flowParams.dNG_Compents[2] =0.6; // 二氧化碳(CO2)
// flowParams.dNG_Compents[3] =1.80; // 乙烷(C2H6)
// flowParams.dNG_Compents[4] =0.45; // 丙烷(C3H8)
// flowParams.dNG_Compents[5] =0; // 水(H2O)
// flowParams.dNG_Compents[6] =0; // 硫化氢(H2S)
// flowParams.dNG_Compents[7] =0; // 氢气(H2)
// flowParams.dNG_Compents[8] =0; // 一氧化碳(CO)
// flowParams.dNG_Compents[9] =0; // 氧气(O2)
// flowParams.dNG_Compents[10]= 0.1; // 异丁烷(i-C4H10)
// flowParams.dNG_Compents[11]= 0.1; // 正丁烷(n-C4H10)
// flowParams.dNG_Compents[12]= 0.05; // 异戊烷(i-C5H12)
// flowParams.dNG_Compents[13]= 0.03; // 正戊烷(n-C5H12)
// flowParams.dNG_Compents[14]= 0.07; // 己烷(C6H14)
// flowParams.dNG_Compents[15]= 0; // 庚烷(C7H16)
// flowParams.dNG_Compents[16]= 0; // 辛烷(C8H18)
// flowParams.dNG_Compents[17]= 0; // 壬烷(C9H20)
// flowParams.dNG_Compents[18]= 0; // 癸烷(C10H22)
// flowParams.dNG_Compents[19]= 0; // 氦气(He)
// flowParams.dNG_Compents[20]= 0; // 其他组分
// // 显式调用 NGCal_Init 初始化模块
// if (NGCal_NGCal != NGCal_Init()) {
// printf("错误NGCal 初始化失败!\n");
// return -1; // 退出程序
// }
// 调用流量计算函数
OFlowCal(&flowParams, &ngParams);
// 打印计算结果
printf("工况条件信息:\n");
printf("标准参比条件: %d\n", flowParams.dCbtj);
printf("计量参比压力: %.2f\n", flowParams.dPb_M);
printf("计量参比温度: %.2f\n", flowParams.dTb_M);
printf("能量参比压力: %.2f\n", flowParams.dPb_E);
printf("能量参比温度: %.2f\n", flowParams.dTb_E);
printf("大气压力: %.2f Pa\n", flowParams.dPatm);
printf("天然气组分:\n");
for (int i = 0; i < 21; i++) {
printf(" 组分 %d: %.6f\n", i, flowParams.dNG_Compents[i]);
}
printf("\n仪表参数:\n");
printf("仪表类型: %d\n", flowParams.dMeterType);
printf("核心类型: %d\n", flowParams.dCoreType);
printf("取压方式: %d\n", flowParams.dPtmode);
printf("管道类型: %d\n", flowParams.dPipeType);
printf("管道内径: %.2f mm\n", flowParams.dPipeD);
printf("管道材质: %d\n", flowParams.dPipeMaterial);
printf("孔板直径: %.2f mm\n", flowParams.dOrificeD);
printf("孔板材质: %d\n", flowParams.dOrificeMaterial);
printf("\n测量值:\n");
printf("压力: %.2f Pa\n", flowParams.dPf);
printf("压力类型: %d\n", flowParams.dPfType);
printf("温度: %.2f K\n", flowParams.dTf);
printf("差压: %.2f Pa\n", flowParams.dDp);
printf("仪表系数: %.6f\n", flowParams.dMeterFactor);
printf("脉冲数: %.2f\n", flowParams.dPulseNum);
printf("\n计算结果:\n");
printf("膨胀系数: %.6f\n", flowParams.dE);
printf("相对密度系数: %.6f\n", flowParams.dFG);
printf("超压缩系数: %.6f\n", flowParams.dFT);
printf("动力粘度: %.6f\n", flowParams.dDViscosity);
printf("热膨胀系数: %.6f\n", flowParams.dDExpCoefficient);
printf("管道雷诺数: %.2f\n", flowParams.dRnPipe);
printf("孔板弯曲系数: %.6f\n", flowParams.dBk);
printf("管道粗糙度: %.6f\n", flowParams.dRoughNessPipe);
printf("流出系数: %.6f\n", flowParams.dCd);
printf("流出系数修正: %.6f\n", flowParams.dCdCorrect);
printf("喷嘴流出系数: %.6f\n", flowParams.dCdNozell);
printf("标况体积流量: %.6f Nm3/s\n", flowParams.dVFlowb);
printf("工况体积流量: %.6f m3/s\n", flowParams.dVFlowf);
printf("质量流量: %.6f t/s\n", flowParams.dMFlowb);
printf("能量流量: %.6f MJ/s\n", flowParams.dEFlowb);
printf("流速: %.6f m/s\n", flowParams.dVelocityFlow);
printf("压力损失: %.6f\n", flowParams.dPressLost);
printf("直径比: %.6f\n", flowParams.dBeta);
printf("等熵指数: %.6f\n", flowParams.dKappa);
printf("压缩因子: %.6f\n", flowParams.dFpv);
printf("状态: %ld\n", ngParams.lStatus);
printf("强制更新标志: %d\n", ngParams.bForceUpdate);
printf("混合比:\n");
for (int i = 0; i < 21; i++) {
printf(" 组分 %d: %.6f\n", i, ngParams.adMixture[i]);
}
printf("参比条件: %d\n", ngParams.dCbtj);
printf("标准压力: %.2f Pa\n", ngParams.dPb);
printf("标准温度: %.2f K\n", ngParams.dTb);
printf("工作压力: %.2f Pa\n", ngParams.dPf);
printf("工作温度: %.2f K\n", ngParams.dTf);
printf("\nAGA 8 详细计算结果:\n");
printf("平均分子量: %.6f\n", ngParams.dMrx);
printf("标准条件下压缩因子: %.6f\n", ngParams.dZb);
printf("工作条件下压缩因子: %.6f\n", ngParams.dZf);
printf("超压缩因子: %.6f\n", ngParams.dFpv);
printf("标准条件下摩尔密度: %.6f moles/dm3\n", ngParams.dDb);
printf("工作条件下摩尔密度: %.6f moles/dm3\n", ngParams.dDf);
printf("标准条件下密度: %.6f kg/m3\n", ngParams.dRhob);
printf("工作条件下密度: %.6f kg/m3\n", ngParams.dRhof);
printf("理想相对密度: %.6f\n", ngParams.dRD_Ideal);
printf("实际相对密度: %.6f\n", ngParams.dRD_Real);
printf("\n热力学性质:\n");
printf("理想焓: %.6f\n", ngParams.dHo);
printf("实际焓: %.6f J/kg\n", ngParams.dH);
printf("实际熵: %.6f J/kg-mol.K\n", ngParams.dS);
printf("理想定压比热: %.6f J/kg-mol.K\n", ngParams.dCpi);
printf("实际定压比热: %.6f J/kg-mol.K\n", ngParams.dCp);
printf("实际定容比热: %.6f J/kg-mol.K\n", ngParams.dCv);
printf("比热比: %.6f\n", ngParams.dk);
printf("等熵指数: %.6f\n", ngParams.dKappa);
printf("声速: %.6f m/s\n", ngParams.dSOS);
printf("临界流函数: %.6f\n", ngParams.dCstar);
printf("\n单位摩尔高热值: %.6f\n", ngParams.dHhvMol);
printf("单位摩尔低热值: %.6f\n", ngParams.dLhvMol);
}