储油罐的变位识别与罐容表标定

  • 格式:doc
  • 大小:1.80 MB
  • 文档页数:34

储油罐的变位识别与罐容表标定摘要通常加油站都有若干个储存燃油的地下储油罐,并且一般都有与之配套的“油位计量管理系统”,采用流量计和油位计来测量进/出油量与罐内油位高度等数据,通过预先标定的罐容表(即罐内油位高度与储油量的对应关系)进行实时计算,以得到罐内油位高度和储油量的变化情况。

许多储油罐在使用一段时间后,由于地基变形等原因,使罐体的位置会发生纵向倾斜和横向偏转等变化(以下称为变位),从而导致罐容表发生改变。

按照有关规定,需要定期对罐容表进行重新标定。

本文针对题目要求,用数学建模方法研究解决储油罐的变位识别与罐容表标定的问题。

通过了几何学、积分学、数值积分,最小二乘法等,对以下问题进行建立模型:(1)罐体无变位时的罐容表标定。

(2)纵向变位倾斜角α= 4.10时的罐容表标定。

(3)两侧球冠内油料体积的计算。

(4)中间圆筒部分体积的计算。

(5)参数估计模型。

关键词:卧式储油罐体积标定最小二乘法单目标优化,1.问题重述1.1 背景通常加油站都有若干个储存燃油的地下储油罐,并且一般都有与之配套的“油位计量管理系统”,采用流量计和油位计来测量进/出油量与罐内油位高度等数据,通过预先标定的罐容表(即罐内油位高度与储油量的对应关系)进行实时计算,以得到罐内油位高度和储油量的变化情况。

许多储油罐在使用一段时间后,由于地基变形等原因,使罐体的位置会发生纵向倾斜和横向偏转等变化(以下称为变位),从而导致罐容表发生改变。

按照有关规定,需要定期对罐容表进行重新标定。

1.2 问题(1)为了掌握罐体变位后对罐容表的影响,利用小椭圆型储油罐(两端平头的椭圆柱体),分别对罐体无变位和倾斜角为α=4.10的纵向变位两种情况做了实验,请建立数学模型研究罐体变位后对罐容表的影响,并给出罐体变位后油位高度间隔为1cm的罐容表标定值。

(2)对于实际储油罐,试建立罐体变位后标定罐容表的数学模型,即罐内储油量与油位高度及变位参数(纵向倾斜角度α和横向偏转角度β)之间的一般关系。

利用罐体变位后在进/出油过程中的实际检测数据(附件2),根据所建立的数学模型确定变位参数,并给出罐体变位后油位高度间隔为10cm的罐容表标定值。

进一步利用附件2中的实际检测数据来分析检验模型的正确性与方法的可靠性。

2.问题分析题目采用油位计来测量进/出油量与罐内油位高度等数据,通过预先标定的罐容表进行实时计算,以得到罐内油位高度和储油量的变化情况。

由于变位等原因产生了理论值和标定值的相应误差。

题中要求分析这些误差并予以修订。

在第一问中,需要对倾斜角α= 4.10的罐容表进行重新标定。

因此,解决该问题的关键是:充分利用各种几何关系求出储油量和油位高度的函数关系,并合理解决积分形式较复杂时函数数值解的计算问题。

在第二问中,同样需要先计算出储油量和油位高度的函数关系式,由于问题中变位参数未知,故解决此问题的关键是:寻找一种方法,利用求得的罐内储油量与油位高度及变位参数的关系式来确定α和β具体的数值,从而确定罐容表,并利用统计学相关知识检验模型的正确性并进行误差分析。

3.条件假设1)变位纵向倾斜时只在出油管一侧向上倾斜。

2)不计储油罐壁厚对油量统计的影响及温度对油体积的影响。

3)进/出油时无油量损失。

4)忽略油罐发生纵向位移以及横向位移时引起的油罐结构的变化。

4.符号说明a = 0.89 小椭圆型油罐横截面长半轴b = 0.6 小椭圆型油罐横截面短半轴h 油浮子测得的油高α纵向倾斜角β 横向倾斜角S (h ) 油高为h 时小椭圆油罐截面面积V (h ) 小椭圆型油罐油高为h 时罐内理论剩余油量 V 1 (h ) 小椭圆型油罐油高为h 时罐内实际剩余油量V m 小椭圆型油罐装满油时的油量V head (h) 油高为h 时实际储油罐球冠的理论储油量 V body (h) 油高为h 时实际储油罐中间筒体的理论储油量R 球冠的球径h r 球冠水平截面圆的半径r 球冠竖直截面圆的半径V 0 实际储油罐出油时的初始油量5.模型建立与求解5.1 小椭圆型储油罐的罐容表标定此部分针对小椭圆型储油罐,分别对罐体无变化和倾斜角为α 的纵向变位两种情况进行模型建立,然后与附表中所给实验数据进行对比,以此分析模型建立的准确性,并研究罐体变位后对罐容表的影响。

