基于查表法的水流量算法设计与实现

写在前面

本文分享的是一种基于查表法的水流量的算法方案设计与实现,算法简单易懂,主要面向初学者,有两个目的:一是给初学者一些算法设计的思路引导;二是引导初学者学习怎样用C语言编程实现。

一、设计需求

  1. 基于“1990年国际温标纯水密表”,通过查表法求出水密度,下图是表的部分截图。
    请添加图片描述

  2. 线性信号(电磁流量计、4-20mA 输出涡街)流量公式:

q = q m a x ⋅ x A ⋅ k ρ q=q_{max}\cdot x_A \cdot k_\rho q=qmaxxAkρ

式中:
q m a x q_{max} qmax:满量程流量,单位与瞬时流量相同。
x A x_A xA:测量流量的模拟信号,0~100% (来自差压变送器未开方信号)。
k ρ k_\rho kρ:为补偿信号(无补偿设为1.0)。

k ρ = ρ i ρ d k_\rho=\frac{\rho_i}{\rho_d} kρ=ρdρi

式中:
ρ i \rho_i ρi:水的工作密度根据测量的温度也是查表得到,kg/m3。
ρ d \rho_d ρd:设计状态下蒸汽、水的密度(见生产单位出厂计算书),kg/m3。

注:蒸汽应有三个数表 (下面三个表均按照《1967IFC公式》)
(1)过热蒸汽密度表;
(2)饱和蒸汽(以压力自变量)密度表;
(3)饱和蒸汽(以温度自变量)密度表;
数表范围大小可根据用户适用范围确定。

二、算法分析

  • 问题1 q m a x q_{max} qmaxqmax的值是多少?

    :设定值 0~999999999。

  • 问题2:差压变送器的信号是什么?从哪里获得?

    :4~20mA,变送器输出。

  • 问题3:是否需要补偿信号?若需要回答以下问题。

    :需要补偿(更精确)

  • 问题4:计算 ρ i \rho_i ρi需要的“表”请提供。

    :查阅文献,下载表。

  • 问题5 ρ d \rho_d ρd的值是多少?

    :设定值0~999999999。

  • 问题6:本项目是水还是蒸汽?若是蒸汽则用哪个表,请提供表。

    :电磁测量的是水,按水的密度表。

三、算法实现

  • 实现语言:C语言
  • 测试环境:VSCode + GCC

程序包括三个文档,如下表:

文件名称包含函数功能
main.cmain()主函数,在该函数内编写测试用例
flowrate.c(1)LinearFlowRate()
(2)GetDensity()
(3)Search_Bin
(4)Destroy()
(5)Creat_SeqFromTab>
(1)求水的线性信号流量
(2)求密度,被LinearFlowRate调用
(3)在有序表中折半查找
(4)释放空间
(5)创建有序表
flowrate.hLinearFlowRate函数声明在H文件中声明的函数,可以被外部调用。

部分源码如下:
flowrate.c

/******************************************************************************************/
//功    能:求水的线性信号流量
//参    数:setQmax:满量程流量,单位与瞬时流量相同,人为设定,取值0~999999999
//	  	 	setDensity:设置状态下蒸汽、水的密度,单位kg/m3,人为设定,取值0~999999999
//	  		transmitterSignal:测量流量的模拟信号,取值0~100%,由4~20mA,压差变送器输出
//	  		temperature:实际采集的温度值
//返 回 值:实际的流量值
//作    者:MJY@二进制
//修改时间:2023-12-11
/*****************************************************************************************/
float LinearFlowRate(long setQmax,long setDensity, float transmitterSignal, float temperature )
{
	long density;
	int te;
	float realFlowrate;

	te = (int)(temperature*10);				//实际温度乘10是为了查表,表里对应的温度就是实际值的10倍。
	if ( (te > 409) && (te < 499) )  te = 409;		//这里做判断是因为水密度表里的温度在509-599,609-699,709-799,809-899,909-999没有。
	else if ((te > 509) && (te < 599))  te = 509;
	else if ((te > 609) && (te < 699))  te = 609;
	else if ((te > 709) && (te < 799))  te = 709;
	else if ((te > 809) && (te < 899))  te = 809;
	else if ((te > 909) && (te < 999))  te = 909;
	
	density = GetDensity(te);
	if (density)
	{
		realFlowrate = setQmax * transmitterSignal * ((density / 1000.0) / setDensity); // (density / 1000.0)密度除以1000是因为表中密度是原来的一千倍,除以1000.0不是1000是为了不省略小数值。
		return realFlowrate;
	}
	else//密度返回0表示,表中未找到相对应的温度值
	{
		return 0.0; //返回0.0代表发生错误
	}
}



