基于查表法的水流量算法设计与实现
写在前面
本文分享的是一种基于查表法的水流量的算法方案设计与实现,算法简单易懂,主要面向初学者,有两个目的:一是给初学者一些算法设计的思路引导;二是引导初学者学习怎样用C语言编程实现。
一、设计需求
-
基于“1990年国际温标纯水密表”,通过查表法求出水密度,下图是表的部分截图。
-
线性信号(电磁流量计、4-20mA 输出涡街)流量公式:
q = q m a x ⋅ x A ⋅ k ρ q=q_{max}\cdot x_A \cdot k_\rho q=qmax⋅xA⋅kρ
式中:
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.c | main() | 主函数,在该函数内编写测试用例 |
flowrate.c | (1)LinearFlowRate() (2)GetDensity() (3)Search_Bin (4)Destroy() (5)Creat_SeqFromTab> | (1)求水的线性信号流量 (2)求密度,被LinearFlowRate调用 (3)在有序表中折半查找 (4)释放空间 (5)创建有序表 |
flowrate.h | LinearFlowRate函数声明 | 在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;
}
参考源码
源码链接
很高兴能帮助到你!
相关文章:
基于查表法的水流量算法设计与实现
写在前面 本文分享的是一种基于查表法的水流量的算法方案设计与实现,算法简单易懂,主要面向初学者,有两个目的:一是给初学者一些算法设计的思路引导;二是引导初学者学习怎样用C语言编程实现。 一、设计需求 基于“19…...
Python:复制、移动文件到指定文件夹
需要考虑的问题: 指定文件夹是否存在,不存在则创建在指定文件夹中是否存在同名文件,是覆盖还是另存为 import os import shutil import tracebackdef copyfile(srcfile, dstpath, replaceFalse):"""复制文件到指定文件夹par…...
类和对象(中篇)
类的六个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数: 用户没有显式实现,编译器会…...
简单几步完成SVN的安装
介绍以及特点 SVN:Subversion,即版本控制系统。 1.代码版本管理工具 2.查看所有的修改记录 3.恢复到任何历史版本和已经删除的文件 4.使用简单上手快,企业安全必备 下载安装 SVN的安装分为两部分,第一部分是服务端安装&…...
NFS原理详解
一、NFS介绍 1)什么是NFS 它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。 NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。 在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁…...
查询后矩阵的和
说在前面 🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。 问题描述 给你一个整数 n 和一个下标从 0 开始的 二维数组 queries ,其中 queries[i] [t…...
Flutter实现丝滑的滑动删除、移动排序等-Dismissible控件详解
文章目录 Dismissible 简介使用场景常用属性基本用法举例注意事项 Dismissible 简介 Dismissible 是 Flutter 中用于实现可滑动删除或拖拽操作的一个有用的小部件。主要用于在用户对列表项或任何其他可滑动的元素执行删除或拖动操作时,提供一种简便的实现方式。 使…...
JDK bug:ciObjectFactory::create_new_metadata:原因完全解析
文章目录 1、问题2.详细日志2.关键日志3.结论4.JDK:bug最终bug链接: 京东遇到过类似bug各位大佬如果有更详细的解答可以留言。 1、问题 服务不通,接口404,查看日志有一下截图,还有一个更详细的日志 2.详细日志 # #…...
【数据结构】并查集的简单实现,合并,查找(C++)
文章目录 前言举例: 一、1.构造函数2.查找元素属于哪个集合FindRoot3.将两个集合归并成一个集合Union4.查找集合数量SetCount 二、源码 前言 需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规…...
2023美团商家信息
2023美团商家电话、地址、经纬度、评分、均价、执照......
0155 - Java 数组
1 数组介绍 数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。 即:数(数据)组(一组)就是一组数据 2 数组的使用 2.1 使用方式一 2.2 使用方式二 3 数组使用注意事项和细节 数组是多个相同类型数据的组合,实现对这些数据…...
Java 语言有哪些特点
Java语言具有以下特点: 简单易学:Java语法相对简单,与C相比更容易上手。 面向对象:Java是一门纯粹的面向对象编程语言,支持封装、继承和多态等面向对象的特性。 平台无关性:Java程序可以在不同的操作系统…...
SAP 特殊采购类50简介----虚拟件
今天我们测试一下特殊类50,也就是我们常说的虚拟件。 虚拟物料是库存中实际不存在的物料清单(BOM)的子装配件,它用于简化物料清单。尽管虚拟物料出现在物料清单中,但生产订单显示制造虚拟物料所需的组件,而不是虚拟物料本身。 我们举个列子,生产的手机是有包装的,有盒子…...
C语言——内存函数的使用与模拟实现
大家好,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流 本文由:残念ing 原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客,欢迎各位…...
Mysql索引事务(面试高频)
文章目录 目录 文章目录 前言 一 . 索引 1.1 概念 1.2 作用 1.3 使用场景 1.4 存储引擎 二 . 事务 2.1 事务的概念 2.2 事务四大特性 前言 大家好,今天给大家绍一下mysql索引和事务 一 . 索引 1.1 概念 索引是一种特殊的文件,包含着对数据表中的所有记录的引用指针…...
SpringCloudGateway 3.1.4版本 Netty内存泄漏问题解决
一、 产生的异常 当时是服务器访问不到服务了,上去一看,无法申请资源OutOfDirectMemoryError了,内存级别的东西让人一阵头大,赶紧在线下模拟, 1. 减少分配的堆外内存,打开Netty的监测工具等有助于复现的…...
STM32内部是怎么工作的
STM32是怎么工作的 1 从孩子他妈说起2 早期计算机的组成2.1 五大元件(1)第一个出场的是电容元件(2)第二个出场的是二极管(3)第三个出场的是电阻元件(4)第四个出场的是电感࿰…...
MyBatis的配置文件
目录 MyBatis配置 1.properties标签 2.typeAliases标签 3.Mappers标签 一个最全面的MyBatis配置文件可能会包含各种不同的设置和选项,根据实际情况,可以根据需要添加或删除配置。以下是一个包含各种可能设置的示例。 这个配置文件包含了环境设置、数…...
MCU平台下确定栈空间大小的方法
本文介绍MCU平台下确定栈空间大小的方法。 通常使用IDE开发MCU程序在生成Image文件时,Image文件被划分为代码区,数据区,BSS区,堆区,栈区。其中,代码区,数据区,BSS区空间大小由编译器…...
Flink系列之:SQL提示
Flink系列之:SQL提示 一、动态表选项二、语法三、例子四、查询提示五、句法六、加入提示七、播送八、随机散列九、随机合并十、嵌套循环十一、LOOKUP十二、进一步说明十三、故障排除十四、连接提示中的冲突案例十五、什么是查询块 SQL 提示可以与 SQL 语句一起使用来…...
机器学习算法---聚类
类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…...
gitlab ci pages
参考文章 gitlab pages是什么 一个可以利用gitlab的域名和项目部署自己静态网站的机制 开启 到gitlab的如下页面 通过gitlab.ci部署项目的静态网站 # build ruby 1/3: # stage: build # script: # - echo "ruby1"# build ruby 2/3: # stage: build …...
Web ML 库的Transformers.js 提供文本转语音功能
JavaScript 库 Transformers.js 提供了类似 Python Transformers 库的功能,设计用于在 Web 浏览器中直接运行 Transformer 模型,而不再需要外部服务器参与处理。在最新的 2.7 版本中,Transformers.js 引入了增强功能,其中包括文本…...
管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜E
老老规矩,看目录,平均每年2E,跟2D一样,D是全对,E是全错,侧面也看出10道题,大概是3A/B,3C,2D,2E,其实还是蛮平均的。但E为1道的情况居多。 第20题…...
【Linux基本指令(2)】
文章目录 一. 基本指令第二回 一. 基本指令第二回 cp指令语法 cp src dst 将目标文件或者目录拷贝到指定目录下或文件下。注意同级目录下,不允许存在同名文件或同名目录。如果将一个file.txt文件拷贝到当前目录下,就重名了,报错cp不了&#…...
Debian系统设置SSH密钥登陆
如果没有安装ssh,root权限运行apt install openssh-server进行安装。 ssh-keygen -t rsa # 生成配对密钥,后续一路enter即可会在用户目录(即~这个)下生成.ssh文件夹,里面的id_rsa是私钥,id_rsa.pub是公钥…...
uniapp cli开发和HBuilderX开发
uniapp cli开发和HBuilderX开发 前言 uniapp是一个跨平台的开发框架,可以开发出微信小程序、支付宝小程序、百度小程序、头条小程序、H5、App等,开发者只需要写一套代码,就可以发布到各个平台,大大提高了开发效率。 uniapp的开…...
【Java异常】idea 报错:无效的目标发行版:17 的解决办法
【Java异常】idea 报错:无效的目标发行版:17 的解决办法 一,问题来源 springcloud的第一个demo项目就给我干趴了 二、原因分析 java: 无效的目标发行版: 17 原因就是 JDK 版本不对。从 IDEA 编辑器中可以找到问题的原因所在,…...
代码提交规范-ESLint+Prettier+husky+Commitlint
代码提交规范-ESLintPrettierhuskyCommitlint 配置eslint (3步)配置prettier(4步)1.安装配置prettier2.设置忽略文件 .prettierignore3.处理eslint冲突4. 配置vscode 的settings.json husky安装并配置lint-staged(3步)安装配置com…...
手动实现 Vue 3的简易双向数据绑定(模仿源码)
Vue 3 带来了许多令人兴奋的新特性和改进,其中之一就是其双向数据绑定的实现方式。与 Vue 2 使用 Object.defineProperty 不同,Vue 3 利用了 JavaScript 的 Proxy 特性来创建响应式数据。在这篇博客中,我们将探讨 Vue 3 中双向数据绑定的基础…...
怎么计算网站开发费用/深圳网站关键词排名优化
2019独角兽企业重金招聘Python工程师标准>>> 电脑系统平台:OS X EI Capitan 10.11 在以前的旧的QQ版本,QQ的截图的偏好还有一个开机自启动的选项: 现在新的版本,却没有了"开机自动运行"的选项,然…...
电商网站怎么推广/免费外链网站seo发布
作者:HotHeart 时间: 2006-08-28 文档类型:原创 来自:蓝色理想 在给blog加上无刷新搜索和即时验证检测后,又看了下代码,感觉太过麻烦,就把XMLHttpRequest请求封装到一个类里面,用…...
杭州网站建站/站长之家产品介绍
首先去特硬去下载vscode的安装包 mkdir /tmp/vscode cd /tmp/vscode/ wget https://az764295.vo.msecnd.net/public/0.3.0/VSCode-linux-x64.zip 解压安装包 unzip /tmp/vscode/VSCode-linux-x64.zip -d /opt/ 此时就可以正常运行VSCode了 sudo chmod x /opt/VSCode-linux-x64/…...
网站要怎么上传/互联网运营培训课程
1.明确使用场景最近公司业务对接的有外国人,咱家虽然也是英语6级,可也不敢打包票能听懂人家老外的口语啊,万一再带点方言口音“what are you going to do to die”其实是““what are you going to do today?”澳洲英语方言很重&a…...
网站框架地图/百度竞价推广思路
背景 最近用爬虫爬网页需要用到lxml包中的etree模块。我的pycharm中已经内置了lxml包最新的4.2.4版,然而这个版本居然丢掉了etree模块。搜了网上各种解决方法,搞定了这个问题。 然后就开始使用了...
search everything wordpress/长尾关键词挖掘
将企业软件中进行数据交换的业务对象,例如客户、订单或产品等常规模型进行标准化,让它们包含所有属性与关联信息,这种做法看上去似乎是一种吸引人的目标,但在Stefan Tilkov看来,这种方式将产生标准数据模型(…...