5.1.1 罐体无变位时的罐容表标定(1) 模型的建立:小椭圆型油罐横截面如图1 所示,以椭圆下顶点为原点建立坐标系,可得椭圆方程 1)6.0(222=-+by a x ,其中a=0.89,b=0.6。

图1 由椭圆方程可导出by y ba x 22+-⨯=,在y 轴上积分得油高为h 时椭圆油罐截面面积dy by y b a h S h )22()(20+-⨯⨯=⎰。

无变位时,油罐内剩余油量可视为一个高度为2.45m 的柱体,故油高为h 时对应的剩余油料体积 dy by y ba L h V h )2(2)(20+-⨯⨯⨯=⎰ 积分得: ⎥⎦⎤⎢⎣⎡+-+---=4)arcsin(21)(122)(2πb b h b b h b bh abL h V (2)模型求解与验证:为验证模型的正确性,现将计算结果与实验数据进行对比。

取表中所给一系列h 值,求出对应的剩余油量,即为计算值;同时,将表中列出的剩余油量数据进行曲线拟合得到如下函数:V 1(x)=-7.274×10-10×x 4-4.706×x 3+0.002535×x 2+2.321×x-388.1+262画出V (h )与1 V (h )的曲线图如下:020406080100120050010001500200025003000350040004500储油理论值与实际值图2 无变位储油量理论值与实际值对比图由图2 看出,理论计算值与实际值有存在一定的偏差,并且随h 的增高,理论计算值与实际测量值的差值越来越大。

仔细分析其原因:由于注油管、出油管及油浮子均占有一定体积,随h 的增高,注油管、出油管及油浮子浸入液面下的体积也在逐渐增加,导致实际值比理论值偏大,且差值会随h 的增加而增加。

5.1.2 纵向变位倾斜角α = 4.10时的罐容表标定(1) 模型的建立:有变位时,变位角 =4.1°时,油罐储油量与浮标所测定的高度的关系有五种情况,下面分情况讨论 h 11)如下图5.1.1.2,由于有纵向倾角,但浮标显示是0 时,油罐内实际并不为零。

经过计算可得:当h1=0时,V1≤1.6743L;图32)如下图5.1.1.3,表示油罐内的油量的平面低于所示虚线,此时油罐的正面示意图是三角形。

图4则有当0<h1≤2.05tanαm,即0<h1 ≤146.9458mm时:3)如下图,油罐内油量的液面低于所示虚线,此时油没有完全覆盖油罐的任意一个底面:图54)如下图,油罐内油完全覆盖油罐的一个底面。

图6ei5)如下图,浮标测得的油位高度显示油罐为满,然而实际上并没有满。

图7此时经计算得到:当h =1.2m时,4012.747≤ V1≤ 4110.146L(2)模型求解与验证:油罐变位后对罐容表的影响可以通过比较无变位和有变位的数学模型得出。

利用MATLAB在一定区间内对两个模型作图于同一个坐标系中。

图形如下图。

20406080100120050010001500200025003000350040004500变为前和变位后图图8由图可看出在一定区间内,变位后相同油位高度的情况下实际储油量要比无变位的储油罐在相同油位高度下的储油量要少,且差值保持在一定值左右波动。

这一点也可以从题目附录中的数据得到验证。

在高度相同的情况下,无变位与变位的油罐模型油量差值保持在200L 左右。

另外,罐体变位后油位高度间隔为1cm 的罐容表标定值可以由模型得到,结果如下: 罐体变位后罐容表标定值为计算储油罐实际变位量α 、β,首先建立模型,求得油浮子显示高度h 与储油量V (α,β )的关系,然后通过所给数据估计α 、β 的具体数值,最后根据实际数据验证模型的准确性。

5.2.1 两侧球冠内油料体积的计算 模型的建立与求解:下面,首先计算油位高度显示h 时两端凸头内的油料体积:如图10 所示,在A 点与B 点分别作水平圆面,则由几何知识易知V head1的“余”部分可以近似补到V head2的“缺”部分,则求球头内油体积的问题转化为了求如下图所示的水平面下的球头体积问题。

图125.2.2中间圆筒部分体积的计算模型的建立与求解:由椭圆部分面积公式可推出,半径为R 高为t 的弓形面积:为计算方便,同样将油罐经旋转后放入坐标系进行分析,如下图所示:图135.2.3参数估计模型(1)模型的建立:(2)模型求解:枚举算法的C++程序见附录。