main.c

#include "flowrate.h"
#include <stdio.h>

int main()
{
	float realFlowrate;
	realFlowrate = LinearFlowRate(1000, 1000, 0.5, 28.7);
	printf("%f\n", realFlowrate);
	system("pause"); 

	return 0;
}

参考源码

源码链接


很高兴能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/237716.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c/c++ 柔性数组

在C99新增特性中&#xff0c;结构体的 最后一个元素 允许是 未知大小的数组 &#xff0c;这样就叫做柔性数组成员。 struct stu{ int i&#xff1b; char c; int arr[ ]; //未知大小数组&#xff0c;并且是整个结构体最后一个成员 } 这个时候结构体所占字节空间是多少&#xf…

FPGA高端项目:UltraScale GTH + SDI 视频解码,SDI转DP输出,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、详细设计方案设计框图3G-SDI摄像头LMH0384均衡EQUltraScale GTH 的SDI模式应用UltraScale GTH 基本结构参考时钟的选择和分配UltraScale GTH 发送和接收处理流程UltraScale…

人工智能的技术演进与未来趋势

人工智能的技术演进与未来趋势 一、引言 人工智能&#xff08;AI&#xff09;已经成为当今科技领域的热门话题&#xff0c;其在各个行业的应用越来越广泛。从智能语音助手到自动驾驶汽车&#xff0c;从智能家居系统到医疗诊断&#xff0c;AI技术已经深入到我们的日常生活。在…

Arrays.asList() 和 Collections.singletonList()

Arrays.asList() 和 Collections.singletonList() 概述 List 是我们使用Java时常用的集合类型。众所周知&#xff0c;我们可以轻松地在一行中初始化列表。例如&#xff0c;当我们想要初始化一个只有一个元素的List时&#xff0c;我们可以使用Arrays.asList&#xff08;&#…

Spring 的缓存机制【记录】

一、背景 在最近的业务需求开发过程中遇到了“传说中”的循环依赖问题&#xff0c;在之前学习Spring的时候经常会看到Spring是如何解决循环依赖问题的&#xff0c;所谓循环依赖即形成了一个环状的依赖关系&#xff0c;这个环中的某一个点产生不稳定变化都会导致整个链路产生不…

6_CSS布局之浮动的应用

day06_CSS布局之浮动的应用 本课目标&#xff08;Objective&#xff09; 理解什么是浮动掌握浮动的三种机制掌握浮动的案例应用 1 CSS 布局的三种机制 CSS 提供了 3 种机制来设置盒子的摆放位置&#xff0c;分别是普通流&#xff08;标准流&#xff09;、浮动和定位。 普通流…

MySQL 教程 2.1.1

MySQL 插入数据 MySQL 表中使用 INSERT INTO 语句来插入数据。 你可以通过 mysql> 命令提示窗口中向数据表中插入数据&#xff0c;或者通过PHP脚本来插入数据。 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法&#xff1a; INSERT INTO table_name (colu…

110. 平衡二叉树(Java)

给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;t…

基于conda环境使用mamba/conda安装配置QIIME 2 2023.9 Amplicon扩增子分析环境,q2cli主要功能模块介绍及使用

QIIME 2 2023.9 Amplicon Distribution介绍&#xff1a; 概述 qiime团队专门针对高通量扩增子序列分析退出的conda集成环境&#xff0c;包括了主要和常见的扩增子分析模块&#xff0c;用户可以单独使用各个模块&#xff0c;也可以使用各模块组成不同的分析流程。从2023.09版本…

