发明名称 热电偶温度补偿压力测量补氮控制仪及测试方法
摘要 热电偶温度补偿压力测量补氮控制仪及测试方法,属于油田井下压力测量技术领域。应用温度补偿压力提高压力测量精度:热电偶温度补偿压力毛细管压力测量补氮控制仪与井下热电偶测温相配合,应用井下毛细管出口处的热电偶所测温度与井口温度变送器所测的温度、压力变送器所测压力相结合,达到应用温度补偿压力提高毛细管测压精度的目的;按定时方式补氮:通过按键设定间隔天数与间隔天数下的整点时间;当补充氮气条件达到时,仪表对外控制固态继电器SSR,控制外部常闭式电磁阀的打开与关闭,以控制氮气源及时向井下毛细管中补充氮气,避免毛细管阻塞。
申请公布号 CN103775060B 申请公布日期 2016.07.13
申请号 CN201310103657.6 申请日期 2013.03.28
申请人 中国石油天然气股份有限公司 发明人 王金龙;袁新生;韩吉声;潘勇;胡承军;芦志伟;李士建;努尔买买提;薛谨
分类号 E21B47/06(2012.01)I 主分类号 E21B47/06(2012.01)I
代理机构 北京华沛德权律师事务所 11302 代理人 刘杰
主权项 热电偶温度补偿压力测量补氮控制测试方法,应用温度补偿压力提高压力测量精度:热电偶温度补偿压力测量补氮控制仪与井下热电偶相配合,应用井下毛细管出口处的热电偶所测温度与井口温度变送器所测的温度、压力变送器所测压力相结合,达到应用温度补偿压力提高毛细管测压精度的目的;按定时方式补氮:通过按键设定间隔天数与间隔天数下的整点时间,当定时时间到时,控制外部器件向井下补充氮气;压力判断方式补氮:通过外部按键设定补充氮气的压力阈值,按0.1MPa步进值设定,当井下压力低于设定压力阀值,则控制外部器件向井下补充氮气;外部器件控制:当补充氮气条件达到时,仪表对外控制固态继电器SSR,控制外部常闭式电磁阀的打开与关闭,以控制氮气源及时向井下毛细管中补充氮气,避免毛细管阻塞;所述测试方法具体包括以下步骤:压力判断方式补充氮气步骤:①、压力判断方式补充氮气模块:当仪表上电开机后,完成整体全局变量的初始化,按两次INT0,此时中断次数计数值it0value0等于2,返回主函数;主函数中判断全局变量的外部中断计数值it0value0等于2,进入压力测量子函数,首先进行LCD12864清屏,在LCD第一行显示“压力1:”,在LCD第二行显示“压力2:”软件延时3秒,3秒更新一次LCD,循环调用AD采集子函数12次,并存放在无符号整形变量dat2[]数组中,之后程序找出dat2[]中的最大值、最小值,并将最大值最小值去掉,将dat2[]数组中剩余10个的无符号整形变量相加,再除以10,将此时的结果作为最终转换结果;如果此次转换结果小于每个通道的压力标零度值AD10 0x333,则在LCD12864的第一行,0X84“压力1;”后面显示“0.00MPa”,如果此时的AD转换值大于压力标零度值AD100x333,AD转换结果对应压力值为:AD1=(16*(float)(dat‑AD10))/(AD11‑AD10),得出十进制压力值调用温度补偿压力子函数,按极限分段距离下,氮气最大密度,压力累加计算出井底压力;在SAGD注汽井中,井口温度270℃,井底毛细管出口处温度为200℃,允许最小压力误差值为0.004MPa,求出最小误差下的沿井筒的最小分段距离<maths num="0001"><math><![CDATA[<mrow><mi>H</mi><mo>=</mo><mfrac><mi>P</mi><mrow><msub><mi>&rho;</mi><mi>m</mi></msub><mi>g</mi></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000950419370000021.GIF" wi="1236" he="134" /></maths>当密度达到最大值时,极限分段距离最小,由克拉百龙方程求出最大密度:<maths num="0002"><math><![CDATA[<mrow><msub><mi>&rho;</mi><mi>m</mi></msub><mo>=</mo><mfrac><mi>m</mi><mi>V</mi></mfrac><mo>=</mo><mfrac><mrow><msub><mi>P</mi><mi>m</mi></msub><mi>m</mi></mrow><mrow><mi>n</mi><mi>R</mi><mi>T</mi></mrow></mfrac><mo>=</mo><mfrac><mrow><msub><mi>P</mi><mi>m</mi></msub><mo>&times;</mo><mn>0.028</mn></mrow><mrow><mn>8.31</mn><mrow><mo>(</mo><mn>273.1</mn><mo>+</mo><mi>t</mi><mo>)</mo></mrow></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000950419370000022.GIF" wi="1278" he="136" /></maths>当温度最小、压力最大时密度最大,整个井筒内最大氮气密度为:<maths num="0003"><math><![CDATA[<mrow><msub><mi>&rho;</mi><mi>m</mi></msub><mo>=</mo><mfrac><mi>m</mi><mi>V</mi></mfrac><mo>=</mo><mfrac><mrow><msub><mi>P</mi><mi>m</mi></msub><mi>m</mi></mrow><mrow><mi>n</mi><mi>R</mi><mi>T</mi></mrow></mfrac><mo>=</mo><mfrac><mrow><msub><mi>P</mi><mi>m</mi></msub><mo>&times;</mo><mn>0.028</mn></mrow><mrow><mn>8.31</mn><mrow><mo>(</mo><mn>273.1</mn><mo>+</mo><mi>t</mi><mo>)</mo></mrow></mrow></mfrac><mo>=</mo><mfrac><mrow><mn>4000000</mn><mo>&times;</mo><mn>0.028</mn></mrow><mrow><mn>8.31</mn><mrow><mo>(</mo><mn>273.1</mn><mo>+</mo><mn>200</mn><mo>)</mo></mrow></mrow></mfrac><mo>=</mo><mn>28.488</mn><mi>k</mi><mi>g</mi><mo>/</mo><msup><mi>m</mi><mn>3</mn></msup><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000950419370000023.GIF" wi="1629" he="135" /></maths>则最小的极限分段距离为<maths num="0004"><math><![CDATA[<mrow><mi>H</mi><mo>=</mo><mfrac><mi>P</mi><mrow><msub><mi>&rho;</mi><mi>m</mi></msub><mi>g</mi></mrow></mfrac><mo>=</mo><mfrac><mn>0.04</mn><mrow><mn>28.488</mn><mo>&times;</mo><mn>0.00981</mn></mrow></mfrac><mo>=</mo><mn>0.0143</mn><mi>m</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000950419370000024.GIF" wi="1413" he="143" /></maths>H为井口到井底最小分段距离,P为允许最小压强误差0.004MPa,g为重力加速度,ρ<sub>m</sub>毛细管中氮气最大密度,m为氮气质量,V为氮气体积,P<sub>m</sub>为毛细管中最大氮气压强,n表示物质的量,T为绝对温度,R表示气体常数,t为实际环境温度;程序中设定迭代累加次数为,i=hight/H,hight为垂直井深值,垂直井深设定为200m,极限分段距离下的累加次数为13986,则从井口到井底每一个极限分段距离下的温度差值为0.005℃,以井口温度、压力为基准点,第一段的极限分段距离下的温度值为t1=t0‑0.005,极限分段距离下对应的氮气密度为r1=3369.4*p0/(273.15+t1),其中p0为井口压力变送器所测压力值,则第一个极限分段距离下对应的氮气压力值为p1=p0+r1*0.00981*0.0003,重新以第一个极限分段距离为基点,继续向下执行,循环执行i=hight/H次,此时所得到的压力值p1为井下毛细管出口处压力;将此时的压力值在LCD第一行进行显示,程序继续执行压力比较子函数,将此时压力值重新按dat=p1*(AD11‑AD10)/16+AD10计算出井底压力对应的二进制值,将此时二进制值与按键设定补氮压力值阈值对应的二进制值进行比较,以决定是否对外打开SSR,在仪表4~20mA通道零满度标定过程中,记录补氮压力阈值对应的电流值及二进制值;②、压力判断方式补充氮气、压力阈值设定步骤:在仪表上电开机后,按三次外部中断按键,此时全局变量按键中断计数值it0value0等于3,程序进入压力阈值设定模块;首先LCD12864清屏,在LCD上显示“设定1:”“设定2:”,判断与单片机相连的S0键电平值是否等于0,如果S0电平值等于0,则表示有键按下,全局变量的压力阈值设定变量press4加1,将press4计数值除以10加小数点后,在LCD第三行压力设定显示,每按一次S0键则对应的压力阈值press4加1,当按键值大于20时,即表示最大设定压力为2.0MPa,将压力阈值设定变量press4赋值为0,press4重新计数,直至达到满意的压力阈值;定时方式补氮程序步骤:①、程序默认的定时补充氮气步骤:程序中默认全局中断计数值it0value0等于0,则进入定时补氮子模式,首先进行LCD12864清屏,在LCD第三行显示“设定时间:”“1天”、“10时”,同时在LCD12864的第一行、第二行显示当前年、月、日、时、分、秒;表征固态继电器打开状态的变量SSRflag,程序初始化过程中设定为0,程序执行补充氮气时间计算子程序;根据time结构体中所存的“月”值,转向“月”所对应的swith分支函数,一年有12个月,则有12个分支入口,将全局变量的间隔天数下的整点时间hour=10赋值给hour1,间隔天数day=1天与当前时间结构体中的timer.day相加,如果其结果大于当前月份所对应的总天数,则对应的补氮月份计数值month1值为当前月份值加1,此时打开固态继电器时间的全局变量day1等于time.day与原day1相加的和,再减去本月的总天数;如果当前月份值正好为12月份且当前天数与间隔天数day相加后总数值大于31,则全局变量month1被赋值为1月份,同时year1被赋值为下一年,此时得到下一次补充氮气的具体时间存放在全局变量year1、month1、day1、hour1、minute1中,同时将固态继电器打开状态变量SSRflag赋值为1,避免重复计算,固态继电器一直不打开,表示已经计算过一次固态继电器打开时间了;程序继续进行将timer结构体中当前时间time.year、time.month、time.week、time.day、time.hour、time.minute与下次补氮时间year1、month1、day1、hour1、minute1进行比较,相等时则打开固态继电器,此时SSR0=0,延时3min,按补氮要求软件延时,人为更改,后关闭SSR,此时SSR0=1,同时将固态继电器状态变量SSRflag赋值为0,以便主程序计算下次补氮时间;单片机中断按键int0计数值it0value0不变,单片机始终工作于定时补氮气1天,10时模式;②定时模式下间隔天数及间隔天数下的整点补氮时间更改:若补氮间隔天数要求5天,整点时间要求12时,按外部中断按键一次,此时it0value0等于1,进入定时模式下,间隔天数与间隔天数下的整点时间更改子函数,LCD清屏,同时显示“设定间隔天数:1天,设定整点时间:10时”;判断外部按键S0电平值是否等于0,软件延时后若等于0则表示S0被按下,此时全局变量间隔天数day加1,同时判断S0按下次数day是否大于7,若大于7则重新赋值为1,表示补氮间隔天数在1到7天之间;按下S0键4次,此时day=5表示补氮间隔天数为5天;程序继续判断外部S1电平值是否等于0,若等于0则表示S1有键按下,对应的hour值加1,同时判断hour值是否大于20,若大于20则被重新赋值为10表示整点补氮时间在间隔天数下的10点到20点之间补氮;按S1键2次,hour=12,若误按几次S0或S1键,则继续hour,day循环计算显示,直至达到满意的设定值;补氮间隔天数及整点时间设定完毕后,按INT0键4次,此时it0value0=0重新进入定时模式,程序按默认的定时补充氮气步骤①执行,间隔天数为5天,整点时间为12的补充氮气模式;③定时模式下单片机当前时间更改子函数步骤:当单片机工作于定时补充氮气模式时,当需要更改单片机时间时,仪表上电后,按四次外部中断按键INT0,则中断子函数全局中断变量值it0value0等于4,转去执行单片机时间更改子函数;首先执行LCD12864清屏,读一次实时时钟,将读到的当前时间在LCD12864上进行显示;程序顺序执行外部按键扫描子函数,判断外部按键S0电平值是否等于0,若外部按键S0电平值等于0表示有键按下,经过软件去抖后确实有S0被按下,S0计数值count值加1,判断count值是否大于4,若大于4则,将count清0,表示只更改年、月、日、时、分更改;如果count等于0,则表示要更改“年”值,此时swith分支转向“年”更改子函数,扫描单片机外部按键S1电平值是否等于0,若S1等于0则全局变量timer结构体中的timer.year加1,判断timer.year是否大于22,若大于22则将timer.year赋值为11,同时将“年”在LCD12864上显示;如果count等于1时,则表示要更改“月”值,此时swith分支转向“月”更改子函数,首先扫描单片机外部按键S1是否等于0,若等于0将全局变量timer结构体中的timer.month加1,判断timer.month是否大于12,若大于12则将timer.month赋值为1,同时将设定数值进行显示;如果count等于2,则表示要更改“日”值,此时swith分支转向“日”更改子函数,首先扫描单片机外部按键S1是否等于0,若等于0则结构体timer中的timer.day加1,判断timer.day是否大于31,若大于31则将timer.day赋值为1,同时将timer.day在LCD上显示;如果count等于3,则表示要更改“时”值,此时swith分支转向“时”更改子函数,首先扫描单片机外部按键S1是否等于0,若等于0则全局变量timer结构体中的timer.hour加1,判断timer.hour是否大于或等于24,若大于或等于24则将timer.hour赋值为0,同时在LCD上显示设定“时”值;如果count等于4,则表示要更改“分”值;单片机扫描外部按键S1是否等于0,若等于0则全局变量timer结构体中的timer.minute加1,判断timer.minute是否大于59若大于59则将timer.minute赋值为0,同时将timer.minute在LCD上显示“分”值;当时间更改满意后,再按一次中断INT0键,程序将更改过后“年、月、日、时、分”写入到实时时钟U4中,实现单片机实时时钟应用外部按键更改。
地址 100007 北京市东城区东直门北大街9号中国石油大厦