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

写在前面

本文分享的是一种基于查表法的水流量的算法方案设计与实现,算法简单易懂,主要面向初学者,有两个目的:一是给初学者一些算法设计的思路引导;二是引导初学者学习怎样用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;
}

参考源码

源码链接


很高兴能帮助到你!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

液态二氧化碳储存罐远程无线监测系统

二氧化碳强化石油开采技术&#xff0c;须先深入了解石油储层的地质特征和二氧化碳的作用机制。现场有8辆二氧化碳罐装车&#xff0c;每辆罐车上有4台液态二氧化碳储罐&#xff0c;每台罐的尾部都装有一台西门子S7-200 smart PLC。在注入二氧化碳的过程中&#xff0c;中控室S7-1…

OneNote for Windows10 彻底删除笔记本

找了超多方法&#xff0c;都没有用&#xff0c;我的OneNote都没有文件选项&#xff0c;要在OneDrive中删除&#xff0c;但是一直登不进&#xff0c;然后又找到一个方法&#xff1a; 在网页中打开Office的控制面板 "Sign in to your Microsoft account" 在“最近”一…

【强化学习-读书笔记】多臂赌博机 Multi-armed bandit

参考 Reinforcement Learning, Second Edition An Introduction By Richard S. Sutton and Andrew G. Barto强化学习与监督学习 强化学习与其他机器学习方法最大的不同&#xff0c;就在于前者的训练信号是用来评估&#xff08;而不是指导&#xff09;给定动作的好坏的。 …

第21章网络通信

网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素封 装成不同的类&#xff0c;用户只要创建这些类的对象&#xff0c;使用相应的方法&#xff0c;即使不具备有关的网络支持&#xff0c;也可 以编写出高质量的网络通信程序…

2023年【危险化学品生产单位安全生产管理人员】考试题库及危险化学品生产单位安全生产管理人员考试技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品生产单位安全生产管理人员考试题库是安全生产模拟考试一点通总题库中生成的一套危险化学品生产单位安全生产管理人员考试技巧&#xff0c;安全生产模拟考试一点通上危险化学品生产单位安全生产管理人员作业…

【教程】制作 iOS 推送证书

如需向 iOS 设备推送数据&#xff0c;您首先需要在消息推送控制台上配置 iOS 推送证书。iOS 推送证书用于推送通知&#xff0c;本文将介绍消息推送服务支持的证书类型&#xff0c;并引导您制作 iOS 推送证书。 证书类型 消息推送服务仅支持 Apple Push Service 类型的证书。有…

竞赛保研 LSTM的预测算法 - 股票预测 天气预测 房价预测

0 简介 今天学长向大家介绍LSTM基础 基于LSTM的预测算法 - 股票预测 天气预测 房价预测 这是一个较为新颖的竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/postgraduate 1 基于 Ke…

互联网公司,哪个部门才是鄙视链最顶端?

文章目录 每日一句正能量前言财务部法务部公关部销售部前台行政IT部创意部后记 每日一句正能量 我们必须在失败中寻找胜利&#xff0c;在绝望中寻求希望。 前言 在互联网公司中&#xff0c;不同职位的鄙视链是存在的。有些职位享有高尚的地位&#xff0c;而有些则被看作是次要…

python 爬虫 m3u8 视频文件 加密解密 整合mp4

文章目录 一、完整代码二、视频分析1. 认识m3u8文件2. 获取密钥&#xff0c;构建解密器3. 下载ts文件4. 合并ts文件为mp4 三、总结 一、完整代码 完整代码如下&#xff1a; import requests import re import os from tqdm import tqdm from Crypto.Cipher import AES# 创建临…

Shopify二次开发之五:元字段(Metafields)

目录 解释 操作 1、添加Custom data 2、选择特定类型的数据 3、为Page配置元子段和值 4、模板访问 解释 Shopify Metafields 是一种用于存储和管理自定义数据的功能。它们允许商户在商城中的产品、订单、客户、Page等对象上添加自定义字段&#xff0c;以满足特定业务需求…

c语言->自定义类型联合体和枚举类型

系列文章目录 文章目录 前言 ✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青_C语言,函数,指针-CSDN博客 目的&#xff1a;学习联合体和枚举类型的…

Kubernetes实战(八)-防止k8s namespace被误删除

1 背景 运维新同学在预发环境操作删除pod的时候&#xff0c;不知道什么原因把kubectl delete pod命令敲成了kubectl delete ns pre把预发环境删了&#xff0c;几十个模块&#xff0c;将近一个小时才恢复。幸亏是测试环境啊&#xff0c;如果是生产可以可以跑路了。 2 解决方案…

jsonpath:使用Python处理JSON数据

使用Python处理JSON数据 25.1 JSON简介 25.1.1 什么是JSON JSON全称为JavaScript Object Notation&#xff0c;一般翻译为JS标记&#xff0c;是一种轻量级的数据交换格式。是基于ECMAScript的一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清…

计算机网络:应用层(一)

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

C# WPF上位机开发(简易图像处理软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 图像处理是工业生产重要的环节。不管是定位、测量、检测还是识别&#xff0c;图像处理在工业生产中扮演重要的角色。而c#由于自身快速开发的特点&a…

解决微信小程序中 ‘nbsp;‘ 空格不生效的问题

在微信小程序开发中&#xff0c;我们经常会使用 来表示一个空格。这是因为在 HTML 中&#xff0c;空格会被解析为一个普通字符&#xff0c;而不会产生实际的空白间距。而 是一种特殊的字符实体&#xff0c;它被解析为一个不可见的空格&#xff0c;可以在页面上产生真正的空…

Axure RP 9 入门教程

1. Axure简介 Axure 是一个交互式原型设计工具&#xff0c;可以帮助用户创建复杂的交互式应用程序和网站。Axure 能够让用户快速构建出具有高度可交互性的原型&#xff0c;可以在团队中进行协作、分享和测试。 使用 Axure 可以设计出各种不同类型的原型&#xff0c;包括网站、移…

系列十五、搭建redis集群

一、概述 上篇文章介绍了redis集群的相关知识&#xff0c;本章实战演示redis的集群环境的详细搭建步骤。如果帮助到了你&#xff0c;请点赞 收藏 关注&#xff01;有疑问的话也可以评论区交流。 二、搭建步骤 2.1、预备知识 判断一个集群中的节点是否可用&#xff0c;是集群…

【SpringBoot篇】详解基于Redis实现短信登录的操作

文章目录 &#x1f970;前言&#x1f6f8;StringRedisTemplate&#x1f339;使用StringRedisTemplate⭐常用的方法 &#x1f6f8;为什么我们要使用Redis代替Session进行登录操作&#x1f386;具体使用✨编写拦截器✨配置拦截器&#x1f33a;基于Redis实现发送手机验证码操作&am…

EarCMS 前台任意文件上传漏洞复现

0x01 产品简介 EarCMS是一个APP内测分发系统的平台。 0x02 漏洞概述 EarCMS前台put_upload.php中,存在pw参数硬编码问题,同时sql语句pdo使用错误,没有有效过滤sql语句,可以控制文件名和后缀,导致可以任意文件上传。 0x03 复现环境 FOFA:app="EearCMS" 0x0…