Linux——Web网站服务(二)

一、httpd服务的访问控制 1、客户机地址限制 通过Require配置项&#xff0c;可以根据主机的主机名或P地址来决定是否允许客户端访问。在 httpd服务器的主配置文件的<Location>&#xff0c;<Directory>、<Files>、<Limit>配置段中均可以使用Require配置…

MQ-Det: Multi-modal Queried Object Detection in the Wild

首个支持视觉和文本查询的开放集目标检测方法 NeurIPS2023 文章&#xff1a;https://arxiv.org/abs/2305.18980 代码&#xff1a;https://github.com/YifanXu74/MQ-Det 主框图 摘要 这篇文章提出了MQ-Det&#xff0c;一种高效的架构和预训练策略&#xff0c;它利用文本描述的…

【LeetCode刷题-树】-- 103.二叉树的锯齿形层序遍历

103.二叉树的锯齿形层序遍历 方法&#xff1a;广度优先搜索 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int …

单片机(STM32,GD32,NXP等)中BootLoader的严谨实现详解

Bootloader(引导加载程序)的主要任务是引导加载并运行应用程序&#xff0c;我们的软件升级逻辑也一般在BootLoader中实现。本文将详细介绍BootLoader在单片机中的实现&#xff0c;包括STM32、GD32、NXP Kinetis等等的所有单片机&#xff0c;因为无论是什么样的芯片&#xff0c;…

​pathlib --- 面向对象的文件系统路径​

3.4 新版功能. 源代码 Lib/pathlib.py 该模块提供表示文件系统路径的类&#xff0c;其语义适用于不同的操作系统。路径类被分为提供纯计算操作而没有 I/O 的 纯路径&#xff0c;以及从纯路径继承而来但提供 I/O 操作的 具体路径。 如果以前从未用过此模块&#xff0c;或不确定…

07.仿简道云公式函数实战-逻辑函数-AND

1.AND函数 AND 函数可用于表示&#xff1a;当所有参数逻辑值为 true 时&#xff0c;返回 true&#xff1b;只要有任何一个参数逻辑值为 false&#xff0c;则返回false。 2. 函数用法 AND(语文成绩>90,数学成绩>90,英语成绩>90) 3.函数示例 1&#xff09;AND(A,B)&a…

Ruff智慧路灯方案让城市管理更智慧,物联网助力城市数智化运营

随着5G、物联网、人工智能等新一代信息技术的发展&#xff0c;路灯管理也被赋予了更多可能&#xff0c;路灯已经从简单的照明工具逐步成为智慧城市发展的新入口。 据了解&#xff0c;当前我国路灯照明耗电量约占总量的15%。传统路灯存在耗能大、设备故障无法定位、路灯状态难以…

安装LLaMA-Factory微调chatglm3,修改自我认知

安装git clone https://github.com/hiyouga/LLaMA-Factory.git conda create -n llama_factory python3.10 conda activate llama_factory cd LLaMA-Factory pip install -r requirements.txt 之后运行 CUDA_VISIBLE_DEVICES0 python src/train_web.py&#xff0c;按如下配置…

algorithm graphics

绘制地图坐标路线_哔哩哔哩_bilibili neo4j test-CSDN博客

如何使用Java在Excel中添加动态数组公式?

本文由葡萄城技术团队发布。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 动态数组公式是 Excel 引入的一项重要功能&#xff0c;它将 Excel 分为两种风格&#xff1a;Excel 365 和传统 …

Linux基础项目开发2:物联网监控——视频监控方案介绍(一)

前言&#xff1a; 这次我们来做一个关于视频监控的基础小项目&#xff0c;需要我们用到网络的相关知识&#xff0c;还会学到好多优秀的网络协议&#xff0c;下面让我们开始对物联网视频监控进行一个大体框架的介绍吧 目录 项目内容&#xff1a; 1.视频监控方案介绍 2.视频监控…