5.2.4误差分析及模型检验6.模型分析模型优点:(1)充分利用了附表中的数据,通过对图表中数据的分析,合理地筛选了有效数据,提高了模型建立的准确性。

(2)使用最小二乘法进行优化,确定参数值,得到结果误差很小,十分可靠。

(3)该模型具有普适性,适于推广到运输,化工,储藏等行业。

模型缺点:建模方法较单一,对于同一问题没有建立多个模型,无法进行多种方法的分析比较。

附录储油理论值与实际值图 MATLAB程序如下:clearsyms a b ha=0.89*100;b=0.6*100;L=2.45*100;A=xlsread('Book6.xls');f1=A(:,2)*10^(-1);V=(a*L/b).*((h-b).*((2.*h.*b-h.^2).^0.5)+b.^2.*asin((h-b)./b)+0.5.*b.^2*pi); V1=subs(V,h,f1)/1000;V0=A(:,1)+262;plot(f1,V1,'r--',f1,V0,'*')legend('储油理论值','储油实际值')title('储油理论值与实际值')grid on变位前和变位后图 MATLAB程序如下:clear all,clcsyms a b ha=0.89*100;b=0.6*100;L=2.45*100;A=xlsread('Book6.xls');B=xlsread('Book7.xls');f1=A(:,2)*10^(-1);f2=B(:,1)*10^(-1);V=(a*L/b).*((h-b).*((2.*h.*b-h.^2).^0.5)+b.^2.*asin((h-b)./b)+0.5.*b.^2*pi);V1=subs(V,h,f1)/1000;V0=A(:,1)+262;V2=B(:,2);plot(f1,V1,'r--',f1,V0,'b',f2,V2,'k')legend('变为前储油理论值','变为前储油实际值','变位后') title('变位前和变位后图')grid on枚举算法的C++程序:#include <iostream>#include <cmath>#define PI 3.1415926using namespace std;double r = 1.625;double p1, p2;double R = 1.5;double f(double x){double ans = PI*r*r*x/2-PI*x*x*x/6+2*x*sqrt(2.25-x*x)/3 -2*x*r*sqrt(2.25-x*x)/3-(1-3*r+2*r*r*r)*atan(x/sqrt(2.25-x*x))/3+(x*x*x-3*x*r*r)*atan(0.625/sqrt(2.25-x*x))/3- 19 -+2*r*r*r*atan(0.625*x/(r*sqrt(2.25-x*x)))/3+2.0289; return ans;}double g(double x){double ans =4*PI*R*R-(R*R*(R-x+8*tan(p1))*asin((R-x+8*tan(p1))/R)+R*R*sqrt(2*R*(x-8*tan(p1))-(x-8*tan(p1))*(x-8*tan(p1)))-R*R*(R-x)*asin((R-x)/R)-R*R*sqrt(2*R*x-x*x)-pow((2*R*(x-8*tan(p1))-(x-8*tan(p1))*(x-8*tan(p1))),1.5)/3+pow((2*R*x-x*x), 1.5)/3)/tan(p1);return ans;}int main(){double H1, V1, H, H2, h1, h2;double out, s, t, ans, ansx, ansy, ansz, tt, ss, pppp; double numx[1024], numy[1024], left[1024];freopen("in2.txt", "r", stdin);freopen("out1.txt", "w", stdout);numx[0] = 0;int k = 1;while(scanf("%lf %lf", &numx[k], &numy[k]) == 2){numx[k] += numx[k-1];k++;}printf("%d\n", k);double ansk = 100000000;//此处先采用大范围大步长、再使用小范围小步长for(int qq = 5850; qq <= 5950; qq++){double q = (double)qq/100;ans = 100000000;for(int j = 40; j <= 60; j++){for(int i = 190; i <= 220; i++){p1 = (double)i/18000*PI; //角度p2 = (double)j/1800*PI;- 20 -double tmp = 0;for(int o = 5; o <= 290; o++){t = numy[o];out = numx[o];t /= 1000;out /= 1000;H = 1.5-(1.5-t)*cos(p2);H1 = H+2*tan(p1);H2 = H-6*tan(p1);h1 = H1-1.5;h2 = H2-1.5;V1 = f(h1)+f(h2)+g(H1);tmp += (V1-q+out)*(V1-q+out); }if(tmp < ans){ans = tmp;ansx = i;ansy = j;ansz = q;}}}if(ans < ansk){ansk = ans;tt = ansx;ss = ansy;pppp = q;}printf("%.2lf %lf total:%lf\n", ansx/100, ansy/10, q);}printf("答案:%.2lf %lf total:%lf\n", tt/100, ss/10, pppp);return 0;}。