R1UWaterRS485/app/UWater_gp22_app.c

9083 lines
344 KiB
C
Raw Permalink 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.

/*
* File: __GP22LoRa_GP22_APP_C
* Author:
*
* Created on2017-8-3
*/
#ifdef __cplusplus
extern "C"
{
#endif
#include "sys_config.h"
#include "UWater_gp22_app.h"
#include "UWater_rtcc_driver.h"
#include "UWater_rtcc_app.h"
#include "UWater_eeprom_driver.h"
#include "UWater_frame_app.h"
#include "UWater_gp22_driver.h"
#include "UWater_pt_app.h"
#include "UWater_gpio_driver.h"
#include "UWater_timer1uS_driver.h"
#include "UWater_uart_driver.h"
#include "math.h"
#include "UWater_power_app.h"
#include "UWater_lcd_app.h"
#include "UWater_lptimer_driver.h"
#include "UWater_TemperatureCalculate_app.h"
#include "sys_processor.h"
#define PowerSaveDataMsgSys PowerUnSleepSaveDataMsgSys
/*------------------------------ Variable Define -------------------------------------*/
u32 gp22_sample_result;
/**********数据存储防护*************/
static u8 gp22_date_save_state;
static To_Float_GP30 old_monitor_flow ;
/**********数据存储防护*************/
//GP22数据计算处理机
static u8 s_g_gp22_app_state_num = GP22_APP_S0; // GP22数据计算处理机
//static u8 s_g_sample_flow_num = 0; //实际记录的流量采集 次数
static u32 s_g_flow_data[GP22_APP_QUEUE_SIZE]; //流量采集队列
static u32 s_g_flow_type[GP22_APP_QUEUE_SIZE]; //类型采集队列
static u32 s_g_sample_sum_lcd;
static float s_g_diftof_data[GP22_APP_DIFTOF_SIZE]; //时间差滤波队列 2016-8-15
static u16 s_g_diftof_head = 0; //时间差滤波队列数据更新 头地址
static float s_g_diftof_data_2[GP22_APP_DIFTOF_SIZE_2]; //时间差滤波队列 2016-8-15
static u16 s_g_diftof_head_2 = 0; //时间差滤波队列数据更新 头地址
static u8 s_g_diftof_head_2_quotient = 0;
static u8 s_g_diftof_for_total = FALSE;
#if EN_LARGE_FILITER//2022-01-10
static float s_g_diftof_data_3[GP22_APP_DIFTOF_SIZE_3]; //第三次时间差滤波队列 2020-3-6
static float still_water_add_3 = 0;
static u16 s_g_diftof_head_3 = 0; //时间差滤波队列数据针对大口径增加 第三次滤波
static u8 s_g_diftof_head_3_quotient = 0;
#endif
/*活塞台子添加*/
//温度采集与滤波相关
static float s_g_temp_data[MAX_TEMP_NUM]; //用于采集温度 2019-8-11
static u8 s_g_sample_head = 0; //时间差滤波队列数据更新 头地址
static u8 s_g_sample_length = 0; //采样长度
u8 s_g_sample_start_flag = FALSE; //采样标志位
static u8 s_g_sample_ok_flag= 0; //采样数据处理完成标志位
float temp_sample_value=0;//用于存储采样滤波后的温度数值
/*活塞台子添加*/
static u32 gp30_app_start_flow_filter;//用来接收始动流量数值
//static u32 gp22_app_start_flow_reverse;
static float gp30_app_start_flow_filter_float;//用来接收始动流量数值float类型
static float gp30_app_start_flow_reverse_float;
//static float gp30_app_start_flow_filter_for_float;
static u32 s_alarma_stop_check_tick = 0;
GP30_SYS_Date gp22_app_data; //gp22当前数据
GP30_SYS_Date gp22_test_data; //gp22检定状态下当前数据
EVENT gp30_event;
EVENT_FLAG gp30_event_flag;
EVENT_FLAG gp30_event_save_flag;
To_Float gp30_test_total_start_flow;
To_Float gp30_total_flow_last; //GP30上次累计数2016-6-23
static u8 s_g_sample_flag = 0; //本次采集启动温度,标志
OVERRUN_NUM gp30_overrun_num;
static u32 s_g_sample_total_sum = 0; //时间差总计采样次数
//static float s_g_sample_add = 0; //时间差和
//GP22采样间隔处理机
static u8 s_g_gp22_sample_app_state_num = GP22_APP_SAMPLE_S0;
//static float gp30_total_flow_calcult_factor = FACTOR_0_5;
//static u8 s_g_gp22_sample_span = GP22_SAMPLE_2HZ; //1对用0.5采样一次
//static u8 s_g_gp22_sample_sum = 0;//采样频率切换时的计数,超过5min的
//static u8 s_g_gp22_sample_flag_num = 0; //采样计数,与采样频率切换相关
//static float globle_total_flow_float = 0;
static u8 start_measure_flag = 1; //初始化为启动流量测量
//static u8 s_g_send_data_app_state_num = SEND_DATA_S0;//主动上报处理机状态
To_Float_GP30 total_flow_old;//非检定状态累计流量
To_Float_GP30 total_flow_now;//非检定状态累计流量
To_Float_GP30 total_reverse_flow_old;//非检定状态逆流累计流量
To_Float_GP30 total_reverse_flow_now;//非检定状态逆流累计流量
u32 mater_waring_state;
u32 send_timer_old = 0;//检定状态定时1s
u32 low_power_timer_old = 0;//低电平状态时间
//static u8 total_flow_change_flag = 0;//累计流量更新标志
static u8 s_gp30_eep_complete=0;
////////////////////////////////////////////////////////////////////累积量改为double计算
To_Double duoble_total_flow;
////////////////////////////////////////////////////////////////////逆流计量增加内容
static float s_g_temp_float_flow_data[GP22_APP_QUEUE_SIZE]; //float类型时间差滤波队列 2019-5-10
static u8 ins_flow_flag = 0; //本次时间差滤波正负标志
static float globle_cur_total_flow_float = 0;
////////////////////////////////////////////////////////////////////逆流计量增加内容
//静水时间相关
static u32 s_g_still_water_time = 0; //静水时间差
//static u32 s_g_still_time = 0; //静水时间
//static float s_g_still_lenth = 0; //静水距离
//static float s_g_still_water_time_min = 0; //静水时间差最小值
//static float s_g_still_water_time_max = 0; //静水时间差最大值
//static u8 s_g_still_flag = FALSE;
//static u8 s_g_still_finish = FALSE; //接口信息
//static u8 s_g_flow_err_sum = 0; //流量错误次数
//static u8 s_g_set_window = FALSE; //重新设置窗口
static u8 Gp30_init_data_flag = FALSE;//下初值标志
//GP22数据清零处理机
//主要工作: 处理上位机命令,将当前数据清零
static u8 s_g_gp22_app_clear_data_state_num = GP30_APP_CLEAR_DATA_S0;
GP30_APP_SAVE_DATA g_sample_save_data; //当前数据备份
GP30_DIFTOF_CAL_DATA g_diftof_cal_data;//校准的时间差和标志
static float calibration_diftof_value=0;//用于记录计算累积量时的当前时间差
//当前数据备份处理机
//主要工作: 完成GP22当前累计数据备份存储
//同时作为故障前累计数据显示用于LCD显示故障前累计值
//当前数据区:第一次上电 状态字2 0x77 0x88+ 年月日时4 + 累计热量kW?h4 + 累计冷量kW?h4 + 累计流量m34 + 静水时间差4 = 22字节
//流量计算间隔切换处理机 2022-5-23 09:46:56
static u8 s_g_gp30_control_cal_state = GP30_CONTROL_S0; //LPTIMER时间轴
static u32 s_g_gp30_control_cal_timer = 0;
static u8 s_gp22_cal_interval_msg = FALSE; //计算时间轴默认是用lptimer
/*ZCC 和 nB 上报防护 2022-7-21 15:38:06*/
static float ZCC_NB_buf[3]={0};
static u8 ZCC_direction_flow_flag[3]={0};
static float ZCC_ins_flow[3]={0};
//#pragma clang diagnostic push
//#pragma clang diagnostic ignored "-Wunknown-attributes"
#define __no_init __attribute__((zero_init))
__no_init volatile float gp22_copy_total_flow __attribute__((section(".ARM.__at_0x20007F00")));
__no_init volatile float gp22_copy_total_flow_reverse __attribute__((section(".ARM.__at_0x20007F04")));
__no_init volatile float gp22_copy_total_flow_test __attribute__((section(".ARM.__at_0x20007F08")));
__no_init volatile float gp22_copy_temp_total_flow_float_test __attribute__((section(".ARM.__at_0x20007F0C")));
__no_init volatile u32 gp22_copy_reset_flag_test __attribute__((section(".ARM.__at_0x20007F10")));
__no_init volatile u32 MCU_reset_judge __attribute__((section(".ARM.__at_0x20007F14")));
__no_init volatile float gp22_copy_temp_total_flow_float __attribute__((section(".ARM.__at_0x20007F18")));
__no_init volatile u16 record_last_calculative_time __attribute__((section(".ARM.__at_0x20007F1C"))); //用于记录距离上次计算的时间间隔,方便复位精确补偿
__no_init volatile float temp_calculate_last __attribute__((section(".ARM.__at_0x20007F38")));//记录上次的反算温度数值
//非流量相关复位不丢失数据
/*以下位置在其他模块定义,注意不要重复
__no_init volatile u8 meter_reset_cnt __attribute__((section(".ARM.__at_0x20007F20")));//复位次数
__no_init volatile u8 meter_reset_reason __attribute__((section(".ARM.__at_0x20007F21")));//上次复位原因
__no_init volatile u8 s_valapp_upload_times __attribute__((section(".ARM.__at_0x20007F22")));//阀门关闭状态下,频繁上报的次数
*/
//#pragma clang diagnostic pop
static u8 s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S0;
GP30_APP_EVENT_DATA s_g_event_data;
//static DateTime gp30_get_time;
//GP22应用处理机上电初始化
//主要工作: GP22应用处理机上电初始化 EE数据读取
//EEPROM区域 0x80-0xB7
//第一次上电标志: 0x77 0x88
static u8 s_g_gp22_init_state_num = GP30_APP_INIT_S0;
static u8 g_gp22_init_flag = 0; //GP22 应用处理机上电初始化是否完成的判断
static u8 s_g_bootloader_msg = FALSE;
static u8 diftof_auto_calibration_msg = FALSE;//静水时间差自动校准标志
static u8 transducer_err_msg = FALSE;//换能器异常标志
static u8 s_g_gp22_err_flag = 0;
static u8 reverse_flow_sum = 0;
//static u8 s_gengxin_statebyte_msg = FALSE;
//static u32 GP30_filter_last_value = 0;//针对MID样机出现的小流异常数滤波用_传统体积法台子
//static float GP30_filter_last_value_for_shunshi = 0;//针对MID样机出现的小流异常数滤波用_活塞台子
//static float TempCurve(float x);
//float FlowCurveWaterMeter(float x);
TYP_FLOW_COEFFICIENT *flow_coef;
UNION_4U8TOU32 *seg_flow_coef;//2020-07-08 流量系数
//u16 g_test_start_sum = 0;
//u16 g_test_stop_sum = 0;
static u32 intval_time = 0; //LPTIM定时,用于计算准确的间隔流量计量时间
static u16 record_calculative_time = 0; //用于记录本次计算的当前时间,方便与下次计算的时间做差
/*GP30中断计算流量*/
static uint8_t s_gp22_Data_Update_msg = 0; //GP30中断标志用于计算累积量时判断
#if WENDU_FANSUAN_OPEN
u32 s_g_up_am[GP22_APP_TEMP_INVERSE_DATA_SIZE+GP22_APP_TEMP_INVERSE_DATA_SIZE]; //am采集队列 数组中前4个存储第4~第7个波形振幅后4个存储第8~第11个波形振幅
u32 s_g_down_am[GP22_APP_TEMP_INVERSE_DATA_SIZE+GP22_APP_TEMP_INVERSE_DATA_SIZE]; //down采集队列 数组中前4个存储第4~第7个波形振幅后4个存储第8~第11个波形振幅
#else
static u32 s_g_up_am[GP22_APP_MAX_AM_BUFFER]; //UP振幅采集队列
static u32 s_g_down_am[GP22_APP_MAX_AM_BUFFER]; //down振幅采集队列
#endif
//float FilterJunZhi_float(float *p, u8 len); //不排序,去掉两头 各两个最值20ms
//超声波在非流动介质中的声速
//const u32 sound_speed_back [101] = {
// 0X057A5604,
// 0X057F4FDC, 0X05842C89, 0X0588EC8C, 0X058D905F, 0X0592187F,
// 0X05968562, 0X059AD77F, 0X059F0F4B, 0X05A32D37, 0X05A731B3,
// 0X05AB1D2D, 0X05AEF011, 0X05B2AAC9, 0X05B64DBB, 0X05B9D94E,
// 0X05BD4DE6, 0X05C0ABE4, 0X05C3F3A9, 0X05C72592, 0X05CA41FD,
// 0X05CD4942, 0X05D03BBB, 0X05D319BF, 0X05D5E3A3, 0X05D899B9,
// 0X05DB3C54, 0X05DDCBC4, 0X05E04857, 0X05E2B259, 0X05E50A16,
// 0X05E74FD6, 0X05E983E2, 0X05EBA681, 0X05EDB7F6, 0X05EFB885,
// 0X05F1A871, 0X05F387F8, 0X05F5575C, 0X05F716D8, 0X05F8C6A9,
// 0X05FA670B, 0X05FBF835, 0X05FD7A62, 0X05FEEDC7, 0X0600529B,
// 0X0601A911, 0X0602F15D, 0X06042BB1, 0X0605583E, 0X06067734,
// 0X060788C1, 0X06088D14, 0X06098458, 0X060A6EB8, 0X060B4C60,
// 0X060C1D78, 0X060CE22A, 0X060D9A9C, 0X060E46F6, 0X060EE75D,
// 0X060F7BF6, 0X061004E5, 0X0610824D, 0X0610F450, 0X06115B11,
// 0X0611B6B0, 0X0612074D, 0X06124D07, 0X061287FE, 0X0612B84F,
// 0X0612DE18, 0X0612F975, 0X06130A83, 0X0613115E, 0X06130E20,
// 0X061300E6, 0X0612E9C7, 0X0612C8DF, 0X06129E46, 0X06126A16,
// 0X06122C66, 0X0611E54F, 0X061194E8, 0X06113B4A, 0X0610D88B,
// 0X06106CC2, 0X060FF805, 0X060F7A6B, 0X060EF40A, 0X060E64F8,
// 0X060DCD4A, 0X060D2D18, 0X060C8475, 0X060BD378, 0X060B1A36,
// 0X060A58C5, 0X06098F39, 0X0608BDA9, 0X0607E429, 0X060702D0,
//};
/*
RAM区数据校验判断
return TRUE 当前读出的数据奇偶检验出错
FALSE 当前读出的数据奇偶检验正确
*/
u8 RAMDataVerify(u8* pCheckData,u8 nSizeof)
{
u8 nCount=0;
volatile u8 nDataTemp=0;
u32 nCheck = 0;
for(nCount=0; nCount<nSizeof;nCount++)
{
nDataTemp = *(pCheckData+nCount);
nCheck = (u32)(pCheckData+nCount)&0x00007FFF;//-0x20000000;
//数据检验错误
if(nCheck == M0P_RAM->ERRADDR_f.ERRADDR)
{
M0P_RAM->ICLR_f.ERRCLR = 0;
return TRUE;
}
}
return FALSE;
}
/*活塞台子代码开始区-------------------------------------------------------*/
/***************************************************************
函数名称: Check_Start_STOP_Filter_Flag()
返回值 查询Start-Stop时温度滤波标志
****************************************************************/
u8 Check_Start_STOP_Filter_Flag()
{
return s_g_sample_ok_flag;
}
/***************************************************************
函数名称: float sample_temp_value(void)
返回值 清零Start-Stop时温度滤波标志
****************************************************************/
void Clear_Start_STOP_Filter_Flag()
{
s_g_sample_ok_flag=0;
}
/***************************************************************
函数名称: Check_Temperature_Parameter()
返回值 返回Start-Stop的滤波后温度值
****************************************************************/
float Check_Temperature_Parameter()
{
return temp_sample_value;
}
/***************************************************************
函数名称: void start_temp_sample(void)
功 能; START 命令下开始进行温度采样
参 数:
返回值
****************************************************************/
void start_temp_sample(void)
{
if (10 == LcdCheckStateApp()) //非检定状态,不需每次都检测时间差
{
return;
}
if((01 == LcdCheckStateApp()) && (0 == start_measure_flag)) //检定而且上位机不允许采样
{
return;
}
if(s_g_sample_start_flag)
{
s_g_temp_data[s_g_sample_head] = TempCheckValueApp(); //将温度值存入到数组中
s_g_sample_head++;
if(MAX_TEMP_NUM!=s_g_sample_head)//采样数组满了一次
{
if(s_g_sample_length !=MAX_TEMP_NUM)
{
s_g_sample_length=s_g_sample_head;//
}
}
else
{
s_g_sample_length=MAX_TEMP_NUM;
}
s_g_sample_head %= MAX_TEMP_NUM;
}
}
/*活塞台子*/
/*
stop2下闹钟失效的处理RtccDriver默认OB看门狗在stop下运行
void WDTWakeUpClear(void);
void WDTWakeUpSumAdd(void);
u8 WDTWakeUpIfReset(void);
*/
u8 WDTWakeUpIfReset(void)
{
return FALSE; //先暂时未实现PIC上已经实现
}
/*------------------------------ Function Define -------------------------------------*/
/******************************************************************************
* 名称: bcdToHex32
* 功能:
* 输入: 压缩BCD码
* 输出: hex值
* 编写:
* 日期:
* 修改: N/A
******************************************************************************/
u32 bcdToHex32(u32 value)
{
signed char i;
u8 factor;
u32 rtval = 0;
for (i = 28; i >= 0; i -= 4)
{
factor = (value >> i) & 0xf;
if (factor > 9) return 0XFFFFFFFF; //数据错误
rtval = rtval * 10 + factor;
}
return rtval;
}
/***************************************************************
函数名称: u32 FilterJunZhi(u32 *data, u8 data_len)
功 能; 中值+算数平均滤波
参 数: u32 *data 需要进行处理的数据数组地址
返回值 滤波完成后的值
****************************************************************/
//void quick_sort(float *p, u8 l, u8 r) //int a[]={49,38,65,97,76,13,27}; int l = 0; int r = 6;
//{
// u8 i, j;
// float x;
//
// if (l < r)
// {
// i = l;
// j = r;
// x = p[i];
// while (i < j)
// {
// while(i < j && p[j] > x)
// j--; /* 从右向左找第一个小于x的数 */
// if(i < j)
// p[i++] = p[j];
//
// while(i < j && p[i] < x)
// i++; /* 从左向右找第一个大于x的数 */
// if(i < j)
// p[j--] = p[i];
//
// }
// p[i] = x;
// quick_sort(p, l, i-1); /* 递归调用 */
// quick_sort(p, i+1, r);
// }
//}
//void quiksort(float *a,u8 low,u8 high)
//{
// u8 i = low;
// u8 j = high;
// float temp = a[i];
//
// if( low < high)
// {
// while(i < j)
// {
// while((a[j] >= temp) && (i < j))
// {
// j--;
// }
// a[i] = a[j];
// while((a[i] <= temp) && (i < j))
// {
// i++;
// }
// a[j]= a[i];
// }
// a[i] = temp;
// quiksort(a,low,i-1);
// quiksort(a,j+1,high);
// }
// else
// {
// return;
// }
//}
//void quicksort(float* a,u8 left,u8 right)
//{
// u8 i,j;
// float temp;
//
// i=left;
// j=right;
// temp=a[left];
// if(left>right)
// return;
// while(i!=j)
// {
// while(a[j]>=temp&&j>i)
// j--;
// if(j>i)
// a[i++]=a[j];
// while(a[i]<=temp&&j>i)
// i++;
// if(j>i)
// a[j--]=a[i];
//
// }
// a[i]=temp;
// quicksort(a,left,i-1);
// quicksort(a,i+1,right);
//}
//u32 FilterJunZhi(u32 *data, u8 data_len)
//{
// u8 i, j, len, count;
// u32 *p;
// u32 temp = 0, sum = 0;
// p = data;
// len = data_len;
// for (j = 0; j < len - 1; j++)
// {
// for (i = 0; i < len - 1 - j; i++)
// {
// if (p[i] > p[i + 1])
// {
// temp = p[i];
// p[i] = p[i + 1];
// p[i + 1] = temp;
// }
// }
// }
// for (count = 2; count < len - 2; count++)
// {
// sum += p[count];
// }
// return (u32) (sum / (len - 4));
//}
#if LILUNGONGSHI_MODLE_WATER_METER
#if ROUND_LLGS_DN15_BRASS_40KPA_GP30_32768 || ROUND_LLGS_DN20_BRASS_40KPA_GP30_32768|| ROUND_LLGS_WDFS_DN15_BRASS_40KPA_GP30_32768 || ROUND_LLGS_WDFS_DN20_BRASS_40KPA_GP30_32768 \
|| ROUND_LLGS_XFZ_DN15_BRASS_40KPA_GP30_32768 || ROUND_LLGS_XFZ_DN20_BRASS_40KPA_GP30_32768 \
||Plastic_LLGS_WDFS_DN15_PALSTIC_40KPA_GP30_32768
// 圆壳表专用 ----添上表计类型
/************理论公式判定误差补偿曲线函数*****************
Function: 遍历二维数组中的温度值确定温度范围,接着根据流量范围确定补偿曲线的数值
Description: 需要传递值: 1、温度 2、时间差 3、瞬时流量
****************************************************************/
float ErrorModifyCruve(float temp_value_float,float time_dof_temp_float,float ins_flow_temp_float)
{
u8 i=0;
float error=1;
u8 rows = sizeof(default_error_cruve)/sizeof(default_error_cruve[0]);//计算数组的行数
for(i=0;i<(rows-1);i++)//先遍历找出温度所在的范围
{
if(temp_value_float <= default_error_cruve[i][0])
{
break;
}
}
if(ins_flow_temp_float <= SEGMENT_NUM_SMALL)//确定误差补偿曲线——————————用的误差建模时模型的分段 2021-11-17
{
error = default_error_cruve[i][1] + default_error_cruve[i][2]*temp_value_float + default_error_cruve[i][3]*time_dof_temp_float +
default_error_cruve[i][4]*temp_value_float*time_dof_temp_float + default_error_cruve[i][5]*time_dof_temp_float*time_dof_temp_float;
}
else if(ins_flow_temp_float <= SEGMENT_NUM_MIDDLE)
{
error = default_error_cruve[i][6] + default_error_cruve[i][7]*temp_value_float + default_error_cruve[i][8]*time_dof_temp_float +
default_error_cruve[i][9]*temp_value_float*time_dof_temp_float + default_error_cruve[i][10]*time_dof_temp_float*time_dof_temp_float;
}
else//确定误差补偿曲线
{
error = default_error_cruve[i][11] + default_error_cruve[i][12]*temp_value_float + default_error_cruve[i][13]*time_dof_temp_float +
default_error_cruve[i][14]*temp_value_float*time_dof_temp_float + default_error_cruve[i][15]*time_dof_temp_float*time_dof_temp_float;
}
return ins_flow_temp_float * error;
}
#else
/************理论公式判定误差补偿曲线函数*****************
Function: 遍历二维数组中的温度值确定温度范围,接着根据流量范围确定补偿曲线的数值
Description: 需要传递值: 1、温度 2、时间差 3、瞬时流量
****************************************************************/
float ErrorModifyCruve(float temp_value_float,float time_dof_temp_float,float ins_flow_temp_float)
{
u8 i=0;
float error=1;
u8 rows = sizeof(default_error_cruve)/sizeof(default_error_cruve[0]);//计算数组的行数
for(i=0;i<(rows-1);i++)//先遍历找出温度所在的范围
{
if(temp_value_float <= default_error_cruve[i][0])
{
break;
}
}
if(ins_flow_temp_float <= SEGMENT_NUM_MIDDLE)//确定误差补偿曲线——————————用的误差建模时模型的分段 2021-11-17
{
#if ERROR_MODIFY_CRUVE_FOR_SMALL_FLOW // 如果是PF25、PF32和PF40口径就用小流量分段方式
if(ins_flow_temp_float <= SEGMENT_NUM_SMALL)
{
error = default_error_cruve[i][1] + default_error_cruve[i][2]*temp_value_float + default_error_cruve[i][3]*time_dof_temp_float +
default_error_cruve[i][4]*temp_value_float*time_dof_temp_float + default_error_cruve[i][5]*time_dof_temp_float*time_dof_temp_float;
}
else
{
error = default_error_cruve[i][6] + default_error_cruve[i][7]*temp_value_float + default_error_cruve[i][8]*time_dof_temp_float +
default_error_cruve[i][9]*temp_value_float*time_dof_temp_float + default_error_cruve[i][10]*time_dof_temp_float*time_dof_temp_float;
}
#else
error = default_error_cruve[i][1] + default_error_cruve[i][2]*temp_value_float + default_error_cruve[i][3]*time_dof_temp_float +
default_error_cruve[i][4]*temp_value_float*time_dof_temp_float + default_error_cruve[i][5]*time_dof_temp_float*time_dof_temp_float;
#endif
}
else if(ins_flow_temp_float <= SEGMENT_NUM_ERROR_MIDDLE)//不锈钢15口径建模分段专用
{
error = default_error_cruve[i][6] + default_error_cruve[i][7]*temp_value_float + default_error_cruve[i][8]*time_dof_temp_float +
default_error_cruve[i][9]*temp_value_float*time_dof_temp_float + default_error_cruve[i][10]*time_dof_temp_float*time_dof_temp_float;
}
else//确定误差补偿曲线
{
error = default_error_cruve[i][11] + default_error_cruve[i][12]*temp_value_float + default_error_cruve[i][13]*time_dof_temp_float +
default_error_cruve[i][14]*temp_value_float*time_dof_temp_float + default_error_cruve[i][15]*time_dof_temp_float*time_dof_temp_float;
}
return ins_flow_temp_float * error;
}
#endif
#endif
float FilterJunZhi_TestForGp30_float(float *p, u8 data_len) //滤波函数1——检定状态用于计算累积流量时对瞬时流量的滤波
{
u8 i, j, count,zero_sum = 0, valve_flag = 0, position = 0,start_flow_sum = 0;
float temp = 0, sum = 0, average_diftof=0;
if(data_len < 10)
{
return 0;
}
for (i = 0; i < data_len; i++)
{
if(((p[i]>=0)&&(p[i] < gp30_app_start_flow_filter_float))||((p[i]<0)&&(p[i] > gp30_app_start_flow_reverse_float)))
{
start_flow_sum++;
zero_sum++;
if (zero_sum == 2) //buffer0和buffer1静水buffer234有流速证明开阀
{
if(1==i)
{
if ((p[2] >= gp30_app_start_flow_filter_float)||(p[2] <= gp30_app_start_flow_reverse_float)) //后面连续3个大值或者三个中有1个0的情况表示开阀只判正向开关阀
{
if((((p[3] >= gp30_app_start_flow_filter_float)||(p[3] <= gp30_app_start_flow_reverse_float)) && ((p[4] >= gp30_app_start_flow_filter_float)||(p[4] <= gp30_app_start_flow_reverse_float)))||((p[3] == 0)
&& ((p[4] >= gp30_app_start_flow_filter_float)||(p[4] <= gp30_app_start_flow_reverse_float)))||(((p[3] >= gp30_app_start_flow_filter_float)||(p[3] <= gp30_app_start_flow_reverse_float)) && (p[4] == 0)))
{
position = i;
valve_flag = 1;
break;
}
}
}
else if(15==i)//buffer14和buffer15静水buffer11 12 13有流速证明关阀
{
if((p[11] >= gp30_app_start_flow_filter_float)||(p[11] <= gp30_app_start_flow_reverse_float)) //后面连续3个大值或者三个中有1个0的情况表示开阀只判正向开关阀
{
if((((p[12] >= gp30_app_start_flow_filter_float)||(p[12] <= gp30_app_start_flow_reverse_float)) && ((p[13] >= gp30_app_start_flow_filter_float)||(p[13] <= gp30_app_start_flow_reverse_float)))||((p[12] == 0)
&& ((p[13] >= gp30_app_start_flow_filter_float)||(p[13] <= gp30_app_start_flow_reverse_float)))||(((p[12] >= gp30_app_start_flow_filter_float)||(p[12] <= gp30_app_start_flow_reverse_float)) && (p[13] == 0)))
{
valve_flag = 2;
position = i - 1;
break;
}
}
}
}
else if ((zero_sum >= 3)&&(zero_sum <= 13)) //连续3个低于始动
{
if (i < (data_len - 3))
{
if ((p[i + 1] >= gp30_app_start_flow_filter_float)||(p[i + 1] <= gp30_app_start_flow_reverse_float)) //后面连续3个大值或者三个中有1个0的情况表示开阀只判正向开关阀
{
if((((p[i + 2] >= gp30_app_start_flow_filter_float)||(p[i+2] <= gp30_app_start_flow_reverse_float)) && ((p[i + 3] >= gp30_app_start_flow_filter_float)||(p[i+3] <= gp30_app_start_flow_reverse_float)))||((p[i + 2] == 0)
&& ((p[i + 3] >= gp30_app_start_flow_filter_float)||(p[i+3] <= gp30_app_start_flow_reverse_float)))||(((p[i + 2] >= gp30_app_start_flow_filter_float)||(p[i+2] <= gp30_app_start_flow_reverse_float)) && (p[i + 3] == 0)))
{
position = i;
valve_flag = 1;
break;
}
}
}
if (i >= 5)
{
if ((p[i - 3] >= gp30_app_start_flow_filter_float)||(p[i - 3] <= gp30_app_start_flow_reverse_float)) //前面连续3个大值或者三个中有1个0的情况表示关阀只判正向开关阀
{
if((((p[i - 4] >= gp30_app_start_flow_filter_float)||(p[i-4] <= gp30_app_start_flow_reverse_float)) && ((p[i - 5] >= gp30_app_start_flow_filter_float)||(p[i-5] <= gp30_app_start_flow_reverse_float)))||((p[i - 4] == 0)
&& ((p[i - 5] >= gp30_app_start_flow_filter_float)||(p[i-5] <= gp30_app_start_flow_reverse_float)))||(((p[i - 4] >= gp30_app_start_flow_filter_float)||(p[i-4] <= gp30_app_start_flow_reverse_float)) && (p[i - 5] == 0)))
{
valve_flag = 2;
position = i - 2;
break;
}
}
}
}
else if (zero_sum == 14)
{
if (((p[14] >= gp30_app_start_flow_filter_float)||(p[14] <= gp30_app_start_flow_reverse_float)) && ((p[15] >= gp30_app_start_flow_filter_float)||(p[15] <= gp30_app_start_flow_reverse_float))) //14个0判断 15 16是否是1是1证明是开阀
{
valve_flag = 3;
break;
}
else if (((p[0] >= gp30_app_start_flow_filter_float)||(p[0] <= gp30_app_start_flow_reverse_float)) && ((p[1] >= gp30_app_start_flow_filter_float)||(p[1] <= gp30_app_start_flow_reverse_float))) //14个0判断 1 2是否是1是1证明是关阀
{
valve_flag = 4;
break;
}
}
}
else
{
zero_sum = 0;
}
}
if(0==valve_flag)
{
for (j = 0; j < data_len - 1; j++)
{
for (i = 0; i < data_len - 1 - j; i++)
{
if (p[i] > p[i + 1])
{
temp = p[i];
p[i] = p[i + 1];
p[i + 1] = temp;
}
}
}
for (count = GP30_APP_FILTER_MAX_MIN_SIZE; count < (data_len - GP30_APP_FILTER_MAX_MIN_SIZE); count++) //两头各去掉2个数应对数据跳变的异常跳变处理比这个数小1——即连续3次跳变就处理
{
sum += p[count];
}
sum = sum / (data_len - GP30_APP_FILTER_SIZE);
if((10 == LcdCheckStateApp())&&(start_flow_sum>=GP22_APP_EXCEED_START_FLOW_SUM))
{
if(((sum > 0)&&(sum < FLOAT_15NS))||((sum < 0)&&((sum > -FLOAT_15NS))))
{
sum=0;
}
}
}
else if (1 == valve_flag)
{
position = position + 1;
data_len = data_len - position;
for (i = 0; i < data_len; i++)
{
sum += p[i + position];
}
average_diftof = sum/data_len;
if(((average_diftof > 0)&&(average_diftof < FLOAT_2NS))||((average_diftof < 0)&&((average_diftof > -FLOAT_2NS))))
{
if((gp22_test_data.s.peak_up<=TOF_UP_AM)&&(gp22_test_data.s.peak_down<=TOF_DOWN_AM))
{
sum=0;
}
else
{
sum = sum / GP22_APP_QUEUE_SIZE;
}
}
else
{
sum = sum / GP22_APP_QUEUE_SIZE;
}
}
else if (2 == valve_flag)
{
for (i = 0; i < position; i++)
{
sum += p[i];
}
average_diftof = sum/position;
if(((average_diftof > 0)&&(average_diftof < FLOAT_2NS))||((average_diftof < 0)&&((average_diftof > -FLOAT_2NS))))
{
if((gp22_test_data.s.peak_up<=TOF_UP_AM)&&(gp22_test_data.s.peak_down<=TOF_DOWN_AM))
{
sum=0;
}
else
{
sum = sum / GP22_APP_QUEUE_SIZE;
}
}
else
{
sum = sum / GP22_APP_QUEUE_SIZE;
}
}
else if (3 == valve_flag)//前面14个0后面2个大于始动的开阀处理
{
sum = p[14]+p[15];
average_diftof = sum/2;
if(((average_diftof > 0)&&(average_diftof < FLOAT_2NS))||((average_diftof < 0)&&((average_diftof > -FLOAT_2NS))))
{
if((gp22_test_data.s.peak_up<=TOF_UP_AM)&&(gp22_test_data.s.peak_down<=TOF_DOWN_AM))
{
sum=0;
}
else
{
sum = sum / GP22_APP_QUEUE_SIZE;
}
}
else
{
sum = sum / GP22_APP_QUEUE_SIZE;
}
}
else if (4 == valve_flag)//前面2个大于始动的buffer后面14个小于始动的关阀处理
{
sum = p[0]+p[1];
average_diftof = sum/2;
if(((average_diftof > 0)&&(average_diftof < FLOAT_2NS))||((average_diftof < 0)&&((average_diftof > -FLOAT_2NS))))
{
if((gp22_test_data.s.peak_up<=TOF_UP_AM)&&(gp22_test_data.s.peak_down<=TOF_DOWN_AM))
{
sum=0;
}
else
{
sum = sum / GP22_APP_QUEUE_SIZE;
}
}
else
{
sum = sum / GP22_APP_QUEUE_SIZE;
}
}
return sum;
}
//u32 FilterJunZhi_TestForGp30(u32 *data, u8 data_len) //滤波函数1——检定状态用于计算累积流量时对瞬时流量的滤波
//{
// u8 i, j, len, count;
// u32 *p;
// u32 temp = 0, sum = 0;
//// u32 front_avg = 0,behind_avg = 0;
//// u32 sum_difference_value[2]={0};//两次连续sum的差值
//// static u32 GP30_filter_value[3]={0};//上次数滤波缓存数组
//// static u8 sum_cnt=0;//sum次数
// p = data;
// len = data_len;
//
// if(len < 10)
// {
// return 0;
// }
// for (j = 0; j < len - 1; j++)
// {
// for (i = 0; i < len - 1 - j; i++)
// {
// if (p[i] > p[i + 1])
// {
// temp = p[i];
// p[i] = p[i + 1];
// p[i + 1] = temp;
// }
// }
// }
//// //16个buffer中有大于等于一半的数是相同的则用上次数
//// if((p[0]==p[7])||(p[1]==p[8])||(p[2]==p[9])||(p[3]==p[10])||(p[4]==p[11])||(p[5]==p[12])||(p[6]==p[13])||(p[7]==p[14])||(p[8]==p[15]))
//// {
//// return GP30_filter_last_value;
//// }
// for (count = GP30_APP_FILTER_MAX_MIN_SIZE; count < (len - GP30_APP_FILTER_MAX_MIN_SIZE); count++) //两头各去掉4个数应对数据跳变的异常跳变处理比这个数小1——即连续3次跳变就处理
// {
// sum += p[count];
// }
// sum = (u32) (sum / (len - GP30_APP_FILTER_SIZE));
//// if( sum < GP30_DIFTOF_FILTER_ENABLE_MAX_VALUE )//时间差小于30ns才进行滤波算法
//// {
//// GP30_filter_value[sum_cnt]=sum;
//// sum_cnt++;
//// if(3==sum_cnt)//sum值缓存数组元素个数为3
//// {
//// sum_cnt=0;
//// }
//// //计算sum第一个缓存和第二个缓存的差值
//// if(GP30_filter_value[1]>GP30_filter_value[0])
//// {
//// sum_difference_value[0]=GP30_filter_value[1]-GP30_filter_value[0];
//// }
//// else
//// {
//// sum_difference_value[0]=GP30_filter_value[0]-GP30_filter_value[1];
//// }
//// //计算sum第二个缓存和第三个缓存的差值
//// if(GP30_filter_value[2]>GP30_filter_value[1])
//// {
//// sum_difference_value[1]=GP30_filter_value[2]-GP30_filter_value[1];
//// }
//// else
//// {
//// sum_difference_value[1]=GP30_filter_value[1]-GP30_filter_value[2];
//// }
//// //sum三次值两两差值波动判断波动平稳则更新上次数不平稳上次数不更新。
//// if((sum_difference_value[0]<sum * FLOW_RATE_FILTER_COEFFICIENT)&&(sum_difference_value[1]<sum * FLOW_RATE_FILTER_COEFFICIENT))
//// {
//// GP30_filter_last_value=(GP30_filter_value[0]+GP30_filter_value[1]+GP30_filter_value[2])/3;//三次sum值都平稳则选用这三次值的平均值当做上次数
//// }
////
//// half_len = len/2 ;
////
//// for (count = 0; count < half_len; count++) //前8个数
//// {
//// front_avg += p[count];
//// }
//// front_avg = front_avg/half_len;
//// for (count = half_len; count < len; count++) //后8个数
//// {
//// behind_avg += p[count];
//// }
//// behind_avg = behind_avg/half_len;
////
//// if((behind_avg > front_avg) &&(sum >gp30_app_start_flow_filter))
//// {
//// if((behind_avg - front_avg) > sum * FLOW_RATE_FILTER_COEFFICIENT)
//// {
//// return GP30_filter_last_value;
//// }
//// else//这次采样的数值即使波动不大,与上次数比较,波动大也需要用上次数
//// {
//// if(sum > GP30_filter_last_value)
//// {
//// if((sum-GP30_filter_last_value)>sum * FLOW_RATE_FILTER_COEFFICIENT)
//// {
//// return GP30_filter_last_value;
//// }
//// else
//// {
//// return sum;
//// }
//// }
//// else
//// {
//// if((GP30_filter_last_value-sum)>sum * FLOW_RATE_FILTER_COEFFICIENT)
//// {
//// return GP30_filter_last_value;
//// }
//// else
//// {
//// return sum;
//// }
//// }
//// }
//// }
//// else if((behind_avg == front_avg) && (sum > gp30_app_start_flow_filter))
//// {
//// return GP30_filter_last_value;
//// }
//// }
// return sum;
//}
/***************************************************************
函数名称: float FilterJunZhi_float(float *p, u8 len) //不排序,去掉两头最值
功 能;
参 数:
返回值 滤波完成后的值
****************************************************************/
//float FilterJunZhi_float(float *p, u16 len) //不排序去掉两头各一个最值14ms
//{
// u16 i;
// float nMax,nMin,sum = 0;
//
// nMax = p[0];
// nMin = p[0];
// for (i=0; i<len; i++)
// {
// if (nMin > p[i])
// {
// nMin = p[i];
// }
//
// if (nMax < p[i])
// {
// nMax = p[i];
// }
//
// sum = sum + p[i];
// }
// sum = sum - nMax -nMin;
//
// return (float) (sum / (len - 2));
//}
//float FilterJunZhi_float(float *p, u8 len) //不排序,去掉两头 各两个最值20ms
//{
// u8 i;
// float nMax,nMin,nMax2,nMin2,sum = 0;
// nMax=0;
// nMax2=0;
// nMin=0x40000;
// nMin2=0x40000;
// for (i=0; i<len; i++)
// {
// if(p[i]>nMax)
// {
// nMax2=nMax;
// nMax=p[i];
// }
// else if(p[i]>nMax2)
// {
// nMax2=p[i];
// }
// if(p[i]<nMin)
// {
// nMin2=nMin;
// nMin=p[i];
// }
// else if(p[i]<nMin2)
// {
// nMin2=p[i];
// }
// sum = sum + p[i];
// }
// sum = sum - nMax -nMin - nMax2 - nMin2;
// return (float) (sum / (len - 4));
//}
/**
* 将输入序列划分为两个子序列,并返回中间位置的下标
*
* @param arr 输入划分的输入序列
* @param left 需要划分序列的最左侧元素下标
* @param right 需要划分序列的最右侧位置下标
* @return 找到的中心位置坐标
*/
//u8 partition(float arr[], int left, int right)
//{
// u8 j = left, i;
// float selectedValue = arr[right];
// float temp;
// // 用j指定预期的中心点位置
// // 用游标i从左向右遍历如果小于选定值则扔到j指定位置的左侧否则继续向右
// for (i = left; i < right; i++) {
// if (arr[i] < selectedValue) {
// // 交换i与j位置的值并更新j指向的位置
// temp = arr[i];
// arr[i] = arr[j];
// arr[j] = temp;
// j++;
// }
// }
// arr[right] = arr[j];
// arr[j] = selectedValue;
// return j;
//}
/**
* 对输入序列进行快速排序
*
* @param arr 待排序数组
* @param left 需要排列位置的最左侧元素下标
* @param right 需要排序位置的最右侧位置下标
*/
//void quickSort(float arr[], u8 left, int right)
//{
// u8 q;
// if (left < right) {
// q = partition(arr, left, right);
// quickSort(arr, left, q - 1);
// quickSort(arr, q + 1, right);
// }
//}
#if EN_LARGE_FILITER
float FilterJunZhi_float_GP30Filter(float *p, u8 len) //滤波函数2——针对GP30一个buf数据波动的滤波
{
u8 count,i,j;
float sum=0,temp,sum_ou=0,sum_ji=0;
float p_ji[8],p_ou[8];
for (j = 0; j < len; j=j+2)
{
p_ou[j/2] = p[j];
p_ji[j/2] = p[j+1];
}
//分开排序 滤波
for (j = 0; j < len/2 - 1; j++)
{
for (i = 0; i < len/2 - 1 - j; i++)
{
if (p_ou[i] > p_ou[i + 1])
{
temp = p_ou[i];
p_ou[i] = p_ou[i + 1];
p_ou[i + 1] = temp;
}
if (p_ji[i] > p_ji[i + 1])
{
temp = p_ji[i];
p_ji[i] = p_ji[i + 1];
p_ji[i + 1] = temp;
}
}
}
for (count = 1; count < (len/2 - 1); count++) //两头各去掉1个数
{
sum_ou += p_ou[count];
sum_ji += p_ji[count];
}
sum = (float) (sum_ou+sum_ji) / (len - 4);
return sum;
}
#elif EN_SMALL_FILITER
float FilterJunZhi_float_GP30Filter(float *p, u8 len) //滤波函数2——针对GP30一个buf数据波动的滤波
{
u8 count,filter_min_max,half_len,i,j;
float sum=0,temp;
// gp30_app_start_flow_filter_for_float = Gp30DataToFloat(gp30_app_start_flow_filter);
//不再采用快速排序 2019-11-29 16:28:16
// quickSort(p,0,len-1);
for (j = 0; j < len - 1; j++)
{
for (i = 0; i < len - 1 - j; i++)
{
if (p[i] > p[i + 1])
{
temp = p[i];
p[i] = p[i + 1];
p[i + 1] = temp;
}
}
}
// if((p[0]==p[7])||(p[1]==p[8])||(p[2]==p[9])||(p[3]==p[10])||(p[4]==p[11])||(p[5]==p[12])||(p[6]==p[13])||(p[7]==p[14])||(p[8]==p[15]))
// {
// return -1000;
// }
half_len = len/2 ;
filter_min_max = half_len/2; //排序后前后滤波的个数
for (count = filter_min_max; count < (len - filter_min_max); count++) //两头各去掉filter_min_max个数
{
sum += p[count];
}
sum = (float) (sum / (len - half_len));
// if( sum < Gp30DataToFloat(GP30_DIFTOF_FILTER_ENABLE_MAX_VALUE) )//时间差小于30ns才进行滤波算法
// {
// for (count = 0; count < half_len; count++) //前半个buf
// {
// front_avg += p[count];
// }
// front_avg = front_avg/half_len;
// for (count = half_len; count < len; count++) //后半个buf
// {
// behind_avg += p[count];
// }
// behind_avg = behind_avg/half_len;
//
// if((behind_avg > front_avg) &&(sum > gp30_app_start_flow_filter_for_float))
// {
// if((behind_avg - front_avg) > sum * GP30_DIFTOF_FILTER_COEFFICIENT) //2019-10-11 ——修改由0.3改为0.2
// {
//// if((GP30_filter_last_value_for_shunshi > (float)30*sum)||(GP30_filter_last_value_for_shunshi < (float)0.03*sum))
////// if(GP30_filter_last_value_for_shunshi < (float)0.03*sum)
//// {
//// return sum;
//// }
//// else
// {
//// return GP30_filter_last_value_for_shunshi;
// //返回一个固定数值,用于判断此次滤波数据是否需要丢弃
// return -1000;
// }
// }
// else
// {
// return sum;
// }
// }
// else if((behind_avg == front_avg) && (sum > gp30_app_start_flow_filter_for_float))
// {
//// return GP30_filter_last_value_for_shunshi;
// return -1000;
// }
// else if(sum + gp30_app_start_flow_filter_for_float<0)
// {
// return -1000;
// }
// }
return sum;
}
#endif
/****************************************************************
Function: float FilterJunZhi_float_DIFTOFFilter (float *p, u8 len)
Description: GP30时间差快速排序滤波去掉2个最大和最小取平均不做其他处理
Input:
Return:
Others:
*****************************************************************/
float FilterJunZhi_float_DIFTOFFilter(float *p, u8 len) //滤波函数3——针对大数组以及非检定只去掉一个最大一个最小值
{
// float diftof_buffer[GP22_APP_DIFTOF_SIZE_2]={0}; //时间差滤波缓存 2019-8-21
u8 i;
float sum=0,nMax,nMin;
if(len > GP22_APP_DIFTOF_SIZE_2)
{
len=GP22_APP_DIFTOF_SIZE_2;
}
// for(i=0;i<len;i++)
// {
// diftof_buffer[i]=*(p+i);//将时间差数组的数据放进缓存buffer里对缓存buffer进行排序不对原始数组排序
// }
//quickSort(diftof_buffer,0,len-1);
nMax = p[0];
nMin = p[0];
for (i=0; i<len; i++)
{
if (nMin > p[i])
{
nMin = p[i];
}
if (nMax < p[i])
{
nMax = p[i];
}
sum = sum + p[i];
}
sum = sum - nMax -nMin;
return (float) (sum / (len - 2));
// for (count = 2; count < (len - 2); count++) //两头各去掉2个数
// {
// sum += diftof_buffer[count];
// }
//
// return (float) (sum / (len - 4));
}
/****************************************************************
Function: void Gp22AppDataPre (void)
Description: 备份数据组织
Input:
Return:
Others:
*****************************************************************/
void Gp22AppDataPre(void)
{
static DateTime data_time;
g_sample_save_data.s.flag[0] = 0x77;
g_sample_save_data.s.flag[1] = 0x88;
RtccGetDateTime(&data_time);
g_sample_save_data.s.time[0] = data_time.s.year;
g_sample_save_data.s.time[1] = data_time.s.month;
g_sample_save_data.s.time[2] = data_time.s.day;
g_sample_save_data.s.time[3] = data_time.s.hour;
g_sample_save_data.s.total_flow.gp30_u32 = gp22_app_data.s.total_flow.gp30_u32;
g_sample_save_data.s.total_flow_reverse.gp30_u32 = gp22_app_data.s.total_flow_reverse.gp30_u32;
g_sample_save_data.s.up_tof_dif.gp30_u32 = gp22_app_data.s.up_tof_dif.gp30_u32;
g_sample_save_data.s.down_tof_dif.gp30_u32 = gp22_app_data.s.down_tof_dif.gp30_u32;
}
/****************************************************************
Function: void Gp22AppInitProcess (void)
Description: GP22应用处理机上电初始化操作 ,GP22部分
Input:
Return:
Others:
*****************************************************************/
void Gp22AppInitProcess(void)
{
static u8 ee_write_result_init;
u8 i;
// u32 data;
// static float reset_limit_data = 0;
// float nDoubleTemp=0.0;
switch (s_g_gp22_init_state_num)
{
case GP30_APP_INIT_S0:
if (EepIfIdle())
{
for (i = 0; i < GP30_APP_MAX_DATA; i++)
{
gp22_app_data.data[i] = 0;
gp22_test_data.data[i] = 0;
}
EepRead(GP30_APP_DATA_ADDR, &g_sample_save_data.data[0], sizeof (GP30_APP_SAVE_DATA), &ee_write_result_init);
s_g_gp22_init_state_num = GP30_APP_INIT_S1;
}
break;
case GP30_APP_INIT_S1:
if ((SUCCESS == EepCheckMsg(ee_write_result_init)) && (TASK_IDLE == EepIfIdle())) //读ee成功
{
if ((0x77 == g_sample_save_data.s.flag[0]) && (0x88 == g_sample_save_data.s.flag[1])) //不是第一次上电
{
// if((gp22_copy_total_flow > g_sample_save_data.s.total_flow.gp30_float)||(gp22_copy_total_flow_reverse > g_sample_save_data.s.total_flow_reverse.gp30_float))//2017 02,更改复位不丢数
// {
// data = FrameCheckParaApp(FramePara_DNx);
// if(0x15 ==data)
// {
// reset_limit_data = 250.0;
// }
// else if(0x20 == data)
// {
// reset_limit_data = 400.0;
// }
// else if(0x25 == data)
// {
// reset_limit_data = 500.0;
// }
// else if(0x32 == data)
// {
// reset_limit_data = 1000.0;
// }
// else if(0x40 == data)
// {
// reset_limit_data = 1200.0;
// }
if(MCU_RESET_JUDGE_FLAG == MCU_reset_judge)//非断电复位
{
//使用ram控制器自带的奇偶校验功能 判别gp22_copy_total_flow存放的ram数据是否正确
//数据检验
if(TRUE == RAMDataVerify((u8*)&gp22_copy_total_flow,sizeof(gp22_copy_total_flow)))
{
gp22_copy_total_flow=g_sample_save_data.s.total_flow.gp30_float;
}
else
{
g_sample_save_data.s.total_flow.gp30_float = gp22_copy_total_flow;
}
//
if(TRUE == RAMDataVerify((u8*)&gp22_copy_total_flow_reverse,sizeof(gp22_copy_total_flow_reverse)))
{
gp22_copy_total_flow_reverse=g_sample_save_data.s.total_flow_reverse.gp30_float;
}
else
{
g_sample_save_data.s.total_flow_reverse.gp30_float = gp22_copy_total_flow_reverse;
}
s_g_gp22_init_state_num = GP30_APP_INIT_S5;
}
else
{
s_g_gp22_init_state_num = GP30_APP_INIT_S7;
}
//UP和DOWN单程时间补偿值合法性判断
if(((g_sample_save_data.s.up_tof_dif.gp30_float)>TOF_COMPENSATION_COEFFICIENT)||((g_sample_save_data.s.down_tof_dif.gp30_float)>TOF_COMPENSATION_COEFFICIENT)|| \
((g_sample_save_data.s.up_tof_dif.gp30_float)<-TOF_COMPENSATION_COEFFICIENT)||((g_sample_save_data.s.down_tof_dif.gp30_float)<-TOF_COMPENSATION_COEFFICIENT))
{
g_sample_save_data.s.up_tof_dif.gp30_float = 0;
g_sample_save_data.s.down_tof_dif.gp30_float = 0;
s_g_gp22_init_state_num = GP30_APP_INIT_S5;
}
gp22_app_data.s.total_flow.gp30_u32 = g_sample_save_data.s.total_flow.gp30_u32;
gp22_app_data.s.total_flow_reverse.gp30_u32 = g_sample_save_data.s.total_flow_reverse.gp30_u32;
old_monitor_flow.gp30_u32 = g_sample_save_data.s.total_flow.gp30_u32;//非第一次上电记录EE累计流量值
gp22_app_data.s.up_tof_dif.gp30_float = g_sample_save_data.s.up_tof_dif.gp30_float;
gp22_app_data.s.down_tof_dif.gp30_float = g_sample_save_data.s.down_tof_dif.gp30_float;
duoble_total_flow.gp30_double = gp22_app_data.s.total_flow.gp30_float;
//此处需要记录下初值给GP30
// gp30_test_total_start_flow.gp30_u32 = gp22_app_data.total_flow.gp30_u32;
}
else //是第一次上电
{
old_monitor_flow.gp30_u32 =0;//第一次上电流量值清零
if (EepIfIdle())
{
Gp22AppDataPre();
EepWrite(&g_sample_save_data.data[0], GP30_APP_DATA_ADDR, sizeof (GP30_APP_SAVE_DATA), &ee_write_result_init);
s_g_gp22_init_state_num = GP30_APP_INIT_S3;
}
else
{
s_g_gp22_init_state_num = GP30_APP_INIT_S2;
}
}
}
// else if (ERROR == EepCheckMsg(ee_write_result_init)) //读EE异常
// {
// s_g_gp22_init_state_num = GP30_APP_INIT_S4;
// }
break;
case GP30_APP_INIT_S2:
if (EepIfIdle())
{
Gp22AppDataPre();
EepWrite(&g_sample_save_data.data[0], GP30_APP_DATA_ADDR, sizeof (GP30_APP_SAVE_DATA), &ee_write_result_init);
s_g_gp22_init_state_num = GP30_APP_INIT_S3;
}
break;
case GP30_APP_INIT_S3: //查询是否写完成
if ((SUCCESS == EepCheckMsg(ee_write_result_init))&& (TASK_IDLE == EepIfIdle())) //写成功
{
s_g_gp22_init_state_num = GP30_APP_INIT_S7;
}
break;
// case GP30_APP_INIT_S4: //初始化完成
// if (EepIfIdle())
// {
// if(0x00004D3C==FrameCheckParaApp(FramePara_CCFlow))//逆流开关
// {
// gp22_app_data.s.total_flow_reverse.gp30_float=0;
// g_sample_save_data.s.total_flow_reverse.gp30_u32=0;
// gp22_copy_total_flow_reverse=0;
// EepWrite(&g_sample_save_data.data[14], GP30_APP_DATA_TOTAL_FLOW_ADDR_REVERSE, 4, &ee_write_result_init);
// }
// s_g_gp22_init_state_num = GP30_APP_INIT_S7;
// }
// break;
case GP30_APP_INIT_S5://2017 02,更改复位不丢数
if (EepIfIdle())
{
EepWrite(&g_sample_save_data.data[6], GP30_APP_DATA_TOTAL_FLOW_ADDR, 16, &ee_write_result_init);//原来只写正负流量 现在加上8字节的up和down单程时间的差值
s_g_gp22_init_state_num = GP30_APP_INIT_S3;
}
break;
case GP30_APP_INIT_S6:
// if ((SUCCESS == EepCheckMsg(ee_write_result_init))&& (TASK_IDLE == EepIfIdle())) //写成功
// {
mater_waring_state = FrameCheckParaApp(FramePara_Sta1_2);
g_gp22_init_flag = 1;
// }
break;
case GP30_APP_INIT_S7:
if ((SUCCESS == EepCheckMsg(ee_write_result_init))&& (TASK_IDLE == EepIfIdle())) //写成功
{
EepRead(DIFTOF_CALIBRATION_FLAG_ADDR, &g_diftof_cal_data.data[0], sizeof (GP30_DIFTOF_CAL_DATA), &ee_write_result_init);
s_g_gp22_init_state_num = GP30_APP_INIT_S8;
}
break;
case GP30_APP_INIT_S8:
if ((SUCCESS == EepCheckMsg(ee_write_result_init))&& (TASK_IDLE == EepIfIdle())) //写成功
{
if(FALSE == CheckDiftofCalibrationFlag())
{
g_diftof_cal_data.s.diftof_calibration_value.data=0;
}
s_g_gp22_init_state_num = GP30_APP_INIT_S6;
}
break;
default:
break;
}
}
/****************************************************************
Function: void Gp22TestInitApp (void)
Description: 进入检定初始化
Input:
Return:
Others:
*****************************************************************/
void Gp22TestInitApp(void)
{
u16 i;
LPTimer0Init(RTC_ClkSource(), 128);//定时1s
//RtccSetAlrm(0, TEST_ALARMA_RTCC_US); //500ms
s_alarma_stop_check_tick=Timer1usGetTick();
// gp30_total_flow_calcult_factor = FACTOR_0_5;
// RtccSetAlrm(0, 62500); //62.5ms
// s_g_gp22_sample_span = GP22_SAMPLE_2HZ; //2016-8-2 每次都计算
// s_g_gp22_sample_flag_num = 0;
// s_g_sample_flow_num = 0; //即采样次数清零
if((TRUE == RAMDataVerify((u8*)&gp22_copy_temp_total_flow_float_test,sizeof(gp22_copy_temp_total_flow_float_test)))||\
(TRUE == RAMDataVerify((u8*)&gp22_copy_total_flow_test,sizeof(gp22_copy_total_flow_test)))||\
(gp22_copy_temp_total_flow_float_test<(float)0)||(gp22_copy_temp_total_flow_float_test >(float)1500)||(gp22_copy_total_flow_test < (float)0))
{
gp22_copy_temp_total_flow_float_test = 0;//保证
gp22_copy_total_flow_test = 0;
}
if((TRUE == RAMDataVerify((u8*)&record_last_calculative_time,sizeof(record_last_calculative_time))))
{
record_last_calculative_time = 0;
}
#if (HARDWARE_VERSION==0x18)//圆壳表主板
if(FrameCheckMsgApp(Msg_WdtReset)) //如果是没及时喂狗导致的复位
{
FrameClearMsgApp(Msg_WdtReset);//清除看门狗复位源
gp22_test_data.s.total_flow.gp30_float= gp22_copy_total_flow_test+(((float)record_last_calculative_time/(float)128)+(float)2.06)*gp22_copy_temp_total_flow_float_test;//1s的累积量 2.2 -2 .05
gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + (((float)record_last_calculative_time/(float)128)+(float)2.06)*gp22_copy_temp_total_flow_float_test/(float)1000;
}
else//其他情况的复位
{
gp22_test_data.s.total_flow.gp30_float=gp22_copy_total_flow_test+(((float)record_last_calculative_time/(float)128)+(float)0.33)*gp22_copy_temp_total_flow_float_test;//1s的累积量 //0.5-0.3-0.36-0.33
gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + (((float)record_last_calculative_time/(float)128)+(float)0.33)*gp22_copy_temp_total_flow_float_test/(float)1000;
}
#elif (HARDWARE_VERSION==0x14) //方壳表主板
if(FrameCheckMsgApp(Msg_WdtReset)) //如果是没及时喂狗导致的复位
{
FrameClearMsgApp(Msg_WdtReset);//清除看门狗复位源
gp22_test_data.s.total_flow.gp30_float= gp22_copy_total_flow_test+(((float)record_last_calculative_time/(float)128)+(float)2.35)*gp22_copy_temp_total_flow_float_test;//1s的累积量 2.45
gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + (((float)record_last_calculative_time/(float)128)+(float)2.35)*gp22_copy_temp_total_flow_float_test/(float)1000;
}
else//其他情况的复位
{
gp22_test_data.s.total_flow.gp30_float=gp22_copy_total_flow_test+(((float)record_last_calculative_time/(float)128)+(float)0.35)*gp22_copy_temp_total_flow_float_test;//1s的累积量 0.46
gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + (((float)record_last_calculative_time/(float)128)+(float)0.35)*gp22_copy_temp_total_flow_float_test/(float)1000;
}
#endif
duoble_total_flow.gp30_double = gp22_app_data.s.total_flow.gp30_float;
gp22_copy_temp_total_flow_float = 0;
start_measure_flag = 1; //启动流量采样
s_g_sample_ok_flag = 0;
// temp_total_flow_u32 = 0;
gp22_test_data.s.total_flow_reverse.gp30_float = 0;
gp22_test_data.s.ins_flow = 0;
gp22_app_data.s.ins_flow = 0;
gp22_test_data.s.ins_flow_cnt = 0;//瞬时流量每计算一次就加1次
gp22_test_data.s.ins_flow_sum = 0;//瞬时流量累计和
gp22_test_data.s.ins_flow_sum_temp = 0;
gp22_test_data.s.ins_flow_max = 0;
gp22_test_data.s.ins_flow_min = 0;
for (i = 0; i < GP22_APP_QUEUE_SIZE; i++)
{
s_g_flow_data[i] = 0;
}
memset(s_g_flow_type, 0, sizeof(s_g_flow_type));
for (i = 0; i < GP22_APP_DIFTOF_SIZE; i++)
{
s_g_diftof_data[i] = 0;
}
for (i = 0; i < GP22_APP_DIFTOF_SIZE_2; i++)
{
s_g_diftof_data_2[i] = 0;
}
#if EN_LARGE_FILITER
for (i = 0; i < GP22_APP_DIFTOF_SIZE_3; i++)
{
s_g_diftof_data_3[i] = 0;
}
s_g_diftof_head_3 = 0;
s_g_diftof_head_3_quotient=0;
#endif
s_g_diftof_head = 0;
s_g_diftof_head_2 = 0;
s_g_diftof_head_2_quotient=0;
s_g_sample_total_sum = 0;
s_g_diftof_for_total = FALSE;
// s_g_sample_flow_head = 0;
// s_g_sample_total_sum = 0;
// s_g_sample_add = 0;
}
/****************************************************************
Function: void Gp22SampleApp (void)
Description: 采样间隔设置处理机
Input:
Return:
Others:
*****************************************************************/
void Gp22SampleApp(void)
{
// u16 i;
switch (s_g_gp22_sample_app_state_num)
{
case GP22_APP_SAMPLE_S0:
if (10 == LcdCheckStateApp()) //非检定状态
{
NormalResetCompensation();
// SetResetFlowcompMsg();
// s_g_sample_flow_num = 0; //即采样次数清零
// s_g_gp22_sample_flag_num = 0;
// Gp22SetSampleRate(8); //采样频率8Hz
// Gp22SetBufferLength(16);//长度16
s_g_gp22_sample_app_state_num = GP22_APP_SAMPLE_S2;
}
else //检定状态
{
// VerificationResetCompensation();
Gp22TestInitApp();
// Gp22SetSampleRate(16); //采样频率16Hz
// Gp22SetBufferLength(16);//长度16
s_g_gp22_sample_app_state_num = GP22_APP_SAMPLE_S1;
}
break;
case GP22_APP_SAMPLE_S1:
if (10 == LcdCheckStateApp()) //非检定状态
{
LPTimer0_Work(FALSE);//不开启LPtimer
s_g_sample_ok_flag=0;//清除采样完成标志位
Gp22SetSampleRateMsg(8); //采样频率8Hz
// Gp22SetBufferLength(16);//长度16
gp22_copy_total_flow_test=0;//每次从检定到退检定清掉copy的检定累计量和上1s的累积量
gp22_copy_temp_total_flow_float_test=0;
gp22_copy_temp_total_flow_float=0;
gp22_copy_reset_flag_test = GP30_COPY_RESET_NORMAL_FLAG;//保存非检定标志
s_g_gp22_sample_app_state_num = GP22_APP_SAMPLE_S2;
// s_g_sample_flow_num = 0; //即采样次数清零
// s_g_gp22_sample_flag_num = 0;
}
break;
case GP22_APP_SAMPLE_S2:
if (1 == LcdCheckStateApp()) //检定状态
{
record_last_calculative_time = 0;//防止非检定进检定补偿
Gp22TestInitApp();
Gp22SetSampleRateMsg(16); //采样频率16Hz
// Gp22SetBufferLength(16);//长度16
gp22_copy_reset_flag_test = GP30_COPY_RESET_TEST_FLAG;//保存检定标志
s_g_gp22_sample_app_state_num = GP22_APP_SAMPLE_S1;
}
break;
default:
break;
}
}
/******将数据float类型转化为16位整数16位小数格式*************
Function: u32 FloatToGp30Data (float data)
Description: 将数据float类型转化为16位整数16位小数格式
Input:
Return: 返回1个 补码数据格式 数据
Others: 运行时间130us @3.6864M不分频/ PIC24FJ128GA306 /s级优化
****************************************************************/
u32 FloatToGp30Data(float data)
{
if (data > 32768)
{
return 0;
}
return ((u32) (data * (float)65536));
}
/*************将16位整数16位小数转化为浮点数格式******************
Function: float Gp30DataToFloat (u32 data)
Description: 将16位整数16位小数转化浮点数格式
Input:
Return: 返回数浮点数
Others: 运行时间130us @3.6864M不分频/ PIC24FJ128GA306 / s级优化
****************************************************************/
float Gp30DataToFloat(u32 data)
{
return ((float) data / (float)65536);
}
/****************************************************************
Function: void StillWatetCalculate (void)
Description: 计算时间差
Input:
Return:
Others:
*****************************************************************/
#if EN_SMALL_FILITER
void StillWatetCalculate(u32 dif_value)
{
u8 i = 0;
u32 temp_value;
float still_water_add = 0, float_differ=0;
if (10 == LcdCheckStateApp()) //非检定状态,不需每次都检测时间差
{
return;
}
if((01 == LcdCheckStateApp()) && (0 == start_measure_flag)) //检定状态,且上位机不允许采样
{
return;
}
temp_value = dif_value;
if (temp_value >= 0x80000000) //负数
{
temp_value &= 0x7FFFFFFF;
float_differ = 0 - Gp30DataToFloat(temp_value);
}
else
{
// float_differ_last_time = temp_value;
float_differ = Gp30DataToFloat(temp_value);
}
// // 2019-12-10 10:14:37 滤波改动,应对跳变
// if((01 == LcdCheckStateApp()) && (0 == start_measure_flag)) //检定而且上位机不允许采样
// {
// s_g_diftof_data_testforlastvalue[s_g_diftof_head_testforlastvalue] = float_differ;//带正负号
// s_g_diftof_head_testforlastvalue++;
// s_g_diftof_head_testforlastvalue %= GP22_APP_DIFTOF_SIZE;
//
// if(0 == s_g_diftof_head_testforlastvalue) //每次数组满的时候
// {
// GP30_filter_last_value_for_shunshi = FilterJunZhi_float_GP30Filter(s_g_diftof_data_testforlastvalue,GP22_APP_DIFTOF_SIZE);
// }
// return;
// }
s_g_diftof_data[s_g_diftof_head] = float_differ;//带正负号
s_g_diftof_head++;
s_g_diftof_head %= GP22_APP_DIFTOF_SIZE;
if(0 == s_g_diftof_head) //每次数组满的时候
{
s_g_diftof_for_total = TRUE;
// if(0 == s_g_diftof_head_2)
// {
// s_g_diftof_data_2[s_g_diftof_head_2] = FilterJunZhi_float_DIFTOFFilter(s_g_diftof_data,GP22_APP_DIFTOF_SIZE);
// }
// else
{
float temp_diftof_data_filter = FilterJunZhi_float_GP30Filter(s_g_diftof_data,GP22_APP_DIFTOF_SIZE);
if(temp_diftof_data_filter > -900)
{
s_g_diftof_data_2[s_g_diftof_head_2] = temp_diftof_data_filter;
s_g_diftof_head_2 ++;
s_g_sample_total_sum ++;
s_g_diftof_head_2_quotient =s_g_diftof_head_2/GP22_APP_DIFTOF_SIZE_2;
s_g_diftof_head_2 %= GP22_APP_DIFTOF_SIZE_2;
}
}
// GP30_filter_last_value_for_shunshi = s_g_diftof_data_2[s_g_diftof_head_2] ;
// s_g_diftof_head_2 ++;
// s_g_sample_total_sum ++;
// s_g_diftof_head_2 %= GP22_APP_DIFTOF_SIZE_2;
if((0 != s_g_diftof_head_2) && (s_g_sample_total_sum < GP22_APP_DIFTOF_SIZE_2))//每次数组没满的时候
{
if(s_g_diftof_head_2 > 4)
{
still_water_add = FilterJunZhi_float_DIFTOFFilter(s_g_diftof_data_2,s_g_diftof_head_2);
}
else
{
for (i = 0; i < s_g_diftof_head_2; i++)
{
still_water_add = still_water_add + s_g_diftof_data_2[i];
}
still_water_add = still_water_add / s_g_diftof_head_2;
}
}
else if((0 != s_g_diftof_head_2)||((s_g_diftof_head_2_quotient!=0)&&(0 == s_g_diftof_head_2)))//每次数组满的时候
{
// for (i = 0; i < GP22_APP_DIFTOF_SIZE_2; i++)
// {
// still_water_add = still_water_add + s_g_diftof_data_2[i];
// }
// still_water_add = still_water_add / GP22_APP_DIFTOF_SIZE_2;
still_water_add = FilterJunZhi_float_DIFTOFFilter(s_g_diftof_data_2,GP22_APP_DIFTOF_SIZE_2);
}
else if((0 == s_g_diftof_head_2)&&(0 == s_g_diftof_head_2_quotient))//start到stop之前如果全部滤波数据均满足if((behind_avg - front_avg) > sum * GP30_DIFTOF_FILTER_COEFFICIENT)
{
still_water_add = 0;
}
if (still_water_add >= 0)
{
s_g_still_water_time = FloatToGp30Data(still_water_add);
}
else
{
still_water_add = 0 - still_water_add;
s_g_still_water_time = FloatToGp30Data(still_water_add);
s_g_still_water_time |= 0x80000000;
}
gp22_app_data.s.TOF_diff = s_g_still_water_time;
gp22_test_data.s.TOF_diff = s_g_still_water_time;
}
}
/****************************************************************
Function: void StillWatetCalculate (void)
Description: 计算时间差,检定,大表应用的程序
Input:
Return:
Others:
*****************************************************************/
#elif EN_LARGE_FILITER
void StillWatetCalculate(u32 dif_value)
{
u8 i = 0;
u32 temp_value;
float still_water_add = 0, float_differ=0;
if (10 == LcdCheckStateApp()) //非检定状态,不需每次都检测时间差
{
return;
}
if((01 == LcdCheckStateApp()) && (0 == start_measure_flag)) //检定状态,且上位机不允许采样
{
return;
}
temp_value = dif_value;
if (temp_value >= 0x80000000) //负数
{
temp_value &= 0x7FFFFFFF;
float_differ = 0 - Gp30DataToFloat(temp_value);
}
else
{
// float_differ_last_time = temp_value;
float_differ = Gp30DataToFloat(temp_value);
}
// // 2019-12-10 10:14:37 滤波改动,应对跳变
// if((01 == LcdCheckStateApp()) && (0 == start_measure_flag)) //检定而且上位机不允许采样
// {
// s_g_diftof_data_testforlastvalue[s_g_diftof_head_testforlastvalue] = float_differ;//带正负号
// s_g_diftof_head_testforlastvalue++;
// s_g_diftof_head_testforlastvalue %= GP22_APP_DIFTOF_SIZE;
//
// if(0 == s_g_diftof_head_testforlastvalue) //每次数组满的时候
// {
// GP30_filter_last_value_for_shunshi = FilterJunZhi_float_GP30Filter(s_g_diftof_data_testforlastvalue,GP22_APP_DIFTOF_SIZE);
// }
// return;
// }
s_g_diftof_data[s_g_diftof_head] = float_differ;//带正负号
s_g_diftof_head++;
s_g_diftof_head %= GP22_APP_DIFTOF_SIZE;
if(0 == s_g_diftof_head) //每次数组满的时候每次16个buff数据
{
s_g_diftof_for_total = TRUE;
// if(0 == s_g_diftof_head_2)
// {
// s_g_diftof_data_2[s_g_diftof_head_2] = FilterJunZhi_float_DIFTOFFilter(s_g_diftof_data,GP22_APP_DIFTOF_SIZE);
// }
// else
{
float temp_diftof_data_filter = FilterJunZhi_float_GP30Filter(s_g_diftof_data,GP22_APP_DIFTOF_SIZE);
if(temp_diftof_data_filter > -900)
{
s_g_diftof_data_2[s_g_diftof_head_2] = temp_diftof_data_filter;
s_g_diftof_head_2 ++;
s_g_sample_total_sum ++;
s_g_diftof_head_2_quotient =s_g_diftof_head_2/GP22_APP_DIFTOF_SIZE_2;
s_g_diftof_head_2 %= GP22_APP_DIFTOF_SIZE_2;
}
}
// GP30_filter_last_value_for_shunshi = s_g_diftof_data_2[s_g_diftof_head_2] ;
// s_g_diftof_head_2 ++;
// s_g_sample_total_sum ++;
// s_g_diftof_head_2 %= GP22_APP_DIFTOF_SIZE_2;
if((0 != s_g_diftof_head_2) && (s_g_sample_total_sum < GP22_APP_DIFTOF_SIZE_2))//每次数组没满的时候
{
if(s_g_diftof_head_2 > 4)
{
still_water_add = FilterJunZhi_float_DIFTOFFilter(s_g_diftof_data_2,s_g_diftof_head_2);
}
else
{
for (i = 0; i < s_g_diftof_head_2; i++)
{
still_water_add = still_water_add + s_g_diftof_data_2[i];
}
still_water_add = still_water_add / s_g_diftof_head_2;
}
}
else if(((s_g_diftof_head_2_quotient!=0)&&(0 == s_g_diftof_head_2)))//数组满的时候
{
still_water_add_3 =0;
s_g_diftof_data_3[s_g_diftof_head_3] = FilterJunZhi_float_DIFTOFFilter(s_g_diftof_data_2,GP22_APP_DIFTOF_SIZE_2);//30个滤波值
// s_g_diftof_data_3[s_g_diftof_head_3] = still_water_add; //第三次时间差滤波队列 2020-3-6
s_g_diftof_head_3++;
s_g_diftof_head_3_quotient =s_g_diftof_head_3/GP22_APP_DIFTOF_SIZE_3;//取整
s_g_diftof_head_3 %= GP22_APP_DIFTOF_SIZE_3;//取余
//第三次20个数据滤波
if((0 != s_g_diftof_head_3) && (s_g_sample_total_sum < GP22_APP_DIFTOF_SUM))//数组没满的时候 40*15
{
for (i = 0; i < s_g_diftof_head_3; i++)
{
still_water_add_3 = still_water_add_3+s_g_diftof_data_3[i];
}
still_water_add_3 = still_water_add_3 / s_g_diftof_head_3;
}
else if((0 != s_g_diftof_head_3)||((s_g_diftof_head_3_quotient!=0)&&(0 == s_g_diftof_head_3)))//数组满的时候
{
for (i = 0; i < GP22_APP_DIFTOF_SIZE_3; i++)
{
still_water_add_3 = still_water_add_3 + s_g_diftof_data_3[i];
}
still_water_add_3 = still_water_add_3 / GP22_APP_DIFTOF_SIZE_3;
}
}
else if((0 == s_g_diftof_head_2)&&(0 == s_g_diftof_head_2_quotient))//start到stop之前如果全部滤波数据均满足if((behind_avg - front_avg) > sum * GP30_DIFTOF_FILTER_COEFFICIENT)
{
still_water_add = 0;
}
if(s_g_sample_total_sum >= GP22_APP_DIFTOF_SIZE_2)
{
still_water_add= still_water_add_3;
}
if (still_water_add >= 0)
{
s_g_still_water_time = FloatToGp30Data(still_water_add);//溢出测试2019-12-27
}
else
{
still_water_add = 0 - still_water_add;
s_g_still_water_time = FloatToGp30Data(still_water_add);//溢出测试2019-12-27
s_g_still_water_time |= 0x80000000;
}
gp22_app_data.s.TOF_diff = s_g_still_water_time;
gp22_test_data.s.TOF_diff = s_g_still_water_time;
}
}
#endif
/////////////////////////////////////////////保留2////////////////////////////
//void StillWatetCalculate(u32 dif_value)
//{
// static u8 sum = 0;
// u32 temp_value;
// static float still_water_add = 0, float_differ;
//
// if (10 == LcdCheckStateApp()) //非检定状态,不需每次都检测时间差
// {
// return;
// }
//
// if (sum < GP22_APP_DIFTOF_SIZE)
// {
//// temp_value = Gp22TimeDiffer(4); //带正负号时间差
// temp_value = dif_value;
//
// if (temp_value >= 0x80000000) //负数
// {
// temp_value &= 0x7FFFFFFF;
// float_differ = 0 - Gp30DataToFloat(temp_value);
// }
// else
// {
// float_differ = Gp30DataToFloat(temp_value);
// }
//
// if (0 == sum) //刚开始
// {
// sum++; //已经开始
// s_g_still_water_time_max = float_differ;
// s_g_still_water_time_min = float_differ;
// }
// else
// {
// sum++; //已经开始
// if (float_differ > s_g_still_water_time_max)
// {
// still_water_add += s_g_still_water_time_max;
// s_g_still_water_time_max = float_differ;
// }
// else if (float_differ < s_g_still_water_time_min)
// {
// still_water_add += s_g_still_water_time_min;
// s_g_still_water_time_min = float_differ;
// }
// else
// {
// still_water_add += float_differ;
// }
// }
// }
// else //GP22_APP_DIFTOF_SIZE 次了
// {
// still_water_add = still_water_add / (GP22_APP_DIFTOF_SIZE-1);
//
// if (still_water_add >= 0)
// {
// s_g_still_water_time = FloatToGp30Data(still_water_add);
// }
// else
// {
// still_water_add = 0 - still_water_add;
// s_g_still_water_time = FloatToGp30Data(still_water_add);
// s_g_still_water_time |= 0x80000000;
// }
//
// gp22_app_data.TOF_diff = s_g_still_water_time;
// gp22_test_data.TOF_diff = s_g_still_water_time;
// sum = 0;
// still_water_add = 0;
// }
//}
//////////////////////////////////////////////////////////// 保留测量静水时间的代码////////////////////////////////////////////
//void StillWatetCalculate(u32 dif_value)
//{
// static u8 sum = 0, result;
// u32 temp_value, temp_time;//, temp_speed;
// static float still_water_add = 0, float_differ;
// static u32 still_time_max, still_time_min, time_add = 0;
//
// if (TRUE == s_g_still_flag)
// {
// if (sum < 100)
// {
// temp_value = Gp22TimeDiffer(4);
// temp_time = Gp22TimeDiffer(5); // 2014-5-12 16:53:20
//
// if (temp_value > 0x80000000) //负数
// {
// temp_value &= 0x7FFFFFFF;
// float_differ = 0 - Gp30DataToFloat(temp_value);
// }
// else
// {
// float_differ = Gp30DataToFloat(temp_value);
// }
//
// if (0 == sum) //刚开始
// {
// sum++; //已经开始
// s_g_still_water_time_max = float_differ;
// s_g_still_water_time_min = float_differ;
//
// still_time_max = temp_time;
// still_time_min = temp_time;
// }
// else
// {
// sum++; //已经开始
// if (float_differ > s_g_still_water_time_max)
// {
// still_water_add += s_g_still_water_time_max;
// s_g_still_water_time_max = float_differ;
// }
// else if (float_differ < s_g_still_water_time_min)
// {
// still_water_add += s_g_still_water_time_min;
// s_g_still_water_time_min = float_differ;
// }
// else
// {
// still_water_add += float_differ;
// }
//
// // 静水时间,没有差
// if (temp_time > still_time_max)
// {
// time_add += still_time_max;
// still_time_max = temp_time;
// }
// else if (temp_time < still_time_min)
// {
// time_add += still_time_min;
// still_time_min = temp_time;
// }
// else
// {
// time_add += temp_time;
// }
// }
// }
// else //100次了
// {
// still_water_add = still_water_add / 99;
// time_add = time_add / 99;
//
// s_g_still_time = time_add; //没乘250 的ns
//
// u8 temp_in_int = (u8) (TempCheckValueApp() >> 16);//////////////////////////////////实际测试///////////////////////////////////////////
// u32 temp_speed = sound_speed_back[temp_in_int];
// s_g_still_lenth = Gp30DataToFloat(s_g_still_time) * Gp30DataToFloat(temp_speed);
//
// Gp22AppDataPre();
// if (EepIfIdle()) //忙的话暂时不存了等待1h的存储周期
// {
// EepWrite(&g_sample_save_data.data[0], GP30_APP_DATA_ADDR, sizeof (GP30_APP_SAVE_DATA), &result);
// }
// if (still_water_add >= 0)
// {
// s_g_still_water_time = FloatToGp30Data(still_water_add);
// }
// else
// {
// still_water_add = 0 - still_water_add;
// s_g_still_water_time = FloatToGp30Data(still_water_add);
// s_g_still_water_time |= 0x80000000;
// }
// s_g_still_flag = FALSE;
// s_g_still_finish = TRUE;
// sum = 0;
// still_water_add = 0;
// time_add = 0;
// }
// }
//}
/****************************************************************
Function: void Gp22SampleChange (void)
Description: GP22 在非检定状态下,切换采样频率
Input:
Return:
Others:
*****************************************************************/
//void Gp22SampleChange (void)
//{
// if (10 == LcdCheckStateApp()) //非检定状态
// {
// if(0 != gp22_test_data.s.ins_flow) //流量不是0,立即切换成高采样频率
// {
// s_g_gp22_sample_span = GP22_SAMPLE_2HZ; //0.5s
// s_g_gp22_sample_sum = 0;
// }
// else
// {
// if(GP22_SAMPLE_2HZ == s_g_gp22_sample_span)//流量是0,且当前是0.5s的采样间隔
// {
// s_g_gp22_sample_sum++;
// if(s_g_gp22_sample_sum > 40) //2min之后,切换到1s =3*参数
// {
// s_g_gp22_sample_span = GP22_SAMPLE_0_5HZ; //2s
// s_g_gp22_sample_sum = 0;
// }
// }
// }
// }
//}
/****************************************************************
Function: void Gp22AppClearData (void)
Description: GP22-流量检测状态机
Input:当前用于计算流量的流速
Return:
*****************************************************************/
void Gp22FlowDetect(float current_ins_flow)
{
static u8 gp30_app_flow_detect_state = GP30_APP_FLOW_DETECT_S0;
static float original_total_flow=0;//记录原始正向累积量
float accumulate_volume_diff=0,accumulate_volume_diff_5L=0,accumulate_volume_diff_10L=0,accumulate_volume_diff_100L=0;//当前累积量-初始累积量
static u8 NbIoTUpload_state=FALSE;
if(FixedTimeNbIoTUploadIfIdle() == TASK_BUSY)//
{
NbIoTUpload_state = TRUE;
}
switch (gp30_app_flow_detect_state)
{
case GP30_APP_FLOW_DETECT_S0:
{
if(current_ins_flow!=0)//当前流速不为0
{
if (10 == LcdCheckStateApp()) //非检定状态
{
original_total_flow = gp22_app_data.s.total_flow.gp30_float;//获取当前非检定累积量
}
else//否则就是检定
{
original_total_flow = gp22_test_data.s.total_flow.gp30_float;//获取当前检定累积量
}
RtccSetTimer(FLOW_DETECT_TIME, FLOW_DETECT_5S);//定时5s
NbIoTUpload_state = FALSE;
gp30_app_flow_detect_state = GP30_APP_FLOW_DETECT_S1;
}
break;
}
case GP30_APP_FLOW_DETECT_S1:
{
if(0==RtccCheckTimer(FLOW_DETECT_TIME))//检测时间到了
{
gp30_app_flow_detect_state = GP30_APP_FLOW_DETECT_S2;
}
break;
}
case GP30_APP_FLOW_DETECT_S2:
{
// if(current_ins_flow<=(float)200)//当前流速小于200L/h
{
if(0==current_ins_flow)//当前流速为0
{
if (10 == LcdCheckStateApp()) //非检定状态
{
accumulate_volume_diff = gp22_app_data.s.total_flow.gp30_float - original_total_flow;//计算当前累积量量差值
accumulate_volume_diff_5L = accumulate_volume_diff - (float)0.5;//与5L的差值
accumulate_volume_diff_10L = accumulate_volume_diff - (float)1;//与10L的差值
accumulate_volume_diff_100L = accumulate_volume_diff - (float)10;//与100L的差值
if((accumulate_volume_diff_10L >=(float)-0.035)&&(accumulate_volume_diff_10L <= (float)0.035))
{
gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float - accumulate_volume_diff_10L *(float)0.2;//缩小80%
duoble_total_flow.gp30_double = gp22_app_data.s.total_flow.gp30_float;
}
else if((accumulate_volume_diff_5L >=(float)-0.0175)&&(accumulate_volume_diff_5L <= (float)0.0175))
{
gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float - accumulate_volume_diff_5L *(float)0.2;//缩小80%
duoble_total_flow.gp30_double = gp22_app_data.s.total_flow.gp30_float;
}
else if((accumulate_volume_diff_100L >=(float)-0.8)&&(accumulate_volume_diff_100L <= (float)0.8))
{
if(TRUE==NbIoTUpload_state)
{
gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float - accumulate_volume_diff_100L *(float)0.85;//缩小15%
duoble_total_flow.gp30_double = gp22_app_data.s.total_flow.gp30_float;
}
}
}
else//检定状态
{
accumulate_volume_diff = gp22_test_data.s.total_flow.gp30_float - original_total_flow;//计算当前累积量量差值
accumulate_volume_diff_5L = accumulate_volume_diff - (float)500;//与5L的差值
accumulate_volume_diff_10L = accumulate_volume_diff - (float)1000;//与10L的差值
if((accumulate_volume_diff_10L >=(float)-35)&&(accumulate_volume_diff_10L <= (float)35))
{
gp22_test_data.s.total_flow.gp30_float = gp22_test_data.s.total_flow.gp30_float - accumulate_volume_diff_10L *(float)0.2;//缩小80%
}
else if((accumulate_volume_diff_5L >=(float)-17.5)&&(accumulate_volume_diff_5L <= (float)17.5))
{
gp22_test_data.s.total_flow.gp30_float = gp22_test_data.s.total_flow.gp30_float - accumulate_volume_diff_5L *(float)0.2;//缩小80%
}
}
NbIoTUpload_state = FALSE;
gp30_app_flow_detect_state = GP30_APP_FLOW_DETECT_S0;
}
}
// else //流速大于200 则不进行累积量计算
// {
// gp30_app_flow_detect_state = GP30_APP_FLOW_DETECT_S3;
// }
break;
}
case GP30_APP_FLOW_DETECT_S3:
{
if(0==current_ins_flow)//当前流速为0
{
gp30_app_flow_detect_state = GP30_APP_FLOW_DETECT_S0;
}
break;
}
default:
{
gp30_app_flow_detect_state = GP30_APP_FLOW_DETECT_S0;
break;
}
}
}
/****************************************************************
Function: void Gp22EventCheckApp(void)
Description: 检测事件记录
Input:
Return:
Others:
*****************************************************************/
void Gp22EventCheckApp(u32 ins_flow)
{
//15 20 25 32 40 口径
//0.002 0.004 0.006 0.010 0.025 使动流量
//0.010 0.016 0.025 0.040 0.064 最小流量
//0.016 0.025 0.040 0.064 0.100 分界流量
//2.5 4.0 6.3 10.0 16.0 常用流量
//3.125 5.0 7.875 12.5 20.0 过载流量
// ins_flow = MulGp30Data(ins_flow, 0x00000041); //转换成立方米每小时
if((ins_flow != 0)&&((ins_flow < MIN_FLOW_0_6)||(ins_flow > MAX_FLOW_1_02))) ///最小流量的60%,过载流量的102%
{
gp22CheckErrEventApp(GP30_low_high_flow); // 5/4
}
else
{
gp22CheckErrEventApp(GP30_low_high_flow_DE); // 5/4 DE
}
if((ins_flow != 0)&&(ins_flow < MIN_FLOW_0_3)) //最小流量的30%作为微漏3L/h
{
gp22CheckErrEventApp(GP30_low_flow); // 3/4
}
else
{
gp22CheckErrEventApp(GP30_low_flow_DE); // 3/4 DE
}
float temp_temp = TempCheckValueApp();
if((temp_temp > 55) || (temp_temp < -0.5)) //T50温度范围,0-55℃
{
gp22CheckErrEventApp(GP30_out_temp); // 4/4
}
else
{
gp22CheckErrEventApp(GP30_out_temp_DE); // 4/4 DE
}
}
/****************************************************************
Function: void
Description: 体积台子流量修正
Input:
Return:
Others:
*****************************************************************/
float ModifyForVolumeTestbench(float temp_ins_flow_float)
{
float temp_value = TempCheckValueApp();
#if LLGS_DN15_BRASS_40KPA_GP30_32768
if(temp_ins_flow_float >= (float)110) //流量范围
{
if((temp_value >= (float)28)&&(temp_value < (float)31)) //温度范围
{
temp_ins_flow_float = temp_ins_flow_float * ((float)-0.0013*temp_value + (float)1.0373);//28 1 31 -0.4%
}
else if((temp_value >= (float)31)&&(temp_value < (float)34)) //温度范围
{
temp_ins_flow_float = temp_ins_flow_float * ((float)0.0013*temp_value + (float)0.9547);//34 1 31 -0.4%
}
}
else if((temp_ins_flow_float > (float)23)&&(temp_ins_flow_float < (float)27))//流量范围
{
if(temp_value < (float)23) //温度范围
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.005;//
}
}
else if(temp_ins_flow_float <= (float)23) //流量范围
{
if((temp_value >= (float)12)&&(temp_value < (float)23)) //温度范围
{
temp_ins_flow_float = temp_ins_flow_float * ((float)-0.00018182*temp_value +(float)1.00718182);//12+0.5% 23 +0.3
}
else if(temp_value < (float)12) //温度范围
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.005;//
}
}
#elif Buxiugang_LLGS_WDFS_DN15_BXG_40KPA_GP30_32768
#elif Plastic_LLGS_WDFS_DN15_PALSTIC_40KPA_GP30_32768
#elif ROUND_LLGS_DN15_BRASS_40KPA_GP30_32768 || ROUND_LLGS_WDFS_DN15_BRASS_40KPA_GP30_32768
if(temp_value < (float)16.41)
{
if(temp_ins_flow_float < (float)8.5)
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.997;
}
// else if((temp_ins_flow_float >= (float)6)&&(temp_ins_flow_float < (float)8.5))
// {
// temp_ins_flow_float = temp_ins_flow_float * ((float)0.0032*temp_ins_flow_float+ (float)0.9758);//6:-0.5% 8.5:+0.3%
// }
// else if((temp_ins_flow_float >= (float)8.5)&&(temp_ins_flow_float < (float)25))
// {
// temp_ins_flow_float = temp_ins_flow_float * (float)1.003;
// }
// else if(temp_ins_flow_float >= (float)180)
// {
// temp_ins_flow_float = temp_ins_flow_float * (float)1.0025;
// }
}
else if((temp_value >= (float)16.41)&&(temp_value < (float)22.43))
{
if((temp_ins_flow_float >= (float)8.5)&&(temp_ins_flow_float < (float)25))
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.003;
}
else if(temp_ins_flow_float >= (float)180)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.0025;
}
}
else if((temp_value >= (float)28.06)&&(temp_value < (float)34.86)) //2022-5-30 14:30:33
{
if(temp_ins_flow_float <= (float)25)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.002;
}
}
else if((temp_value >= (float)34.86)&&(temp_value < (float)41.9))
{
if(temp_ins_flow_float >= (float)180)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.002;
}
}
else if(temp_value >= (float)41.9) //温度范围
{
if((temp_ins_flow_float >= (float)8.5)&&(temp_ins_flow_float < (float)25))
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.003;
}
}
#elif EN_DN15_BRASS_63KPA_GP30_32768 // 体积台子没有修正
#elif MID_DN15_BRASS_63KPA_GP30_32768
if(temp_value >= (float)35)
{
if(temp_ins_flow_float < (float)25)
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.998;
}
else if(temp_ins_flow_float>= (float)2100)
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.997;
}
}
else if((temp_value >= (float)17)&&(temp_value < (float)35))
{
if(temp_ins_flow_float < (float)25)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.003;
}
}
else if((temp_value >= (float)15)&&(temp_value < (float)17))
{
if(temp_ins_flow_float <= (float)30)
{
temp_ins_flow_float = temp_ins_flow_float * ((float)0.003*temp_value +(float) 0.955);
}
}
#elif PF_DN15_BRASS_63KPA_GP30_32768
if(temp_value >= (float)17)
{
if(temp_ins_flow_float < (float)25)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.008;
}
else if((temp_ins_flow_float >= (float)25)&&(temp_ins_flow_float < (float)30))
{
temp_ins_flow_float = temp_ins_flow_float *(float)1.005;//
}
else if((temp_ins_flow_float >= (float)30)&&(temp_ins_flow_float < (float)45))
{
temp_ins_flow_float = temp_ins_flow_float *(float)1.003;//
}
}
else if((temp_value >= (float)15)&&(temp_value < (float)17))
{
if(temp_ins_flow_float <= (float)30)
{
temp_ins_flow_float = temp_ins_flow_float * ((float)0.003*temp_value +(float) 0.955);
}
}
#elif EN_DN20_BRASS_63KPA_GP30_32768
#elif MID_DN20_BRASS_63KPA_GP30_32768
if(temp_ins_flow_float <= (float)22)
{
if(temp_value < (float)13)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.005;
}
else if((temp_value >= (float)13)&&(temp_value < (float)21))
{
temp_ins_flow_float = temp_ins_flow_float *((float)0.0004*temp_value + (float)1.0001);//35:+0.5%-0.85%
}
else if((temp_value >= (float)21)&&(temp_value < (float)23))
{
temp_ins_flow_float = temp_ins_flow_float *((float)-0.002*temp_value + (float)1.05);//35:+0.8%-0.4%
}
else if((temp_value >= (float)27)&&(temp_value < (float)30))
{
temp_ins_flow_float = temp_ins_flow_float *((float)0.001*temp_value + (float)0.977);//35:+0.4%-0.7%
}
else if((temp_value >= (float)30)&&(temp_value < (float)34))
{
temp_ins_flow_float = temp_ins_flow_float *((float)-0.001*temp_value + (float)1.037);//35:+0.7%-0.3%
}
else if(temp_value >= (float)40)
{
temp_ins_flow_float = temp_ins_flow_float *(float)1.003;//
}
}
else if((temp_ins_flow_float > (float)22)&&(temp_ins_flow_float <= (float)24)) //主要是与22以下流量过渡作用
{
if(temp_value <= (float)23)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.004;
}
else if((temp_value >= (float)27)&&(temp_value < (float)34))
{
temp_ins_flow_float = temp_ins_flow_float *(float)1.003;//
}
}
else if(temp_ins_flow_float > (float)260)
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.997;
}
#elif DN20_BRASS_40KPA_GP30_32768
if(temp_ins_flow_float <= (float)200)
{
temp_ins_flow_float = temp_ins_flow_float * TEST_BENCH_coefficient;//机械台子修正
}
#elif LLGS_WDFS_DN20_BRASS_40KPA_GP30_32768
if(temp_value <15)
{
if(temp_ins_flow_float < (float)35)
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.995;
}
}
else if((temp_value >= (float)30))
{
if(temp_ins_flow_float < (float)35)
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.997;
}
}
#elif PF_DN20_BRASS_63KPA_GP30_32768
if(temp_ins_flow_float <= (float)22)
{
if(temp_value < (float)13)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.005;
}
else if((temp_value >= (float)13)&&(temp_value < (float)21))
{
temp_ins_flow_float = temp_ins_flow_float *((float)0.0004*temp_value + (float)1.0001);//35:+0.5%-0.85%
}
else if((temp_value >= (float)21)&&(temp_value < (float)23))
{
temp_ins_flow_float = temp_ins_flow_float *((float)-0.002*temp_value + (float)1.05);//35:+0.8%-0.4%
}
else if((temp_value >= (float)27)&&(temp_value < (float)30))
{
temp_ins_flow_float = temp_ins_flow_float *((float)0.001*temp_value + (float)0.977);//35:+0.4%-0.7%
}
else if((temp_value >= (float)30)&&(temp_value < (float)34))
{
temp_ins_flow_float = temp_ins_flow_float *((float)-0.001*temp_value + (float)1.037);//35:+0.7%-0.3%
}
else if(temp_value >= (float)40)
{
temp_ins_flow_float = temp_ins_flow_float *(float)1.003;//
}
}
else if((temp_ins_flow_float > (float)22)&&(temp_ins_flow_float <= (float)24)) //主要是与22以下流量过渡作用
{
if(temp_value <= (float)23)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.004;
}
else if((temp_value >= (float)27)&&(temp_value < (float)34))
{
temp_ins_flow_float = temp_ins_flow_float *(float)1.003;//
}
}
else if(temp_ins_flow_float > (float)260)
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.997;
}
#elif LLGS_DN20_BRASS_40KPA_GP30_32768
if(temp_value < (float)12.97)
{
if(temp_ins_flow_float < (float)30)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.005;
}
else if((temp_ins_flow_float >= (float)30)&&(temp_ins_flow_float < (float)100))
{
temp_ins_flow_float = temp_ins_flow_float *(float)1.008;//
}
else if((temp_ins_flow_float >= (float)100)&&(temp_ins_flow_float < (float)150))
{
temp_ins_flow_float = temp_ins_flow_float *(float)1.005;//
}
else if((temp_ins_flow_float >= (float)150)&&(temp_ins_flow_float < (float)180))
{
temp_ins_flow_float = temp_ins_flow_float *(float)1.003;//
}
}
else if((temp_value >= (float)12.97)&&(temp_value < (float)22.62))
{
if(temp_ins_flow_float < (float)180)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.007;
}
else if((temp_ins_flow_float >= (float)180)&&(temp_ins_flow_float < (float)220))
{
temp_ins_flow_float = temp_ins_flow_float *(float)1.003;//
}
}
else if((temp_value >= (float)22.62)&&(temp_value < (float)25.54))
{
if(temp_ins_flow_float <= (float)150)
{
temp_ins_flow_float = temp_ins_flow_float * ((float)-0.0017*temp_value + (float)1.0437);//0.5-0
}
}
else if((temp_value >= (float)27.99)&&(temp_value < (float)31.12))
{
if(temp_ins_flow_float < (float)45)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.003;
}
}
#elif Buxiugang_LLGS_WDFS_DN20_BXG_40KPA_GP30_32768
#elif ROUND_LLGS_DN20_BRASS_40KPA_GP30_32768 || ROUND_LLGS_WDFS_DN20_BRASS_40KPA_GP30_32768
if(temp_value < (float)19.83)
{
if((temp_ins_flow_float >= (float)19)&&(temp_ins_flow_float < (float)35))
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.002;
}
else if((temp_ins_flow_float >= (float)180)&&(temp_ins_flow_float < (float)4300))
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.996;
}
}
else if((temp_value >= (float)19.83)&&(temp_value < (float)25.5))
{
if(temp_ins_flow_float <= (float)35)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.002;
}
else if((temp_ins_flow_float >= (float)180)&&(temp_ins_flow_float < (float)4300))
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.998;
}
}
else if((temp_value >= (float)25.5)&&(temp_value < (float)40))
{
if(temp_ins_flow_float <= (float)19)
{
temp_ins_flow_float = temp_ins_flow_float *((float)0.0003*temp_value + (float)0.993);//基于温度的曲线 25.5度 +0 40度+0.4%
}
else if((temp_ins_flow_float >= (float)150)&&(temp_ins_flow_float < (float)180))
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.998;
}
else if((temp_ins_flow_float >= (float)180)&&(temp_ins_flow_float < (float)4300))
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.995;
}
else if(temp_ins_flow_float >= (float)4300)
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.998;
}
}
else if(temp_value >= (float)40) //温度范围
{
if((temp_ins_flow_float >= (float)150)&&(temp_ins_flow_float < (float)180))
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.997;
}
else if((temp_ins_flow_float >= (float)180)&&(temp_ins_flow_float < (float)4300))
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.993;
}
else if(temp_ins_flow_float >= (float)4300)
{
temp_ins_flow_float = temp_ins_flow_float * (float)0.996;
}
}
#elif PF_DN25_BRASS_63KPA_GP30_32768
if(temp_value > (float)35)
{
if((temp_ins_flow_float > (float)400))
{
temp_ins_flow_float = temp_ins_flow_float *(float)0.996;
}
}
else if((temp_value > (float)27.69)&&(temp_value <= (float)35))
{
if(temp_ins_flow_float <= (float)65)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.003;
}
else if((temp_ins_flow_float > (float)4500))
{
temp_ins_flow_float = temp_ins_flow_float *(float)0.998;
}
}
else if(temp_value <= (float)27.69)
{
if(temp_ins_flow_float <= (float)65)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.005;
}
else if((temp_ins_flow_float > (float)4500))
{
temp_ins_flow_float = temp_ins_flow_float *(float)0.998;
}
}
#elif DN25_BRASS_40KPA_GP30_32768
if(temp_value > (float)35)
{
if((temp_ins_flow_float > (float)400))
{
temp_ins_flow_float = temp_ins_flow_float *(float)0.996;
}
}
else if((temp_value > (float)27.69)&&(temp_value <= (float)35))
{
if(temp_ins_flow_float <= (float)65)
{
temp_ins_flow_float = temp_ins_flow_float * (float)1.003;
}
else if((temp_ins_flow_float > (float)4500))
{
temp_ins_flow_float = temp_ins_flow_float *(float)0.998;
}
}
else if((temp_value <= (float)27.69))
{
if((temp_ins_flow_float > (float)4500))
{
temp_ins_flow_float = temp_ins_flow_float *(float)0.996;
}
}
#endif
return temp_ins_flow_float;
}
/****************************************************************
Function: void Gp22FlowCalculate(u32 time_dof)
Description: 由时间差计算瞬时流量,以及温度补偿
Input:
Return:
Others:
*****************************************************************/
float Gp22FlowCalculate(u32 time_dof)
{
static u32 diftof_abnormal_cnt=0;
static u32 transducer_check_cnt=0;
float ins_flow_temp_float = 0;
float time_dof_temp_float = 0;
float temp_value_float=0;
#if WENDU_FANSUAN_OPEN
Water_Meter_Temp_calculate(time_dof);//传递给我时间差---用于计算流速度
#endif
if(RtccCheckMsgApp(RtccMsg_Transducer_Check))
{
RtccClearMsgApp(RtccMsg_Transducer_Check);//清每天2点置检测换能器是否异常的标志
if(transducer_check_cnt>DIFTOF_CALIBRATION_CNT)
{
transducer_err_msg = TRUE;
}
else
{
transducer_err_msg = FALSE;
}
transducer_check_cnt=0;
}
if((time_dof < gp30_app_start_flow_filter)||(time_dof >= 0x40000)) //DN15、DN20整表900、700ps3.77L、5 L——模组的800、6003.3L、4.2//2019年1月22日先暂时写死
{
ins_flow_temp_float = 0;
}
else
{
transducer_check_cnt++;
time_dof_temp_float = Gp30DataToFloat(time_dof); //先把有效时间差转换成浮点数
time_dof_temp_float = time_dof_temp_float * (float)250;// 将us转换成真实的ns /4 *1000=ns
//------------------------------------------------- 反算温度代码开始区-------------
if(TRUE == CheckDiftofCalibrationFlag())
{
diftof_abnormal_cnt++;
if(RtccCheckMsgApp(RtccMsg_DiftofCalibration))
{
RtccClearMsgApp(RtccMsg_DiftofCalibration);//清每天2点置校准零流量标志
if(diftof_abnormal_cnt>DIFTOF_CALIBRATION_CNT)
{
Gp30DiftofCalibration();
diftof_auto_calibration_msg = TRUE;
}
diftof_abnormal_cnt=0;
}
}
else
{
diftof_abnormal_cnt=0;
}
if(s_g_sample_ok_flag)
{
temp_value_float = temp_sample_value;//获取滤波后的温度数值
}
else
{
temp_value_float = TempCheckValueApp();//获取实时的温度数据-----宏定义区分
}
if((temp_value_float<-0.5)&&((gp22_app_data.s.peak_up>95)&&(gp22_app_data.s.peak_down>95)))//温度异常且振幅正常,判断为温度传感器异常
{
temp_value_float = 20;
}
flow_coef=ReadCofficientApp();//将流量系数首地址传出
#if DN15_BRASS_40KPA_GP30_32768 || WDFS_DN15_BRASS_40KPA_GP30_32768 || LLGS_DN15_BRASS_40KPA_GP30_32768 || LLGS_WDFS_DN15_BRASS_40KPA_GP30_32768
float Mum_T_DIFTOF = (float)-3.089 + (float)0.1979*temp_value_float + (float)5.032*time_dof_temp_float -(float)0.004616*temp_value_float*temp_value_float + (float)0.03869*temp_value_float*time_dof_temp_float + (float)0.02473*time_dof_temp_float*time_dof_temp_float;
#elif ROUND_LLGS_DN15_BRASS_40KPA_GP30_32768 || ROUND_LLGS_WDFS_DN15_BRASS_40KPA_GP30_32768
float Mum_T_DIFTOF = (float)-3.089 + (float)0.1979*temp_value_float + (float)5.032*time_dof_temp_float -(float)0.004616*temp_value_float*temp_value_float + (float)0.03869*temp_value_float*time_dof_temp_float + (float)0.02473*time_dof_temp_float*time_dof_temp_float;
#elif Plastic_LLGS_WDFS_DN15_PALSTIC_40KPA_GP30_32768
float Mum_T_DIFTOF = (float)-2.994 + (float)0.1383*temp_value_float + (float) 5.823*time_dof_temp_float -(float)0.002506*temp_value_float*temp_value_float + (float)0.03894*temp_value_float*time_dof_temp_float + (float)0.02752*time_dof_temp_float*time_dof_temp_float;
#elif Buxiugang_LLGS_WDFS_DN15_BXG_40KPA_GP30_32768
float Mum_T_DIFTOF = (float)-3.219 + (float)0.1349*temp_value_float + (float)5.279*time_dof_temp_float -(float)0.002371*temp_value_float*temp_value_float + (float)0.02696*temp_value_float*time_dof_temp_float + (float)0.01182*time_dof_temp_float*time_dof_temp_float;
#elif ROUND_LLGS_XFZ_DN15_BRASS_40KPA_GP30_32768
float Mum_T_DIFTOF = (float)-2.163+ (float)0.1283*temp_value_float + (float)5.585*time_dof_temp_float -(float)0.002701*temp_value_float*temp_value_float + (float)0.0443*temp_value_float*time_dof_temp_float + (float)0.02777*time_dof_temp_float*time_dof_temp_float;
#elif DN20_BRASS_40KPA_GP30_32768 || WDFS_DN20_BRASS_40KPA_GP30_32768 || LLGS_DN20_BRASS_40KPA_GP30_32768 || LLGS_WDFS_DN20_BRASS_40KPA_GP30_32768 || ROUND_LLGS_DN20_BRASS_40KPA_GP30_32768
float Mum_T_DIFTOF = (float)-4.374+ (float)0.2251*temp_value_float + (float)7.566*time_dof_temp_float -(float)0.004431*temp_value_float*temp_value_float + (float)0.05552*temp_value_float*time_dof_temp_float + (float)0.03715*time_dof_temp_float*time_dof_temp_float;
#elif ROUND_LLGS_XFZ_DN20_BRASS_40KPA_GP30_32768
float Mum_T_DIFTOF = (float)-4.228+ (float)0.2106*temp_value_float + (float)7.191*time_dof_temp_float -(float)0.003052*temp_value_float*temp_value_float + (float)0.03379*temp_value_float*time_dof_temp_float + (float)0.007546*time_dof_temp_float*time_dof_temp_float;
#elif ROUND_LLGS_DN20_BRASS_40KPA_GP30_32768 || ROUND_LLGS_WDFS_DN20_BRASS_40KPA_GP30_32768
float Mum_T_DIFTOF = (float)-4.374+ (float)0.2251*temp_value_float + (float)7.566*time_dof_temp_float -(float)0.004431*temp_value_float*temp_value_float + (float)0.05552*temp_value_float*time_dof_temp_float + (float)0.03715*time_dof_temp_float*time_dof_temp_float;
#elif Buxiugang_LLGS_WDFS_DN20_BXG_40KPA_GP30_32768
float Mum_T_DIFTOF = (float)-4.363+ (float)0.1885*temp_value_float + (float)8.31*time_dof_temp_float -(float)0.003478*temp_value_float*temp_value_float + (float)0.05026*temp_value_float*time_dof_temp_float + (float)0.02686*time_dof_temp_float*time_dof_temp_float;
#elif DN25_BRASS_40KPA_GP30_32768 || LLGS_DN25_BRASS_40KPA_GP30_32768
float Mum_T_DIFTOF = (float)-4.629 + (float)0.1449*temp_value_float + (float)7.528*time_dof_temp_float -(float)0.002609*temp_value_float*temp_value_float + (float)0.05185*temp_value_float*time_dof_temp_float + (float)0.03089*time_dof_temp_float*time_dof_temp_float;
#elif DN32_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-13.82 + (float)0.4569 *temp_value_float + (float)12.48*time_dof_temp_float -(float)0.006447*temp_value_float*temp_value_float + (float)0.06745*temp_value_float*time_dof_temp_float + (float)0.02257*time_dof_temp_float*time_dof_temp_float;
#elif DN40_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-29.04 + (float)1.514*temp_value_float + (float)23.38*time_dof_temp_float -(float)0.0237*temp_value_float*temp_value_float + (float)0.1134*temp_value_float*time_dof_temp_float + (float)0.008339*time_dof_temp_float*time_dof_temp_float;
#elif BM_DN15_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-1.889+ (float)0.08152*temp_value_float + (float)4.085*time_dof_temp_float -(float)0.001562*temp_value_float*temp_value_float + (float)0.03146*temp_value_float*time_dof_temp_float + (float)0.03695*time_dof_temp_float*time_dof_temp_float;
#elif BM_DN20_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF=(float)-4.947 + (float)0.2216*temp_value_float + (float)8.223*time_dof_temp_float -(float)0.003235*temp_value_float*temp_value_float + (float)0.04133*temp_value_float*time_dof_temp_float + (float)0.02369*time_dof_temp_float*time_dof_temp_float;
#elif BM_DN25_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-4.629 + (float)0.1449*temp_value_float + (float)7.528*time_dof_temp_float -(float)0.002609*temp_value_float*temp_value_float + (float)0.05185*temp_value_float*time_dof_temp_float + (float)0.03089*time_dof_temp_float*time_dof_temp_float;
#elif BM_DN32_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-13.82 + (float)0.4569 *temp_value_float + (float)12.48*time_dof_temp_float -(float)0.006447*temp_value_float*temp_value_float + (float)0.06745*temp_value_float*time_dof_temp_float + (float)0.02257*time_dof_temp_float*time_dof_temp_float;
#elif BM_DN40_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-29.04 + (float)1.514*temp_value_float + (float)23.38*time_dof_temp_float -(float)0.0237*temp_value_float*temp_value_float + (float)0.1134*temp_value_float*time_dof_temp_float + (float)0.008339*time_dof_temp_float*time_dof_temp_float;
#elif MID_DN15_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-3.484 + (float)0.08413*temp_value_float + (float)5.147*time_dof_temp_float -(float)0.0009018*temp_value_float*temp_value_float + (float)0.02242*temp_value_float*time_dof_temp_float + (float)0.01383*time_dof_temp_float*time_dof_temp_float;
#elif MID_DN20_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-4.779 + (float)0.1773*temp_value_float + (float)7.718*time_dof_temp_float -(float)0.0029*temp_value_float*temp_value_float + (float)0.04264*temp_value_float*time_dof_temp_float + (float)0.02904*time_dof_temp_float*time_dof_temp_float;
#elif MID_DN25_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-10.63 + (float)0.4456 *temp_value_float + (float)8.033*time_dof_temp_float -(float)0.007159*temp_value_float*temp_value_float + (float)0.04336*temp_value_float*time_dof_temp_float + (float)0.009849*time_dof_temp_float*time_dof_temp_float;
#elif EN_DN15_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-3.484 + (float)0.08413*temp_value_float + (float)5.147*time_dof_temp_float -(float)0.0009018*temp_value_float*temp_value_float + (float)0.02242*temp_value_float*time_dof_temp_float + (float)0.01383*time_dof_temp_float*time_dof_temp_float;
#elif EN_DN20_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-6.865 + (float)0.334*temp_value_float + (float)8.025*time_dof_temp_float -(float)0.005138*temp_value_float*temp_value_float + (float)0.04061*temp_value_float*time_dof_temp_float + (float)0.01638*time_dof_temp_float*time_dof_temp_float;
//20211204
#elif PF_DN15_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-3.484 + (float)0.08413*temp_value_float + (float)5.147*time_dof_temp_float -(float)0.0009018*temp_value_float*temp_value_float + (float)0.02242*temp_value_float*time_dof_temp_float + (float)0.01383*time_dof_temp_float*time_dof_temp_float;
#elif PF_DN20_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-4.779 + (float)0.1773*temp_value_float + (float)7.718*time_dof_temp_float -(float)0.0029*temp_value_float*temp_value_float + (float)0.04264*temp_value_float*time_dof_temp_float + (float)0.02904*time_dof_temp_float*time_dof_temp_float;
#elif PF_DN25_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-4.629 + (float)0.1449*temp_value_float + (float)7.528*time_dof_temp_float -(float)0.002609*temp_value_float*temp_value_float + (float)0.05185*temp_value_float*time_dof_temp_float + (float)0.03089*time_dof_temp_float*time_dof_temp_float;
#elif PF_DN32_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-13.82 + (float)0.4569 *temp_value_float + (float)12.48*time_dof_temp_float -(float)0.006447*temp_value_float*temp_value_float + (float)0.06745*temp_value_float*time_dof_temp_float + (float)0.02257*time_dof_temp_float*time_dof_temp_float;
#elif PF_DN40_BRASS_63KPA_GP30_32768
float Mum_T_DIFTOF = (float)-29.04 + (float)1.514*temp_value_float + (float)23.38*time_dof_temp_float -(float)0.0237*temp_value_float*temp_value_float + (float)0.1134*temp_value_float*time_dof_temp_float + (float)0.008339*time_dof_temp_float*time_dof_temp_float;
#endif
#if LILUNGONGSHI_MODLE_WATER_METER
if (Mum_T_DIFTOF <= SEGMENT_NUM_LARGE) //小流段用理论公式+误差补偿曲线
{
float sound_speed_C;
float reynolds_coefficient;
//*******************************理论模型********************************//
//查表得到C
u8 calculate_num ; //查表位置
float calculate_decimal ; //温度的小数部分
if((temp_value_float < 0) || (temp_value_float > 100)) //异常温度判断,防止数组越界
{
sound_speed_C = sound_speed_in_water[20];
}
else
{
calculate_num = (u8) (temp_value_float); //查表位置
calculate_decimal = temp_value_float - calculate_num; //温度的小数部分
sound_speed_C = sound_speed_in_water[calculate_num] + calculate_decimal * (sound_speed_in_water[calculate_num + 1] - sound_speed_in_water[calculate_num]);
}
//计算理论流速
float ins_flow_rate_float = sound_speed_C * sound_speed_C * time_dof_temp_float * FLOW_RATE_MULTIPLIER;
//计算雷诺数
float temp_cal = temp_value_float;
if(temp_value_float < 0)
{
temp_cal = 0;
}
else if(temp_value_float > 55)
{
temp_cal = 55;
}
float kinematic_viscosity = (float)-0.006*temp_cal*temp_cal*temp_cal + (float)0.9153*temp_cal*temp_cal - (float)55.214*temp_cal + (float)1784.2;
float water_density = 1000*((float)-0.00000535*temp_cal*temp_cal+(float)0.0000130707*temp_cal+(float)1.0001);
float Reynolds_number = 1000*water_density * ins_flow_rate_float * MEASYRING_TUBE_DIAMETER / kinematic_viscosity; //雷诺数Re = ρ*v*L/η L特征长度
//计算理论流量
ins_flow_temp_float = ins_flow_rate_float * FLOW_MULTIPLIER; // L/h
// u32 tickstart_test = Timer1usGetTick(); //测试计算时间
//弦向速度补偿——2021-2-1
//————————层流区先按照第一段
/*
4000<Re<100000 n=6补偿系数=1.08887
<120000 n=7补偿系数=1.075704
<350000 n=8补偿系数=1.065936
<3240000 n=9补偿系数=1.0584
>3240000 n=10补偿系数=1.05241
*/
// float XIAN_coefficient = (float)1.08887;
// if(Reynolds_number < (float)100000)
// {
// XIAN_coefficient = (float)1.08887;
// }
// else if(Reynolds_number < (float)120000)
// {
// XIAN_coefficient = (float)1.075704;
// }
// else if(Reynolds_number < (float)350000)
// {
// XIAN_coefficient = (float)1.065936;
// }
// else if(Reynolds_number < (float)3240000)
// {
// XIAN_coefficient = (float)1.0584;
// }
// else
// {
// XIAN_coefficient = (float)1.05241;
// }
// ins_flow_temp_float = ins_flow_temp_float*XIAN_coefficient;
//线速度补偿——先暂时不分段
//=Y3/(1+0.01*SQRT(6.25+431*POWER(V3,-0.237))) 收敛性更好,暂使用这一段
//泰勒展开拟合
// r = taylor(1 + (0.01 * sqrt(6.25 + 431*power(x,-0.237))),x,'order',10)
//公式法
// reynolds_coefficient = (float)1 + ((float)0.01 * sqrt((float)6.25 + 431*pow(Reynolds_number,-0.237)));
// reynolds_coefficient = (float)1 + ((float)0.01 * ((float)6.25 + 431*pow(Reynolds_number,-0.237)));
// reynolds_coefficient = (float)1 + ((float)0.01 * sqrt((float)6.25 + 431*(Reynolds_number)));
// reynolds_coefficient = (float)1 / reynolds_coefficient;
//多项式拟合 注意1、每个口径根据最小雷诺数重新拟合2、拟合时选择科学计数4位小数
float x = Reynolds_number/(float)1000;
if(x < (float)5.4)
{
reynolds_coefficient = (float)0.000047977*x*x*x*x*x - (float)0.00081617*x*x*x*x + (float)0.005381*x*x*x - (float)0.017564*x*x + (float)0.031606*x + (float)0.89468;//雷诺补偿K计算
}
else if(x < (float)50)
{
reynolds_coefficient = (float)0.00000000027746*x*x*x*x*x - (float)0.000000046288*x*x*x*x + (float)0.0000030565*x*x*x - (float)0.00010318*x*x + (float)0.0020177*x + (float)0.91854;//雷诺补偿K计算
}
else if(x < (float)400)
{
reynolds_coefficient = (float)0.0000000000000068051*x*x*x*x*x - (float)0.0000000000089476*x*x*x*x + (float)0.0000000046656*x*x*x - (float)0.0000012475*x*x + (float)0.00019399*x + (float)0.93385;//雷诺补偿K计算
}
else//用1000以下数据拟合的
{
reynolds_coefficient = -(float)0.00000000000000625752*x*x*x*x + (float)0.00000000002284921079*x*x*x - (float)0.00000003409499816486*x*x + (float)0.00002828954763422040*x + (float)0.94386733698271600000;
}
ins_flow_temp_float = ins_flow_temp_float * reynolds_coefficient; //雷诺数补偿
// 理论公式模型,误差曲线补偿代码
ins_flow_temp_float = ErrorModifyCruve(temp_value_float,time_dof_temp_float,ins_flow_temp_float);
}
else //大流段用多项式模型
{
if(temp_value_float > (float)35)//由于方壳DN15口径 大流量按照温度分为了2段 建模
{
if(Mum_T_DIFTOF < DXS_SEGMENT_NUM_LARGE)//由于不锈钢和塑料壳体DN15口径 大流量按照流量分为了2段
{
ins_flow_temp_float = default_error_DXS[1]+default_error_DXS[2]*temp_value_float
+default_error_DXS[3]*(time_dof_temp_float+default_error_DXS[0])
+default_error_DXS[4]*temp_value_float*temp_value_float
+default_error_DXS[5]*(time_dof_temp_float+default_error_DXS[0])*temp_value_float
+default_error_DXS[6]*(time_dof_temp_float+default_error_DXS[0])*(time_dof_temp_float+default_error_DXS[0])
+default_error_DXS[7]*temp_value_float*temp_value_float*temp_value_float
+default_error_DXS[8]*(time_dof_temp_float+default_error_DXS[0])*temp_value_float*temp_value_float
+default_error_DXS[9]*(time_dof_temp_float+default_error_DXS[0])*(time_dof_temp_float+default_error_DXS[0])*temp_value_float
+default_error_DXS[10]*(time_dof_temp_float+default_error_DXS[0])*(time_dof_temp_float+default_error_DXS[0])*(time_dof_temp_float+default_error_DXS[0]);
}
else
{
ins_flow_temp_float = default_error_DXS[12]+default_error_DXS[13]*temp_value_float
+default_error_DXS[14]*(time_dof_temp_float+default_error_DXS[11])
+default_error_DXS[15]*temp_value_float*temp_value_float
+default_error_DXS[16]*(time_dof_temp_float+default_error_DXS[11])*temp_value_float
+default_error_DXS[17]*(time_dof_temp_float+default_error_DXS[11])*(time_dof_temp_float+default_error_DXS[11])
+default_error_DXS[18]*temp_value_float*temp_value_float*temp_value_float
+default_error_DXS[19]*(time_dof_temp_float+default_error_DXS[11])*temp_value_float*temp_value_float
+default_error_DXS[20]*(time_dof_temp_float+default_error_DXS[11])*(time_dof_temp_float+default_error_DXS[11])*temp_value_float
+default_error_DXS[21]*(time_dof_temp_float+default_error_DXS[11])*(time_dof_temp_float+default_error_DXS[11])*(time_dof_temp_float+default_error_DXS[11]);
}
}
else
{
if(Mum_T_DIFTOF < DXS_SEGMENT_NUM_LARGE)
{
ins_flow_temp_float = default_error_DXS[23]+default_error_DXS[24]*temp_value_float
+default_error_DXS[25]*(time_dof_temp_float+default_error_DXS[22])
+default_error_DXS[26]*temp_value_float*temp_value_float
+default_error_DXS[27]*(time_dof_temp_float+default_error_DXS[22])*temp_value_float
+default_error_DXS[28]*(time_dof_temp_float+default_error_DXS[22])*(time_dof_temp_float+default_error_DXS[22])
+default_error_DXS[29]*temp_value_float*temp_value_float*temp_value_float
+default_error_DXS[30]*(time_dof_temp_float+default_error_DXS[22])*temp_value_float*temp_value_float
+default_error_DXS[31]*(time_dof_temp_float+default_error_DXS[22])*(time_dof_temp_float+default_error_DXS[22])*temp_value_float
+default_error_DXS[32]*(time_dof_temp_float+default_error_DXS[22])*(time_dof_temp_float+default_error_DXS[22])*(time_dof_temp_float+default_error_DXS[22]);
}
else
{
ins_flow_temp_float = default_error_DXS[34]+default_error_DXS[35]*temp_value_float
+default_error_DXS[36]*(time_dof_temp_float+default_error_DXS[33])
+default_error_DXS[37]*temp_value_float*temp_value_float
+default_error_DXS[38]*(time_dof_temp_float+default_error_DXS[33])*temp_value_float
+default_error_DXS[39]*(time_dof_temp_float+default_error_DXS[33])*(time_dof_temp_float+default_error_DXS[33])
+default_error_DXS[40]*temp_value_float*temp_value_float*temp_value_float
+default_error_DXS[41]*(time_dof_temp_float+default_error_DXS[33])*temp_value_float*temp_value_float
+default_error_DXS[42]*(time_dof_temp_float+default_error_DXS[33])*(time_dof_temp_float+default_error_DXS[33])*temp_value_float
+default_error_DXS[43]*(time_dof_temp_float+default_error_DXS[33])*(time_dof_temp_float+default_error_DXS[33])*(time_dof_temp_float+default_error_DXS[33]);
}
}
// ins_flow_temp_float=ins_flow_temp_float*(0.00002844805f*ins_flow_temp_float+0.93148870327f);
}
#endif
#if SUBSECTION_NUM_THREE
// if (Mum_T_DIFTOF <= SEGMENT_NUM_SMALL)
// {
// ins_flow_temp_float = flow_coef[23].flt+flow_coef[24].flt*temp_value_float
// +flow_coef[25].flt*(time_dof_temp_float+flow_coef[22].flt)
// +flow_coef[26].flt*temp_value_float*temp_value_float
// +flow_coef[27].flt*(time_dof_temp_float+flow_coef[22].flt)*temp_value_float
// +flow_coef[28].flt*(time_dof_temp_float+flow_coef[22].flt)*(time_dof_temp_float+flow_coef[22].flt)
// +flow_coef[29].flt*temp_value_float*temp_value_float*temp_value_float
// +flow_coef[30].flt*(time_dof_temp_float+flow_coef[22].flt)*temp_value_float*temp_value_float
// +flow_coef[31].flt*(time_dof_temp_float+flow_coef[22].flt)*(time_dof_temp_float+flow_coef[22].flt)*temp_value_float
// +flow_coef[32].flt*(time_dof_temp_float+flow_coef[22].flt)*(time_dof_temp_float+flow_coef[22].flt)*(time_dof_temp_float+flow_coef[22].flt);
// }
// else if (Mum_T_DIFTOF <= SEGMENT_NUM_MIDDLE)
// {
// ins_flow_temp_float = flow_coef[12].flt+flow_coef[13].flt*temp_value_float
// +flow_coef[14].flt*(time_dof_temp_float+flow_coef[11].flt)
// +flow_coef[15].flt*temp_value_float*temp_value_float
// +flow_coef[16].flt*(time_dof_temp_float+flow_coef[11].flt)*temp_value_float
// +flow_coef[17].flt*(time_dof_temp_float+flow_coef[11].flt)*(time_dof_temp_float+flow_coef[11].flt)
// +flow_coef[18].flt*temp_value_float*temp_value_float*temp_value_float
// +flow_coef[19].flt*(time_dof_temp_float+flow_coef[11].flt)*temp_value_float*temp_value_float
// +flow_coef[20].flt*(time_dof_temp_float+flow_coef[11].flt)*(time_dof_temp_float+flow_coef[11].flt)*temp_value_float
// +flow_coef[21].flt*(time_dof_temp_float+flow_coef[11].flt)*(time_dof_temp_float+flow_coef[11].flt)*(time_dof_temp_float+flow_coef[11].flt);
// }
// else
// {
// ins_flow_temp_float = flow_coef[1].flt+flow_coef[2].flt*temp_value_float
// +flow_coef[3].flt*(time_dof_temp_float+flow_coef[0].flt)
// +flow_coef[4].flt*temp_value_float*temp_value_float
// +flow_coef[5].flt*(time_dof_temp_float+flow_coef[0].flt)*temp_value_float
// +flow_coef[6].flt*(time_dof_temp_float+flow_coef[0].flt)*(time_dof_temp_float+flow_coef[0].flt)
// +flow_coef[7].flt*temp_value_float*temp_value_float*temp_value_float
// +flow_coef[8].flt*(time_dof_temp_float+flow_coef[0].flt)*temp_value_float*temp_value_float
// +flow_coef[9].flt*(time_dof_temp_float+flow_coef[0].flt)*(time_dof_temp_float+flow_coef[0].flt)*temp_value_float
// +flow_coef[10].flt*(time_dof_temp_float+flow_coef[0].flt)*(time_dof_temp_float+flow_coef[0].flt)*(time_dof_temp_float+flow_coef[0].flt);
// }
#elif SUBSECTION_NUM_FOUR
if(Mum_T_DIFTOF <= SEGMENT_NUM_SMALL)
{
#if LILUNGONGSHI_MODLE_WATER_METER
ins_flow_temp_float = ins_flow_temp_float*(flow_coef[34].flt + flow_coef[36].flt*ins_flow_temp_float);
#else
ins_flow_temp_float = flow_coef[34].flt+flow_coef[35].flt*temp_value_float
+flow_coef[36].flt*(time_dof_temp_float+flow_coef[33].flt)
+flow_coef[37].flt*temp_value_float*temp_value_float
+flow_coef[38].flt*(time_dof_temp_float+flow_coef[33].flt)*temp_value_float
+flow_coef[39].flt*(time_dof_temp_float+flow_coef[33].flt)*(time_dof_temp_float+flow_coef[33].flt)
+flow_coef[40].flt*temp_value_float*temp_value_float*temp_value_float
+flow_coef[41].flt*(time_dof_temp_float+flow_coef[33].flt)*temp_value_float*temp_value_float
+flow_coef[42].flt*(time_dof_temp_float+flow_coef[33].flt)*(time_dof_temp_float +flow_coef[33].flt)*temp_value_float
+flow_coef[43].flt*(time_dof_temp_float+flow_coef[33].flt)*(time_dof_temp_float+flow_coef[33].flt)*(time_dof_temp_float+flow_coef[33].flt);
#endif
}
else if (Mum_T_DIFTOF <= SEGMENT_NUM_MIDDLE)
{
#if LILUNGONGSHI_MODLE_WATER_METER
ins_flow_temp_float = ins_flow_temp_float*(flow_coef[23].flt + flow_coef[25].flt*ins_flow_temp_float);
#else
ins_flow_temp_float = flow_coef[23].flt+flow_coef[24].flt*temp_value_float
+flow_coef[25].flt*(time_dof_temp_float+flow_coef[22].flt)
+flow_coef[26].flt*temp_value_float*temp_value_float
+flow_coef[27].flt*(time_dof_temp_float+flow_coef[22].flt)*temp_value_float
+flow_coef[28].flt*(time_dof_temp_float+flow_coef[22].flt)*(time_dof_temp_float+flow_coef[22].flt)
+flow_coef[29].flt*temp_value_float*temp_value_float*temp_value_float
+flow_coef[30].flt*(time_dof_temp_float+flow_coef[22].flt)*temp_value_float*temp_value_float
+flow_coef[31].flt*(time_dof_temp_float+flow_coef[22].flt)*(time_dof_temp_float+flow_coef[22].flt)*temp_value_float
+flow_coef[32].flt*(time_dof_temp_float+flow_coef[22].flt)*(time_dof_temp_float+flow_coef[22].flt)*(time_dof_temp_float+flow_coef[22].flt);
#endif
}
else if (Mum_T_DIFTOF <= SEGMENT_NUM_LARGE)
{
#if LILUNGONGSHI_MODLE_WATER_METER
ins_flow_temp_float = ins_flow_temp_float*(flow_coef[12].flt + flow_coef[14].flt*ins_flow_temp_float);
#else
ins_flow_temp_float = flow_coef[12].flt+flow_coef[13].flt*temp_value_float
+flow_coef[14].flt*(time_dof_temp_float+flow_coef[11].flt)
+flow_coef[15].flt*temp_value_float*temp_value_float
+flow_coef[16].flt*(time_dof_temp_float+flow_coef[11].flt)*temp_value_float
+flow_coef[17].flt*(time_dof_temp_float+flow_coef[11].flt)*(time_dof_temp_float+flow_coef[11].flt)
+flow_coef[18].flt*temp_value_float*temp_value_float*temp_value_float
+flow_coef[19].flt*(time_dof_temp_float+flow_coef[11].flt)*temp_value_float*temp_value_float
+flow_coef[20].flt*(time_dof_temp_float+flow_coef[11].flt)*(time_dof_temp_float+flow_coef[11].flt)*temp_value_float
+flow_coef[21].flt*(time_dof_temp_float+flow_coef[11].flt)*(time_dof_temp_float+flow_coef[11].flt)*(time_dof_temp_float+flow_coef[11].flt);
#endif
}
else
{
#if LILUNGONGSHI_MODLE_WATER_METER
ins_flow_temp_float = ins_flow_temp_float*(flow_coef[1].flt + flow_coef[3].flt*ins_flow_temp_float);
#else
ins_flow_temp_float = flow_coef[1].flt+flow_coef[2].flt*temp_value_float
+flow_coef[3].flt*(time_dof_temp_float+flow_coef[0].flt)
+flow_coef[4].flt*temp_value_float*temp_value_float
+flow_coef[5].flt*(time_dof_temp_float+flow_coef[0].flt)*temp_value_float
+flow_coef[6].flt*(time_dof_temp_float+flow_coef[0].flt)*(time_dof_temp_float+flow_coef[0].flt)
+flow_coef[7].flt*temp_value_float*temp_value_float*temp_value_float
+flow_coef[8].flt*(time_dof_temp_float+flow_coef[0].flt)*temp_value_float*temp_value_float
+flow_coef[9].flt*(time_dof_temp_float+flow_coef[0].flt)*(time_dof_temp_float+flow_coef[0].flt)*temp_value_float
+flow_coef[10].flt*(time_dof_temp_float+flow_coef[0].flt)*(time_dof_temp_float+flow_coef[0].flt)*(time_dof_temp_float+flow_coef[0].flt);
#endif
}
//以下是流量防护判定2021-06-28
#if WENDU_FANSUAN_OPEN
if(temp_value_float<(float)0.5)//温度反算0度及以下时防止结冰表计走数
{
return 0;
}
else if((temp_value_float<(float)5)&&((gp22_app_data.s.peak_up<95)||(gp22_app_data.s.peak_down<95)))//温度值小于5度并且单边幅值小于95mv
{
return 0;
}
#endif
if((temp_value_float<(float)0.1)&&(0!=temp_value_float))
{
return 0;
}
if(TRUE == CheckDiftofCalibrationFlag())
{
if(ins_flow_temp_float <= CALIBRATION_PROTECT_VALUE)
{
return 0;
}
}
#if DOMESTIC_TYPE_METER
if(((gp22_app_data.s.peak_up < TOF_UP_AM_0_8 )||(gp22_app_data.s.peak_down < TOF_DOWN_AM_0_8))&&(ins_flow_temp_float<=Q1_0_8))
{
return 0;
}
#endif
if(ins_flow_temp_float<0)
{
ins_flow_temp_float=0;
}//如果流量曲线不合适导致计算的瞬时流量为负数则写为0
#elif SUBSECTION_NUM_FIVE
//待添加五条曲线
#endif
//建模曲线单修位置
#if DN15_BRASS_40KPA_GP30_32768 || WDFS_DN15_BRASS_40KPA_GP30_32768//待验证
#elif LLGS_DN15_BRASS_40KPA_GP30_32768 //更新2022-02-18 Lv
if(temp_value_float < (float)13) //温度范围
{
if(ins_flow_temp_float < (float)23) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;//-0.3%
}
else if((ins_flow_temp_float >= (float)120)&&(ins_flow_temp_float < (float)350)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
if((temp_value_float >= (float)13)&&(temp_value_float < (float)17)) //温度范围
{
if((ins_flow_temp_float >= (float)23)&&(ins_flow_temp_float < (float)43)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)55)&&(ins_flow_temp_float < (float)70)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;//-0.5%
}
else if(ins_flow_temp_float >= (float)350) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
else if((temp_value_float >= (float)17)&&(temp_value_float < (float)23)) //温度范围
{
if((ins_flow_temp_float >= (float)25)&&(ins_flow_temp_float < (float)43)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
}
else if((temp_value_float >= (float)23)&&(temp_value_float < (float)28)) //温度范围
{
if((ins_flow_temp_float >= (float)25)&&(ins_flow_temp_float < (float)43)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if(ins_flow_temp_float >= (float)85) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float >= (float)28)&&(temp_value_float < (float)31)) //温度范围
{
if(ins_flow_temp_float < (float)19) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.002;
}
else if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)50)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if(ins_flow_temp_float >= (float)85) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;
}
}
else if((temp_value_float >= (float)31)&&(temp_value_float < (float)38)) //温度范围
{
if(ins_flow_temp_float < (float)23) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)23)&&(ins_flow_temp_float < (float)50)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)50)&&(ins_flow_temp_float < (float)65)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
}
else if(temp_value_float >= (float)38) //温度范围
{
if(ins_flow_temp_float < (float)60) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)60)&&(ins_flow_temp_float < (float)65)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >= (float)90)&&(ins_flow_temp_float < (float)110)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if(ins_flow_temp_float >= (float)1400) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
#elif Buxiugang_LLGS_WDFS_DN15_BXG_40KPA_GP30_32768
if(temp_value_float < (float)11.3) //温度范围
{
if(ins_flow_temp_float < (float)8) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004; // 流量21以下0.6%
}
else if((ins_flow_temp_float >= (float)21)&&(ins_flow_temp_float < (float)26)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.002;//流量21~270.2%
}
else if((ins_flow_temp_float >= (float)26)&&(ins_flow_temp_float < (float)65)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;//流量26~65-0.3%
}
else if((ins_flow_temp_float >= (float)110)&&(ins_flow_temp_float < (float)150)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;//
}
else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)1500)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.007;//
}
else if((ins_flow_temp_float >= (float)1500)&&(ins_flow_temp_float < (float)1900)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;//
}
else if(ins_flow_temp_float >= (float)2800)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;//
}
}
else if((temp_value_float >= (float)11.3)&&(temp_value_float < (float)16)) //温度范围
{
if(ins_flow_temp_float < (float)19) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004; // 流量19以下0.6%
}
else if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)21)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;//流量19~210.3%
}
else if((ins_flow_temp_float >= (float)26)&&(ins_flow_temp_float < (float)65)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;//流量26~65-0.5%
}
else if((ins_flow_temp_float >= (float)110)&&(ins_flow_temp_float < (float)150)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;//
}
else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)1500)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.007;//
}
else if((ins_flow_temp_float >= (float)1500)&&(ins_flow_temp_float < (float)1900)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;//
}
else if(ins_flow_temp_float >= (float)2800)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;//
}
}
//过度曲线
else if((temp_value_float >= (float)16)&&(temp_value_float < (float)17)) //温度范围
{
if(ins_flow_temp_float < (float)19) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003; // 流量19以下0.3%
}
else if((ins_flow_temp_float >= (float)24)&&(ins_flow_temp_float < (float)26)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995; //
}
else if((ins_flow_temp_float >= (float)26)&&(ins_flow_temp_float < (float)55)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99; //
}
else if((ins_flow_temp_float >= (float)55)&&(ins_flow_temp_float < (float)65)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995; //流量55~65-0.5%
}
else if((ins_flow_temp_float >= (float)110)&&(ins_flow_temp_float < (float)150)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;//
}
else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)1200)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.007;//
}
else if((ins_flow_temp_float >= (float)1200)&&(ins_flow_temp_float < (float)1500)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;//
}
else if(ins_flow_temp_float >= (float)2800)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;//
}
}
//常温修正
else if((temp_value_float >= (float)17)&&(temp_value_float < (float)25.14)) //温度范围
{
if((ins_flow_temp_float >= (float)24)&&(ins_flow_temp_float < (float)26)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995; //
}
else if((ins_flow_temp_float >= (float)26)&&(ins_flow_temp_float < (float)28)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99; //
}
else if((ins_flow_temp_float >= (float)28)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.986; //
}
else if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)55)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99; //
}
else if((ins_flow_temp_float >= (float)55)&&(ins_flow_temp_float < (float)65)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995; //流量55~65-0.5%
}
else if((ins_flow_temp_float >= (float)110)&&(ins_flow_temp_float < (float)150)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;//
}
else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)1200)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.007;//
}
else if((ins_flow_temp_float >= (float)1200)&&(ins_flow_temp_float < (float)1500)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;//
}
else if(ins_flow_temp_float >= (float)2800)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;//
}
}
//温度过度曲线
else if((temp_value_float >= (float)25.14)&&(temp_value_float < (float)28)) //温度范围
{
if((ins_flow_temp_float >= (float)24)&&(ins_flow_temp_float < (float)26)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float *((float)0.002797*temp_value_float + (float)0.924678); //温度曲线25.14~28-->-0.5~0.3% 0.002797+0.924678
}
else if((ins_flow_temp_float >= (float)26)&&(ins_flow_temp_float < (float)55)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float *((float)0.005245*temp_value_float + (float)0.858147); //0.005245+0.858147 温度曲线25.14~28-->-1~0.5%
}
else if((ins_flow_temp_float >= (float)55)&&(ins_flow_temp_float < (float)60)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float *((float)0.0035*temp_value_float + (float)0.9071); //0.00350+0.90710 温度曲线25.14~28-->-0.5~0.5%
}
else if((ins_flow_temp_float >= (float)60)&&(ins_flow_temp_float < (float)65)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float *((float)0.001748*temp_value_float + (float)0.956049); //0.001748+ 0.956049 温度曲线25.14~28-->0~0.5%
}
else if((ins_flow_temp_float >= (float)65)&&(ins_flow_temp_float < (float)1200)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
}
else if((temp_value_float >= (float)28)&&(temp_value_float < (float)36)) //温度范围
{
if(ins_flow_temp_float < (float)26) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.007; //
}
else if((ins_flow_temp_float >= (float)26)&&(ins_flow_temp_float < (float)1200)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01; //
}
else if((ins_flow_temp_float >= (float)1200)&&(ins_flow_temp_float < (float)2100)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005; //流量1100以上0.3%
}
else if((ins_flow_temp_float >= (float)2100)&&(ins_flow_temp_float < (float)2800)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003; //流量1100以上0.3%
}
}
else if(temp_value_float >= (float)36) //温度范围
{
if(ins_flow_temp_float < (float)1200) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01; // 流量20以下0.7%
}
else if((ins_flow_temp_float >= (float)1200)&&(ins_flow_temp_float < (float)1300)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005; //
}
else if((ins_flow_temp_float >= (float)1300)&&(ins_flow_temp_float < (float)2800)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003; //流量1200以上0.3%
}
}
#elif Plastic_LLGS_WDFS_DN15_PALSTIC_40KPA_GP30_32768
if(temp_value_float < (float)13)
{
if(ins_flow_temp_float < (float)8) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;//
}
else if((ins_flow_temp_float >= (float)8)&&(ins_flow_temp_float < (float)33)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003; //
}
else if((ins_flow_temp_float >= (float)33)&&(ins_flow_temp_float < (float)95)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005; //
}
else if(ins_flow_temp_float >= (float)95) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.002; //
}
}
else if((temp_value_float >= (float)13)&&(temp_value_float < (float)17))
{
if(ins_flow_temp_float < (float)23) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;//
}
else if((ins_flow_temp_float >= (float)23)&&(ins_flow_temp_float < (float)33)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004; //
}
else if((ins_flow_temp_float >= (float)33)&&(ins_flow_temp_float < (float)95)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.002; //
}
}
else if((temp_value_float >= (float)17)&&(temp_value_float < (float)28.4)) //温度范围
{
if((ins_flow_temp_float >= (float)23)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;//流量23~350.2%
}
}
else if((temp_value_float >= (float)28.4)&&(temp_value_float < (float)33.67)) //温度范围
{
if(ins_flow_temp_float < (float)5) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;//
}
else if((ins_flow_temp_float >= (float)5)&&(ins_flow_temp_float < (float)12))
{
ins_flow_temp_float = ins_flow_temp_float *((float)0.001286*ins_flow_temp_float+(float)0.988571); //0.001286+0.988571 5-0.995 12-1.004
}
else if((ins_flow_temp_float >= (float)12)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;//
}
else if((ins_flow_temp_float >= (float)1700)&&(ins_flow_temp_float < (float)2100)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.002;
}
else if(ins_flow_temp_float >= (float)2100) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
}
else if((temp_value_float >= (float)33.67)&&(temp_value_float < (float)36)) //温度范围
{
if(ins_flow_temp_float < (float)5) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;//
}
else if((ins_flow_temp_float >= (float)5)&&(ins_flow_temp_float < (float)12))
{
ins_flow_temp_float = ins_flow_temp_float *((float)0.002*ins_flow_temp_float+(float)0.98); //0.002+ 0.98 5-0.99 12-1.004
}
else if((ins_flow_temp_float >= (float)12)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;//
}
else if((ins_flow_temp_float >= (float)1700)&&(ins_flow_temp_float < (float)2100)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)2100)&&(ins_flow_temp_float < (float)2800)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if(ins_flow_temp_float >= (float)2800)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
}
else if((temp_value_float >= (float)36)&&(temp_value_float < (float)43)) //温度范围
{
if(ins_flow_temp_float < (float)5) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;//
}
else if((ins_flow_temp_float >= (float)5)&&(ins_flow_temp_float < (float)12))
{
ins_flow_temp_float = ins_flow_temp_float *((float)0.002286*ins_flow_temp_float+(float)0.978571); //0.002286+0.978571 5-0.99 12-1.006
}
else if((ins_flow_temp_float >= (float)12)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.006;//
}
else if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)50)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.002;
}
else if((ins_flow_temp_float >= (float)75)&&(ins_flow_temp_float < (float)1700)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)1700)&&(ins_flow_temp_float < (float)2100)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)2100)&&(ins_flow_temp_float < (float)2800)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.009;
}
else if(ins_flow_temp_float >= (float)2800)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.013;
}
}
else if(temp_value_float >= (float)43) //温度范围
{
if(ins_flow_temp_float < (float)5) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;//
}
else if((ins_flow_temp_float >= (float)5)&&(ins_flow_temp_float < (float)12))
{
ins_flow_temp_float = ins_flow_temp_float *((float)0.002286*ins_flow_temp_float+(float)0.978571); //0.002286+0.978571 5-0.99 12-1.006
}
else if((ins_flow_temp_float >= (float)12)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.006;//
}
else if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)50)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.002;
}
else if((ins_flow_temp_float >= (float)75)&&(ins_flow_temp_float < (float)78)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >= (float)78)&&(ins_flow_temp_float < (float)1700)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.007;
}
else if((ins_flow_temp_float >= (float)1700)&&(ins_flow_temp_float < (float)2100)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.009;
}
else if((ins_flow_temp_float >= (float)2100)&&(ins_flow_temp_float < (float)2800)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.014;
}
else if(ins_flow_temp_float >= (float)2800)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.018;
}
}
#elif ROUND_LLGS_DN15_BRASS_40KPA_GP30_32768 || ROUND_LLGS_WDFS_DN15_BRASS_40KPA_GP30_32768 //需要测试看看反算表能否适配常规圆壳量产曲线
if((ins_flow_temp_float >= (float)45)&&(ins_flow_temp_float < (float)130))//流量40-50
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.003;
}
// else if(ins_flow_temp_float < (float)7) //流量范围
// {
// ins_flow_temp_float = ins_flow_temp_float *(float)0.99; //曲线补偿 -1%
// }
// else if((ins_flow_temp_float >= (float)7)&&(ins_flow_temp_float < (float)7.5))//流量7-8.5
// {
// ins_flow_temp_float = ins_flow_temp_float *((float)0.02*ins_flow_temp_float+(float)0.85); //曲线补偿 -1%-0过度
// }
// else if((ins_flow_temp_float >= (float)50)&&(ins_flow_temp_float < (float)110))//流量50-110
// {
// ins_flow_temp_float = ins_flow_temp_float *(float)1.004;
// }
// else if((ins_flow_temp_float >= (float)110)&&(ins_flow_temp_float < (float)130))//流量110-130
// {
// ins_flow_temp_float = ins_flow_temp_float *(float)1.003;
// }
if(ins_flow_temp_float < (float)7) //流量范围
{
if(temp_value_float >= (float)30) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.995; //曲线补偿 -1%数据修该为0.995 04 22
}
// else if((temp_value_float >= (float)25)&&(temp_value_float < (float)30)) //温度范围
// {
// ins_flow_temp_float = ins_flow_temp_float *(float)0.995; //曲线补偿 -0.5%//
// }
}
else if((ins_flow_temp_float >= (float)7)&&(ins_flow_temp_float < (float)8.5))//流量7-8.5
{
if(temp_value_float >= (float)30) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *((float)0.0033*ins_flow_temp_float + (float)0.9717); //曲线补偿0-- -0.5%
}
else if((temp_value_float >= (float)25)&&(temp_value_float < (float)30)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *((float)-0.001*temp_value_float + (float)1.025); //曲线补偿0-- -0.5%//
}
}
else if((ins_flow_temp_float >= (float)8.5)&&(ins_flow_temp_float < (float)18))//流量8.5-18
{
if(temp_value_float >= (float)47) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.003; //曲线补偿0-- 0.3%
}
else if((temp_value_float >= (float)28)&&(temp_value_float < (float)42)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.997; //曲线补偿0-- -0.3%
}
}
else if((ins_flow_temp_float >= (float)25)&&(ins_flow_temp_float < (float)32))//流量25-32
{
if(temp_value_float >= (float)25)
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.997; //曲线补偿0-- -0.3%
}
}
else if((ins_flow_temp_float >= (float)33)&&(ins_flow_temp_float < (float)38))//流量33-38
{
if(temp_value_float >= (float)38) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.002; //曲线补偿0-- 0.2%
}
}
else if((ins_flow_temp_float >= (float)38)&&(ins_flow_temp_float < (float)55))//流量38-55
{
if(temp_value_float >= (float)45) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.007; //曲线补偿0-- 0.7%
}
else if(temp_value_float >= (float)38) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.004; //曲线补偿0-- 0.4%
}
else if(temp_value_float >= (float)25) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.002; //曲线补偿0-- 0.2%
}
}
// else if((ins_flow_temp_float >= (float)55)&&(ins_flow_temp_float < (float)85))//流量55-85
// {
// if(temp_value_float >= (float)35) //温度范围
// {
// ins_flow_temp_float = ins_flow_temp_float *(float)1.005; //曲线补偿0-- 0.5%
// }
// else if(temp_value_float >= (float)25) //温度范围
// {
// ins_flow_temp_float = ins_flow_temp_float *(float)1.003; //曲线补偿0-- 0.3%
// }
// }
else if((ins_flow_temp_float >= (float)140)&&(ins_flow_temp_float < (float)280))//流量140-280
{
if((temp_value_float >= (float)34.86)&&(temp_value_float < (float)38)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.996; //曲线补偿0-- -0.4%
}
else if((temp_value_float >= (float)28)&&(temp_value_float < (float)34.86)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.997; //曲线补偿0-- -0.3%
}
}
else if((ins_flow_temp_float >= (float)280)&&(ins_flow_temp_float < (float)400))//流量280-400
{
if((temp_value_float >= (float)34.86)&&(temp_value_float < (float)38)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.996; //曲线补偿0-- -0.4%
}
else if((temp_value_float >= (float)25)&&(temp_value_float < (float)34.86)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.997; //曲线补偿0-- -0.3%
}
}
else if((ins_flow_temp_float >= (float)400)&&(ins_flow_temp_float < (float)1200))//流量400-1200
{
if((temp_value_float >= (float)25)&&(temp_value_float < (float)34.86)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.997; //曲线补偿0-- -0.3%
}
}
else if(ins_flow_temp_float >= (float)1200)//流量1200+
{
if(temp_value_float < (float)13.07) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.002; //曲线补偿0-- 0.2%
}
}
#elif LLGS_WDFS_DN15_BRASS_40KPA_GP30_32768
//全温度修正 2021/8/6
if((ins_flow_temp_float >= (float)50)&&(ins_flow_temp_float < (float)70))//流量50-70流量范围无重叠
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.995;
}
//温度修正 2021/8/6
if(temp_value_float >= (float)35) //温度范围
{
if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)35))
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.003;
}
else if((ins_flow_temp_float >= (float)90)&&(ins_flow_temp_float < (float)200))
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.004;
}
else if(ins_flow_temp_float >= (float)200)
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.007;
}
}
else if((temp_value_float >= (float)30)&&(temp_value_float < (float)35)) //温度范围
{
if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)35))
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003; //曲线补偿+0.3%
}
else if((ins_flow_temp_float >= (float)90)&&(ins_flow_temp_float < (float)200))
{
ins_flow_temp_float = ins_flow_temp_float *((float)0.0016*temp_value_float + (float)0.948); //30~35度曲线补偿-0.4%~0.4%
}
else if(ins_flow_temp_float >= (float)200)
{
ins_flow_temp_float = ins_flow_temp_float *((float)0.0014*temp_value_float + (float)0.958); //30~35度曲线补偿0~0.7%
}
}
else if((temp_value_float >= (float)15)&&(temp_value_float < (float)30)) //温度范围
{
if((ins_flow_temp_float >= (float)90)&&(ins_flow_temp_float < (float)200)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996; //曲线补偿-0.4%
}
}
if((temp_value_float >= (float)15)&&(temp_value_float < (float)17)) //温度范围
{
if(ins_flow_temp_float <= (float)50) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0025*temp_value_float + (float)1.0425); //15~17度曲线补偿+0.5%~0
}
}
else if((temp_value_float >= (float)10)&&(temp_value_float < (float)15))//温度范围
{
if(ins_flow_temp_float <= (float)50)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float *((float)-0.002*temp_value_float + (float)1.035); //15~10度曲线补偿0.5~1.5%
}
else if(ins_flow_temp_float >= (float)70)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float *((float)-0.001*temp_value_float + (float)1.015); //15~10度曲线补偿0%~05%
}
}
else if(temp_value_float < (float)10)//温度范围
{
if(ins_flow_temp_float <= (float)50)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.015; //曲线补偿+1.5%
}
else if(ins_flow_temp_float >= (float)70)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float *((float)-0.002*temp_value_float + (float)1.025); //10~5度曲线补偿0.5%~1.5%
}
}
// //流量修正 2021-07-24
#elif BM_DN15_BRASS_63KPA_GP30_32768
if(temp_value_float >= (float)35) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
#elif MID_DN15_BRASS_63KPA_GP30_32768
if(temp_value_float < (float)13) //温度范围
{
if(ins_flow_temp_float < (float)50) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)90)&&(ins_flow_temp_float < (float)200)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
else if((temp_value_float >= (float)13)&&(temp_value_float < (float)21)) //温度范围
{
if(ins_flow_temp_float < (float)50) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
// else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)2000)) //流量范围
// {
// ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
// }
}
else if((temp_value_float >= (float)21)&&(temp_value_float < (float)23)) //温度范围
{
if(ins_flow_temp_float < (float)17) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0025*temp_value_float + (float)1.0575);//+0.5--0过度
}
else if((ins_flow_temp_float >= (float)17)&&(ins_flow_temp_float < (float)19)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0025*ins_flow_temp_float + (float)0.9625);//1.005-1.01过度
}
else if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01;
}
else if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)45)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0005*ins_flow_temp_float + (float)1.0275);//1.01-1.005过度
}
// else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)2000)) //流量范围
// {
// ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
// }
}
else if((temp_value_float >= (float)23)&&(temp_value_float < (float)25)) //温度范围
{
if(ins_flow_temp_float < (float)35) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.004*temp_value_float+ (float)0.908);//0--0.8过度
}
// else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)2000)) //流量范围
// {
// ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
// }
}
else if((temp_value_float >= (float)25)&&(temp_value_float < (float)27)) //温度范围
{
if(ins_flow_temp_float < (float)8) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)8)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)50)&&(ins_flow_temp_float < (float)70)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
// else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)2000)) //流量范围
// {
// ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
// }
}
else if((temp_value_float >= (float)27)&&(temp_value_float < (float)33)) //温度范围
{
if(ins_flow_temp_float < (float)8) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)8)&&(ins_flow_temp_float < (float)13)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)45)&&(ins_flow_temp_float < (float)55)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.001*ins_flow_temp_float + (float)1.05);//0.5~~~-0.5 过度
}
else if((ins_flow_temp_float >= (float)55)&&(ins_flow_temp_float < (float)70)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)2000)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
else if(ins_flow_temp_float >= (float)2000) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
else if((temp_value_float >= (float)33)&&(temp_value_float < (float)46)) //温度范围
{
if(ins_flow_temp_float < (float)13) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)22)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01;
}
else if((ins_flow_temp_float >= (float)22)&&(ins_flow_temp_float < (float)32)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)45)&&(ins_flow_temp_float < (float)60)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if(ins_flow_temp_float >= (float)150) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
else if(temp_value_float >= (float)46) //温度范围
{
if(ins_flow_temp_float < (float)13) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)22)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01;
}
else if((ins_flow_temp_float >= (float)22)&&(ins_flow_temp_float < (float)24)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)28)&&(ins_flow_temp_float < (float)32)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)45)&&(ins_flow_temp_float < (float)60)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
#elif EN_DN15_BRASS_63KPA_GP30_32768
if(temp_value_float >= (float)41) //温度范围
{
if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)55)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0004*ins_flow_temp_float + (float)1.017); //-0.0004x + 1.017 35-1.003 55 0.995
}
else if((ins_flow_temp_float >= (float)55)&&(ins_flow_temp_float < (float)155)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)155)&&(ins_flow_temp_float < (float)1900)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if(ins_flow_temp_float >= (float)1900) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
else if((temp_value_float >= (float)33)&&(temp_value_float < (float)41))
{
if(ins_flow_temp_float < (float)13) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;
}
else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)19)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0012*ins_flow_temp_float + (float)0.9808); //0.0012x + 0.9808 13-0.4 19+0.3
}
else if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)55)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0005*ins_flow_temp_float + (float)1.0223); //-0.0005x + 1.0223 35-1.003 55 0.992
}
else if((ins_flow_temp_float >= (float)55)&&(ins_flow_temp_float < (float)1900)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if(ins_flow_temp_float >= (float)1900) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
else if((temp_value_float >= (float)28)&&(temp_value_float < (float)33))
{
if(ins_flow_temp_float < (float)13) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;
}
else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)19)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0008*ins_flow_temp_float + (float)0.9872); //0.0008x + 0.9872 13-0.2 19+0.3
}
else if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)55)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0004*ins_flow_temp_float + (float)1.017); //-0.0004x + 1.017 35-1.003 55 0.995
}
else if((ins_flow_temp_float >= (float)55)&&(ins_flow_temp_float < (float)1900)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if(ins_flow_temp_float >= (float)1900) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float >= (float)18)&&(temp_value_float < (float)28))
{
if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
else if((temp_value_float >= (float)14)&&(temp_value_float < (float)18))
{
if(ins_flow_temp_float < (float)13) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)19)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0013*ins_flow_temp_float + (float)0.9777); // 0.0013x + 0.9777 13-0.5 18+0.3
}
else if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)60)&&(ins_flow_temp_float < (float)78)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if(ins_flow_temp_float >= (float)85) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if(temp_value_float < (float)14)
{
if(ins_flow_temp_float < (float)13) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;
}
else if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.998;
}
else if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)55)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)55)&&(ins_flow_temp_float < (float)65)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0013*ins_flow_temp_float + (float)0.9235); //0.0013x + 0.9235 55-0.5 65+0.8
}
else if((ins_flow_temp_float >= (float)65)&&(ins_flow_temp_float < (float)75)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)75)&&(ins_flow_temp_float < (float)85)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0011*ins_flow_temp_float + (float)1.0905); //-0.0011x + 1.0905 65+0.8 85-0.3
}
else if((ins_flow_temp_float >= (float)85)&&(ins_flow_temp_float < (float)95)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
else if(ins_flow_temp_float >= (float)95) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.992;
}
}
#elif ROUND_LLGS_XFZ_DN15_BRASS_40KPA_GP30_32768
if(temp_value_float >= (float)28.58) //温度范围
{
if(ins_flow_temp_float < (float)8.5) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.002;
}
else if((ins_flow_temp_float >= (float)8.5)&&(ins_flow_temp_float < (float)13)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)19)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)600)&&(ins_flow_temp_float < (float)700)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)700)&&(ins_flow_temp_float < (float)1400)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)1400)&&(ins_flow_temp_float < (float)1900)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
}
else if((temp_value_float >= (float)23)&&(temp_value_float < (float)28.58))
{
if(ins_flow_temp_float < (float)8.5) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)8.5)&&(ins_flow_temp_float < (float)28)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)28)&&(ins_flow_temp_float < (float)90)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)90)&&(ins_flow_temp_float < (float)180)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)350)&&(ins_flow_temp_float < (float)1900)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
}
else if((temp_value_float >= (float)18.5)&&(temp_value_float < (float)23))
{
if(ins_flow_temp_float < (float)8.5) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01;
}
else if((ins_flow_temp_float >= (float)8.5)&&(ins_flow_temp_float < (float)28)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.013;
}
else if((ins_flow_temp_float >= (float)28)&&(ins_flow_temp_float < (float)90)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)90)&&(ins_flow_temp_float < (float)100)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)250)&&(ins_flow_temp_float < (float)350)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)350)&&(ins_flow_temp_float < (float)1900)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01;
}
else if((ins_flow_temp_float >= (float)1900)&&(ins_flow_temp_float < (float)2000)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
}
else if((temp_value_float >= (float)17.5)&&(temp_value_float < (float)18.5))
{
if(ins_flow_temp_float < (float)28) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)120)&&(ins_flow_temp_float < (float)180)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)350)&&(ins_flow_temp_float < (float)1900)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
}
else if((temp_value_float >= (float)14)&&(temp_value_float < (float)17.5))
{
if(ins_flow_temp_float < (float)13) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)95)&&(ins_flow_temp_float < (float)120)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)120)&&(ins_flow_temp_float < (float)180)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if((ins_flow_temp_float >= (float)180)&&(ins_flow_temp_float < (float)190)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)550)&&(ins_flow_temp_float < (float)1900)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
else if(temp_value_float < (float)14) //温度范围
{
if(ins_flow_temp_float < (float)13) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)25)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)85)&&(ins_flow_temp_float < (float)95)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)95)&&(ins_flow_temp_float < (float)120)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if((ins_flow_temp_float >= (float)120)&&(ins_flow_temp_float < (float)180)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.985;
}
else if((ins_flow_temp_float >= (float)180)&&(ins_flow_temp_float < (float)190)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if((ins_flow_temp_float >= (float)190)&&(ins_flow_temp_float < (float)230)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)550)&&(ins_flow_temp_float < (float)750)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)750)&&(ins_flow_temp_float < (float)1100)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.007;
}
else if((ins_flow_temp_float >= (float)1100)&&(ins_flow_temp_float < (float)1900)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
#elif PF_DN15_BRASS_63KPA_GP30_32768
if(temp_value_float < (float)13) //温度范围
{
if(ins_flow_temp_float < (float)22) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)50)&&(ins_flow_temp_float < (float)70)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if(ins_flow_temp_float >= (float)90) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
else if((temp_value_float >= (float)13)&&(temp_value_float < (float)21)) //温度范围
{
if(ins_flow_temp_float < (float)50) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)2000)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float >= (float)21)&&(temp_value_float < (float)23)) //温度范围
{
if(ins_flow_temp_float < (float)17) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0025*temp_value_float + (float)1.0575);//+0.5--0过度
}
else if((ins_flow_temp_float >= (float)17)&&(ins_flow_temp_float < (float)19)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0025*ins_flow_temp_float + (float)0.9625);//1.005-1.01过度
}
else if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01;
}
else if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)45)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0005*ins_flow_temp_float + (float)1.0275);//1.01-1.005过度
}
else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)2000)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float >= (float)23)&&(temp_value_float < (float)25)) //温度范围
{
if(ins_flow_temp_float < (float)35) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.004*temp_value_float+ (float)0.908);//0--0.8过度
}
else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)2000)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float >= (float)25)&&(temp_value_float < (float)27)) //温度范围
{
if(ins_flow_temp_float < (float)8) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)8)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)50)&&(ins_flow_temp_float < (float)70)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)2000)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float >= (float)27)&&(temp_value_float < (float)33)) //温度范围
{
if(ins_flow_temp_float < (float)8) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)8)&&(ins_flow_temp_float < (float)13)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)35)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01;
}
else if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)45)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)45)&&(ins_flow_temp_float < (float)55)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.001*ins_flow_temp_float + (float)1.05);//0.5~~~-0.5 过度
}
else if((ins_flow_temp_float >= (float)55)&&(ins_flow_temp_float < (float)70)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)150)&&(ins_flow_temp_float < (float)2000)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float >= (float)33)&&(temp_value_float < (float)46)) //温度范围
{
if(ins_flow_temp_float < (float)13) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)22)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01;
}
else if((ins_flow_temp_float >= (float)22)&&(ins_flow_temp_float < (float)32)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)45)&&(ins_flow_temp_float < (float)60)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if(ins_flow_temp_float >= (float)150) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
else if(temp_value_float >= (float)46) //温度范围
{
if(ins_flow_temp_float < (float)13) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)22)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01;
}
else if((ins_flow_temp_float >= (float)22)&&(ins_flow_temp_float < (float)24)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)28)&&(ins_flow_temp_float < (float)32)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)45)&&(ins_flow_temp_float < (float)60)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if(ins_flow_temp_float >= (float)150) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
#elif DN20_BRASS_40KPA_GP30_32768 || WDFS_DN20_BRASS_40KPA_GP30_32768
if((temp_value_float < (float)17)) //温度范围
{
if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)50))
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.995;
}
else if(ins_flow_temp_float < (float)35)
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0007*ins_flow_temp_float+(float)1.0222);//-0.2%~1.6%
}
else if(ins_flow_temp_float < (float)9)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.015;
}
}
else if((temp_value_float >= (float)25)&&(temp_value_float < (float)35)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if(temp_value_float >= (float)35) //温度范围
{
if(ins_flow_temp_float >= (float)130) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01;
}
}
#elif LLGS_DN20_BRASS_40KPA_GP30_32768 //更新2022-02-18
if(temp_value_float < (float)13) //温度范围
{
if(ins_flow_temp_float < (float)65) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if(ins_flow_temp_float >=(float)120) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
else if((temp_value_float >= (float)13)&&(temp_value_float < (float)17)) //温度范围
{
if(ins_flow_temp_float < (float)65) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if(ins_flow_temp_float >=(float)120) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
else if((temp_value_float >= (float)17)&&(temp_value_float < (float)24)) //温度范围
{
if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)120)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
}
else if((temp_value_float >= (float)24)&&(temp_value_float < (float)27)) //温度范围
{
if((ins_flow_temp_float >= (float)45)&&(ins_flow_temp_float < (float)120)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
}
else if(temp_value_float >= (float)27) //温度范围
{
if(ins_flow_temp_float < (float)120) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
#elif Buxiugang_LLGS_WDFS_DN20_BXG_40KPA_GP30_32768
if(temp_value_float >= (float)33) //温度范围
{
if(ins_flow_temp_float < (float)28) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >= (float)28)&&(ins_flow_temp_float < (float)33))
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.007;
}
else if((ins_flow_temp_float >= (float)33)&&(ins_flow_temp_float < (float)36))
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.002;
}
else if((ins_flow_temp_float >= (float)38)&&(ins_flow_temp_float < (float)95))
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.996;
}
}
else if((temp_value_float >= (float)29.9)&&(temp_value_float < (float)33)) //温度范围
{
if(ins_flow_temp_float < (float)36)
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.003;
}
else if((ins_flow_temp_float >= (float)38)&&(ins_flow_temp_float < (float)65))
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.996;
}
else if((ins_flow_temp_float >= (float)65)&&(ins_flow_temp_float < (float)130))
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.997;
}
}
else if((temp_value_float >= (float)24.5)&&(temp_value_float < (float)29.9)) //温度范围
{
if((ins_flow_temp_float >= (float)28)&&(ins_flow_temp_float < (float)38))
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.003;
}
else if((ins_flow_temp_float >= (float)65)&&(ins_flow_temp_float < (float)130))
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.996;
}
}
else if((temp_value_float >= (float)18.46)&&(temp_value_float < (float)24.5)) //温度范围
{
if((ins_flow_temp_float >= (float)28)&&(ins_flow_temp_float < (float)43))
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.003;
}
else if((ins_flow_temp_float >= (float)65)&&(ins_flow_temp_float < (float)130))
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.996;
}
}
else if(temp_value_float < (float)18.46) //温度范围
{
if(ins_flow_temp_float < (float)28)
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.998;
}
else if((ins_flow_temp_float >= (float)28)&&(ins_flow_temp_float < (float)48))
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.003;
}
else if((ins_flow_temp_float >= (float)48)&&(ins_flow_temp_float < (float)65))
{
ins_flow_temp_float = ins_flow_temp_float *(float)1.005;
}
else if((ins_flow_temp_float >= (float)75)&&(ins_flow_temp_float < (float)130))
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.996;
}
else if((ins_flow_temp_float >= (float)130)&&(ins_flow_temp_float < (float)550))
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.997;
}
}
#elif ROUND_LLGS_DN20_BRASS_40KPA_GP30_32768 || ROUND_LLGS_WDFS_DN20_BRASS_40KPA_GP30_32768
// if((ins_flow_temp_float >= (float)1500)&&(ins_flow_temp_float < (float)3000))//流量1500-3000
// {
// ins_flow_temp_float = ins_flow_temp_float *(float)0.997;
// }
if(temp_value_float >= (float)35) //温度范围
{
if(ins_flow_temp_float < (float)8)
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.99;
}
else if((ins_flow_temp_float >= (float)8)&&(ins_flow_temp_float < (float)13))
{
ins_flow_temp_float = ins_flow_temp_float *((float)0.002*ins_flow_temp_float+(float)0.974);//-1--- 0
}
// else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)35))
// {
// ins_flow_temp_float = ins_flow_temp_float *(float)0.997;
// }
}
else if((temp_value_float >= (float)33)&&(temp_value_float < (float)35)) //温度范围 --过度段
{
if(ins_flow_temp_float < (float)13)
{
ins_flow_temp_float = ins_flow_temp_float *(float)0.995;
}
// else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)35))
// {
// ins_flow_temp_float = ins_flow_temp_float *(float)0.998;
// }
}
// else if((temp_value_float >= (float)12.7)&&(temp_value_float < (float)17)) //温度范围
// {
// if(ins_flow_temp_float < (float)13)
// {
// ins_flow_temp_float = ins_flow_temp_float *(float)0.995;
// }
// else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)38))
// {
// ins_flow_temp_float = ins_flow_temp_float *(float)0.997;
// }
// }
// else if(temp_value_float < (float)12.7) //温度范围
// {
// if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)35))
// {
// ins_flow_temp_float = ins_flow_temp_float *(float)0.997;
// }
// }
#elif LLGS_WDFS_DN20_BRASS_40KPA_GP30_32768
if(ins_flow_temp_float < (float)30) //流量范围
{
if(temp_value_float >= (float)35) //
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.006;
}
else if((temp_value_float >= (float)30)&&(temp_value_float < (float)35)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.001*temp_value_float + (float)0.97); //30--35度 0%~0.5%
}
}
else if((ins_flow_temp_float >= (float)30)&&(ins_flow_temp_float < (float)130))//流量范围
{
if(temp_value_float >= (float)30) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.006;
}
else if((temp_value_float > (float)15)&&(temp_value_float < (float)30))
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((ins_flow_temp_float >= (float)200))//流量范围
{
if(temp_value_float < (float)15)
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
#elif BM_DN20_BRASS_63KPA_GP30_32768
//2020-06-28 建模后第一次单独修正
if(temp_value_float >= (float)45) //温度范围
{
if(ins_flow_temp_float < (float)55) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997; //2020-09-11 根据机械台子修正
}
else if((ins_flow_temp_float >= (float)130)&&(ins_flow_temp_float < (float)600))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
else if((temp_value_float < (float)40)&&(temp_value_float >= (float)30)) //温度范围
{
if(ins_flow_temp_float < (float)20) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)50)&&(ins_flow_temp_float < (float)90))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
//流量修正
if((ins_flow_temp_float >= (float)130)&&(ins_flow_temp_float < (float)600))//流量范围
{
if((temp_value_float < (float)45)&&(temp_value_float >=(float)15)) //温度范围 //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if(temp_value_float <(float)15)//
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.992;
}
}
else if(ins_flow_temp_float > (float)600)//流量范围
{
if(temp_value_float >= (float)35)//2020-09-11 根据机械台子修正
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.998;
}
}
//机械台子修正 2020-07-08
if(ins_flow_temp_float < (float)50)//流量范围
{
if((temp_value_float < (float)40)&&(temp_value_float >=(float)15)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if(temp_value_float >= (float)40) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;
}
}
//流量单独修正
if(temp_value_float >= (float)15)//2021-05-12
{
if((ins_flow_temp_float >= (float)30)&&(ins_flow_temp_float <= (float)50))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float > (float)50)&&(ins_flow_temp_float < (float)100))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.991;
}
else if((ins_flow_temp_float >= (float)100)&&(ins_flow_temp_float < (float)120))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
//2021-05-10
else if(temp_value_float <(float)15)
{
if(ins_flow_temp_float < (float)30)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.998;
}
else
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
#elif MID_DN20_BRASS_63KPA_GP30_32768
if(temp_value_float < (float)13) //温度范围
{
if(ins_flow_temp_float >= (float)70)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
// else if(ins_flow_temp_float <= (float)22) //流量范围
// {
// ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
// }
}
else if((temp_value_float >= (float)13)&&(temp_value_float < (float)15)) //温度范围
{
if(ins_flow_temp_float >= (float)130) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float >= (float)17)&&(temp_value_float < (float)22)) //温度范围
{
if((ins_flow_temp_float >= (float)28)&&(ins_flow_temp_float < (float)45)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;//1.005
}
}
else if((temp_value_float >= (float)23)&&(temp_value_float < (float)27)) //温度范围
{
if(ins_flow_temp_float >= (float)95) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float >= (float)27)&&(temp_value_float < (float)30)) //温度范围
{
if(ins_flow_temp_float <= (float)50) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.00167 *temp_value_float + (float)1.045);//0--0.5%过度
}
}
else if((temp_value_float >= (float)30)&&(temp_value_float < (float)34)) //温度范围
{
if(ins_flow_temp_float < (float)13) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)50)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.00125*temp_value_float + (float)0.9525);//0.99-0.995
}
else if(ins_flow_temp_float >= (float)180) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float >= (float)37)&&(temp_value_float < (float)43)) //温度范围
{
if(ins_flow_temp_float <= (float)22) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;//0.996
}
else if(ins_flow_temp_float >= (float)70) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.992;
}
}
else if(temp_value_float >= (float)43) //温度范围
{
if(ins_flow_temp_float <= (float)22) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;//0.996
}
else if(ins_flow_temp_float >= (float)70) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
}
}
if(temp_value_float >= (float)40) //温度范围
{
if(ins_flow_temp_float < (float)20) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;//+0.5
}
}
#elif EN_DN20_BRASS_63KPA_GP30_32768
if(temp_value_float >= (float)34.35) //温度范围
{
if(ins_flow_temp_float < (float)19) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.002;
}
else if((ins_flow_temp_float >= (float)43)&&(ins_flow_temp_float < (float)125)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;
}
else if((ins_flow_temp_float >= (float)135)&&(ins_flow_temp_float < (float)180)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float) -0.000111*ins_flow_temp_float + (float)1.015);//-0.000111+ 1.015 135 0 180 -0.5
}
else if((ins_flow_temp_float >= (float)180)&&(ins_flow_temp_float < (float)620)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
}
else if((ins_flow_temp_float >= (float)620)&&(ins_flow_temp_float < (float)2600)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;
}
else if(ins_flow_temp_float >= (float)2600) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.998;
}
}
else if((temp_value_float >= (float)27.5)&&(temp_value_float < (float)34.35))//温度范围
{
if((ins_flow_temp_float >= (float)14)&&(ins_flow_temp_float < (float)23)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
else if((ins_flow_temp_float >= (float)33)&&(ins_flow_temp_float < (float)38)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)83)&&(ins_flow_temp_float < (float)125)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)180)&&(ins_flow_temp_float < (float)230)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)230)&&(ins_flow_temp_float < (float)620)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
}
else if((ins_flow_temp_float >= (float)620)&&(ins_flow_temp_float < (float)2600)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;
}
else if(ins_flow_temp_float >= (float)2600) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.998;
}
}
else if((temp_value_float >= (float)18.7)&&(temp_value_float < (float)27.5))//温度范围
{
if((ins_flow_temp_float >= (float)38)&&(ins_flow_temp_float < (float)48)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >= (float)73)&&(ins_flow_temp_float < (float)83)) //流量范围 过渡
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.998;
}
else if((ins_flow_temp_float >= (float)83)&&(ins_flow_temp_float < (float)125)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
}
else if((ins_flow_temp_float >= (float)125)&&(ins_flow_temp_float < (float)140)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.000667*ins_flow_temp_float + (float)0.911667);//0.000667+0.911667 125 0.5 140 -0.5
}
else if((ins_flow_temp_float >= (float)180)&&(ins_flow_temp_float < (float)620)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)620)&&(ins_flow_temp_float < (float)3300)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.998;
}
}
else if((temp_value_float >= (float)13.24)&&(temp_value_float < (float)18.7))//温度范围
{
if((ins_flow_temp_float >= (float)38)&&(ins_flow_temp_float < (float)48)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.002;
}
else if((ins_flow_temp_float >= (float)73)&&(ins_flow_temp_float < (float)83)) //流量范围 过渡
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.998;
}
else if((ins_flow_temp_float >= (float)83)&&(ins_flow_temp_float < (float)125)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
}
else if((ins_flow_temp_float >= (float)125)&&(ins_flow_temp_float < (float)140)) //流量范围 过渡
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0006*ins_flow_temp_float + (float)0.918);//0.0006+ 0.918 125 -0.7 140 0.2
}
else if((ins_flow_temp_float >= (float)180)&&(ins_flow_temp_float < (float)620)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)620)&&(ins_flow_temp_float < (float)2600)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if(temp_value_float < (float)13.24)//温度范围
{
if(ins_flow_temp_float < (float)38) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float >= (float)73)&&(ins_flow_temp_float < (float)83)) //流量范围 过渡
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)83)&&(ins_flow_temp_float < (float)125)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if((ins_flow_temp_float >= (float)125)&&(ins_flow_temp_float < (float)180)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.002*temp_value_float + (float)0.97);// 0.002x + 0.97 15℃ 0 10℃ -1
}
else if((ins_flow_temp_float >= (float)180)&&(ins_flow_temp_float < (float)620)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if((ins_flow_temp_float >= (float)620)&&(ins_flow_temp_float < (float)2600)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.992;
}
else if(ins_flow_temp_float >= (float)2600) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
#elif PF_DN20_BRASS_63KPA_GP30_32768
if(temp_value_float < (float)13) //温度范围
{
if(ins_flow_temp_float >= (float)70)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if(ins_flow_temp_float <= (float)22) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
else if((temp_value_float >= (float)13)&&(temp_value_float < (float)15)) //温度范围
{
if(ins_flow_temp_float >= (float)130) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
else if(ins_flow_temp_float <= (float)22) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
else if((temp_value_float >= (float)15)&&(temp_value_float < (float)17)) //温度范围
{
if(ins_flow_temp_float <= (float)22) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
else if((temp_value_float >= (float)17)&&(temp_value_float < (float)22)) //温度范围
{
if((ins_flow_temp_float >= (float)28)&&(ins_flow_temp_float < (float)45)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;//1.005
}
}
else if((temp_value_float >= (float)23)&&(temp_value_float < (float)27)) //温度范围
{
if(ins_flow_temp_float >= (float)95) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float >= (float)27)&&(temp_value_float < (float)30)) //温度范围
{
if(ins_flow_temp_float <= (float)50) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.00167 *temp_value_float + (float)1.045);//0--0.5%过度
}
}
else if((temp_value_float >= (float)30)&&(temp_value_float < (float)34)) //温度范围
{
if(ins_flow_temp_float < (float)13) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)50)) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.00125*temp_value_float + (float)0.9525);//0.99-0.995
}
else if(ins_flow_temp_float >= (float)180) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float >= (float)37)&&(temp_value_float < (float)43)) //温度范围
{
if(ins_flow_temp_float <= (float)22) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;//0.996
}
else if(ins_flow_temp_float >= (float)70) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.992;
}
}
else if(temp_value_float >= (float)43) //温度范围
{
if(ins_flow_temp_float <= (float)22) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;//0.996
}
else if(ins_flow_temp_float >= (float)70) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
}
}
//更换换能器以后修正
if((temp_value_float >= (float)27)&&(temp_value_float < (float)30)) //温度范围
{
if(ins_flow_temp_float < (float)19) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.005*temp_value_float + (float)1.135);//0---1.5
}
else if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)32)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0033*temp_value_float + (float)1.09);//0--1
}
else if((ins_flow_temp_float >= (float)32)&&(ins_flow_temp_float < (float)45)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0017*temp_value_float + (float)1.045);//0----0.5
}
}
else if((temp_value_float >= (float)30)&&(temp_value_float < (float)32)) //温度范围
{
if(ins_flow_temp_float < (float)19) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.985;//-1.5
}
else if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)32)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;//-1
}
else if((ins_flow_temp_float >= (float)32)&&(ins_flow_temp_float < (float)55)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;//-0.5
}
}
else if((temp_value_float >= (float)32)&&(temp_value_float < (float)34)) //温度范围
{
if(ins_flow_temp_float < (float)32) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;//-1
}
else if((ins_flow_temp_float >= (float)32)&&(ins_flow_temp_float < (float)55)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;//-0.5
}
}
else if((temp_value_float >= (float)34)&&(temp_value_float < (float)37)) //温度范围
{
if(ins_flow_temp_float <= (float)32) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;//-0.5
}
else if(ins_flow_temp_float >= (float)90) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
else if((temp_value_float >= (float)37)&&(temp_value_float < (float)40)) //温度范围
{
if(ins_flow_temp_float < (float)19) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float) -0.00667 *temp_value_float+ (float)1.24167);//-0.5-----2.5
}
else if((ins_flow_temp_float >= (float)19)&&(ins_flow_temp_float < (float)32)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float) -0.005*temp_value_float + (float)1.18);//-0.5-----2
}
else if((ins_flow_temp_float >= (float)32)&&(ins_flow_temp_float < (float)38)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.00333*temp_value_float + (float)1.11833);//-0.5----1.5
}
else if((ins_flow_temp_float >= (float)38)&&(ins_flow_temp_float < (float)45)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.00333*temp_value_float + (float)1.12333);//0--1
}
else if((ins_flow_temp_float >= (float)45)&&(ins_flow_temp_float < (float)55)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;//-0.5
}
}
else if(temp_value_float >= (float)40) //温度范围
{
if(ins_flow_temp_float < (float)13) //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.97;//-3
}
else if((ins_flow_temp_float >= (float)13)&&(ins_flow_temp_float < (float)22)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.975;//-2.5
}
else if((ins_flow_temp_float >= (float)22)&&(ins_flow_temp_float < (float)28)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.98;//-2
}
else if((ins_flow_temp_float >= (float)28)&&(ins_flow_temp_float < (float)38)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.985;//-1.5
}
else if((ins_flow_temp_float >= (float)38)&&(ins_flow_temp_float < (float)45)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;//0--1
}
else if((ins_flow_temp_float >= (float)45)&&(ins_flow_temp_float < (float)55)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;//-0.5
}
else if((ins_flow_temp_float >= (float)55)&&(ins_flow_temp_float < (float)70)) //流量范围 //流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;//-0.3
}
}
#elif DN25_BRASS_40KPA_GP30_32768
if(temp_value_float > (float)39) //温度范围
{
if(ins_flow_temp_float <= (float)18)
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float > (float)18)&&(ins_flow_temp_float <= (float)22))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if((ins_flow_temp_float > (float)22)&&(ins_flow_temp_float <= (float)35))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.988;
}
else if((ins_flow_temp_float > (float)35)&&(ins_flow_temp_float <= (float)45))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
}
else if((ins_flow_temp_float > (float)45)&&(ins_flow_temp_float <= (float)90))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if((ins_flow_temp_float > (float)90)&&(ins_flow_temp_float <= (float)110))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0004*ins_flow_temp_float + (float)0.958); //0.0004x + 0.958 90-0.6 110+0.2
}
else if((ins_flow_temp_float > (float)110)&&(ins_flow_temp_float <= (float)130))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0005*ins_flow_temp_float + (float)1.055); //-0.0005x + 1.055 110+0 130-1
}
else if((ins_flow_temp_float > (float)130)&&(ins_flow_temp_float <= (float)180))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if((ins_flow_temp_float > (float)180)&&(ins_flow_temp_float <= (float)190))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0007*ins_flow_temp_float + (float)0.864); //0.0007x + 0.864 180-1 190-0.3
}
else if(ins_flow_temp_float >= (float)190)
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float > (float)37)&&(temp_value_float <= (float)39)) //温度范围
{
if((ins_flow_temp_float > (float)18)&&(ins_flow_temp_float <= (float)22))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float > (float)22)&&(ins_flow_temp_float <= (float)45))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
}
else if((ins_flow_temp_float > (float)45)&&(ins_flow_temp_float <= (float)90))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if((ins_flow_temp_float > (float)90)&&(ins_flow_temp_float <= (float)110))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0004*ins_flow_temp_float + (float)0.958); //0.0004x + 0.958 90-0.6 110+0.2
}
else if((ins_flow_temp_float > (float)110)&&(ins_flow_temp_float <= (float)130))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0005*ins_flow_temp_float + (float)1.055); //-0.0005x + 1.055 110+0 130-1
}
else if((ins_flow_temp_float > (float)130)&&(ins_flow_temp_float <= (float)180))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if((ins_flow_temp_float > (float)180)&&(ins_flow_temp_float <= (float)190))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0007*ins_flow_temp_float + (float)0.864); //0.0007x + 0.864 180-1 190-0.3
}
else if(ins_flow_temp_float >= (float)190)
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float > (float)33)&&(temp_value_float <= (float)37)) //温度范围
{
if(ins_flow_temp_float <= (float)18)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float > (float)22)&&(ins_flow_temp_float <= (float)45))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;
}
else if((ins_flow_temp_float > (float)45)&&(ins_flow_temp_float <= (float)90))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
}
else if((ins_flow_temp_float > (float)90)&&(ins_flow_temp_float <= (float)110))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0004*ins_flow_temp_float + (float)0.958); //0.0004x + 0.958 90-0.6 110+0.2
}
else if((ins_flow_temp_float > (float)110)&&(ins_flow_temp_float <= (float)130))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0005*ins_flow_temp_float + (float)1.055); //-0.0005x + 1.055 110+0 130-1
}
else if((ins_flow_temp_float > (float)130)&&(ins_flow_temp_float <= (float)180))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
}
else if((ins_flow_temp_float > (float)180)&&(ins_flow_temp_float <= (float)190))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0007*ins_flow_temp_float + (float)0.867); //0.0007x + 0.867 180-0.7 190-0
}
}
else if((temp_value_float > (float)27)&&(temp_value_float <= (float)33)) //温度范围
{
if(ins_flow_temp_float <= (float)18)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if((ins_flow_temp_float > (float)18)&&(ins_flow_temp_float <= (float)22))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0012*ins_flow_temp_float + (float)1.0255); //-0.0012x + 1.0255 18+0.3 22-0.2
}
else if((ins_flow_temp_float > (float)22)&&(ins_flow_temp_float <= (float)45))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.998;
}
else if((ins_flow_temp_float > (float)45)&&(ins_flow_temp_float <= (float)90))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float > (float)110)&&(ins_flow_temp_float <= (float)180))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
else if((temp_value_float > (float)15)&&(temp_value_float <= (float)17)) //温度范围
{
if(ins_flow_temp_float <= (float)18)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.004*temp_value_float + (float)0.927); //15℃-1.3%~17℃-0.5% 0.004x + 0.927
}
else if((ins_flow_temp_float > (float)18)&&(ins_flow_temp_float <= (float)45))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0015*temp_value_float + (float)0.9695); //15℃-0.8%~17℃-0.5% 0.0015x + 0.9695
}
else if((ins_flow_temp_float > (float)45)&&(ins_flow_temp_float <= (float)65))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.004*temp_value_float + (float)0.927); //15℃-1.3%~17℃-0.5% 0.004x + 0.927
}
else if((ins_flow_temp_float > (float)65)&&(ins_flow_temp_float <= (float)180))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0065*temp_value_float + (float)0.8845); //15℃-1.8%~17℃-0.5% 0.0065x + 0.8845
}
else if((ins_flow_temp_float > (float)180)&&(ins_flow_temp_float <= (float)320))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.004*temp_value_float + (float)0.927); //15℃-1.3%~17℃-0.5% 0.004x + 0.927
}
else if((ins_flow_temp_float > (float)320)&&(ins_flow_temp_float <= (float)550))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0025*temp_value_float + (float)0.9525); //15℃-1%~17℃-0.5% 0.0025x + 0.9525
}
else if(ins_flow_temp_float>(float)4800)
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0025*temp_value_float + (float)0.9525); //15℃-1%~17℃-0.5% 0.0025x + 0.9525
}
}
else if(temp_value_float <= (float)15) //温度范围
{
if(ins_flow_temp_float <= (float)18)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.987;
}
else if((ins_flow_temp_float > (float)18)&&(ins_flow_temp_float <= (float)45))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.992;
}
else if((ins_flow_temp_float > (float)45)&&(ins_flow_temp_float <= (float)65))
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0005*ins_flow_temp_float + (float)1.0145); //-0.0005x + 1.0145 45 -0.8 65 -1.8
}
else if((ins_flow_temp_float > (float)65)&&(ins_flow_temp_float <= (float)180))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.982;
}
else if((ins_flow_temp_float > (float)180)&&(ins_flow_temp_float <= (float)320))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.987;
}
else if((ins_flow_temp_float > (float)320)&&(ins_flow_temp_float <= (float)550))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if((ins_flow_temp_float > (float)550)&&(ins_flow_temp_float <= (float)4800))
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if(ins_flow_temp_float > (float)4800)
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
}
// else if(temp_value_float <= (float)15) //温度范围
// {
// if(temp_value_float>=(float)10)
// {
// if(ins_flow_temp_float <= (float)90)//流量范围
// {
// ins_flow_temp_float = ins_flow_temp_float * ((float)0.0004*temp_value_float + (float)0.989); //15℃-0.5%~~10℃-0.7%
// }
// else if(ins_flow_temp_float>(float)90)
// {
// ins_flow_temp_float = ins_flow_temp_float * ((float)0.001*temp_value_float + (float)0.983);//15℃-0.2%~~10℃-0.7%
// }
// }
// else //10度以下
// {
// ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
// }
// }
//流量单独修正
if((ins_flow_temp_float > (float)90)&&(ins_flow_temp_float <= (float)120))//流量范围
{
if((temp_value_float >= (float)15)&&(temp_value_float < (float)22)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0009*temp_value_float + (float)0.9841); //15℃-0.3%~~22℃+0.3%
}
else if((temp_value_float > (float)22)&&(temp_value_float <= (float)32)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
#elif LLGS_DN25_BRASS_40KPA_GP30_32768
#elif BM_DN25_BRASS_63KPA_GP30_32768
#elif MID_DN25_BRASS_63KPA_GP30_32768
#elif PF_DN25_BRASS_63KPA_GP30_32768
if(temp_value_float > (float)35) //温度范围
{
if(ins_flow_temp_float <= (float)43)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
else if(ins_flow_temp_float >= (float)130)
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((temp_value_float > (float)24)&&(temp_value_float <= (float)35)) //温度范围
{
if(ins_flow_temp_float <= (float)47)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
else if(temp_value_float <= (float)15) //温度范围
{
if(temp_value_float>=(float)10)
{
if(ins_flow_temp_float <= (float)90)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0004*temp_value_float + (float)0.989); //15℃-0.5%~~10℃-0.7%
}
else if(ins_flow_temp_float>(float)90)
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.001*temp_value_float + (float)0.983);//15℃-0.2%~~10℃-0.7%
}
}
else //10度以下
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
}
}
//流量单独修正
if((ins_flow_temp_float > (float)90)&&(ins_flow_temp_float <= (float)120))//流量范围
{
if((temp_value_float >= (float)15)&&(temp_value_float < (float)22)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0009*temp_value_float + (float)0.9841); //15℃-0.3%~~22℃+0.3%
}
else if((temp_value_float > (float)22)&&(temp_value_float <= (float)32)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
#elif DN32_BRASS_63KPA_GP30_32768
if(temp_value_float > (float)49.01) //温度范围
{
if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)43))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0005*ins_flow_temp_float + (float)0.9825); //35:0 43:0.4
}
if((ins_flow_temp_float >= (float)43)&&(ins_flow_temp_float < (float)70))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >= (float)90)&&(ins_flow_temp_float < (float)120))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >= (float)120)&&(ins_flow_temp_float < (float)160))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)160)&&(ins_flow_temp_float < (float)230))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.012;
}
else if((ins_flow_temp_float >=(float)230)&&(ins_flow_temp_float < (float)280))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >=(float)280)&&(ins_flow_temp_float < (float)300))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.00035*ins_flow_temp_float + (float)1.102); //280: 0.4~300:-0.3
}
else if((ins_flow_temp_float >=(float)300)&&(ins_flow_temp_float < (float)350))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.00014*ins_flow_temp_float + (float)0.955); //300: -0.4~350:0.4
}
else if((ins_flow_temp_float >=(float)350)&&(ins_flow_temp_float < (float)600))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)600)&&(ins_flow_temp_float < (float)850))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
}
else if((temp_value_float >= (float)43.67)&&(temp_value_float < (float)49.01)) //温度范围
{
if((ins_flow_temp_float >=(float)28)&&(ins_flow_temp_float < (float)43))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >=(float)43)&&(ins_flow_temp_float < (float)70))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.00015*ins_flow_temp_float + (float)0.99863); //43:0.5 70:0.9
}
else if((ins_flow_temp_float >=(float)70)&&(ins_flow_temp_float < (float)90))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >=(float)90)&&(ins_flow_temp_float < (float)160))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >=(float)160)&&(ins_flow_temp_float < (float)230))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >=(float)230)&&(ins_flow_temp_float < (float)280))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >=(float)280)&&(ins_flow_temp_float < (float)300))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.00035*ins_flow_temp_float + (float)1.102); //280: 0.4~300:-0.3
}
else if((ins_flow_temp_float >=(float)300)&&(ins_flow_temp_float < (float)350))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.00014*ins_flow_temp_float + (float)0.955); //300: -0.4~350:0.4
}
else if((ins_flow_temp_float >=(float)350)&&(ins_flow_temp_float < (float)850))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
}
else if((temp_value_float >= (float)35.71)&&(temp_value_float < (float)43.67)) //温度范围
{
if(ins_flow_temp_float < (float)28)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >=(float)28)&&(ins_flow_temp_float < (float)43))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01;
}
else if((ins_flow_temp_float >=(float)43)&&(ins_flow_temp_float < (float)70))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float *((float)0.000111*ins_flow_temp_float + (float)1.005222); //43:1.01~ 70:1.013
}
else if((ins_flow_temp_float >=(float)70)&&(ins_flow_temp_float < (float)90))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01;
}
else if((ins_flow_temp_float >=(float)90)&&(ins_flow_temp_float < (float)160))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >=(float)160)&&(ins_flow_temp_float < (float)230))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >=(float)230)&&(ins_flow_temp_float < (float)280))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >=(float)280)&&(ins_flow_temp_float < (float)300))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0005*ins_flow_temp_float + (float)1.144); //280: 0.4~300:-0.6
}
else if((ins_flow_temp_float >=(float)300)&&(ins_flow_temp_float < (float)350))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0002*ins_flow_temp_float + (float)0.934); //300: -0.6~350:0.4
}
else if((ins_flow_temp_float >=(float)350)&&(ins_flow_temp_float < (float)850))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
}
else if((temp_value_float >= (float)29)&&(temp_value_float < (float)35.71)) //温度范围
{
if(ins_flow_temp_float < (float)35)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)43))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0005*ins_flow_temp_float + (float)0.9875); //35:0.5 43:0.9
}
else if((ins_flow_temp_float >=(float)43)&&(ins_flow_temp_float < (float)70))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.009;
}
else if((ins_flow_temp_float >=(float)70)&&(ins_flow_temp_float < (float)90))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)160)&&(ins_flow_temp_float < (float)260))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >=(float)280)&&(ins_flow_temp_float < (float)300))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.00025*ins_flow_temp_float + (float)1.07); //280: 0~300:-0.5
}
else if((ins_flow_temp_float >=(float)300)&&(ins_flow_temp_float < (float)350))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.00014*ins_flow_temp_float + (float)0.953); //300: -0.5~350:0.2
}
}
else if((temp_value_float >= (float)27.18)&&(temp_value_float < (float)29)) //温度范围
{
if(ins_flow_temp_float < (float)90)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)160)&&(ins_flow_temp_float < (float)260))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >=(float)280)&&(ins_flow_temp_float < (float)300))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.00025*ins_flow_temp_float + (float)1.07); //280: 0~300:-0.5
}
else if((ins_flow_temp_float >=(float)300)&&(ins_flow_temp_float < (float)350))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.00014*ins_flow_temp_float + (float)0.953); //300: -0.5~350:0.2
}
}
else if((temp_value_float >= (float)25)&&(temp_value_float < (float)27.18)) //温度范围
{
if((ins_flow_temp_float >= (float)160)&&(ins_flow_temp_float < (float)260))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)2000)&&(ins_flow_temp_float < (float)9500))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
else if((temp_value_float >= (float)19.6)&&(temp_value_float < (float)25)) //温度范围
{
if(ins_flow_temp_float<(float)70)
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.00056*temp_value_float + (float)1.01389 ); //19.6度 0.3 25度 :0
}
else if((ins_flow_temp_float >= (float)160)&&(ins_flow_temp_float < (float)260))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)2000)&&(ins_flow_temp_float < (float)9500))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
else if((temp_value_float >= (float)18.6)&&(temp_value_float < (float)19.6)) //温度范围
{
if((ins_flow_temp_float >= (float)160)&&(ins_flow_temp_float < (float)260))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)2000)&&(ins_flow_temp_float < (float)9500))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
else if((temp_value_float >= (float)13.73)&&(temp_value_float < (float)18.6)) //温度范围
{
if(ins_flow_temp_float<(float)25)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)25)&&(ins_flow_temp_float < (float)50))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0004*ins_flow_temp_float + (float)1.015);// 25 0.5 50 -0.5
}
else if((ins_flow_temp_float >= (float)50)&&(ins_flow_temp_float < (float)110))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((ins_flow_temp_float >= (float)110)&&(ins_flow_temp_float < (float)160))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0001*ins_flow_temp_float + (float)0.9840);//0.0001+ 0.9840 110 -0.5 160 0
}
else if((ins_flow_temp_float >= (float)160)&&(ins_flow_temp_float < (float)260))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)2000)&&(ins_flow_temp_float < (float)9500))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
else if(temp_value_float < (float)13.73) //温度范围
{
if(ins_flow_temp_float<(float)25)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)25)&&(ins_flow_temp_float < (float)50))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0006*ins_flow_temp_float + (float)1.02);// 25 0.5 50 -1
}
else if((ins_flow_temp_float >= (float)50)&&(ins_flow_temp_float < (float)110))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else if((ins_flow_temp_float >= (float)110)&&(ins_flow_temp_float < (float)160))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0002*ins_flow_temp_float + (float)0.968);// 110 -1 160 0
}
else if((ins_flow_temp_float >= (float)160)&&(ins_flow_temp_float < (float)260))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)2000)&&(ins_flow_temp_float < (float)9500))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
//以流量修正 保留原始校准点修正
if((ins_flow_temp_float >= (float)33)&&(ins_flow_temp_float < (float)75))//流量范围
{
if((temp_value_float >= (float)22)&&(temp_value_float < (float)33)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
}
else if((ins_flow_temp_float >= (float)400)&&(ins_flow_temp_float < (float)600))//流量范围
{
if(temp_value_float >= (float)22) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
#elif BM_DN32_BRASS_63KPA_GP30_32768
if(temp_value_float < (float)15) //温度范围
{
if(ins_flow_temp_float < (float)55)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.003;
}
}
#elif PF_DN32_BRASS_63KPA_GP30_32768
//流量修正
if((ins_flow_temp_float > (float)33)&&(ins_flow_temp_float <= (float)75))//流量范围
{
if(temp_value_float < (float)15) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if((temp_value_float >= (float)15)&&(temp_value_float < (float)22)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0011*temp_value_float + (float)0.9779); //15℃-0.5%~~22℃+0.3%
}
else if((temp_value_float >= (float)22)&&(temp_value_float < (float)33)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if(temp_value_float >= (float)33) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.01;
}
}
else if((ins_flow_temp_float >= (float)78)&&(ins_flow_temp_float < (float)170))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
}
else if((ins_flow_temp_float >= (float)170)&&(ins_flow_temp_float < (float)400))//流量范围
{
if(temp_value_float >= (float)33) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.99;
}
else
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.993;
}
}
else if((ins_flow_temp_float >= (float)400)&&(ins_flow_temp_float <= (float)600))//流量范围
{
if(temp_value_float < (float)15) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
else if((temp_value_float >= (float)15)&&(temp_value_float < (float)22)) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0004*temp_value_float + (float)0.9906); //15℃-0.3%~~22℃+0%
}
else if(temp_value_float > (float)22) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if((ins_flow_temp_float >= (float)600)&&(ins_flow_temp_float <= (float)3100))//流量范围
{
if(temp_value_float < (float)17) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.992;
}
else
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
}
//温度单独修正 2022- 03 -21
if(temp_value_float < (float)15) //温度范围
{
if(ins_flow_temp_float <= (float)43)//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float > (float)43)&&(ins_flow_temp_float <= (float)50))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float *((float)-0.00114* ins_flow_temp_float + (float)1.05414); //43 :0.5 50:-0.3
}
else if((ins_flow_temp_float > (float)50)&&(ins_flow_temp_float <= (float)75))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
#elif DN40_BRASS_63KPA_GP30_32768
if(temp_value_float < (float)11.98)//温度范围
{
if(ins_flow_temp_float < (float)35)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)60))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.00012*ins_flow_temp_float + (float)1.0092);//35:+0.5% ~ 60:+0.2 -0.00012x + 1.0092
}
else if((ins_flow_temp_float >= (float)60)&&(ins_flow_temp_float < (float)70))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0006*ins_flow_temp_float + (float)1.038);//60:+0.2% ~ 70:-0.4%
}
else if((ins_flow_temp_float >= (float)70)&&(ins_flow_temp_float < (float)85))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;
}
else if(ins_flow_temp_float >= (float)600)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
}
else if(temp_value_float < (float)16.5)//温度范围
{
if(ins_flow_temp_float < (float)35)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
else if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)60))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.00012*ins_flow_temp_float + (float)1.0092);//35:+0.5% ~ 60:+0.2 -0.00012x + 1.0092
}
else if((ins_flow_temp_float >= (float)60)&&(ins_flow_temp_float < (float)70))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0006*ins_flow_temp_float + (float)1.038);//60:+0.2% ~ 70:-0.4%
}
else if((ins_flow_temp_float >= (float)70)&&(ins_flow_temp_float < (float)85))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.992;
}
else if((ins_flow_temp_float >= (float)85)&&(ins_flow_temp_float < (float)120))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;
}
else if((ins_flow_temp_float >= (float)200)&&(ins_flow_temp_float < (float)320))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >= (float)320)&&(ins_flow_temp_float < (float)350))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.000133*ins_flow_temp_float + (float)1.046667);//320:+0.4% ~ 350:+0
}
else if(ins_flow_temp_float >= (float)600)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
}
else if(temp_value_float < (float)20.54)//温度范围
{
if(ins_flow_temp_float < (float)60)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >= (float)70)&&(ins_flow_temp_float < (float)85))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997; //75:+0% ~ 85:+0.5
}
else if((ins_flow_temp_float >= (float)85)&&(ins_flow_temp_float < (float)120))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.003*temp_value_float + (float)0.947); //16.5 -0.4 20.54 +0.8 0.003x + 0.947 温度曲线
}
else if((ins_flow_temp_float >= (float)120)&&(ins_flow_temp_float < (float)200))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.001*temp_value_float + (float)0.9837); //16.5 0 20.54 +0.4 0.001x + 0.9837 温度曲线
}
else if((ins_flow_temp_float >= (float)200)&&(ins_flow_temp_float < (float)320))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.004;
}
else if((ins_flow_temp_float >= (float)320)&&(ins_flow_temp_float < (float)350))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.000267*ins_flow_temp_float + (float)1.093333);//320:+0.8% ~ 350:+0
}
}
else if(temp_value_float < (float)27.5)//温度范围
{
if((ins_flow_temp_float >= (float)75)&&(ins_flow_temp_float < (float)85))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0003*ins_flow_temp_float + (float)0.9775);//75:0% ~ 85:+0.3 0.0003 x + 0.9775
}
else if((ins_flow_temp_float >= (float)85)&&(ins_flow_temp_float < (float)280))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)280)&&(ins_flow_temp_float < (float)350))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.000071*ins_flow_temp_float + (float)1.025);//280:+0.5% ~ 350:+0
}
}
else if(temp_value_float < (float)33.56)//温度范围
{
if(ins_flow_temp_float<(float)60)
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0015*temp_value_float + (float)0.9577); //27.5度 0 33.56度 :0.9
}
else if((ins_flow_temp_float >= (float)60)&&(ins_flow_temp_float < (float)70))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0004*ins_flow_temp_float + (float)0.98);//60:+0.4% ~ 70:+0.8
}
else if((ins_flow_temp_float >= (float)70)&&(ins_flow_temp_float < (float)85))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0002*ins_flow_temp_float + (float)0.991);//70:+0.5% ~ 85:+0.8
}
else if((ins_flow_temp_float >= (float)85)&&(ins_flow_temp_float < (float)280))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.012;
}
else if((ins_flow_temp_float >= (float)280)&&(ins_flow_temp_float < (float)320))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)320)&&(ins_flow_temp_float < (float)350))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.00020*ins_flow_temp_float + (float)1.07);//320:+0.6% ~ 350:+0 -0.00020 x + 1.07000
}
}
else if(temp_value_float < (float)39.62)//温度范围
{
if(ins_flow_temp_float<(float)60)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.009;
}
else if((ins_flow_temp_float >= (float)60)&&(ins_flow_temp_float < (float)70))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0004*ins_flow_temp_float + (float)0.98);//60:+0.4% ~ 70:+0.8
}
else if((ins_flow_temp_float >= (float)70)&&(ins_flow_temp_float < (float)85))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0003*ins_flow_temp_float + (float)0.9893);//70:+0.8% ~ 85:+1.2
}
else if((ins_flow_temp_float >= (float)85)&&(ins_flow_temp_float < (float)280))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.012;
}
else if((ins_flow_temp_float >= (float)280)&&(ins_flow_temp_float < (float)320))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.008;
}
else if((ins_flow_temp_float >= (float)320)&&(ins_flow_temp_float < (float)350))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.000267*ins_flow_temp_float + (float)1.093333);//320:+0.8% ~ 350:+0
}
}
else if(temp_value_float < (float)43.67)//温度范围
{
if(ins_flow_temp_float < (float)60)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.009;
}
else if((ins_flow_temp_float >= (float)60)&&(ins_flow_temp_float < (float)85))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0002*ins_flow_temp_float + (float)0.995); //60:0.7% ~ 85:1.2 0.00020 x + 0.99500
}
else if((ins_flow_temp_float >= (float)85)&&(ins_flow_temp_float < (float)220))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.012;
}
else if((ins_flow_temp_float >= (float)220)&&(ins_flow_temp_float < (float)280))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.007;
}
else if((ins_flow_temp_float >= (float)280)&&(ins_flow_temp_float < (float)320))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0006*temp_value_float + (float)1.0284); //39度 0.5 44度:0.2 -0.00060 x + 1.02840
}
else if((ins_flow_temp_float >= (float)320)&&(ins_flow_temp_float < (float)350))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.000167*ins_flow_temp_float + (float)1.055333);//320:+0.2% ~ 350:-0.3
}
else if(ins_flow_temp_float > (float)350)
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
else if(temp_value_float >= (float)43.67)//温度范围
{
if(ins_flow_temp_float < (float)35)
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.005;
}
if((ins_flow_temp_float >= (float)35)&&(ins_flow_temp_float < (float)60))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0002*ins_flow_temp_float + (float)0.9994);//35:0% ~ 60:0.6% ---> 35:0.5% ~ 60:0.9%
}
else if((ins_flow_temp_float >= (float)60)&&(ins_flow_temp_float < (float)85))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.00036*ins_flow_temp_float + (float)0.9844);//60:0.6% ~ 85:1.5
}
else if((ins_flow_temp_float >= (float)85)&&(ins_flow_temp_float < (float)220))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.015;
}
else if((ins_flow_temp_float >= (float)220)&&(ins_flow_temp_float < (float)320))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0001*ins_flow_temp_float + (float)1.032);//220:+1% ~ 320:+0
}
}
#elif BM_DN40_BRASS_63KPA_GP30_32768
if(temp_value_float > (float)35) //温度范围
{
if(ins_flow_temp_float < (float)80)
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
}
if((ins_flow_temp_float > (float)110)&&(ins_flow_temp_float <= (float)180))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.00001648*ins_flow_temp_float*ins_flow_temp_float - (float)0.00475923*ins_flow_temp_float + (float)1.32378501);
if(ins_flow_temp_float <= (float)160)
{
if((temp_value_float < (float)31)&&(temp_value_float >= (float)10))//温度范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0000241*temp_value_float*temp_value_float + (float)0.0003506*temp_value_float + (float)1.0147);
}
else if(temp_value_float < (float)10) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.015;
}
}
}
else if((ins_flow_temp_float > (float)180)&&(ins_flow_temp_float < (float)1100))//流量范围
{
if(temp_value_float > (float)15) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.987;
}
}
#elif PF_DN40_BRASS_63KPA_GP30_32768
if((ins_flow_temp_float > (float)57)&&(ins_flow_temp_float <= (float)90))//流量范围
{
if(temp_value_float <= (float)15) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.995;
}
else if(temp_value_float > (float)35) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.996;
}
}
else if((ins_flow_temp_float >= (float)95)&&(ins_flow_temp_float <= (float)130))//流量范围
{
if(temp_value_float < (float)32) //温度范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.006;
}
else
{
ins_flow_temp_float = ins_flow_temp_float * (float)1.012;
}
}
else if((ins_flow_temp_float >= (float)260)&&(ins_flow_temp_float <= (float)350))//流量范围
{
ins_flow_temp_float = ins_flow_temp_float * (float)0.997;
}
else if((ins_flow_temp_float >= (float)700)&&(ins_flow_temp_float <= (float)1800))//流量范围
{
if((temp_value_float >= (float)15)&&(temp_value_float < (float)22))//温度范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)-0.0008*temp_value_float + (float)1.0125); //15℃0%~~22℃-0.5%
}
else if((temp_value_float >= (float)22)&&(temp_value_float < (float)25))//温度范围
{
ins_flow_temp_float = ins_flow_temp_float * ((float)0.0012*temp_value_float + (float)0.9688); //22℃-0.5%~~25℃+0%
}
}
#endif
ins_flow_temp_float=modify_flow(ins_flow_temp_float);
}
if(ins_flow_temp_float > LIMIT_FLOW_1_5Q4) //以过载流量的1.5倍作为截止并且超过后不再清零2019-4-20 3.125*1.5=4.68
{
ins_flow_temp_float = LIMIT_FLOW_1_5Q4;
}
return ins_flow_temp_float;
}
/*ZCC 和 nB 上报防护 2022-7-21 15:38:06*/
float ZCC_NB_judge(float interval_value , u8 ins_flow_flag, float ins_flow)
{
float temp_value;
//每次赋值都给数组第三个元素赋值,滑动移动数组元素
ZCC_NB_buf[0]=ZCC_NB_buf[1];
ZCC_NB_buf[1]=ZCC_NB_buf[2];
ZCC_NB_buf[2]=interval_value;
ZCC_direction_flow_flag[0]=ZCC_direction_flow_flag[1];
ZCC_direction_flow_flag[1]=ZCC_direction_flow_flag[2];
ZCC_direction_flow_flag[2]=ins_flow_flag;
ZCC_ins_flow[0]=ZCC_ins_flow[1];
ZCC_ins_flow[1]=ZCC_ins_flow[2];
ZCC_ins_flow[2]=ins_flow;
if(FixedTimeNbIoTUploadIfIdle() == TASK_IDLE)//NB上报期间才考虑
{
return 0;
}
if((0 == ZCC_ins_flow[0]) && (0 == ZCC_ins_flow[2]))//第一种情况,静水
{
if( GP22_APP_DIFTOF_NEGT == ZCC_direction_flow_flag[1] )//如果中间值是负数,则不补偿
{
return 0;
}
else
{
return (0 - ZCC_NB_buf[1]);
}
}
else //第2种情况跑水
{
if(ZCC_ins_flow[0] >= ZCC_ins_flow[2])
{
temp_value = ZCC_ins_flow[0] - ZCC_ins_flow[2];
}
else
{
temp_value = ZCC_ins_flow[2] - ZCC_ins_flow[0];
}
if(temp_value < (ZCC_ins_flow[0] * 0.1)) //第一个数和第三个数相差很小
{
if(( GP22_APP_DIFTOF_NEGT == ZCC_direction_flow_flag[1] )&&( GP22_APP_DIFTOF_POST == ZCC_direction_flow_flag[0] )&&( GP22_APP_DIFTOF_POST == ZCC_direction_flow_flag[2] ))
{
ZCC_direction_flow_flag[1] =GP22_APP_DIFTOF_POST;//如果中间值是负数,则使用上次数,同时把异常数更新为正常数据
ZCC_NB_buf[1]= ZCC_NB_buf[0];
return ZCC_NB_buf[0];
}
else if(((ZCC_ins_flow[1] - ZCC_ins_flow[0]) > 0.4 * ZCC_ins_flow[0]) || ((ZCC_ins_flow[0] - ZCC_ins_flow[1]) > 0.4 * ZCC_ins_flow[0])) //判断中间数,与第一个数差别
{
return (ZCC_NB_buf[0] - ZCC_NB_buf[1]); //返回补偿值
}
}
}
return 0;
}
/****************************************************************
Function: void Gp22FilterCalculate (u8 temp_flag)
Description: GP22 滤波和计算 函数
Input: 温度是否采集 标志
Return:
Others: 读取温度接口参数: 0流量时间差、1进口温度时间、2出口温度时间 3标准电阻时间
*****************************************************************/
void Gp22FilterCalculate(u8 temp_flag)
{
u32 temp_value;
u8 i;
float temp_total_flow_float = 0, temp_ins_flow_float= 0, temp_value_float = 0;
gp30_app_start_flow_filter=FrameCheckParaApp(FramePara_StartFlow);//此处需要记录下初值给GP30
// gp22_app_start_flow_reverse =0x80000000|gp30_app_start_flow_filter;
gp30_app_start_flow_filter_float=Gp30DataToFloat(gp30_app_start_flow_filter);
gp30_app_start_flow_reverse_float=0-gp30_app_start_flow_filter_float;
// s_gengxin_statebyte_msg = TRUE;
//时间差滤波
for (i = 0; i < GP22_APP_QUEUE_SIZE; i++)
{
if ( s_g_flow_data[i] >= 0x80000000) //负数
{
s_g_flow_data[i] &= 0x7FFFFFFF;
s_g_temp_float_flow_data[i] = 0 - Gp30DataToFloat( s_g_flow_data[i]);
s_g_flow_data[i] |= 0x80000000;
}
else
{
s_g_temp_float_flow_data[i] = Gp30DataToFloat(s_g_flow_data[i]);
}
}
/* 更新当前数据gp22_app_data。检定状态下同时更新检定数据gp22_test_data*/
if (10 == LcdCheckStateApp()) //非检定状态
{
// if (GP22_APP_FLOW_TEMP == temp_flag) //同时温度+流量时,才计算一次
// {
s_g_sample_flag = 0;
temp_value_float = FilterJunZhi_TestForGp30_float(&s_g_temp_float_flow_data[0], GP22_APP_QUEUE_SIZE); //滤波
// if(start_flow_sum >= GP22_APP_EXCEED_START_FLOW_SUM) //低于始动流量的时间差大于一半次数
// {
// temp_value_float = 0;
// }
// else
// {
//temp_value = FlowFilter(&s_g_temp_flow_data[0], GP22_APP_QUEUE_SIZE); //滤波 开关阀
//temp_value = Gp22TimeDiffer(GP22_APP_FLOW_DIFFER); //不 滤波
//temp_value_float = FilterJunZhi_TestForGp30_float(&s_g_temp_float_flow_data[0], GP22_APP_QUEUE_SIZE); //滤波
calibration_diftof_value = temp_value_float;//用于记录非检定下时间差,便于零流量自校准。
// }
if(temp_value_float <0)
{
ins_flow_flag = GP22_APP_DIFTOF_NEGT;//滤波时间差为负的标志
temp_value_float = 0 - temp_value_float;
}
else
{
ins_flow_flag = GP22_APP_DIFTOF_POST;//滤波时间差为正的标志
}
temp_value = FloatToGp30Data(temp_value_float);
//瞬时流量计算
temp_ins_flow_float = Gp22FlowCalculate(temp_value);
gp22_test_data.s.ins_flow = FloatToGp30Data(temp_ins_flow_float);
gp22_app_data.s.ins_flow = gp22_test_data.s.ins_flow;
Gp22EventCheckApp(gp22_test_data.s.ins_flow); //事件记录的检测与清除
if(TRUE == gp30_event_flag.reverse_flow)
{
// gp22_app_data.s.ins_flow = 0;
reverse_flow_sum++;
if(reverse_flow_sum >= 240)////原来是10次20s240次八分钟reverse_flow_sum是u8类型
{
reverse_flow_sum = 0;
// Gp22AppSetGp22Err();
}
}
else
{
reverse_flow_sum = 0;
}
if(gp22_app_data.s.ins_flow != 0)
{
gp22CheckErrEventApp(GP30_no_water_DE); // 1/4 DE
gp22CheckErrEventApp(GP30_TOF_overrun_DE);
}
// temp_ins_flow_float = temp_ins_flow_float * (float)Compensate_Coefficient_For_Normal;//所有表计类型非鉴定下流量补偿 2020-12-30
//机械台子修正
temp_ins_flow_float = ModifyForVolumeTestbench(temp_ins_flow_float);
Gp22FlowDetect(temp_ins_flow_float);
if(0 != temp_ins_flow_float) //瞬时流量不为零再计算累积流量
{
// total_flow_change_flag = 1;
// //非检定状态 放大100倍
{
//根据不同的采样间隔计算累积流量
// temp_total_flow_float = temp_ins_flow_float * (float)((GP22_APP_SAMPLE_SIZE / 2) * s_g_gp22_sample_span) ;
if(FALSE == s_gp22_cal_interval_msg) //LPTIMER时间轴
{
temp_total_flow_float = temp_ins_flow_float * ((float)intval_time/(float)128);//256分频0x80代表1s
}
else
{
temp_ins_flow_float = temp_ins_flow_float*(float)0.997;//仅在上报期间修正原始流速
temp_total_flow_float = temp_ins_flow_float * (float)intval_time / (float)1000000;
}
temp_total_flow_float = temp_total_flow_float * (float)100 / (float)3600;
temp_total_flow_float = temp_total_flow_float / (float)1000.0; //lifangmi
}
if(GP22_APP_DIFTOF_POST == ins_flow_flag)
{
// 流量累加时,浮点数精度问题,当浮点数增大时,调整累加的单位
// if(gp22_app_data.s.total_flow.gp30_float > 99999000)
// {
// globle_total_flow_float = globle_total_flow_float + temp_total_flow_float;
// if(globle_total_flow_float > 100)
// {
// globle_total_flow_float = globle_total_flow_float - 100;
// gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + 100;
// }
// }
// else if(gp22_app_data.s.total_flow.gp30_float > 9999990)
// {
// globle_total_flow_float = globle_total_flow_float + temp_total_flow_float;
// if(globle_total_flow_float > 10)
// {
// globle_total_flow_float = globle_total_flow_float - 10;
// gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + 10;
// }
// }
// else if(gp22_app_data.s.total_flow.gp30_float > 999990)
// {
// globle_total_flow_float = globle_total_flow_float + temp_total_flow_float;
// if(globle_total_flow_float > 1)
// {
// globle_total_flow_float = globle_total_flow_float - 1;
// gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + 1;
// }
// }
// else
// {
// gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + temp_total_flow_float;
// }
duoble_total_flow.gp30_double += (double)temp_total_flow_float;
// gp22_app_data.s.total_flow.gp30_float = (float) duoble_total_flow.gp30_double;
// gp22_copy_total_flow = gp22_app_data.s.total_flow.gp30_float;//2017 02,更改复位不丢数
// gp22_copy_temp_total_flow_float = temp_total_flow_float;//保存复位不初始化 通过不同的采样间隔计算的累积流量
}
else
{
if(0x00004D3C==FrameCheckParaApp(FramePara_CCFlow)) //方式1
{
//gp22_app_data.s.cur_total_flow.gp30_float=0;
//gp22_copy_cur_total_flow=0;
// 流量累加时,浮点数精度问题,当浮点数增大时,调整累加的单位
// if(gp22_app_data.s.total_flow.gp30_float > 99999000)
// {
// globle_total_flow_float = globle_total_flow_float - temp_total_flow_float;
// if(globle_total_flow_float < -100)
// {
// globle_total_flow_float = globle_total_flow_float + 100;
// gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float - 100;
// }
// }
// else if(gp22_app_data.s.total_flow.gp30_float > 9999990)
// {
// globle_total_flow_float = globle_total_flow_float - temp_total_flow_float;
// if(globle_total_flow_float < -10)
// {
// globle_total_flow_float = globle_total_flow_float + 10;
// gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float - 10;
// }
// }
// else if(gp22_app_data.s.total_flow.gp30_float > 999990)
// {
// globle_total_flow_float = globle_total_flow_float - temp_total_flow_float;
// if(globle_total_flow_float < -1)
// {
// globle_total_flow_float = globle_total_flow_float + 1;
// gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float - 1;
// }
// }
// else
// {
// if(gp22_app_data.s.total_flow.gp30_float <= temp_total_flow_float)
// {
// gp22_app_data.s.total_flow.gp30_float = 0;
// }
// else
// {
// gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float - temp_total_flow_float;
// }
// }
if(duoble_total_flow.gp30_double <= temp_total_flow_float)
{
duoble_total_flow.gp30_double = 0;
}
else
{
duoble_total_flow.gp30_double = duoble_total_flow.gp30_double - temp_total_flow_float;
}
gp22_app_data.s.total_flow.gp30_float = (float)duoble_total_flow.gp30_double;
gp22_copy_total_flow = gp22_app_data.s.total_flow.gp30_float;//2017 02,更改复位不丢数
}
// 流量累加时,浮点数精度问题,当浮点数增大时,调整累加的单位
if(gp22_app_data.s.total_flow_reverse.gp30_float > 99999000)
{
globle_cur_total_flow_float = globle_cur_total_flow_float + temp_total_flow_float;
if(globle_cur_total_flow_float > 100)
{
globle_cur_total_flow_float = globle_cur_total_flow_float - 100;
gp22_app_data.s.total_flow_reverse.gp30_float = gp22_app_data.s.total_flow_reverse.gp30_float + 100;
}
}
else if(gp22_app_data.s.total_flow_reverse.gp30_float > 9999990)
{
globle_cur_total_flow_float = globle_cur_total_flow_float + temp_total_flow_float;
if(globle_cur_total_flow_float > 10)
{
globle_cur_total_flow_float = globle_cur_total_flow_float - 10;
gp22_app_data.s.total_flow_reverse.gp30_float = gp22_app_data.s.total_flow_reverse.gp30_float + 10;
}
}
else if(gp22_app_data.s.total_flow_reverse.gp30_float > 999990)
{
globle_cur_total_flow_float = globle_cur_total_flow_float + temp_total_flow_float;
if(globle_cur_total_flow_float > 1)
{
globle_cur_total_flow_float = globle_cur_total_flow_float - 1;
gp22_app_data.s.total_flow_reverse.gp30_float = gp22_app_data.s.total_flow_reverse.gp30_float + 1;
}
}
else
{
gp22_app_data.s.total_flow_reverse.gp30_float = gp22_app_data.s.total_flow_reverse.gp30_float + temp_total_flow_float;
}
gp22_copy_total_flow_reverse = gp22_app_data.s.total_flow_reverse.gp30_float;//2017 02,更改复位不丢数
}
}
else
{
// gp22_copy_total_flow = gp22_app_data.s.total_flow.gp30_float;//复位不丢数
gp22_copy_total_flow_reverse = gp22_app_data.s.total_flow_reverse.gp30_float;//2021 01,更改复位不丢数
// gp22_copy_temp_total_flow_float = 0;
}
/*ZCC 和 nB 上报防护 2022-7-21 15:38:06*/
float correct_value = ZCC_NB_judge(temp_total_flow_float,ins_flow_flag,temp_ins_flow_float);
if((correct_value > 2) || (correct_value < -2))//合法性判断
{
correct_value = 0;
}
duoble_total_flow.gp30_double += correct_value;
gp22_app_data.s.total_flow.gp30_float = (float) duoble_total_flow.gp30_double;
gp22_copy_total_flow = gp22_app_data.s.total_flow.gp30_float;//2017 02,更改复位不丢数
gp22_copy_temp_total_flow_float = temp_total_flow_float;//保存复位不初始化 通过不同的采样间隔计算的累积流量
/*ZCC 和 nB 上报防护 2022-7-21 15:38:06*/
MCU_reset_judge = MCU_RESET_JUDGE_FLAG; //只有在赋值累计流量后,再置起来完全上电成功
//每次计算流量后,判断是否需要更新采样间隔,2016-7-21
// Gp22SampleChange(); //非检定状态下才需要检测
// }
}
else //检定状态每次采样都计算2016-10-24
{
if(TRUE == s_g_diftof_for_total)
{
s_g_diftof_for_total = FALSE;
start_temp_sample();//反算温度和常规温度都可以通过这个函数实现采集
}
//累计流量计算2016-10-26
//时间差滤波,用灵敏度高的
// for (i = 0; i < GP22_APP_QUEUE_SIZE; i++)
// {
// if ( s_g_flow_data[i] >= 0x80000000) //负数
// {
// s_g_flow_data[i] &= 0x7FFFFFFF;
// s_g_temp_float_flow_data[i] = 0 - Gp30DataToFloat( s_g_flow_data[i]);
// s_g_flow_data[i] |= 0x80000000;
// }
// else
// {
// s_g_temp_float_flow_data[i] = Gp30DataToFloat(s_g_flow_data[i]);
// }
// if(s_g_temp_flow_data[i] >= 0x80000000)
// {
// s_g_temp_flow_data[i] = 0;
// }
// if(s_g_temp_flow_data[i] < gp30_app_start_flow_filter)
// {
// start_flow_sum ++;
// if(start_flow_sum > GP22_APP_EXCEED_START_FLOW_SUM_VERIFICATION)
// {
// break;
// }
// }
// }
// if(start_flow_sum > GP22_APP_EXCEED_START_FLOW_SUM_VERIFICATION) //低于始动流量的时间差大于一半次数
// {
// temp_value = 0;
// }
// else
// {
// temp_value = FilterJunZhi_TestForGp30(&s_g_temp_flow_data[0], GP22_APP_QUEUE_SIZE); //滤波,适配累计量校准的瞬时速度计算
// temp_value = FilterJunZhi(&s_g_temp_flow_data[0], GP22_APP_QUEUE_SIZE); //滤波,适配累计量校准的瞬时速度计算
//temp_value_float = FilterJunZhi_TestForGp30_float(&s_g_temp_float_flow_data[0], GP22_APP_QUEUE_SIZE); //滤波
temp_value_float = FilterJunZhi_TestForGp30_float(&s_g_temp_float_flow_data[0], GP22_APP_QUEUE_SIZE); //滤波
calibration_diftof_value = temp_value_float;//用于记录检定下时间差,便于零流量自校准。
// }
//GP30_filter_last_value = temp_value;
if(temp_value_float<0)
{
temp_value_float=0;
}
temp_value = FloatToGp30Data(temp_value_float);
temp_ins_flow_float = Gp22FlowCalculate(temp_value);
s_g_sample_sum_lcd = FloatToGp30Data(temp_ins_flow_float);
if(TRUE == gp30_event_flag.reverse_flow)
{
// temp_ins_flow_float = 0;
// gp22_test_data.s.ins_flow = 0;
// gp22_app_data.s.ins_flow = gp22_test_data.s.ins_flow;
reverse_flow_sum++;
if(reverse_flow_sum >= 15)
{
reverse_flow_sum = 0;
// Gp22AppSetGp22Err();
}
}
else
{
reverse_flow_sum = 0;
}
//机械台子修正
temp_ins_flow_float = ModifyForVolumeTestbench(temp_ins_flow_float);
DiftofForTestbench(temp_ins_flow_float);//针对称重台子进行瞬时流量计算均值
Gp22FlowDetect(temp_ins_flow_float);
if(0 != temp_ins_flow_float) //瞬时流量不为零再计算累积流量
{
gp22CheckErrEventApp(GP30_no_water_DE); // 1/4 DE
gp22CheckErrEventApp(GP30_TOF_overrun_DE);
// temp_total_flow_float = temp_ins_flow_float * (float)1.73611;
temp_total_flow_float = temp_ins_flow_float * ((float)intval_time/(float)128)/(float)36;//256分频0x80代表1s;
gp22_test_data.s.total_flow.gp30_float += temp_total_flow_float;
duoble_total_flow.gp30_double += temp_total_flow_float/(float)1000;
gp22_app_data.s.total_flow.gp30_float = (float)duoble_total_flow.gp30_double;
gp22_copy_total_flow_test=gp22_test_data.s.total_flow.gp30_float;
gp22_copy_temp_total_flow_float_test=temp_total_flow_float;
gp22_copy_total_flow = gp22_app_data.s.total_flow.gp30_float;//复位不丢数
// globle_total_flow_float_jian += temp_total_flow_float;
// time = 125 * 65536 / 2; //62.5ms的,后续测试完成,考虑把这个值直接算出来 ,2016-8-2
// temp_total_flow = MulGp30Data(GP22_APP_TOTAL_FLOW_PARA_JIAN, temp_value_total_shunshi);
// temp_total_flow = MulGp30Data(temp_total_flow , time);
//
// temp_total_flow_float = Gp30DataToFloat(temp_total_flow);
// temp_total_flow_u32 += (u32)(temp_total_flow_float*1000.0); //4294967295
// if(temp_total_flow_u32 > 100000000)
// {
// temp_total_flow_u32 -= 100000000;
// temp_total_flow_u32_1 ++;0
//
// }
//// temp_total_flow_float = temp_total_flow_float/1000.0;
// gp22_test_data.total_flow.gp30_float = (float)temp_total_flow_u32_1*100 + ((float)(temp_total_flow_u32))/1000000.0;
// gp22_app_data.total_flow.gp30_float += temp_total_flow_float/1000000;
}
else
{
gp22_copy_total_flow = gp22_app_data.s.total_flow.gp30_float;//复位不丢数
gp22_copy_total_flow_reverse = gp22_app_data.s.total_flow_reverse.gp30_float;//2021 01,更改复位不丢数
gp22_copy_temp_total_flow_float_test = 0;
}
MCU_reset_judge = MCU_RESET_JUDGE_FLAG; //只有在赋值累计流量后,再置起来完全上电成功
}
}
/****************************************************************
Function: void gp22CheckErrEventApp (u8 err_event)
Description: 检测异常事件
Input:
Return:
Others:
// //Bit0当前流量>Q4或者<Q1、
// //Bit1水温超出温度等级范围
// //Bit2 GP30信号超时无水
// //Bit3 GP30故障
// //Bit4表装反
// //Bit5低流量报警
// //Bit6换能器老化
Bit0:当前流量>Q4或者<Q1 GP30_low_high_flow
Bit1:水温超出温度等级范围 GP30_out_temp
Bit2:倒转 GP30_reverse_flow
Bit3:无水 GP30_no_water
Bit4:GP30异常 GP30_err
Bit5:低流量报警 GP30_low_flow
Bit6:换能器接受信号低(低振幅) GP30_low_amp;
Bit7:GP30通信异常 GP30_communication_err
Bit8:TOF overrun GP30_TOF_overrun
*****************************************************************/
void gp22CheckErrEventApp (u8 err_event)
{
u8 sum_res = 0;
static u8 sum_reverse_clear = 0;
static u8 sum_no_water_clear = 0;
static u8 sum_water_diredtion_clear = 0;
static u8 sum_low_amp_clear = 0;
if(10 == LcdCheckStateApp()) //NORMAL
{
sum_res = GP30_APP_EVENT_SUM_NORMAL;
}
else
{
sum_res = GP30_APP_EVENT_SUM_TEST;
}
switch (err_event)
{
case GP30_communication_err:
gp30_event.communication_err++;
if(gp30_event.communication_err > sum_res)
{
gp30_event_flag.communication_err = TRUE;
gp30_event_save_flag.communication_err = TRUE;
}
break;
case GP30_no_water:
gp30_event.no_water++;
if(gp30_event.no_water > sum_res)
{
sum_no_water_clear=0;
gp30_event_flag.no_water = TRUE;
gp30_event_save_flag.no_water = TRUE;
}
break;
case GP30_low_flow:
gp30_event.low_flow++;
if(gp30_event.low_flow > sum_res)
{
gp30_event_flag.low_flow = TRUE;
gp30_event_save_flag.low_flow = TRUE;
}
break;
case GP30_out_temp:
gp30_event.out_temp++;
if(gp30_event.out_temp > sum_res)
{
gp30_event_flag.out_temp = TRUE;
gp30_event_save_flag.out_temp = TRUE;
}
break;
case GP30_low_high_flow:
gp30_event.low_high_flow++;
if(gp30_event.low_high_flow > sum_res)
{
gp30_event_flag.low_high_flow = TRUE;
gp30_event_save_flag.low_high_flow = TRUE;
}
break;
case GP30_reverse_flow:
// gp30_event.reverse_flow++;
// sum_reverse_clear = 0;
// if(gp30_event.reverse_flow > (sum_res+sum_res))
// {
// gp30_event_flag.reverse_flow = TRUE;
// gp30_event_save_flag.reverse_flow = TRUE;
// }
gp30_event.reverse_flow++;
if(gp30_event.reverse_flow > (sum_res+sum_res))
{
sum_reverse_clear = 0;
gp30_event.reverse_flow = 0;
gp30_event_flag.reverse_flow = TRUE;
gp30_event_save_flag.reverse_flow = TRUE;
}
break;
case GP30_TOF_overrun:
gp30_event.tof_overrun++;
if(gp30_event.tof_overrun > sum_res)
{
gp30_event_flag.tof_overrun = TRUE;
gp30_event_save_flag.tof_overrun = TRUE;
}
break;
case GP30_low_amp:
gp30_event.low_amp++;
if(gp30_event.low_amp > sum_res)
{
sum_low_amp_clear=0;
gp30_event_flag.low_amp = TRUE;
gp30_event_save_flag.low_amp = TRUE;
}
break;
case GP30_err:
gp30_event.gp30_err++;
if(gp30_event.gp30_err > sum_res)
{
gp30_event_flag.gp30_err = TRUE;
gp30_event_save_flag.gp30_err = TRUE;
}
break;
case GP30_water_direction:
gp30_event.water_direction_reverse++;
if(gp30_event.water_direction_reverse > sum_res)
{
gp30_event_flag.water_direction = TRUE;
sum_water_diredtion_clear= 0;
}
break;
case GP30_communication_err_DE:
gp30_event_flag.communication_err = FALSE;
gp30_event.communication_err = 0;
break;
case GP30_no_water_DE:
sum_no_water_clear++;
if(sum_no_water_clear > GP30_APP_EVENT_SUM_NORMAL)
{
sum_no_water_clear=0;
gp30_event_flag.no_water = FALSE;
gp30_event.no_water = 0;
}
break;
case GP30_low_flow_DE:
gp30_event_flag.low_flow = FALSE;
gp30_event.low_flow = 0;
break;
case GP30_out_temp_DE:
gp30_event_flag.out_temp = FALSE;
gp30_event.out_temp = 0;
break;
case GP30_low_high_flow_DE:
gp30_event_flag.low_high_flow = FALSE;
gp30_event.low_high_flow = 0;
break;
case GP30_reverse_flow_DE:
// if(TRUE == gp30_event_flag.reverse_flow)
{
sum_reverse_clear++;
if(sum_reverse_clear > GP30_APP_EVENT_SUM_NORMAL)
{
sum_reverse_clear = 0;
gp30_event_flag.reverse_flow = FALSE;
gp30_event.reverse_flow = 0;
}
}
break;
case GP30_TOF_overrun_DE:
gp30_event_flag.tof_overrun = FALSE;
gp30_event.tof_overrun = 0;
break;
case GP30_low_amp_DE:
sum_low_amp_clear++;
if(sum_low_amp_clear > GP30_APP_EVENT_SUM_NORMAL)
{
sum_low_amp_clear=0;
gp30_event_flag.low_amp = FALSE;
gp30_event.low_amp = 0;
}
break;
case GP30_err_DE:
gp30_event_flag.gp30_err = FALSE;
gp30_event.gp30_err = 0;
break;
case GP30_water_direction_DE:
sum_water_diredtion_clear++;
if(sum_water_diredtion_clear > GP30_APP_EVENT_SUM_NORMAL)
{
gp30_event_flag.water_direction = FALSE;
gp30_event.water_direction_reverse = 0;
sum_water_diredtion_clear = 0;
}
break;
case GP30_clear_all:
gp30_event.communication_err = 0;
gp30_event.no_water = 0;
gp30_event.low_flow = 0;
gp30_event.out_temp = 0;
gp30_event.low_high_flow = 0;
gp30_event.water_direction_reverse = 0;
// gp30_event_flag.trans_err = FALSE;
// gp30_event_flag.no_water = FALSE;
// gp30_event_flag.low_flow = FALSE;
// gp30_event_flag.out_temp = FALSE;
// gp30_event_flag.low_high_flow = FALSE;
gp30_event_save_flag.communication_err = FALSE;
gp30_event_save_flag.no_water = FALSE;
gp30_event_save_flag.low_flow = FALSE;
gp30_event_save_flag.out_temp = FALSE;
gp30_event_save_flag.low_high_flow = FALSE;
break;
default:
break;
}
}
/****************************************************************
Function: void gp22App (void)
Description: GP22数据计算处理机
Input:
Return:
Others:
*****************************************************************/
void Gp22App(void)
{
// u32 gp22_sample_result;
u8 gp22_err_result;
// u8 temp_flow_head;
// u32 temp_dif_time;
u8 i = 0;
u8 GP30_low_amp_cnt = 0;//每16个buffer中低振幅的次数
// static u8 s_diftof_overrun_num = 0;
// static u8 s_tdc_overrun_num = 0; //无水
// static u8 s_tof_overrun_num = 0;
// float temp_value_float = 0;
u32 *s_g_flow_data_pointer; //流量采集队列指针
u32 *s_g_flow_type_pointer; //流量采集队列指针
#if WENDU_FANSUAN_OPEN
u32 *s_g_tof_am_pointer; //获取单程时间和振幅值
#else
static u8 s_temp_sample_num = 0;
u32 sum_up_am=0,sum_down_am=0;//计算Up和Down振幅加和
u8 up_am_cnt=0,down_am_cnt=0;//统计符合合法范围的振幅值个数 2022-05-11
u32 *s_g_up_am_pointer; //UP振幅采集队列指针
u32 *s_g_down_am_pointer; //DOWN振幅采集队列指针
#endif
switch (s_g_gp22_app_state_num)
{
case GP22_APP_S0:
gp22_sample_result = Gp22CheckSampleMsg();
if (gp22_sample_result != BIT2) //未正在采样
{
// if((01 == LcdCheckStateApp()) && (0 == start_measure_flag)) //检定而且上位机不允许采样
// {
// Gp22ClearSampleMsg();
// TempStartTaskApp();//启动温度采集
// break;
// }
// else
// {
#if !WENDU_FANSUAN_OPEN
if(10== LcdCheckStateApp()) //非检定
{
s_temp_sample_num++;
if(0 == s_temp_sample_num % 3)
{
s_temp_sample_num = 0;
TempStartTaskApp();//启动温度采集
s_g_sample_flag = GP22_APP_FLOW_TEMP; //本次采集温度标志
}
}
else
{
TempStartTaskApp();//启动温度采集
s_g_sample_flag = GP22_APP_FLOW_TEMP; //本次采集温度标志
}
#endif
s_g_gp22_app_state_num = GP22_APP_S1;
// }
}
break;
case GP22_APP_S1:
if (0x01 == (gp22_sample_result & 0x01)) //采样成功
{
gp30_overrun_num.GP30_sample_err_num = 0 ;
Gp22ClearSampleMsg(); //清采样完成MSG
s_g_gp22_err_flag = 0;
gp22CheckErrEventApp(GP30_communication_err_DE);
Gp22DateBuf(&s_g_flow_data_pointer);
Gp22TypeBuf(&s_g_flow_type_pointer);
#if WENDU_FANSUAN_OPEN
Gp22_TOF_AM_Buf(&s_g_tof_am_pointer);
#else
Gp22DOWN_AM_Buf(&s_g_down_am_pointer);
Gp22UP_AM_Buf(&s_g_up_am_pointer);
#endif
for(i = 0;i < GP22_APP_QUEUE_SIZE;i++)
{
s_g_flow_data[i] = *(s_g_flow_data_pointer + i);
s_g_flow_type[i] = *(s_g_flow_type_pointer + i);
#if WENDU_FANSUAN_OPEN
Tof_And_AM_Data_Collect(i,s_g_tof_am_pointer[i]);//用于单程时间和振幅数据的采集
#else
if(i < GP22_APP_MAX_AM_BUFFER)
{
s_g_up_am[i] = *(s_g_up_am_pointer + i);
s_g_down_am[i] = *(s_g_down_am_pointer + i);
s_g_up_am[i] = (s_g_up_am[i] & 0x000000FFU) << 24 | (s_g_up_am[i] & 0x0000FF00U) << 8 | (s_g_up_am[i] & 0x00FF0000U) >> 8 | (s_g_up_am[i] & 0xFF000000U) >> 24; //大小端转换
s_g_down_am[i] = (s_g_down_am[i] & 0x000000FFU) << 24 | (s_g_down_am[i] & 0x0000FF00U) << 8 | (s_g_down_am[i] & 0x00FF0000U) >> 8 | (s_g_down_am[i] & 0xFF000000U) >> 24; //大小端转换
if(0x80000000 == (s_g_up_am[i] & 0x80000000)) //振幅为负:写为0
{
s_g_up_am[i] = 0;
}
if(0x80000000 == (s_g_down_am[i] & 0x80000000)) //振幅为负写为0
{
s_g_down_am[i] = 0;
}
if((s_g_up_am[i]>0)&&(s_g_up_am[i] < UP_AM_MAX))//UP振幅只计算(0~UP_AM_MAX)范围内的数据加和
{
sum_up_am += s_g_up_am[i];//计算有效UP振幅的总和
up_am_cnt++;//统计有效UP振幅的个数
}
if((s_g_down_am[i]>0)&&(s_g_down_am[i] < DOWN_AM_MAX))//DOWN振幅只计算(0~DOWN_AM_MAX)范围内的数据加和
{
sum_down_am += s_g_down_am[i];//计算有效DOWN振幅的总和
down_am_cnt++;//统计有效DOWN振幅的个数
}
}
#endif
s_g_flow_data[i] = (s_g_flow_data[i] & 0x000000FFU) << 24 | (s_g_flow_data[i] & 0x0000FF00U) << 8 | (s_g_flow_data[i] & 0x00FF0000U) >> 8 | (s_g_flow_data[i] & 0xFF000000U) >> 24; //大小端转换
// s_g_flow_type[i] = (s_g_flow_type[i] & 0x000000FFU) << 24 | (s_g_flow_type[i] & 0x0000FF00U) << 8 | (s_g_flow_type[i] & 0x00FF0000U) >> 8 | (s_g_flow_type[i] & 0xFF000000U) >> 24; //大小端转换 //type不用转换大小端
// +5 -2 -11 -1 -5 -11
// s_g_flow_data[i]=s_g_flow_data[i]-11;
if(TRUE == CheckDiftofCalibrationFlag())
{
s_g_flow_data[i]=s_g_flow_data[i] + g_diftof_cal_data.s.diftof_calibration_value.data;
// temp_value_float = TempCheckValueApp();
// if(temp_value_float > 35)
// {
// s_g_flow_data[i] = s_g_flow_data[i]-DIFTOF_HIGH_TEMP_CALIBRATION_VALUE;
// }
}
if(0x01000000 == (s_g_flow_type[i] & 0x01000000)) //正常DIFTOF数据
{
//如果时间差为负,把补码转换为原码
if(0x80000000 == (s_g_flow_data[i] & 0x80000000)) //时间差为负:符号位为1
{
s_g_flow_data[i] &= 0x7FFFFFFF;
s_g_flow_data[i] = (~s_g_flow_data[i]) + 1; //包括符号位的原码
gp22CheckErrEventApp(GP30_water_direction); //水流反向
}
else
{
gp22CheckErrEventApp(GP30_water_direction_DE);//
}
//时间差判断
if(((s_g_flow_data[i] > 0) && (s_g_flow_data[i] <= LIMIT_DIFTOF_FORWARD)) || ((s_g_flow_data[i] >= 0x80000000) && (s_g_flow_data[i] <= 0x80000107))) //0~700ns或者-1~0ns ——2019-3-9 计量范围-200-800ns
{
gp22CheckErrEventApp(GP30_reverse_flow_DE);
}
//小于1ns的逆流暂时不计量作为静水波动处理
//后续计量逆流时,需要考虑全流量范围的负数,需要修改此处 2019-3-11
else if((s_g_flow_data[i] > 0x80000107) && (s_g_flow_data[i] <= LIMIT_DIFTOF_REVERSE)) //-200ns ~ -1ns(需要低于最小流量时间差,注意不同口径) —— 2019-3-9 计量范围-200-800ns
{
gp22CheckErrEventApp(GP30_reverse_flow);
// if (01== LcdCheckStateApp()) //检定状态
// {
// if(TRUE == gp30_event_flag.reverse_flow)//连续次数后,判断真的倒转了,为了应对跳变,暂时不清零2018-12-17————改成DLY固件后连续多少次确定是逆流暂时逆流不计量清零2019-3-9
// {
// s_g_flow_data[i] = 0; //先暂时不计量逆流 2018-10-12 14:37:22
// }
// else //用上次数
// {
// if (0 == i)
// {
// s_g_flow_data[i] = s_g_flow_data[GP22_APP_QUEUE_SIZE-1];
// }
// else
// {
// s_g_flow_data[i] = s_g_flow_data[i-1];
// }
// }
// }
}
else if((s_g_flow_data[i] > LIMIT_DIFTOF_REVERSE) && (s_g_flow_data[i] <= 0x80040000)) //-1000ns ~ -100ns
{
s_g_flow_data[i] = 0x00040000-(s_g_flow_data[i]&0x7FFFFFFF);
}
else
{
if (0 == i)
{
s_g_flow_data[i] = s_g_flow_data[GP22_APP_QUEUE_SIZE-1];
}
else
{
s_g_flow_data[i] = s_g_flow_data[i-1];
}
}
StillWatetCalculate(s_g_flow_data[i]); //时间差
gp22CheckErrEventApp(GP30_err_DE);
gp22CheckErrEventApp(GP30_no_water_DE);
gp22CheckErrEventApp(GP30_TOF_overrun_DE);
gp30_overrun_num.tdc_overrun_num = 0;//无水
gp30_overrun_num.tof_overrun_num = 0;//TOF Overrun
gp30_overrun_num.diftof_overrun_num = 0; //清跳变累计次数
gp30_overrun_num.type_err_num = 0;//清GP30异常累计次数
Gp22ClearErrMsg(0);
Gp22ClearErrMsg(1);
}
/*
Norbert Breyer: 2019-3-9
1. No receive at all - TDC overrun
2. very small signal or noise, TDC gets triggered but amplitude very low - MIN_AMP error
TOF overrun as well
*/
else if(0x08000000 == (s_g_flow_type[i]&0x08000000)) //无水:TDC overrun
{
if(gp30_overrun_num.tdc_overrun_num >= GP22_APP_QUEUE_SIZE)
{
s_g_flow_data[i] = 0;
}
else
{
gp30_overrun_num.tdc_overrun_num++;
if (0 == i)
{
s_g_flow_data[i] = s_g_flow_data[GP22_APP_QUEUE_SIZE-1];
}
else
{
s_g_flow_data[i] = s_g_flow_data[i-1];
}
}
StillWatetCalculate(s_g_flow_data[i]); //时间差 2019-7-4 18:48:02
gp22CheckErrEventApp(GP30_no_water);
gp22CheckErrEventApp(GP30_water_direction_DE);//无水情况下,水流不反向
gp22CheckErrEventApp(GP30_reverse_flow_DE);
gp30_overrun_num.diftof_overrun_num = 0; //清跳变累计次数
gp30_overrun_num.type_err_num = 0;//清GP30异常累计次数
gp22CheckErrEventApp(GP30_err_DE);
Gp22ClearErrMsg(0);
Gp22ClearErrMsg(1);
}
else if(0x02000000 == (s_g_flow_type[i]&0x02000000)) //GP30_TOF_overrun
{
if(gp30_overrun_num.tof_overrun_num >= GP22_APP_QUEUE_SIZE)
{
s_g_flow_data[i] = 0;
}
else
{
gp30_overrun_num.tof_overrun_num++;
if (0 == i)
{
s_g_flow_data[i] = s_g_flow_data[GP22_APP_QUEUE_SIZE-1];
}
else
{
s_g_flow_data[i] = s_g_flow_data[i-1];
}
}
StillWatetCalculate(s_g_flow_data[i]); //时间差 2019-7-4 18:48:02
gp22CheckErrEventApp(GP30_TOF_overrun);
gp22CheckErrEventApp(GP30_err_DE);
gp22CheckErrEventApp(GP30_no_water); //TOF Overrun和无水 需要确认
gp22CheckErrEventApp(GP30_water_direction_DE);//置水流不反向
gp22CheckErrEventApp(GP30_reverse_flow_DE);
gp30_overrun_num.diftof_overrun_num = 0; //清跳变累计次数
gp30_overrun_num.type_err_num = 0;//清GP30异常累计次数
Gp22ClearErrMsg(0);
Gp22ClearErrMsg(1);
}
//跳变暂时单独判断
else if(0x04000000 == (s_g_flow_type[i]&0x04000000)) //GP30_DIFTOF overrun
{
//连续跳变的次数
gp30_overrun_num.diftof_overrun_num++;
// if(gp30_overrun_num.diftof_overrun_num >= (GP22_APP_QUEUE_SIZE + GP22_APP_QUEUE_SIZE))
// {
// //后续添加处理措施
// //先暂时复位GP30——如果检定start开始就跳变会丢一个buf的累积量——2018-11-28
// //正常状态下,不会丢累积量,因为上次数有
//
// gp30_overrun_num.diftof_overrun_num = 0;
//// #if defined(DLY_SWITCH)
//// Gp22AppSetGp22Err();
//// #endif
// }
// //如果时间差为负,把补码转换为原码
// if(0x80000000 == (s_g_flow_data[i] & 0x80000000)) //时间差为负:符号位为1
// {
// s_g_flow_data[i] &= 0x7FFFFFFF;
// s_g_flow_data[i] = (~s_g_flow_data[i]) + 1; //包括符号位的原码
// }
//
// if((s_g_flow_data[i] < 0x80080000) && (s_g_flow_data[i] >= 0x80053333)) //-2000~-1300ns
// {
// s_g_flow_data[i] &= 0x7FFFFFFF; //时间差转换为正
// s_g_flow_data[i] = 0x80000 - s_g_flow_data[i]; //2000-
// gp22CheckErrEventApp(GP30_reverse_flow_DE);
// }
// else if((s_g_flow_data[i] < 0x80040000) && (s_g_flow_data[i] >= 0x80013333)) //-1000~-300ns
// {
// s_g_flow_data[i] &= 0x7FFFFFFF; //时间差转换为正
// s_g_flow_data[i] = 0x40000 - s_g_flow_data[i]; //1000-
// gp22CheckErrEventApp(GP30_reverse_flow_DE);
// }
// else if((s_g_flow_data[i] > 0x40000) && (s_g_flow_data[i] <= 0x6CCCC)) //1000~1700ns
// {
// s_g_flow_data[i] -= 0x40000; //-1000ns
// gp22CheckErrEventApp(GP30_reverse_flow_DE);
// }
// else if((s_g_flow_data[i] > 0x80000) && (s_g_flow_data[i] <= 0xACCCC)) //2000~2700ns
// {
// s_g_flow_data[i] -= 0x80000; //-2000ns
// gp22CheckErrEventApp(GP30_reverse_flow_DE);
// }
// else
// {
//用上次值
if(gp30_overrun_num.diftof_overrun_num <= 3)
{
if (0 == i)
{
s_g_flow_data[i] = s_g_flow_data[GP22_APP_QUEUE_SIZE-1];
}
else
{
s_g_flow_data[i] = s_g_flow_data[i-1];
}
}
// }
StillWatetCalculate(s_g_flow_data[i]);
// gp22CheckErrEventApp(GP30_no_water_DE);
// gp22CheckErrEventApp(GP30_TOF_overrun_DE);
// gp30_overrun_num.tdc_overrun_num = 0;
// gp30_overrun_num.tof_overrun_num = 0;
}
else if((0x20000000 == (s_g_flow_type[i]&0x20000000)) || (0 == s_g_flow_type[i])) //GP30异常:GP30 cannot make valid DIFTOF measurements (internal error)
{
gp22CheckErrEventApp(GP30_err);
gp30_overrun_num.type_err_num++;
if (0 == i)
{
s_g_flow_data[i] = s_g_flow_data[GP22_APP_QUEUE_SIZE-1];
}
else
{
s_g_flow_data[i] = s_g_flow_data[i-1];
}
if(gp30_overrun_num.type_err_num >= (GP22_APP_QUEUE_SIZE))
{
gp30_overrun_num.type_err_num = 0;
if(FixedTimeNbIoTUploadIfIdle() == TASK_IDLE)//上报期间不调用GP30 初始化
{
Gp22ErrInit();
}
}
/*
gp22CheckErrEventApp(GP30_err);
// gp30_overrun_num.type_err_num++;
if(gp30_overrun_num.type_err_num >= (GP22_APP_QUEUE_SIZE*8))
{
// gp30_overrun_num.type_err_num = GP22_APP_QUEUE_SIZE*8;//待定---如果一直复位type_err_num一直++u8类型的会超范围用上次数会导致走数。
s_g_flow_data[i] = 0;
}
else
{
gp30_overrun_num.type_err_num++;
if (0 == i)
{
s_g_flow_data[i] = s_g_flow_data[GP22_APP_QUEUE_SIZE-1];
}
else
{
s_g_flow_data[i] = s_g_flow_data[i-1];
}
}*/
StillWatetCalculate(s_g_flow_data[i]); //时间差 2019-7-4 18:48:02
}
else
{
gp22CheckErrEventApp(GP30_err_DE);
// gp30_overrun_num.type_err_num = 0; //清type为0的次数
//用上次值
if (0 == i)
{
s_g_flow_data[i] = s_g_flow_data[GP22_APP_QUEUE_SIZE-1];
}
else
{
s_g_flow_data[i] = s_g_flow_data[i-1];
}
StillWatetCalculate(s_g_flow_data[i]);
}
/*
Having delay window only, no first hit level, the amplitude is the only measure to detect an empty tube.
I propose to set the MIN_AMP level to a very low value and to take this as empty tube detection.
*/
if(0x10000000 == (s_g_flow_type[i] & 0x10000000)) //判断是否低振幅
{
gp22CheckErrEventApp(GP30_low_amp);
GP30_low_amp_cnt++;
if(GP30_low_amp_cnt==GP22_APP_QUEUE_SIZE)
{
for(i = 0;i<GP22_APP_QUEUE_SIZE;i++)
{
s_g_flow_data[i] = 1; //2021-12-09
}
}
if (0 == i)//
{
if((s_g_flow_data[GP22_APP_QUEUE_SIZE-1]<=0x80000000)&&(s_g_flow_data[GP22_APP_QUEUE_SIZE-1]>=0x00006666))//时间差大于正向100ns
{
s_g_flow_data[i] = s_g_flow_data[GP22_APP_QUEUE_SIZE-1];
}
else
{
s_g_flow_data[i] = 1; //2021-12-09
}
}
else
{
if((s_g_flow_data[i-1]<=0x80000000)&&(s_g_flow_data[i-1]>=0x00006666))//时间差大于正向100ns
{
s_g_flow_data[i] = s_g_flow_data[i-1];
}
else
{
s_g_flow_data[i] = 1; //2021-12-09
}
}
}
else
{
gp22CheckErrEventApp(GP30_low_amp_DE);
}
}
#if WENDU_FANSUAN_OPEN
//Find_MaxValue_for_AM1(s_g_up_am,s_g_down_am,2*GP22_APP_TEMP_INVERSE_DATA_SIZE);//用于寻找6个振幅中最大的幅值对应的单程时间
//单程时间计算均值
Gp30_Tof_Collect_and_Deal();//对采集的振幅和单程时间进行数据的处理
gp22_test_data.s.peak_up=GetTemperatureCalculateParameter(UP_AM_AVERAGE);
gp22_test_data.s.peak_down=GetTemperatureCalculateParameter(DOWN_AM_AVERAGE);
#else
if(down_am_cnt!=0)
{
gp22_test_data.s.peak_down=sum_down_am/(down_am_cnt);
}
else
{
gp22_test_data.s.peak_down = 0;
}
if(up_am_cnt!=0)
{
gp22_test_data.s.peak_up=sum_up_am/(up_am_cnt);
}
else
{
gp22_test_data.s.peak_up = 0;
}
#endif
GP30_Set_Data_UpdateMsg();
gp22_app_data.s.peak_up=gp22_test_data.s.peak_up;
gp22_app_data.s.peak_down=gp22_test_data.s.peak_down;
// Gp22FilterCalculate(s_g_sample_flag); //GP22 滤波和采样
s_g_gp22_app_state_num = GP22_APP_S0;
}
else if (0x02 == (gp22_sample_result & 0x02)) //采样失败
{
gp30_overrun_num.GP30_sample_err_num++;
Gp22ClearSampleMsg(); //清采样完成MSG
gp22_err_result = Gp22CheckErrMsg();
// Gp22AppSetGp22Err(); 驱动层已经处理
if(gp30_overrun_num.GP30_sample_err_num >= 5)
{
gp30_overrun_num.GP30_sample_err_num = 5;
memset(s_g_flow_data, 0, sizeof(s_g_flow_data));
memset(s_g_flow_type, 0, sizeof(s_g_flow_type));
}
else
{
for(i = 0;i < GP22_APP_QUEUE_SIZE;i++)
{
if (0 == i)
{
s_g_flow_data[i] = s_g_flow_data[GP22_APP_QUEUE_SIZE-1];
}
else
{
s_g_flow_data[i] = s_g_flow_data[i-1];
}
}
StillWatetCalculate(s_g_flow_data[i]);
}
if(0x01 == (gp22_err_result & 0x01)) //Bit0 中断等待超时
{
gp22CheckErrEventApp(GP30_communication_err);
}
else if(0x02 == (gp22_err_result & 0x02)) //Bit1 通讯超时
{
gp22CheckErrEventApp(GP30_communication_err);
}
// Gp22FilterCalculate(s_g_sample_flag);
s_g_gp22_app_state_num = GP22_APP_S0;
}
break;
default:
break;
}
/******************************************************************************
*******************************************************************************/
// u32 gp22_sample_result;
// u8 gp22_err_result;
// u8 temp_flow_head;
// u32 temp_dif_time;
// u8 sample_flag = 0;
// switch (s_g_gp22_app_state_num)
// {
// case GP22_APP_S0:
// if(TASK_IDLE == Gp22IfIdle())
// {
// if ((BIT2 == (RtccCheckMsg() & BIT2))) //收到其中一个采样消息
// {
// RtccClearMsg(2);
// if((01 == LcdCheckStateApp()) && (0 == start_measure_flag)) //检定而且上位机不允许采样
// {
// break;
// }
// else
// {
// sample_flag = 1;
// }
// }
// }
// if (sample_flag) //收到其中一个采样消息
// {
// sample_flag = 0;
//// s_g_gp22_sample_flag_num++;
//// s_g_gp22_sample_flag_num = s_g_gp22_sample_flag_num % 5;
//// if(s_g_gp22_sample_flag_num == s_g_gp22_sample_span) //采样频率符合
// {
//// STM32_GPIO_TogglePin(GPIOE, STM32_GPIO_PIN_15);
//
//// s_g_gp22_sample_flag_num = 0;
//// if (s_g_sample_flow_num >= GP22_APP_SAMPLE_SIZE)
// {
//// s_g_sample_flow_num = 0;
// Gp22StartTask(GP22_APP_FLOW); //启动流量+温度
// TempStartTaskApp();//启动温度采集
// s_g_sample_flag = GP22_APP_FLOW_TEMP; //本次采集温度标志
// }
//// else
//// {
//// Gp22StartTask(GP22_APP_FLOW); //只启动流量
//// s_g_sample_flag = GP22_APP_FLOW; //本次没有采集温度标志
//// }
//// s_g_sample_flow_num++;
// s_g_gp22_app_state_num = GP22_APP_S1;
// }
// }
// break;
// case GP22_APP_S1:
// gp22_sample_result = Gp22CheckSampleMsg();
// if (1 == (gp22_sample_result & 0x01)) //采样完成
// {
// s_g_flow_data[s_g_sample_flow_head] = Gp22TimeDiffer(GP22_APP_FLOW_DIFFER_SIGN);///////改成带正负号的
// if((s_g_flow_data[s_g_sample_flow_head] >= 0x80000419))
// {
//// Nop();
//// Nop();
//// s_g_flow_err_sum = 0; //连续5次
// }
//
//// if(TRUE == gp30_event_flag.reverse_flow)//连续次数后,判断真的到转了
//// {
//// s_g_flow_data[s_g_sample_flow_head] = 0;
//// }
//
// StillWatetCalculate(s_g_flow_data[s_g_sample_flow_head]); //时间差 1/4
// s_g_sample_flow_head++;
// s_g_sample_flow_head %= GP22_APP_QUEUE_SIZE;
//// s_g_flow_err_sum = 0; //连续5次
// gp22CheckErrEventApp(GP30_no_water_DE); // 1/4 DE
// gp22CheckErrEventApp(GP30_reverse_flow_DE);
//
// s_g_gp22_err_flag = 0; //2018-7-12
// Gp22FilterCalculate(s_g_sample_flag); //GP22 滤波和采样
// s_g_gp22_app_state_num = GP22_APP_S0;
// }
// else if (2 == (gp22_sample_result & 0x02)) //采样失败
// {
// gp22_err_result = Gp22CheckErrMsg();
// if (1 == ((gp22_err_result >> 4)&0x01)) //时间差为负数
// {
// temp_dif_time = Gp22TimeDiffer(GP22_APP_FLOW_DIFFER);
// if ((temp_dif_time < 0x00040000) && (temp_dif_time > 0x00018F5C)) //发生跳变数据 0.39-1us
// {
// s_g_flow_data[s_g_sample_flow_head] = 0x00040000 - temp_dif_time;
// if((temp_dif_time >= 0x00040000))
// {
// // Nop();
// // Nop();
//// s_g_flow_err_sum = 0; //连续5次
// temp_dif_time = 0;
// }
// //倒转
// //gp22CheckErrEventApp(GP30_reverse_flow);
// // if(TRUE == gp30_event_flag.reverse_flow)//连续次数后,判断真的到转了
// // {
// // s_g_flow_data[s_g_sample_flow_head] = 0;
// // }
// ///////////////////////////////
// StillWatetCalculate(s_g_flow_data[s_g_sample_flow_head]); //时间差 2/4
//// s_g_flow_err_sum++;
//// if (s_g_flow_err_sum >= 5)
//// {
//// s_g_flow_err_sum = 0;
//// s_g_set_window = TRUE; //重新配置时间窗
//// }
// }
// else //装反处理,或者静水时间的负值
// {
// if ((temp_dif_time > 0x00000190) && (temp_dif_time <= 0x00018F5C)) //倒转范围内 使动0.0015-0.39us
// {
// gp22CheckErrEventApp(GP30_reverse_flow);
//// u32 temp111 = Gp22TimeDiffer(GP22_APP_FLOW_DIFFER_SIGN);
//// temp111 = temp111;
// StillWatetCalculate(float_differ_last_time); //时间差 3/4 2016-9-18 11:21:55 用上次值
// if(TRUE == gp30_event_flag.reverse_flow)//连续次数后,判断真的到转了
// {
// s_g_flow_data[s_g_sample_flow_head] = 0;
// }
// else //用上次数
// {
// if (0 == s_g_sample_flow_head)
// {
// s_g_flow_data[s_g_sample_flow_head] = s_g_flow_data[GP22_APP_QUEUE_SIZE-1];
// }
// else
// {
// temp_flow_head = s_g_sample_flow_head - 1;
// s_g_flow_data[s_g_sample_flow_head] = s_g_flow_data[temp_flow_head];
// }
// }
// }
// else
// {
// gp22CheckErrEventApp(GP30_reverse_flow_DE);
// StillWatetCalculate(Gp22TimeDiffer(GP22_APP_FLOW_DIFFER_SIGN)); //时间差 3/4
// s_g_flow_data[s_g_sample_flow_head] = 0;
// }
//// s_g_flow_err_sum = 0; //连续5次
// }
//
// s_g_gp22_err_flag = 0; //2018-7-12
//
// s_g_sample_flow_head++;
// s_g_sample_flow_head %= GP22_APP_QUEUE_SIZE;
// Gp22FilterCalculate(s_g_sample_flag); //GP22 滤波和采样
// }
// else if (1 == ((gp22_err_result >> 2)&0x01)) //信号超时(无水)
// {
// s_g_flow_data[s_g_sample_flow_head] = 0;
// s_g_sample_flow_head++;
// s_g_sample_flow_head %= GP22_APP_QUEUE_SIZE;
//// s_g_flow_err_sum = 0; //连续5次
//
// gp22CheckErrEventApp(GP30_no_water); // 1/4
// gp22CheckErrEventApp(GP30_reverse_flow_DE);
//
// s_g_gp22_err_flag = 0; //2018-7-12
// Gp22FilterCalculate(s_g_sample_flag); //GP22 滤波和采样
// }
// if ((16 != gp22_err_result) && (4 != gp22_err_result)) //短路、断路、GP22故障
// {
//// gp22_app_data.in_temp = 0;
//// gp22_app_data.s.ins_flow = 0;
//// gp22_app_data.ins_power = 0;
//// gp22_app_data.out_temp = 0;
//// gp22_test_data.in_temp = 0;
//// gp22_test_data.s.ins_flow = 0;
//// gp22_test_data.ins_power = 0;
//// gp22_test_data.out_temp = 0;
//
//// gp22CheckErrEventApp(GP30_trans_err); // 2/4
//
//
// s_g_flow_data[s_g_sample_flow_head] = 0;
// s_g_sample_flow_head++;
// s_g_sample_flow_head %= GP22_APP_QUEUE_SIZE;
// Gp22FilterCalculate(s_g_sample_flag); //GP22 滤波和采样
// /*************************/
//// s_g_flow_err_sum = 0; //连续5次
//
//// if(0 != gp22_err_result)
//// {
//// Gp22AppSetGp22Err();
//// }
// }
// s_g_gp22_app_state_num = GP22_APP_S0;
// }
// else if (4 == (gp22_sample_result & 0x04)) //完成,但是有气泡
// {
// if (0 == s_g_sample_flow_head)
// {
// s_g_flow_data[s_g_sample_flow_head] = s_g_flow_data[GP22_APP_QUEUE_SIZE-1];
// }
// else
// {
// temp_flow_head = s_g_sample_flow_head - 1;
// s_g_flow_data[s_g_sample_flow_head] = s_g_flow_data[temp_flow_head];
// }
// StillWatetCalculate(s_g_flow_data[s_g_sample_flow_head]); //时间差 4/4
// s_g_sample_flow_head++;
// s_g_sample_flow_head %= GP22_APP_QUEUE_SIZE;
//// s_g_flow_err_sum = 0; //连续5次
// Gp22FilterCalculate(s_g_sample_flag); //GP22 滤波和采样
//
// s_g_gp22_err_flag = 0; //2018-7-12
// s_g_gp22_app_state_num = GP22_APP_S0;
// }
// break;
// default:
// break;
// }
//if (FrameCheckMsgApp(GP22_APP_STILL_WATER_FRAME)) //上位机需要查询静水时间差
//////////////////////////////////////////////////////////////////////////////////////////////////
// if (Gp22CheckMeasureMsg())
// {
// if (01 == LcdCheckStateApp()) //检定状态
// {
// //FrameClearMsgApp(GP22_APP_STILL_WATER_FRAME);
// Gp22ClearMeasureMsg();
// s_g_still_finish = FALSE;
// s_g_still_flag = TRUE;
// s_g_still_time = 0;
// }
// }
}
/****************************************************************
Function: void Gp22AppSetGp22Err (void)
Description: 2018-8-6
Input:
Return:
Others:
*****************************************************************/
void Gp22AppSetGp22Err (void)
{
if(s_g_gp22_err_flag < 10)
{
// if(GP22_S2 != s_gp22_machine_state)//把GP30连接线断开,GP30的驱动会啊卡死在S2状态
// {
s_g_gp22_err_flag++;//2018-8-9增加GP22通信异常防护
// }
Gp22ErrInit();
}
else
{
// if(1 == LcdCheckStateApp()) //检定状态
// {
// FrameSetMsgApp(OutVerificationMsg);//FrameExitTest();
// }
// FrameSetMsgApp(BootloaderMsg);
// NVIC_SystemReset(); //reset //重启
Gp30Sleep();
}
}
/****************************************************************
Function: void Gp22AppClearData (void)
Description: GP22数据清零处理机
Input:
Return:
Others: 不清零静水时间差
*****************************************************************/
void Gp22AppClearData(void)
{
u8 i;
static u8 ee_write_result_clear_data;
switch (s_g_gp22_app_clear_data_state_num)
{
case GP30_APP_CLEAR_DATA_S0:
{
if (1 == FrameCheckMsgApp(ClearRealtimeDataMsg)) //上位机清表数据消息
{
FrameClearMsgApp(ClearRealtimeDataMsg); //清MSG
for (i = 0; i < GP22_APP_QUEUE_SIZE; i++)
{
s_g_flow_data[i] = 0;
}
// s_g_sample_flow_head = 0;
// s_g_sample_flow_num = 0;
duoble_total_flow.gp30_double = 0;
gp22_app_data.s.total_flow.gp30_u32 = 0;
gp22_app_data.s.total_flow_reverse.gp30_u32 = 0;
gp22_test_data.s.total_flow.gp30_u32 = 0;
gp22_test_data.s.total_flow_reverse.gp30_u32 = 0;
total_flow_old.gp30_float = 0;
gp22_copy_total_flow = 0;
gp22_copy_total_flow_reverse = 0;
gp22_copy_total_flow_test=0;
gp22_copy_temp_total_flow_float_test=0;
Gp22AppDataPre();
if (EepIfIdle())
{
EepWrite(&g_sample_save_data.data[0], GP30_APP_DATA_ADDR, sizeof (GP30_APP_SAVE_DATA), &ee_write_result_clear_data);
s_g_gp22_app_clear_data_state_num = GP30_APP_CLEAR_DATA_S0;
gp22CheckErrEventApp(GP30_clear_all);//每个整点全部清除报警记录信息
}
else
{
s_g_gp22_app_clear_data_state_num = GP30_APP_CLEAR_DATA_S1;
}
}
}
break;
case GP30_APP_CLEAR_DATA_S1:
if (EepIfIdle())
{
EepWrite(&g_sample_save_data.data[0], GP30_APP_DATA_ADDR, sizeof (GP30_APP_SAVE_DATA), &ee_write_result_clear_data);
s_g_gp22_app_clear_data_state_num = GP30_APP_CLEAR_DATA_S0;
gp22CheckErrEventApp(GP30_clear_all);//每个整点全部清除报警记录信息
}
break;
default:
break;
}
}
/****************************************************************
Function: void Gp22AppSaveData (void)
Description: GP22数据备份处理机
Input:
Return:
Others:
*****************************************************************/
void Gp22AppSaveData(void)
{
static u8 ee_write_result_save_data = 0;
float temp_diff;
switch (s_g_gp22_app_save_data_state_num)
{
case GP30_APP_SAVE_S0:
RtccSetTimer(RTCC_TIMER_GP30_NUM, SAMPLE_INTERVAL_1h);
s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S1;
break;
case GP30_APP_SAVE_S1:
//定时存储、不休眠存储、远程升级、下初值、看门狗(暂未实现)
if ((0 == RtccCheckTimer(RTCC_TIMER_GP30_NUM)) || (TRUE == PowerSaveDataMsgSys()) || (1== FrameCheckMsgApp(BootloaderMsg))||Gp30_init_data_flag || (TRUE == CheckAutoCalibrationMsg())||(TRUE == WDTWakeUpIfReset())
#if WENDU_FANSUAN_OPEN
|| (TempInverseCheckMsgApp(TofCaliberateMsg)==TRUE)//用于存储单程时间校准补偿系数标志
#endif
)//清零状态或者数据存储状态
{
if (EepIfIdle())
{
#if WENDU_FANSUAN_OPEN
TempInverseClearMsgApp(TofCaliberateMsg);//清零存储变量标志!!!
#endif
if(0 == RtccCheckTimer(RTCC_TIMER_GP30_NUM)) //定时存储
{
temp_diff = gp22_app_data.s.total_flow.gp30_float - gp30_total_flow_last.gp30_float;
if((temp_diff > (float)1)||(temp_diff < (float)-1)) //超过10L才存储
{
gp30_total_flow_last.gp30_float = gp22_app_data.s.total_flow.gp30_float;
Gp22AppDataPre();
EepWrite(&g_sample_save_data.data[0], GP30_APP_DATA_ADDR, sizeof (GP30_APP_SAVE_DATA), &ee_write_result_save_data);
s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S6;
}
else
{
s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S0;
}
}
else if(TRUE == CheckAutoCalibrationMsg())
{
diftof_auto_calibration_msg = FALSE;
EepWrite(&g_diftof_cal_data.data[8], DIFTOF_CALIBRATION_VALUE_ADDR, 4, &s_gp30_eep_complete);
}
else
{
Gp30_init_data_flag = FALSE;
Gp22AppDataPre();
EepWrite(&g_sample_save_data.data[0], GP30_APP_DATA_ADDR, sizeof (GP30_APP_SAVE_DATA), &ee_write_result_save_data);
s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S6;
}
}
}
break;
// case GP30_APP_SAVE_S2: //shijian 1
//// if (gp30_event.trans_err >= GP30_APP_EVENT_SUM)
// if (TRUE == gp30_event_save_flag.trans_err)
// {
// if (EepIfIdle())
// {
// RtccGetDateTime(&gp30_get_time);
// s_g_event_data.s.time[0] = gp30_get_time.s.year;
// s_g_event_data.s.time[1] = gp30_get_time.s.month;
// s_g_event_data.s.time[2] = gp30_get_time.s.day;
// s_g_event_data.s.time[3] = gp30_get_time.s.hour;
// s_g_event_data.s.time[4] = gp30_get_time.s.minute;
// s_g_event_data.s.time[5] = gp30_get_time.s.second;
// s_g_event_data.s.total_flow.gp30_u32 = Gp30CheckDataApp(GP30_APP_TOTAL_FLOW);
// s_g_event_data.s.state = FrameCheckByte();
// EepWrite(&s_g_event_data.s.time[0], GP30_APP_TRANS_ERR_ADDR, sizeof (GP30_APP_EVENT_DATA), &ee_write_result_save_data);
//// gp30_event.trans_err = 0;
// s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S3;
// }
// }
// else
// {
// s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S3;
// }
// break;
// case GP30_APP_SAVE_S3: //shijian 2
//// if (gp30_event.no_water >= GP30_APP_EVENT_SUM)
// if (TRUE == gp30_event_save_flag.no_water)
// {
// if (EepIfIdle())
// {
// RtccGetDateTime(&gp30_get_time);
// s_g_event_data.s.time[0] = gp30_get_time.s.year;
// s_g_event_data.s.time[1] = gp30_get_time.s.month;
// s_g_event_data.s.time[2] = gp30_get_time.s.day;
// s_g_event_data.s.time[3] = gp30_get_time.s.hour;
// s_g_event_data.s.time[4] = gp30_get_time.s.minute;
// s_g_event_data.s.time[5] = gp30_get_time.s.second;
// s_g_event_data.s.total_flow.gp30_u32 = Gp30CheckDataApp(GP30_APP_TOTAL_FLOW);
// s_g_event_data.s.state = FrameCheckByte();
// EepWrite(&s_g_event_data.s.time[0], GP30_APP_NO_WATER_ADDR, sizeof (GP30_APP_EVENT_DATA), &ee_write_result_save_data);
//// gp30_event.no_water = 0;
// s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S4;
// }
// }
// else
// {
// s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S4;
// }
// break;
// case GP30_APP_SAVE_S4: //shijian 3
//// if (gp30_event.low_flow >= GP30_APP_EVENT_SUM)
// if (TRUE == gp30_event_save_flag.low_flow)
// {
// if (EepIfIdle())
// {
// RtccGetDateTime(&gp30_get_time);
// s_g_event_data.s.time[0] = gp30_get_time.s.year;
// s_g_event_data.s.time[1] = gp30_get_time.s.month;
// s_g_event_data.s.time[2] = gp30_get_time.s.day;
// s_g_event_data.s.time[3] = gp30_get_time.s.hour;
// s_g_event_data.s.time[4] = gp30_get_time.s.minute;
// s_g_event_data.s.time[5] = gp30_get_time.s.second;
// s_g_event_data.s.total_flow.gp30_u32 = Gp30CheckDataApp(GP30_APP_TOTAL_FLOW);
// s_g_event_data.s.state = FrameCheckByte();
// EepWrite(&s_g_event_data.s.time[0], GP30_APP_LOW_FLOW_ADDR, sizeof (GP30_APP_EVENT_DATA), &ee_write_result_save_data);
//// gp30_event.low_flow = 0;
// s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S5;
// }
// }
// else
// {
// s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S5;
// }
// break;
// case GP30_APP_SAVE_S5: //shijian 4
//// if (gp30_event.out_temp >= GP30_APP_EVENT_SUM)
// if (TRUE == gp30_event_save_flag.out_temp)
// {
// if (EepIfIdle())
// {
// RtccGetDateTime(&gp30_get_time);
// s_g_event_data.s.time[0] = gp30_get_time.s.year;
// s_g_event_data.s.time[1] = gp30_get_time.s.month;
// s_g_event_data.s.time[2] = gp30_get_time.s.day;
// s_g_event_data.s.time[3] = gp30_get_time.s.hour;
// s_g_event_data.s.time[4] = gp30_get_time.s.minute;
// s_g_event_data.s.time[5] = gp30_get_time.s.second;
// s_g_event_data.s.total_flow.gp30_u32 = Gp30CheckDataApp(GP30_APP_TOTAL_FLOW);
// s_g_event_data.s.state = FrameCheckByte();
// EepWrite(&s_g_event_data.s.time[0], GP30_APP_OUT_TEMP_ADDR, sizeof (GP30_APP_EVENT_DATA), &ee_write_result_save_data);
//// gp30_event.out_temp = 0;
// s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S6;
// }
// }
// else
// {
// s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S6;
// }
// break;
case GP30_APP_SAVE_S6:
if (EepIfIdle()) //每个整点全部清除报警记录信息
{
gp22CheckErrEventApp(GP30_clear_all);//每个整点全部清除报警记录信息
if (1 == FrameCheckMsgApp(BootloaderMsg))
{
FrameClearMsgApp(BootloaderMsg);
s_g_bootloader_msg = TRUE;
}
if ((TRUE == PowerSaveDataMsgSys())||(TRUE == WDTWakeUpIfReset()))
{
Meter_ResetCountAdd(0x01);
NVIC_SystemReset(); //reset //重启
}
s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S0;
}
break;
default:
break;
}
}
/*
*
*
*
*
*
*
* 接口设计
*
*
*
*
*
*
*/
/****************************************************************
Function: void Gp22SaveDataMotinor(void)
Description: GP22数据存储防护
Input:
Return:
Others:
*****************************************************************/
void Gp22SaveDataMotinor(void)
{
To_Float_GP30 gp22_temp_flow;
switch (gp22_date_save_state)
{
case GP22_APP_MONITOR_S(0):
{
RtccSetTimer(TIMER_DATE_SAVE_MONITOR, 60); //1min
gp22_date_save_state = GP22_APP_MONITOR_S(1);
break;
}
case GP22_APP_MONITOR_S(1):
{
if(0==RtccCheckTimer(TIMER_DATE_SAVE_MONITOR))
{
gp22_temp_flow.gp30_u32 = Gp30CheckDataApp(2);
if( (0==FrameCheckMsgApp(InitialDataMsg)) && ((gp22_temp_flow.gp30_float - old_monitor_flow.gp30_float) > (float)150) )//按30立方米每小时流量做限制
{
gp22_app_data.s.total_flow.gp30_float = old_monitor_flow.gp30_float;
duoble_total_flow.gp30_double = gp22_app_data.s.total_flow.gp30_float;
}
else
{
FrameClearMsgApp(InitialDataMsg);
old_monitor_flow.gp30_float = gp22_temp_flow.gp30_float;
}
gp22_date_save_state = GP22_APP_MONITOR_S(0);
}
break;
}
default:
{
break;
}
}
}
/***********************基于温度的流量补偿系数计算****************
Function: flow_coefficient_calculate
Input: target_temperature ---目标温度 source_temperature--源温度就是常温系数修正为1 Compensation_factor补偿因子
Return: 目标温度平滑后对应的流量补偿系数
Others: 源温度18℃~35℃ 补偿系数为+1
****************************************************************/
float temperature_coefficient_calculate(float target_temperature,float Compensation_factor)
{
float flow_coefficient_value = 1;
float k = 0,b = 0;
float temperature_diff = 0,source_temperature = 0; //温度差值
if(target_temperature>=46)
{
target_temperature = (float)46;//超过46度按照46度进行计算
temperature_diff = (float)11;
source_temperature = (float)35;
}
else if((target_temperature>35)&&(target_temperature<46))
{
temperature_diff = (float)11;
source_temperature = (float)35;
}
else if((target_temperature>15)&&(target_temperature<18))
{
temperature_diff = (float)-3;
source_temperature = (float)18;
}
else if(target_temperature<=15)
{
target_temperature = (float)15;//小于15度按照15度进行计算
temperature_diff = (float)-3;
source_temperature = (float)18;
}
if(temperature_diff!=0)
{
k = (Compensation_factor-1)/(temperature_diff);
b = 1 - k*source_temperature;
flow_coefficient_value = k*target_temperature + b;
}
return flow_coefficient_value;
}
/***********************基于流量的流量补偿系数计算****************
Function: flow_coefficient_calculate
Input: target_temperature ---目标温度 Compensation_factor_source对应的补偿因子 Compensation_factor_target对应的补偿因子 ins_flow_temp_float:当前的流速
Return: 目标流量平滑后对应的流量补偿系数
Others: 只适用与1.3的R250Q2~0.33Q3流量范围
****************************************************************/
float flow_coefficient_calculate(float target_temperature,float Compensation_factor_source,float Compensation_factor_target,float ins_flow_temp_float)
{
float flow_coefficient_value = 1;
float k = 0,b = 0,x=0;
float flow_diff = 0,temp_Compensation_factor_source = 0,temp_Compensation_factor_target = 0;
if(ins_flow_temp_float > (R250Q2*(float)2))
{
flow_diff = Q3_6_6 - R250Q2*(float)2;//计算流量差值
x = R250Q2*(float)2;
}
else
{
flow_diff = R250Q2*(float)2 - R250Q2*(float)1.3;//计算流量差值
x = R250Q2*(float)1.3;
}
temp_Compensation_factor_source = temperature_coefficient_calculate(target_temperature,Compensation_factor_source);//
temp_Compensation_factor_target = temperature_coefficient_calculate(target_temperature,Compensation_factor_target);//
k = (temp_Compensation_factor_target-temp_Compensation_factor_source)/(flow_diff);
b = temp_Compensation_factor_source - k*x;
flow_coefficient_value = k*ins_flow_temp_float + b;
return flow_coefficient_value;
}
/***********************流量系数防护****************
Function: ProtectFrameCheckParaApp(u32 parameter, u8 flag)
Description: 判断系数是否在合法区间内
Input: 流量系数
Return: 流量系数
****************************************************************/
u32 ProtectParaApp(u32 parameter)
{
if((parameter < FLOW_COEFFICIENT_MIN)||(parameter > FLOW_COEFFICIENT_MAX))
{
FrameSetMsgApp(BootloaderMsg);
parameter = 65536;//返回默认系数1 (放大65536倍)
}
return parameter;
}
/***********************流量计算****************
Function: float modify_flow( float ins_flow_temp_float)
Description:
Input: 瞬时流量 ins_flow_temp_float
Return:
Others:
****************************************************************/
float modify_flow( float ins_flow_temp_float)
{
float flow_temp_float,temp_value_float;
seg_flow_coef = Read_Flow_CofficientApp();//2020-07-08
temp_value_float = TempCheckValueApp();//读取瞬时温度
if(temp_value_float<(float)18)
{
if((temp_value_float>(float)15)&&(temp_value_float<(float)18))//曲线过度
{
if((ins_flow_temp_float>0)&&(ins_flow_temp_float <= R400Q1 + R400Q1*(float)0.3))
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[0].datas)));
}
else if(ins_flow_temp_float <= R400Q2 + R400Q2*(float)0.3)
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[1].datas)));
}
else if(ins_flow_temp_float <= R250Q2 + R250Q2*(float)0.3)
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[2].datas)));
}
else if(ins_flow_temp_float <= R250Q2*(float)2)
{
if(65536==seg_flow_coef[3].datas)
{
flow_temp_float = ins_flow_temp_float * flow_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[2].datas)),Gp30DataToFloat(ProtectParaApp(seg_flow_coef[3].datas)),ins_flow_temp_float);
}
else
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[3].datas)));
}
}
else if(ins_flow_temp_float <= Q3_3_3)//0.33 * Q3
{
if(65536==seg_flow_coef[3].datas)
{
flow_temp_float = ins_flow_temp_float * flow_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[3].datas)),Gp30DataToFloat(ProtectParaApp(seg_flow_coef[4].datas)),ins_flow_temp_float);
}
else
{
flow_temp_float = ins_flow_temp_float * Gp30DataToFloat(ProtectParaApp(seg_flow_coef[3].datas));
}
}
else if(ins_flow_temp_float <= Q3_6_6)//0.66 * Q3
{
flow_temp_float = ins_flow_temp_float *Gp30DataToFloat(ProtectParaApp(seg_flow_coef[4].datas));
}
else
{
flow_temp_float = ins_flow_temp_float *Gp30DataToFloat(ProtectParaApp(seg_flow_coef[5].datas));
}
}
else
{
if((ins_flow_temp_float>0)&&(ins_flow_temp_float <= R400Q1 + R400Q1*(float)0.3))
{
flow_temp_float = ins_flow_temp_float *Gp30DataToFloat(ProtectParaApp(seg_flow_coef[0].datas));
}
else if(ins_flow_temp_float <= R400Q2 + R400Q2*(float)0.3)
{
flow_temp_float = ins_flow_temp_float *Gp30DataToFloat(ProtectParaApp(seg_flow_coef[1].datas));
}
else if(ins_flow_temp_float <= R250Q2 + R250Q2*(float)0.3)
{
flow_temp_float = ins_flow_temp_float * Gp30DataToFloat(ProtectParaApp(seg_flow_coef[2].datas));
}
else if(ins_flow_temp_float <= R250Q2*(float)2)
{
if(65536==seg_flow_coef[3].datas)
{
flow_temp_float = ins_flow_temp_float * flow_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[2].datas)),Gp30DataToFloat(ProtectParaApp(seg_flow_coef[3].datas)),ins_flow_temp_float);
}
else
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[3].datas)));
}
}
else if(ins_flow_temp_float <= Q3_3_3)//0.33 * Q3
{
if(65536==seg_flow_coef[3].datas)
{
flow_temp_float = ins_flow_temp_float * flow_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[3].datas)),Gp30DataToFloat(ProtectParaApp(seg_flow_coef[4].datas)),ins_flow_temp_float);
}
else
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[4].datas)));
}
}
else if(ins_flow_temp_float <= Q3_6_6)//0.66 * Q3
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[4].datas)));
}
else
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[5].datas)));
}
}
}
else if(temp_value_float<(float)35)
{
if((ins_flow_temp_float>0)&&(ins_flow_temp_float <= R400Q1 + R400Q1*(float)0.3))
{
flow_temp_float = ins_flow_temp_float * Gp30DataToFloat(ProtectParaApp(seg_flow_coef[6].datas));
}
else if(ins_flow_temp_float <= R400Q2 + R400Q2*(float)0.3)
{
flow_temp_float = ins_flow_temp_float * Gp30DataToFloat(ProtectParaApp(seg_flow_coef[7].datas));
}
else if(ins_flow_temp_float <= R250Q2 + R250Q2*(float)0.3)
{
flow_temp_float = ins_flow_temp_float * Gp30DataToFloat(ProtectParaApp(seg_flow_coef[8].datas));
}
else if(ins_flow_temp_float <= Q3_3_3)//0.33 * Q3
{
flow_temp_float = ins_flow_temp_float * Gp30DataToFloat(ProtectParaApp(seg_flow_coef[9].datas));
}
else if(ins_flow_temp_float <= Q3_6_6)//0.66 * Q3
{
flow_temp_float = ins_flow_temp_float * Gp30DataToFloat(ProtectParaApp(seg_flow_coef[10].datas));
}
else
{
flow_temp_float = ins_flow_temp_float * Gp30DataToFloat(ProtectParaApp(seg_flow_coef[11].datas));
}
}
else
{
if((temp_value_float>(float)35)&&(temp_value_float<(float)46))//曲线过度
{
if((ins_flow_temp_float>0)&&(ins_flow_temp_float <= R400Q1 + R400Q1*(float)0.3))
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[12].datas)));
}
else if(ins_flow_temp_float <= R400Q2 + R400Q2*(float)0.3)
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[13].datas)));
}
else if(ins_flow_temp_float <= R250Q2 + R250Q2*(float)0.3)
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[14].datas)));
}
else if(ins_flow_temp_float <= R250Q2*(float)2)
{
if(65536==seg_flow_coef[15].datas)
{
flow_temp_float = ins_flow_temp_float * flow_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[14].datas)),Gp30DataToFloat(ProtectParaApp(seg_flow_coef[15].datas)),ins_flow_temp_float);
}
else
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[15].datas)));
}
}
else if(ins_flow_temp_float <= Q3_3_3)//0.33 * Q3
{
if(65536==seg_flow_coef[15].datas)
{
flow_temp_float = ins_flow_temp_float * flow_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[15].datas)),Gp30DataToFloat(ProtectParaApp(seg_flow_coef[16].datas)),ins_flow_temp_float);
}
else
{
flow_temp_float = ins_flow_temp_float * Gp30DataToFloat(ProtectParaApp(seg_flow_coef[15].datas));
}
}
else if(ins_flow_temp_float <= Q3_6_6)//0.66 * Q3
{
flow_temp_float = ins_flow_temp_float *Gp30DataToFloat(ProtectParaApp(seg_flow_coef[16].datas));
}
else
{
flow_temp_float = ins_flow_temp_float *Gp30DataToFloat(ProtectParaApp(seg_flow_coef[17].datas));
}
}
else
{
if((ins_flow_temp_float>0)&&(ins_flow_temp_float <= R400Q1 + R400Q1*(float)0.3))
{
flow_temp_float = ins_flow_temp_float *Gp30DataToFloat(ProtectParaApp(seg_flow_coef[12].datas));
}
else if(ins_flow_temp_float <= R400Q2 + R400Q2*(float)0.3)
{
flow_temp_float = ins_flow_temp_float *Gp30DataToFloat(ProtectParaApp(seg_flow_coef[13].datas));
}
else if(ins_flow_temp_float <= R250Q2 + R250Q2*(float)0.3)
{
flow_temp_float = ins_flow_temp_float * Gp30DataToFloat(ProtectParaApp(seg_flow_coef[14].datas));
}
else if(ins_flow_temp_float <= R250Q2*(float)2)
{
if(65536==seg_flow_coef[15].datas)
{
flow_temp_float = ins_flow_temp_float * flow_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[14].datas)),Gp30DataToFloat(ProtectParaApp(seg_flow_coef[15].datas)),ins_flow_temp_float);
}
else
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[15].datas)));
}
}
else if(ins_flow_temp_float <= Q3_3_3)//0.33 * Q3
{
if(65536==seg_flow_coef[15].datas)
{
flow_temp_float = ins_flow_temp_float * flow_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[15].datas)),Gp30DataToFloat(ProtectParaApp(seg_flow_coef[16].datas)),ins_flow_temp_float);
}
else
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[15].datas)));
}
}
else if(ins_flow_temp_float <= Q3_6_6)//0.66 * Q3
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[16].datas)));
}
else
{
flow_temp_float = ins_flow_temp_float *temperature_coefficient_calculate(temp_value_float,Gp30DataToFloat(ProtectParaApp(seg_flow_coef[17].datas)));
}
}
}
return flow_temp_float;
}
/*************************************************
Function: void FlowIntvalTimeLPTimer(void)
Description: 用于获取检定状态下两次计量的时间间隔
Input
Return:
Others:
*************************************************/
void FlowIntvalTimeLPTimer(void)
{
// static u16 test_temp[50] = {0};
// static u16 test_temp1=0;
u16 temp = 0;//读取两次,防止累计误差
temp = (u16)LPTimer1GetTick();
intval_time = (u16)(temp - record_calculative_time);
// test_temp[test_temp1]=intval_time;
// test_temp1++;
// if(50==test_temp1)
// {
// test_temp1=0;
// }
// if(0x200!=intval_time)
// {
// u8 a=1;
// }
record_calculative_time = temp;
if(intval_time >= 0x500)//如果间隔大于10s认为异常使用6s
{
intval_time = 0x300;
}
}
/*************************************************
Function: void RecordCalculativeIntvalTimeLPTimer(void)
Description: 用于记录距离上次计算累积量的间隔时间,方便复位后精确补偿
Input
Return:
Others:
*************************************************/
void RecordCalculativeIntvalTimeLPTimer(void)
{
record_last_calculative_time = (u16)(LPTimer1GetTick() - record_calculative_time);
if(record_last_calculative_time >= 0x500)//如果间隔大于10s认为异常使用1s
{
if(01 == LcdCheckStateApp())//检定取0.5 ----实际测试
{
record_last_calculative_time = 0x80;
}
else//非检定
{
record_last_calculative_time = 0x300;//按照6s计算
}
}
}
/***********************任务建立接口***************************
Function: void Gp22MachineApp (void)
Description: 应用层建立任务接口
Input:
Return:
Others:
*****************************************************************/
void Gp30MachineApp(void)
{
Gp22SampleApp();
Gp22App();
RecordCalculativeIntvalTimeLPTimer();
if(10 == LcdCheckStateApp())//非检定
{
switch (s_g_gp30_control_cal_state)
{
case GP30_CONTROL_S0:
{
if(0x08 == (RtccCheckMsg() & 0x08))//不上报就用RTC+GP30中断计算流量
{
if(TRUE== GP30_Check_Data_UpdateMsg())
{
RtccClearMsg(3);
GP30_Clear_Data_UpdateMsg();
FlowIntvalTimeLPTimer();
s_g_gp30_control_cal_timer = Timer1usGetTick(); //内部时钟时间轴获取计算时间
Gp22FilterCalculate(s_g_sample_flag);
if(FixedTimeNbIoTUploadIfIdle() == TASK_BUSY)//上报期间用GP30中断计算流量
{
s_gp22_cal_interval_msg = TRUE;
s_g_gp30_control_cal_state = GP30_CONTROL_S1; // 内部时钟时间轴
}
}
}
break;
}
case GP30_CONTROL_S1:
{
if(TRUE== GP30_Check_Data_UpdateMsg())
{
RtccClearMsg(3);
GP30_Clear_Data_UpdateMsg();
FlowIntvalTimeLPTimer();
intval_time = Timer1usGetTick() - s_g_gp30_control_cal_timer; //重新初始化intval_time计算间隔
s_g_gp30_control_cal_timer = Timer1usGetTick();
if(intval_time > 10000000)
{
intval_time = 2000000;
}
Gp22FilterCalculate(s_g_sample_flag);
//if((FixedTimeNbIoTUploadIfIdle() == TASK_IDLE)&&(0==gp22_app_data.s.ins_flow))//是在上报完成基础上而且是静水
if(FixedTimeNbIoTUploadIfIdle() == TASK_IDLE)//上报完成
{
s_g_gp30_control_cal_state = GP30_CONTROL_S0; //LPTIMER时间轴
s_gp22_cal_interval_msg = FALSE;
}
}
break;
}
}
}
else if((01 == LcdCheckStateApp())&&(TRUE == GetLpTimerFlag()))//检定 该模式下用lptimer进行0.5s定时中断
{
s_alarma_stop_check_tick=Timer1usGetTick();
if(TRUE== GP30_Check_Data_UpdateMsg())
{
GP30_Clear_Data_UpdateMsg();
ClearLpTimerFlag();
FlowIntvalTimeLPTimer();
Gp22FilterCalculate(s_g_sample_flag);
FrameClearMsgApp(MsgRtccAdjustTime);//清校时消息,该消息是防止检定0.5s超时复位用的
}
}
else if((01 == LcdCheckStateApp())&&((Timer1usGetTick() - s_alarma_stop_check_tick) >= ALARMA_STOP_CHECK_TICKS))//检定闹钟flag如果超时不置位则补偿置位间隔时间的流量并且表计重启
{
if(FrameCheckMsgApp(MsgRtccAdjustTime) == 0)//如果不是校时引起的RTC中断延长一下,则复位
{
if(FixedTimeNbIoTUploadIfIdle() == TASK_IDLE)//如果NB模组没有工作
{
#if (HARDWARE_VERSION==0x18)//圆壳表主板
gp22_test_data.s.total_flow.gp30_float=gp22_copy_total_flow_test + (((float)record_last_calculative_time/(float)128)+(float)0.33)*gp22_copy_temp_total_flow_float_test;//1s的累积量
gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + (((float)record_last_calculative_time/(float)128)+(float)0.33)*gp22_copy_temp_total_flow_float_test/(float)1000;
#elif (HARDWARE_VERSION==0x14)//方壳表主板
gp22_test_data.s.total_flow.gp30_float=gp22_copy_total_flow_test + (((float)record_last_calculative_time/(float)128)+(float)0.35)*gp22_copy_temp_total_flow_float_test;//1s的累积量
gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + (((float)record_last_calculative_time/(float)128)+(float)0.35)*gp22_copy_temp_total_flow_float_test/(float)1000;
#endif
duoble_total_flow.gp30_double = gp22_app_data.s.total_flow.gp30_float;
Meter_ResetCountAdd(0x02);
NVIC_SystemReset();
}
}
else
{
FrameClearMsgApp(MsgRtccAdjustTime);//清校时消息,该消息是防止检定0.5s超时复位用的
}
}
Gp22AppClearData();
Gp22AppSaveData();
//SendDataApp();
Gp22SaveDataMotinor();
#if WENDU_FANSUAN_OPEN
FanSuan_Caliberate_Timeout();//单程时间校准超时防护函数
#endif
}
/****************************************************************
Function: void Gp22InitApp (void)
Description: 应用层初始化函数
Input:
Return:
Others:
*****************************************************************/
void Gp30InitApp(void)
{
gp30_event_flag.low_flow = FALSE;
gp30_event_flag.no_water = FALSE;
gp30_event_flag.out_temp = FALSE;
gp30_event_flag.communication_err = FALSE;
s_g_gp22_sample_app_state_num = GP22_APP_SAMPLE_S0; //采样间隔
s_g_gp22_app_state_num = GP22_APP_S0; // GP22数据计算处理机
s_g_gp22_app_clear_data_state_num = GP30_APP_CLEAR_DATA_S0; //数据清零处理机
s_g_gp22_app_save_data_state_num = GP30_APP_SAVE_S0; //数据备份
gp22_date_save_state = GP22_APP_MONITOR_S(0);
// ////////////////////////////////////////////////////////////////
// ///////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////test
// gp22_app_data.s.total_flow.gp30_float = 1200;
// ////////////////////////////////////////////////////////////////
// ///////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////
while (!g_gp22_init_flag)
{
EepMachineDriver(); //EE处理机
FrameMachineApp();
Gp22AppInitProcess();
}
// if(GP30_filter_last_value>GP30_DIFTOF_FILTER_ENABLE_MAX_VALUE)
// {
// GP30_filter_last_value=0;
// }
// if((0x33!=gp30_error_restart_flag)&&(0x77!=gp30_error_restart_flag))
// {
// gp30_error_restart_flag=0x33;//0x33表示GP30异常可以复位表计一次
// }
//软件复位+非第一次上电时温度的合法性判断2021-03-13
if(TRUE == RAMDataVerify((u8*)&temp_calculate_last,sizeof(temp_calculate_last))||\
(temp_calculate_last<0)||(temp_calculate_last>60))
{
temp_calculate_last = (float)20;//上电情况下默认20摄氏度
}
if((GP30_COPY_RESET_NORMAL_FLAG!=gp22_copy_reset_flag_test)&&(GP30_COPY_RESET_TEST_FLAG!=gp22_copy_reset_flag_test))
{
gp22_copy_reset_flag_test=GP30_COPY_RESET_NORMAL_FLAG;//0x55表示非检定的标志
temp_calculate_last = (float)20;//硬件复位下默认20度
}
if(GP30_COPY_RESET_TEST_FLAG==gp22_copy_reset_flag_test)//检定状态复位
{
Gp22SetSampleRateMsg(16); //采样频率16Hz
FrameSetMsgApp(SetVerificationMsg);//设定为检定状态
}
else
{
gp22_copy_total_flow_test=0;
gp22_copy_temp_total_flow_float_test=0;
}
}
/****************************************************************
Function: u16 Gp30CheckErrDataApp (void)
Description: 查询错误信息
Input:
Return:
Others:
Bit0:当前流量>Q4或者<Q1 GP30_low_high_flow
Bit1:水温超出温度等级范围 GP30_out_temp
Bit2:倒转 GP30_reverse_flow
Bit3:无水 GP30_no_water
Bit4:GP30异常 GP30_err
Bit5:低流量报警 GP30_low_flow
Bit6:换能器接受信号低(低振幅) GP30_low_amp;
Bit7:GP30通信异常 GP30_communication_err
Bit8:TOF overrun GP30_TOF_overrun
Bit9:水流方向 water_reverse
*****************************************************************/
u16 Gp30CheckErrDataApp(void)
{
u16 temp_flag = 0;
temp_flag = ( (gp30_event_flag.low_high_flow<<0)|
(gp30_event_flag.out_temp<<1)|
(gp30_event_flag.reverse_flow<<2)|
(gp30_event_flag.no_water<<3) |
(gp30_event_flag.gp30_err<<4) |
(gp30_event_flag.low_flow<<5)|
(gp30_event_flag.low_amp<<6) |
(gp30_event_flag.communication_err<<7)|
(gp30_event_flag.tof_overrun<<8)|
(gp30_event_flag.water_direction<<9));
return temp_flag;
}
/***********************查询当前数据(系统数据)*****************
Function: u32 Gp30CheckDataApp (u8)
Description: 查询当前系统实时数据
Input:
输入参数对应返回值:
1//瞬时流量
2//累计流量
3//温度
4//up单程时间
5//up脉冲宽度比
6//up峰值
7//down单程时间
8//down脉冲宽度比
9//down峰值
10//时间差
Return: 输入参数对应返回值4字节补码数据格式
Others:
****************************************************************/
u32 Gp30CheckDataApp(u8 data_para)
{
switch (data_para)
{
case 1:
return (gp22_app_data.s.ins_flow);
case 2:
if(gp22_app_data.s.total_flow.gp30_float<0)
{
gp22_app_data.s.total_flow.gp30_float=0;
duoble_total_flow.gp30_double = gp22_app_data.s.total_flow.gp30_float;
}
return (gp22_app_data.s.total_flow.gp30_u32);
case 3:
if(gp22_app_data.s.total_flow_reverse.gp30_float<0)
{
gp22_app_data.s.total_flow_reverse.gp30_float=0;
}
return (gp22_app_data.s.total_flow_reverse.gp30_u32);
case 4:
return (gp22_app_data.s.TOF_up);
case 5:
return (gp22_app_data.s.ratio_up);
case 6:
return (gp22_app_data.s.peak_up);
case 7:
return (gp22_app_data.s.TOF_down);
case 8:
return (gp22_app_data.s.ratio_down);
case 9:
return (gp22_app_data.s.peak_down);
case 10:
return (gp22_app_data.s.TOF_diff);
case 11:
return (gp22_app_data.s.up_tof_dif.gp30_u32);//校准时的UP单程时间校准差值*1000 将us转化为ns
case 12:
return (gp22_app_data.s.down_tof_dif.gp30_u32);//校准时的DOWN单程时间校准差值*1000 将us转化为ns
default:
return (0xffffffff);
}
}
u32 Gp30CheckTestDataApp(u8 data_para)
{
switch (data_para)
{
case 1:
return (gp22_test_data.s.ins_flow);
case 2:
return (gp22_test_data.s.total_flow.gp30_u32);
case 3:
return (gp22_test_data.s.total_flow_reverse.gp30_u32);
case 4:
#if WENDU_FANSUAN_OPEN
gp22_test_data.s.TOF_up = GetTemperatureCalculateParameter(TOF_UP);
#endif
return (gp22_test_data.s.TOF_up);
case 5:
return (gp22_test_data.s.ratio_up);
case 6:
return (gp22_test_data.s.peak_up);
case 7:
#if WENDU_FANSUAN_OPEN
gp22_test_data.s.TOF_down = GetTemperatureCalculateParameter(TOF_DOWN);
#endif
return (gp22_test_data.s.TOF_down);
case 8:
return (gp22_test_data.s.ratio_down);
case 9:
return (gp22_test_data.s.peak_down);
case 10:
return (gp22_test_data.s.TOF_diff);
case 12:
return ( s_g_sample_sum_lcd);
default:
return (0xffffffff);
}
}
/***********************启动停止测量*****************
Function: void Gp30StartMeasureApp (u8 flag)
Description: 启动/停止流量测量
Input:
Return: flag1 启动流量测量 0停止流量测量
Others:
****************************************************************/
void Gp30StartMeasureApp (u8 flag)
{
u16 i;
float temp_max =s_g_temp_data[0], temp_min =s_g_temp_data[0];
start_measure_flag = flag;
s_g_sample_start_flag=flag;
if(flag) //启动时才清
{
#if WENDU_FANSUAN_OPEN
if(FrameCheckMsgApp(MsgCaliberate))//获取校准标志-----1: 表示允许校准 0不允许校准
{
GP30_tof_buchang_filter(START_CALIBREATE);
}
#endif
for (i = 0; i < GP22_APP_DIFTOF_SIZE; i++)
{
s_g_diftof_data[i] = 0;
}
for (i = 0; i < GP22_APP_DIFTOF_SIZE_2; i++)
{
s_g_diftof_data_2[i] = 0;
}
#if EN_LARGE_FILITER
for (i = 0; i < GP22_APP_DIFTOF_SIZE_3; i++)
{
s_g_diftof_data_3[i] = 0;
}
s_g_diftof_head_3_quotient=0;
s_g_diftof_head_3 = 0;
#endif
// s_g_sample_flow_head = 0;
s_g_diftof_head = 0;
s_g_diftof_head_2 = 0;
s_g_diftof_head_2_quotient=0;
s_g_sample_total_sum = 0;
s_g_diftof_for_total = FALSE;
// s_g_sample_total_sum = 0;
// s_g_sample_add = 0;
gp22_app_data.s.ins_flow = 0;
gp22_test_data.s.ins_flow = 0;
gp22_test_data.s.ins_flow_cnt = 0;//瞬时流量每计算一次就加1次
gp22_test_data.s.ins_flow_sum = 0;//瞬时流量累计和
gp22_test_data.s.ins_flow_sum_temp = 0;//
gp22_app_data.s.ins_flow_max = 0;//
gp22_app_data.s.ins_flow_min = 0;
/*配合水台子*/
for(i=0;i<MAX_TEMP_NUM;i++)
{
s_g_temp_data[i]=0;//给温度值采集数组赋初值零
}
s_g_sample_head=0;//数值采样头节点清零
s_g_sample_length=0;//采样数组长度清零
s_g_sample_ok_flag=0;//采样完成标志清?
temp_sample_value=0; //温度滤波值清零
}
else
{
#if WENDU_FANSUAN_OPEN
FrameClearMsgApp(MsgCaliberate);//清零 单程时间校准校准标志
GP30_tof_buchang_filter(STOP_CALIBREATE);//开始计算单程时间补偿数值
#endif
if(s_g_sample_length>3)
{
//1、进行温度滤波 方法:去除最大和最小值 然后剩下数据取平均值
for(i=0;i<s_g_sample_length;i++)
{
if((s_g_temp_data[i]>=temp_max))
{
temp_max = s_g_temp_data[i];
}
if((s_g_temp_data[i]<=temp_min))
{
temp_min = s_g_temp_data[i];
}
temp_sample_value+=s_g_temp_data[i];//将采集的温度滤波数值进行求和
}
temp_sample_value=(temp_sample_value-temp_max-temp_min)/(s_g_sample_length-2);//1、温度滤波均值 2、存储温度滤波均值
s_g_sample_length=0;//采样数组长度清零
s_g_sample_ok_flag=1;//采样完成标志置1
}
else //用实时温度值
{
s_g_sample_length=0;//采样数组长度清零
s_g_sample_ok_flag=0;//采样完成标志清零
temp_sample_value=0;//温度滤波数值清零
}
}
}
/***********************查询模块是否允许休眠*****************
Function: u8 Gp30IfSleepApp (void)
Description: 查询模块是否允许休眠
Input:
Return: SLEEP_TRUE1 允许休眠 SLEEP_FALSE0 不允许休眠
Others:
****************************************************************/
u8 Gp30IfSleepApp(void)
{
if ((s_g_gp30_control_cal_state == GP30_CONTROL_S0)&&(s_g_gp22_app_clear_data_state_num == GP30_APP_CLEAR_DATA_S0) && (s_g_gp22_app_save_data_state_num == GP30_APP_SAVE_S1) &&
((s_g_gp22_app_state_num == GP22_APP_S0) &&(0x04 == (Gp22CheckSampleMsg()&0x04))))
{
return TRUE;
}
return FALSE;
}
/***********************下初值(系统数据)*************************
Function: u8 Gp30InitDataApp (u32 total_flow, u32 negative_total_flow)
Description: 下初值(系统数据):正向流量,逆向流量
Input:
Return: TRUE:正常 FALSE初值不合法
Others:
****************************************************************/
u8 Gp30InitDataApp(u32 total_flow, u32 negative_total_flow)
{
gp22_app_data.s.total_flow.gp30_float = (float)(total_flow);//(float)bcdToHex32(total_flow);
duoble_total_flow.gp30_double = gp22_app_data.s.total_flow.gp30_float;
total_flow_old.gp30_float = gp22_app_data.s.total_flow.gp30_float;
gp22_copy_total_flow = gp22_app_data.s.total_flow.gp30_float;//2017 02,更改复位不丢数
// if(0x00002B1A==FrameCheckParaApp(FramePara_CCFlow)) //方式2
// {
gp22_app_data.s.total_flow_reverse.gp30_float = (float)(negative_total_flow);//(float)bcdToHex32(negative_total_flow);
// }
// else
// {
// gp22_app_data.s.total_flow_reverse.gp30_float = 0;
// }
gp22_copy_total_flow_reverse = gp22_app_data.s.total_flow_reverse.gp30_float;//2017 02,更改复位不丢数
Gp30_init_data_flag = TRUE;
return TRUE;
}
/************************************************
Function: void Gp30DiftofCalibration(void)
Description: 用于计算零流量校准补偿的时间差值
Input:
Return:
Others:
****************************************************************/
void Gp30DiftofCalibration(void)
{
float diftof_value=0;
// temp_value_float = TempCheckValueApp();//获取当前温度值
// diftof_value = (float)0.0010128*temp_value_float*temp_value_float - (float)0.0045999*temp_value_float - (float)0.30159;//不同温度下时间差变化量做了条曲线输入温度求出此温度下时间差应该被校准为多少ns
// diftof_value = diftof_value/(float)250;//转化为程序里的GP30格式
if(TRUE == CheckDiftofCalibrationFlag())
{
if(0x80000000 == (g_diftof_cal_data.s.diftof_calibration_value.data & (0x80000000)))//补偿值为负
{
calibration_diftof_value += Gp30DataToFloat(~(g_diftof_cal_data.s.diftof_calibration_value.data)+1);//已开启校准则还原原始时间差
}
else //补偿值为正
{
calibration_diftof_value -= Gp30DataToFloat(g_diftof_cal_data.s.diftof_calibration_value.data);//已开启校准则还原原始时间差
}
// if(temp_value_float > (float)35)
// {
// calibration_diftof_value += DIFTOF_HIGH_TEMP_CALIBRATION_VALUE_FLOAT;//温度大于35时间差提高1500ps还原由于温度大于35度而减少的1500ps的时间差
// }
}
diftof_value = -calibration_diftof_value;//计算时间差补偿值
if((diftof_value<DIFTOF_CALIBRATION_MIN)||(diftof_value>DIFTOF_CALIBRATION_MAX))//0.04=10ns/250 如果校准值大于10ns或者小于-10ns则不校准
{
return;
}
if(diftof_value<0)
{
diftof_value = -diftof_value;
g_diftof_cal_data.s.diftof_calibration_value.data = ~(FloatToGp30Data(diftof_value)-1);//转化为GP30格式
}
else
{
g_diftof_cal_data.s.diftof_calibration_value.data = FloatToGp30Data(diftof_value);//转化为GP30格式
}
}
/************************************************
Function: u8 CheckAutoCalibrationMsg(void)
Description: 检查零流量自动校准标志
Input:
Return: diftof_auto_calibration_msg
Others:
****************************************************************/
u8 CheckAutoCalibrationMsg(void)
{
return diftof_auto_calibration_msg;
}
/************************************************
Function: u8 CheckTransducerErrorMsg(void)
Description: 检查换能器是否冻坏标志
Input:
Return: transducer_err_msg
Others:
****************************************************************/
u8 CheckTransducerErrorMsg(void)
{
return transducer_err_msg;
}
/************************************************
Function: u8 CheckDiftofCalibrationFlag(void)
Description: 检查零流量校准开启标志
Input:
Return: True or False
Others:
****************************************************************/
u8 CheckDiftofCalibrationFlag(void)
{
if(DIFTOF_CALIBRATION_FLAG ==g_diftof_cal_data.s.diftof_calibration_flag.data)
{
return TRUE;
}
return FALSE;
}
/************************************************
Function: void Gp30TestFlowInit(void)
Description: 进入检定状态后,清除初始值
Input:
Return:
Others:
****************************************************************/
//void Gp30TestFlowInit(void)
//{
// u8 i;
// gp30_test_total_start_flow.gp30_u32 = gp22_app_data.s.total_flow.gp30_u32;
// for (i = 0; i < GP30_APP_MAX_DATA; i++)
// {
// gp22_test_data.data[i] = 0;
// }
//}
/************************************************
Function: void VerificationResetCompensation(void)
Description: 检定复位补偿
Input:
Return:
Others:
****************************************************************/
//void VerificationResetCompensation(void)
//{
// if((gp22_copy_temp_total_flow_float_test<(float)0)||(gp22_copy_temp_total_flow_float_test >(float)1500)||(gp22_copy_total_flow_test < (float)0))
// {
// gp22_copy_temp_total_flow_float_test = 0;//保证
// gp22_copy_total_flow_test = 0;
// }
// if(Reset_GetFlag(ResetFlagMskWdt)) //如果是没及时喂狗导致的复位
// {
// Reset_ClearFlag(ResetFlagMskWdt);//清除看门狗复位源
// gp22_test_data.s.total_flow.gp30_float=gp22_copy_total_flow_test+gp22_copy_temp_total_flow_float_test*(float)4.0;
// gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + (float)4.0*gp22_copy_temp_total_flow_float_test/(float)1000;
// }
// else//其他情况的复位
// {
// gp22_test_data.s.total_flow.gp30_float=gp22_copy_total_flow_test+gp22_copy_temp_total_flow_float_test*(float)4.2;
// gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + (float)4.2*gp22_copy_temp_total_flow_float_test/(float)1000;
// }
//}
/************************************************
Function: void NormalResetCompensation(void)
Description: 非检定复位补偿
Input:
Return:
Others:
****************************************************************/
void NormalResetCompensation(void)
{
if((gp22_copy_reset_flag_test == GP30_COPY_RESET_NORMAL_FLAG)&&(MCU_RESET_JUDGE_FLAG == MCU_reset_judge)) //非断电复位,且复位前是非检定
{
if(TRUE == RAMDataVerify((u8*)&gp22_copy_temp_total_flow_float,sizeof(gp22_copy_temp_total_flow_float))||\
(gp22_copy_temp_total_flow_float<(float)0)||(gp22_copy_temp_total_flow_float>(float)56))//按照1000 000L/h计算 得到最大的瞬时累积量为560L
{
gp22_copy_temp_total_flow_float =0;
}
if(gp22_app_data.s.total_flow.gp30_float<(float)0)
{
gp22_app_data.s.total_flow.gp30_float = 0;
}
if(TRUE == RAMDataVerify((u8*)&record_last_calculative_time,sizeof(record_last_calculative_time)))
{
record_last_calculative_time = 0;
}
#if (HARDWARE_VERSION==0x18)//圆壳表主板
if(FrameCheckMsgApp(Msg_WdtReset)) //如果是没及时喂狗导致的复位
{
FrameClearMsgApp(Msg_WdtReset);//清除看门狗复位源
gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + (((float)record_last_calculative_time/(float)256)+(float)1.27)*gp22_copy_temp_total_flow_float; //2s的累积量 1.55-1.34-1.32-1.3
}
else
{
gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + (((float)record_last_calculative_time/(float)256)+(float)0.21)*gp22_copy_temp_total_flow_float; //0.58-0.36-0.2-0.21
}
#elif (HARDWARE_VERSION==0x14)//方壳表主板
if(FrameCheckMsgApp(Msg_WdtReset)) //如果是没及时喂狗导致的复位
{
FrameClearMsgApp(Msg_WdtReset);//清除看门狗复位源
gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + (((float)record_last_calculative_time/(float)256)+(float)1.25)*gp22_copy_temp_total_flow_float; // 1.6-
}
else
{
gp22_app_data.s.total_flow.gp30_float = gp22_app_data.s.total_flow.gp30_float + (((float)record_last_calculative_time/(float)256)+(float)0.25)*gp22_copy_temp_total_flow_float;// 0.7
}
#endif
duoble_total_flow.gp30_double = gp22_app_data.s.total_flow.gp30_float;
}
}
/***************************************************************
Function: u8 Gp30CheckBootloaderMsgApp (void)
Description:
Input:
Return:
Others:
****************************************************************/
u8 Gp30CheckBootloaderMsgApp(void)
{
if (s_g_bootloader_msg)
{
s_g_bootloader_msg = FALSE;
return TRUE;
}
return FALSE;
}
/***************************************************************
Function: u8 Gp30GetTestRamFlag (void)
Description: 获取检定状态下是否复位标志
Input:
Return:
Others:
****************************************************************/
u32 Gp30GetTestRamFlag(void)
{
return gp22_copy_reset_flag_test;
}
/*2021-06-04
用于检测GP30中断标志用于计算累积量的时候判断中断是否产生
*/
u8 GP30_Check_Data_UpdateMsg(void)
{
return s_gp22_Data_Update_msg;
}
void GP30_Set_Data_UpdateMsg(void)
{
s_gp22_Data_Update_msg=1;
}
void GP30_Clear_Data_UpdateMsg(void)
{
s_gp22_Data_Update_msg=0;
}
/****************************************************************
Function: void DiftofForTestbench(float temp_ins_flow_float)
Description: 计算瞬时流量的平均值
Input:
Return: 无
*****************************************************************/
void DiftofForTestbench(float temp_ins_flow_float)
{
if(0 == start_measure_flag) //检定状态,且上位机不允许采样
{
return;
}
gp22_test_data.s.ins_flow_cnt++;
if(1 == gp22_test_data.s.ins_flow_cnt%20)
{
gp22_app_data.s.ins_flow_max = temp_ins_flow_float;
gp22_app_data.s.ins_flow_min = temp_ins_flow_float;
}
if(temp_ins_flow_float > gp22_app_data.s.ins_flow_max)
{
gp22_app_data.s.ins_flow_max = temp_ins_flow_float;
}
if(temp_ins_flow_float < gp22_app_data.s.ins_flow_min)
{
gp22_app_data.s.ins_flow_min = temp_ins_flow_float;
}
gp22_test_data.s.ins_flow_sum_temp += temp_ins_flow_float; //阶段累加
if(( gp22_test_data.s.ins_flow_cnt%20>=3 )||( 0 == gp22_test_data.s.ins_flow_cnt%20))
{
temp_ins_flow_float = (gp22_test_data.s.ins_flow_sum+(gp22_test_data.s.ins_flow_sum_temp - gp22_app_data.s.ins_flow_max-gp22_app_data.s.ins_flow_min))/(gp22_test_data.s.ins_flow_cnt-((gp22_test_data.s.ins_flow_cnt+17)/20)*2);
// 公式中(gp22_test_data.s.ins_flow_cnt-((gp22_test_data.s.ins_flow_cnt+17)/20)*2 不能约分17的取值范围17、18、19
}
else
{
temp_ins_flow_float = (gp22_test_data.s.ins_flow_sum+(gp22_test_data.s.ins_flow_sum_temp ))/(gp22_test_data.s.ins_flow_cnt-(gp22_test_data.s.ins_flow_cnt/20)*2);// '/10=/20*2
}
if(0 == gp22_test_data.s.ins_flow_cnt%20)
{
gp22_test_data.s.ins_flow_sum += gp22_test_data.s.ins_flow_sum_temp - gp22_app_data.s.ins_flow_max-gp22_app_data.s.ins_flow_min;//gp22_test_data.s.ins_flow_sum_temp总累积量
gp22_test_data.s.ins_flow_sum_temp = 0;//gp22_test_data.s.ins_flow_sum_temp20次积量
}
// gp22_test_data.s.ins_flow_cnt++;
// gp22_test_data.s.ins_flow_sum += temp_ins_flow_float;//瞬时流量累加和
// temp_ins_flow_float = gp22_test_data.s.ins_flow_sum / (float)gp22_test_data.s.ins_flow_cnt;//每次计算瞬时流量平均值
if(gp22_test_data.s.ins_flow_cnt>INS_FLOW_CAL_CNT_MAX)//超过30分钟瞬时流量重新开始记录
{
gp22_test_data.s.ins_flow_cnt = 0;
gp22_test_data.s.ins_flow_sum = 0;
gp22_test_data.s.ins_flow_sum_temp = 0;
gp22_test_data.s.ins_flow_max = 0;
gp22_test_data.s.ins_flow_min = 0;
}
gp22_test_data.s.ins_flow = FloatToGp30Data(temp_ins_flow_float);
gp22_app_data.s.ins_flow = gp22_test_data.s.ins_flow;
Gp22EventCheckApp(gp22_test_data.s.ins_flow); //事件记录的检测与清除
}
#ifdef __cplusplus
}
#endif //#ifdef __cplusplus