基于查表法的水流量算法設計與實現

寫在前面

本文分享的是一種基于查表法的水流量的算法方案設計與實現,算法簡單易懂,主要面向初學者,有兩個目的:一是給初學者一些算法設計的思路引導;二是引導初學者學習怎樣用C語言編程實現。

一、設計需求

  1. 基于“1990年國際溫標純水密表”,通過查表法求出水密度,下圖是表的部分截圖。
    請添加圖片描述

  2. 線性信號(電磁流量計、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} qmax?qmax的值是多少?

    :設定值 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.pswp.cn/news/215917.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215917.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215917.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ 中的引用

文章目錄 C 引用的應用1. 修改函數中傳遞的參數2. 避免復制大型結構3. for 循環中修改所有對象4. for 循環中避免復制對象 References vs Pointers引用的限制使用引用的優點練習Quesition 1Question 2Question 3Question 4Question 5Question 6 如果一個變量被聲明為引用&#…

Android-Framework 默認橫屏、dpi設置

一、環境 高通865 Android 10 二、源碼修改位置 1、修改dpi device/qcom/kona/kona.mk -116,7 116,7 TARGET_USES_RRO : true# system prop for Bluetooth SOC typePRODUCT_PROPERTY_OVERRIDES \vendor.qcom.bluetooth.sochastings \ - ro.sf.lcd_density480ro.sf.lcd_d…

Python中的logging介紹

Python中的logging模塊是一個強大的、靈活的、可配置的日志記錄系統。它允許你在不修改源代碼的情況下記錄錯誤和調試信息&#xff0c;同時也可以對日志信息進行各種處理&#xff0c;例如寫入到文件、輸出到控制臺、記錄到數據庫等。 logging模塊提供了一種用于日志記錄的通用接…

液態二氧化碳儲存罐遠程無線監測系統

二氧化碳強化石油開采技術&#xff0c;須先深入了解石油儲層的地質特征和二氧化碳的作用機制。現場有8輛二氧化碳罐裝車&#xff0c;每輛罐車上有4臺液態二氧化碳儲罐&#xff0c;每臺罐的尾部都裝有一臺西門子S7-200 smart PLC。在注入二氧化碳的過程中&#xff0c;中控室S7-1…

國產單片機XL32F001,價格便宜,性價比高,32位M0+內核

XL32F001芯片簡介 1、是一個32位ARM架構Cortex -M0系列的單片機 2、系統工作頻率最高為24MHz 3、擁有24Kbytes Flash存儲器和3Kbytes SRAM 4、擁有內部24MHz和32.768MHz的RC振蕩器&#xff08;HSI和LSI&#xff09;&#xff0c;擁有32.768KHz低速晶體振蕩器&#xff08;LSE…

JVM內存模型+JVM類加載機制

jvm內存模型包括哪些以及各自作用 主要包括類加載 對象創建 方法調用 本地方法區 程序計數 方法區&#xff1a; class文件加載到方法區 堆&#xff1a; 對象創建在堆內存中 jvm棧&#xff1a;方法調用入棧 本地方法棧&#xff1a;主要是c寫的一些方法 程序計數器&#xff1a;存…

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 類型的證書。有…

react Hooks之useDebugValue

1、作用&#xff1a; 用于在開發過程中幫助開發者調試自定義 Hook。它的作用是將自定義 Hook 中的某些值暴露給 React 開發工具&#xff08;例如 React DevTools&#xff09;以便于調試。 當我們使用 React 開發工具查看組件的狀態時&#xff0c;React DevTools 會從組件和其…

鴻蒙(HarmonyOS)應用開發——保存應用數據

保存應用數據 harmonyOS系統提供了四種數據存儲方式 #mermaid-svg-kZlN0CFY1VGySIPo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kZlN0CFY1VGySIPo .error-icon{fill:#552222;}#mermaid-svg-kZlN0CFY1VGySIPo .…

競賽保研 LSTM的預測算法 - 股票預測 天氣預測 房價預測

0 簡介 今天學長向大家介紹LSTM基礎 基于LSTM的預測算法 - 股票預測 天氣預測 房價預測 這是一個較為新穎的競賽課題方向&#xff0c;學長非常推薦&#xff01; &#x1f9ff; 更多資料, 項目分享&#xff1a; https://gitee.com/dancheng-senior/postgraduate 1 基于 Ke…

Android RecyclerView 動畫處理 流程 原理(源碼分析第二篇)

零、本文主題 本文要解決的問題&#xff1a; 1. Recyclerview 動畫的實現原理是什么&#xff1f; 2. 處理的主要流程大概是怎樣的&#xff1f; 一、核心原理 我們拋開代碼&#xff0c;想一下&#xff0c;RecyclerView中的view動畫有幾種&#xff1f; 添加一個view&#xff1a;…

react Hooks之useLayoutEffect和useInsertionEffect

在介紹這兩個hooks之前。讓我們先對比一下useEffect、useLayoutEffect、useInsertionEffect 執行時機&#xff1a; useEffect 在組件渲染完成后執行&#xff0c;屬于異步執行。useInsertionEffect 在組件渲染并插入 DOM 后執行&#xff0c;也屬于異步執行。useLayoutEffect 在組…

互聯網公司,哪個部門才是鄙視鏈最頂端?

文章目錄 每日一句正能量前言財務部法務部公關部銷售部前臺行政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;學習聯合體和枚舉類型的…