版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
东北石油大学本科毕业设计(论文)PAGE摘要根据聚驱区块实际工作需求,需要及时为动态分析管理人员提供动态生产管理方面的动静态数据、图幅、曲线等信息资料,并从多方位提供动静态数据分析、统计、对比等功能,为此开发了聚驱区块动态分析系统。系统包括对含水下降井、稳定井、回升井、未见效井生产状况的分析;统计不同日增油量下降值见效前、高峰期、目前生产数据表;绘制不同注采关系含水变化曲线、不同河道沙控制程度提高采收率变化曲线;计算不同见效类型生产情况表等等。除以上功能,本系统还可以对产油量,注入压力、注入浓度等数据绘制等值线,然后对等值线进行追踪、光滑及填充,生成等值线分布图。系统开发工具是VS2005和C#语言,后台数据库采用Oracle10g。整个系统具有友好、简洁的界面,安全性高,稳定性强。关键词:聚驱区块动态分析;变化曲线;等值图AbstractPolymerFloodingBlockDynamicAnalysisSystemwasdevelopedtomeettheneedsformanagingstaticanddynamicproductiondata,providingmapsheetandcurveinformation,andalsoprovidingthemulti-dimensionaldataanalysis,statistics,comparisonandotherfunctions.Thesystemincludesthefollowingfunctions:theproductionstatusanalysisofwatercutdeclinewells,watercutincreasewells,stablewells,andno-effectivewells;statisticsofoilwellproductiondataatdifferentperiods,suchasbefore-effectiveperiod,productionpeakperiodandcurrentperiod;plottingofwatercutchangescurvewithrespecttodifferentinjection-productionrelationandplottingofenhancedoilrecoverycurvetodifferentchannelsandcontroldegrees;statisticsofproductiondataofdifferenteffectivetypewells,etc.Inadditiontothepreviousfunctions,somecontourcurves,suchasoilproduction,injectionpressure,andinjectiondensity,couldalsobeplotted,tracked,smoothedandfilled,ThesystemdevelopmenttoolisVS2005andC#language,usingOracle10gas.thebackgrounddatabase.Thewholesystemhasafriendly,simpleinterface,highsecurityandstability.Keywords:Polymerfloodingblockdynamicanalysis;changecurve;contourmapsPAGE35目录TOC\o"1-2"\h\z\u第1章概述 11.1项目背景 11.2研究目标 1第2章聚驱区块动态分析系统开发相关技术 22.1C#简介 22.2Oracle介绍 32.3Chart插件介绍 4第3章聚驱区块动态分析系统分析 53.1系统需求分析 53.2系统的可行性研究 63.3系统架构分析 7第4章聚驱区块动态分析系统设计 84.1系统功能模块设计 84.2系统结构设计 84.3数据库设计 94.4系统UI设计 13第5章聚驱区块动态分析系统实现 155.1系统实现概述 155.2等值图生成 155.3井类别标识 235.4不同类别井生产状况表 245.5不同指标变化生产数据表 265.6不同指标对应变化曲线 295.7其他 30第6章聚驱区块动态分析系统测试 316.1测试方法 316.2系统测试 32结论 33参考文献 34致谢 35第1章概述1.1项目背景随着油田开发进程的加快,油田动态开发生产中油水井的逐年增多,给动态生产管理增加了很大难度,急需研究并且开发动态生产管理辅助决策支持系统,及时为动态分析管理人员提供动态生产管理方面的动静态数据、图幅、曲线等信息资料,并且从多方位提供动静态数据分析、统计、对比等功能,采用智能技术完成各类生产问题,实现提高油田动态生产效率的目标。随着井网的逐步加密,独立区块注采井距由250m缩小到125-150m,总井数由150口左右增加到500口左右,区块管理人员1-2人,而区块注聚过程中分析、调整工作量较多,涉及的图、表格式复杂,为了提高区块工作效率,降低劳动强度,应将区块常用分析方法所需图表及为动态调整所考虑因素进行系统集成,即建立动态分析系统,研制一个聚驱区块动态分析辅助决策系统。1.2研究目标课题研究的目标是:根据聚驱区块实际工作需求建立数据资源综合管理平台,提供一个集成的管理环境,有效的解决开发生产分析各环节中数据标准、数据管理、数据应用问题,建立基于综合资源管理平台的辅助决策支持系统支撑环境,建立相关的基础数据库和规则数据库,实现数据动态分析和聚驱区块工作常用等值图的绘制工作。本系统在开发过程中,吸取了国内现有的部分相关软件在软件实用性、先进性和可靠性等方面的优点,立足聚驱区块的实际情况,侧重数据动态分析和聚驱区块工作常用等值图而最终完成的一套软件界面友好、功能简明实用的软件系统。第2章聚驱区块动态分析系统开发相关技术2.1C#简介C#是微软公司在2000年6月发布的一种新的编程语言,并在微软职业开发者论坛(PDC)上登台亮相。C#看起来与Java相似,它包括了诸如单一继承,界面,与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NETwindows网络框架的主角[1]。C#特点:(1)命名空间中的申明当创建一个程序时,在一个命名空间里创建了一个或多个类。同时在这个命名空间里(在类的外面)还有可能声明界面、类型和结构体。必须使用using关键字来引用其他命名空间的内容[2]。(2)基本的数据类型C#拥有比C、C++或者Java更广泛的数据类型。这些类型是bool,byte,ubyte,short,ushort,int,uint,long,ulong,float,double和decimal。所有这些类型都有一个固定的大小,每个数据类型都包含有符号和无符号两种类型。(3)两个基本类一个名叫object的类是所有其他类的基类,而一个名叫string的类,作为语言的一部分存在意味着编译器有可能使用它,无论何时你在程序中写入一句带引号的字符串,编译器会创建一个string对象来保存它[3]。(4)参数传递方法可以被声明接受可变数目的参数,缺省的参数传递方法是对基本数据类型进行值传递。ref关键字可以用来强迫一个变量通过引用传递,这使得一个变量可以接受一个返回值。out关键字也能声明引用传递过程,与ref不同的地方是,它指明这个参数并不需要初始值[4]。(5)与COM的集成C#对Windows程序最大的特点可能就是它与COM的无缝集成了,COM就是微软的Win32组件技术。实际上,最终有可能在任何.NET语言里编写COM客户和服务器端。C#编写的类可以子类化一个已存在的COM组件;生成的类也能被作为一个COM组件使用,然后又能使用比方说,JScript语言子类化,从而得到第三个COM组件。这种现象的结果导致了一个运行环境的产生,在这个环境里的组件是网络服务,可用任何.NET语言子类化[5]。2.2Oracle介绍2.2.1Oracle概论Oracle是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一[6]。2.2.2Oracle特点1、提供了基于角色(ROLE)分工的安全保密管理。在数据库管理功能、完整性检查、安全性、一致性方面都有良好的表现。2、支持大量多媒体数据,如二进制图形、声音、动画以及多维数据结构等。3、提供了与第三代高级语言的接口软件PRO*系列,能在C,C++等主语言中嵌入SQL语句及过程化(PL/SQL)语句,对数据库中的数据进行操纵。加上它有许多优秀的前台开发工具如POWERBUILD、SQL*FORMS、VISIABASIC等,可以快速开发生成基于客户端PC平台的应用程序,并具有良好的移植性[7]。4、提供了新的分布式数据库能力。可通过网络较方便地读写远端数据库里的数据,并有对称复制的技术。2.2.3存储结构1、物理结构ORACLE数据库在物理上是存储于硬盘的各种文件。它是活动的,可扩充的,随着数据的添加和应用程序的增大而变化[8]。下图为ORACLE数据库扩充前后在硬盘上存储结构的示意图:图2-1ORACLE数据库扩充前后在硬盘上存储结构的示意图2、逻辑结构ORACLE数据库在逻辑上是由许多表空间构成。主要分为系统表空间和非系统表空间。非系统表空间内存储着各项应用的数据、索引、程序等相关信息。我们准备上马一个较大的ORACLE应用系统时,应该创建它所独占的表空间,同时定义物理文件的存放路径和所占硬盘的大小[9]。下图为ORACLE数据库逻辑结构与物理结构的对照关系:图2-2ORACLE数据库逻辑结构与物理结构的对照关系2.3Chart插件介绍一、要想利用这个功能强大的控件,首先必须引用以下DLL和相关文件1.在WinForm应用程序中要想使用该图表控件,需引用如下DLL[10]:System.Windows.Forms.DataVisualization.Design.dllSystem.Windows.Forms.DataVisualization.dllSystem.Windows.Forms.DataVisualization.xml2.在Web应用程序中要想使用该图表控件,需引用如下DLL:System.Web.DataVisualization.dllSystem.Web.DataVisualization.Design.dllSystem.Web.DataVisualization.xml二、采用WinForm程序使用该图表控件[11]1.创建一个WinForm工程:DemoCollection。2.添加一个Form窗体:FrmChartDemo。3.添加所需的DLL引用。4.在该窗体的Load事件函数中动态创建好Chart对象实例。5.添加一个Timer控件,在Timer控件的Tick事件函数中向Chart中添加坐标值(X值和Y值),然后在窗体中绘制出来[12]。第3章聚驱区块动态分析系统分析3.1系统需求分析实现聚驱区块动态分析系统,包括等值图的实现,井类别标识,对含水下降井、稳定井、回升井、未见效井的分布及生产状况的分析,不同指标生产数据表的绘制,包括对不同含水回升值生产数据表,不同增油量生产数据表;对不同指标对应的变化曲线的绘制,包括对不同注采对应含水变化曲线、不同河道砂控制程度含水变化曲线等。在需求分析阶段,采用微软提供的Microsoftofficvisio2007专业工具绘制各个模块流程图,以下分别为等值图模块和不同指标生产数据表绘制模块流程图:否否是开始设置区块设置时间数据设置等值图设置获取绘图数据判断数据是否为空绘制等值图保存至本地开始图3-1等值图绘制流程图开始开始选择分析项目选择区块选定时间选定注聚时间输入基数并选择分级数获取相应生产情况数据保存本地绘制生产情况表判断数据是否为空结束图3-2不同指标生产数据表绘制模块流程图3.2系统的可行性研究3.2本系统使用VisualStudio2005开发工具,此版本对ASP.NET2.0、CLR2.0、VB.NET与C#.NET在语言上进行强化,提供更好的执行效能,并更加注重安全性等方面。数据库使用Oracle10g,数据自动镜像存储、数据闪回功能以及功能强大的数据导出工具、大文件表空间以及表空间组管理保证了系统技术上的可行性[13]。3.2本系统的开发给用户带来极大的方便,所耗费的人力、物力、技术、资金都大大降低,使用后的开发效益一定大于开发成本。本系统投入使用后,可以减轻工作人员的工作强度,提高工作效率。新系统的效益是难以用货币形式表现出来的间接效益,本系统带来的间接经济效益有:改善工作环境;减少工作强度;提高工作效率;降低销售成本;扩大市场占有量率等。所以说在经济上是可行的[14]。3.2系统处理的准确性与及时性是系统的必要性能。在系统设计与开发过程中,充分考虑系统当前与将来可能承受的工作量,使系统的处理能力与响应时间能够满足用户的需求。设计开发中一直注重系统操作的简单方便,操作方式都非常简单、人性化,相关的操作方式与用户已经习惯的各大软件的用户操作方式基本相同。所以,操作方式在用户组织内是行得通的[15]。3.3系统架构分析系统基于.net开发模式,采用模型-视图-控制(Model-View-Control,简称MVC)体系结构,运用软件工程的设计方法及一些常用模式开发系统,为用户提供了清新的使用界面和快捷的使用方式。MVC结构是目前最常见的体系结构,它主要适用于存在大量交互的情况下,用户需要多次访问服务器,提取相关数据并进行显示。由于本系统的使用人员为各区块的聚驱技术分析人员,目前存在大量的本地信息,信息共享要求不高;并且在工作过程中,经常需要利用本地信息生成中间报表和图幅,以备汇报工作使用,为此系统开发采用C/S模式及多层架构,同时采用了OLEDB等最新的数据访问技术,底层数据库采用Oracle,兼容访问EXCEL、DBF等本地数据文件格式,数据交换采用了XML等先进的国际标准。多层应用框架从体系结构上包括客户端(clientTier)、中间层(MiddleTier)和企业信息系统(EISTier,包括数据库等),并具有以下特点:①灵活的客户端:包括多种类型的客户端,如上图所示,在防火墙内的可以是Application或浏览器方式,在防火墙外主要是浏览器方式;②功能强大的中间层:中间层包括业务逻辑组件运行环境、应用服务器及各种配套的服务。③丰富的企业信息系统:后台的企业信息系统可以是各种数据库、各种办公自动化系统及其他的传统的信息系统。第4章聚驱区块动态分析系统设计4.1系统功能模块设计整个系统分为七个模块,如图4-1所示:动态分析系统动态分析系统井类别标识不同日增油量下降值生产数据表不同见效类别井生产情况表不同注采对应提高采收率曲线不同河道砂控制程度含水提高采收率曲线等值图不同类型井生产状况表图4-1系统模块图4.2系统结构设计聚驱区块动态分析系统软件界面采用主窗口大图标菜单和功能调用相结合的方式。界面物理结构为主菜单与大图标菜单栏构成,上面菜单栏包含软件系统的三大部分主要功能:eq\o\ac(○,1)聚驱区块等值图绘制eq\o\ac(○,2)井类别标识eq\o\ac(○,3)不同日增油量下降值生产数据表eq\o\ac(○,4)不同类型井分布图及生产状况表eq\o\ac(○,5)不同见效类别井生产情况表eq\o\ac(○,6)不同注采对应提高采收率曲线eq\o\ac(○,7)不同河道砂控制程度含水提高采收率曲线。以下为软件架构图:主页面主页面聚驱区块等值图绘制聚驱区块动态分析系统数据库井类别标识不同日增油量下降值生产数据表不同类型井分布图及生产状况表不同见效类别井生产情况表不同注采对应提高采收率曲线不同河道砂控制程度含水提高采收率曲线图4-2聚驱区块动态分析系统架构图4.3数据库设计从数据应用系统和开发的全过程来考虑,数据库的设计可以分为六个阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库的运行与维护,按照这样的设计过程,数据库的结构设计不同阶段可形成数据库的各级模式。数据库的设计的核心问题是如何从系统的观点出发建立一个数据库模式。一个良好的数据库应用该充分的反映软件的流程和计算要求,同时还应该使后继开发工作方便、快捷,易于管理和维护。在物理设计阶段根据软件的特点和处理要求,进行物理存储安排。(1)数据库需求分析聚驱区块数据及文档管理系统的数据库主要包括以下几张表:eq\o\ac(○,1)油井属性表:标准井号、井别、区块名、区块代码、投产日期、矿名、采油队、配置站、注入站、破裂压力、空隙体积。eq\o\ac(○,2)水井属性表:标准井号、井别、区块名、区块代码、投产日期、矿名、采油队、配置站、注入站、破裂压力、空隙体积。eq\o\ac(○,3)采油井日数据:总井数、开井数、产液、日产油、含水、流压、矿化度、氯离子含量。eq\o\ac(○,4)注入井日数据:总井数、开井数、注入压力、日配注水量、日配注母液量、日配注液量、日注水量、日注母液量、日注液量。eq\o\ac(○,5)采油井月数据:总井数、开井数、日产液、日产油、含水、流压、月产油量、月产水量、核实月产油量、核实月产水量、采聚浓度、采碱浓度、采表活剂浓度、矿化度、沉没度。eq\o\ac(○,6)注入井月数据:总井数、开井数、注入压力、日配注水量、日配注母液量、日配注液量、日注水量、日注母液量、日注液量、月注水量、月注母液量、月注液量、注入液浓度、注入液粘度。eq\o\ac(○,7)标定表:ID、井号、见效前时间、见效前产液、见效前产油、见效前含水、见效前产液浓度、最低含水时间、最低含水产液、最低含水产油、最低含水产水、最低含水产液浓度。eq\o\ac(○,8)静态数据表1:ID、井名、测井小队、测井系列、测井时间、测井井深、测井井段、井底温度。eq\o\ac(○,9)静态数据表2:ID、井常用名、井名、井别、钻井目的、钻井小队、开钻时间、套管程序、钻头程序、完钻时间、完钻井深、钻开油层时间、钻井液停止循环时间、钻井液密度1、钻井液密度2、钻井液黏度1、钻井液黏度2、失水量、电阻率1、电阻率2。(2)部分数据表的表结构设计如下:eq\o\ac(○,1)油井属性表ATTDB_OIL,表结构如表2-1所示:表4-1ATTDB_OIL表结构编号字段名称中文含义数据类型是否为空1JH标准井号VARCHAR2(16)否2QK区块名VARCHAR2(20)否3QKDM区块代码VARCHAR2(20)否4JB井别VARCHAR2(2)否5TCRQ投产日期DATE否6KM矿名VARCHAR2(8)否7CYD采油队VARCHAR2(20)否8ZRZ注入站VARCHAR2(20)否9PLYL破裂压力VARCHAR2(20)否10KXTJ空隙体积VARCHAR2(20)否11POLY_STATION配置站VARCHAR2(20)否eq\o\ac(○,2)水井属性表ATTDB_WATER,表结构如表4-2所示:表4-2ATTDB_WATER表结构编号字段名称中文含义数据类型是否为空1JH标准井号VARCHAR2(16)否2QK区块名VARCHAR2(20)否3QKDM区块代码VARCHAR2(20)否4JB井别VARCHAR2(2)否5TCRQ投产日期DATE否6KM矿名VARCHAR2(8)否7CYD采油队VARCHAR2(20)否8ZRZ注入站VARCHAR2(20)否9PLYL破裂压力VARCHAR2(20)否10KXTJ空隙体积VARCHAR2(20)否11POLY_STATION配置站VARCHAR2(20)否eq\o\ac(○,3)采油井月数据DBA04,表结构如下表4-3所示:表4-3DAA04表结构编号字段名称中文含义数据类型是否为空1ZJS总井数VARCHAR2(16)否2KJS开井数VARCHAR2(20)否3RCYL日产液VARCHAR2(20)否4HS含水VARCHAR2(2)否5LY流压VARCHAR2(2)否6YCYL月产油量VARCHAR2(8)否7YCSL月产水量VARCHAR2(20)否8HSYCYL核实月产油量VARCHAR2(20)否9HSYCSL核实月产水量VARCHAR2(20)否10CCJHWND采聚浓度VARCHAR2(2)否11CCJND采碱浓度VARCHAR2(2)否12CCBHJND采表活剂浓度VARCHAR2(8)否13KHD矿化度VARCHAR2(2)否14CMD沉没度VARCHAR2(2)否eq\o\ac(○,4)注入井月数据DBA05,表结构如下表4-4所示:表4-4DAA05表结构编号字段名称中文含义数据类型是否为空1ZJS总井数VARCHAR2(16)否2KJS开井数VARCHAR2(20)否3YY注入压力VARCHAR2(20)否4RPZSL日配注水量VARCHAR2(2)否5RPMYL日配注母液量VARCHAR2(2)否6RPZRYL日配注液量VARCHAR2(8)否7RZSL日注水量VARCHAR2(20)否8RZMYL日注母液量VARCHAR2(20)否9RZRYL日注液量VARCHAR2(20)否10YZSL月注水量VARCHAR2(2)否11YZMYL月注母液量VARCHAR2(2)否12YZYL月注液量VARCHAR2(8)否13ZRYND注入液浓度VARCHAR2(12)否14ZRYND1注入液粘度VARCHAR2(20)否eq\o\ac(○,5)井类别标识数据表WELL_BD,表结构如下表4-5所示:表4-5WELL_BD表结构编号字段名称中文含义数据类型是否为空1JH井号VARCHAR2(16)否2JXQTIME见效前时间VARCHAR2(6)否3JXQRCYEL见效前产液FLOAT否4JXQRCYL见效前产油FLOAT否5JXQHS见效前含水FLOAT否6JXQND见效前产液浓度FLOAT否7LOWHSTIME最低含水时间VARCHAR2(6)否8LOWRCYEL最低含水产液FLOAT否9LOWRCYL最低含水产油FLOAT否10LOWRCSL最低含水产水FLOAT否11LOWHS最低含水FLOAT否12LOWND最低含水产液浓度FLOAT否续表4-5编号字段名称中文含义数据类型是否为空13HSFALL含水下降FLOAT否14HSVARYTYPE阶段含水变化类型VARCHAR2(10)否15JXTYPE见效类型VARCHAR2(20)否16LOWCMD最低含水沉没度FLOAT否17LOWCCJHWND最低含水采聚浓度FLOAT否4.4系统UI设计系统界面整体布局为左右结构,左侧为要分析的项目及数据选项,右侧为分析结果显示区,为了增强软件的人机交互、操作逻辑,使系统界面简洁美观。我使用DOTNETBAR控件让系统具有office2007的风格,使用Dsoframer控件提供调用office软件的接口,支持office文档的展示功能,并提供打印、编辑、下载和上传等功能。下图为系统界面图及Dsoframer效果展示图图4-3动态分析界面设计图图4-4DSOFRAMER效果图第5章聚驱区块动态分析系统实现5.1系统实现概述系统实施是继系统规划、系统分析、系统设计之后的又一个重要阶段,它将按照系统设计选定的方案具体实施。在系统分析和系统设计阶段,系统开发工作主要是集中在逻辑、功能和技术设计上,工作成果是以各种系统分析和设计文档来体现的。系统实施阶段要继承此前各阶段的工作成果,将技术设计转化为物理实现。程序设计又称编码,为了保证编码工作正确而顺利进行,一方面程序设计人员必须仔细阅读系统设计的全部文档资料,充分理解程序模块的内部过程和外部接口,以保证系统实施与系统设计的一致性。另一方面,程序设计人员必须深刻的理解,熟练的掌握和正确的运用程序设计语言以及软件开发环境和工具,以保证功能的正确实现。对程序设计的基本质量要求是程序的正确性,即一方面正确运用程序设计语言环境,以避免语法的错误。另一方面,程序所描述的过程和算法要满足系统设计的功能要求,以避免语义错误。我们尽量使程序不仅能在计算机上正确执行,而且对于阅读人来说犹如一篇好文章,结构清晰,逻辑简明,易读易懂,便于修改和扩充。5.2等值图生成5.2.1等值图在聚驱区块工作中占有比较重要的地位,等值图能够宏观上的展示在整个区块中各个井口的工作情况。本系统需要对以下数据绘制等值线:注入压力、压力空间、注水量、注入浓度、注入粘度、聚合物用量、注入pv数、日产液、日产油、含水、采聚浓度、沉没度、阶段提高采收率、含水下降值、含水回升值、日增油量、阶段采出程度。5.2.2从库中读取或经过计算后,得到所需的等值线绘制数据,由井位横坐标X、纵坐标Y和等值线数据Value三要素,依据反距离加权插值法进行插值,然后对等值线进行追踪、光滑及填充,生成等值线分布图。1)反距离加权插值:反距离加权插值方法是一个加权平均插值法,可以进行确切的或者圆滑的方式插值。方次参数控制着权系数如何随着离开一个格网结点距离的增加而下降。对于一个较大的方次,较近的数据点被给定一个较高的权重份额,对于一个较小的方次,权重比较均匀地分配给各数据点。计算一个格网结点时给予一个特定数据点的权值与指定方次的从结点到观测点的该结点被赋予距离倒数成比例。当计算一个格网结点时,配给的权重是一个分数,所有权重的总和等于1.0。当一个观测点与一个格网结点重合时,该观测点被给予一个实际为1.0的权重,所有其它观测点被给予一个几乎为0.0的权重。换言之,该结点被赋给与观测点一致的值。这就是一个准确插值。确定出网格的坐标(x,y)后,使用公式确定各网格点的value:,得出所有网格点的(x,y,value)。2)等值线追踪:将孤立的等值点连接在一起形成等值线。一般先追踪开曲线,即起止于网格边界线上的等值线。追踪开曲线可以顺着四个边界进行,对于某个边界任意选取一个等值点作为开始点,追踪下一个等值点,直到追踪到的下一个等值点也是边界上的点,就完成了一条等值线的追踪。要从一个等值点追踪到下一个等值点,这通常是利用上一次的追踪方向来确定的。对于矩形网格来说追踪方向有4种,即向下、向左、向上和向右。如果上一次等值点所在网格的列比本次等值点所在列小于1,则追踪方向向右。对于每一种追踪方向可能出现的情况有两种。这里以向右追踪为例进行说明,其余方向可以类推。向右追踪时,如果网格其他三个边上仅有一边存在等值点.则选择它作为下一个点;如果其他三边均存在等值点则从相邻的上、下边中选取,计算上一个等值点到上、下边中待选等值点的距离,取距离小的作为下一个等值点。利用上面的追踪方法追踪等值线一般都符合实际情况,并且不会出现交叉现象。当追踪出一个等值点后需要将它删除,这样追踪完一条等值线后就不会重复追踪该等值线上的点了。当某一边界已没有等值点可以追踪后,就完成了该边界的开曲线追踪,对于矩形网格需要在四个边界上都进行开曲线追踪。开曲线追踪完毕后,可能还存在一些等值点,它们将构成封闭的闭曲线,可以任取一点进行追踪,直至回到该点则完成追踪。如果所有等值点都被追踪过了。则关于该等值的等值线就全部追踪完毕了。3)等值线光滑利用追踪算法得到的等值线,在网格比较稀疏的情况下显得不够平滑,往往还需要采用一种拟合方法对等值线进行圆滑。这里使用三次参数样条曲线来拟合加密曲线,达到圆滑的效果。在数学上,光滑程度的定量描述是:函数(曲线)的k阶导数存在且连续,则称该曲线具有k阶光滑性。设上给出一组节点,若函数s(x)满足条件(1);(2)s(x)在每个小区间上是三次多项式,则称s(x)是节点上的三次样条函数。若s(x)在节点上还满足插值条件(3),则称s(x)为上的三次样条插值函数.经积分得,,方程1,其中,分段三次样条插值(简称Spline插值)是通过形值点的一条光滑曲线,从数学上表示就是由定义1所给出的三条件得到的s(x),它在区间上是二阶连续的,在每个小区间上是三次多项式并通过给定点,若补充上相应的边界条件就可求得s(x),通过解三弯矩方程2或方程3就可得到方程1所表示的s(x)。弯矩方程:,方程2,方程34)等值线填充图形学中填充多边形的扫描线转换算法需要使用如下数据结构:等值线Y桶:等值线Y桶用于记录等值线的基本信息,桶的长度与扫描线的条数一样多,其编号与扫描线序号一致。每条等值线都要生成一个桶记录项,记录该等值线的最大Y坐标ymax、指向等值线的指针和指向该等值线边Y桶的指针。桶记录项按等值线的最小Y坐标插入到桶中。有效等值线表AIT:该表存储与当前扫描线相交的所有等值线在等值线Y桶中的记录指针。边Y桶:每条等值线都由一系列的边组成,为了利用相关性,需要建立等值线的边Y桶,记录每条边的基本信息。等值线边Y桶的长度等于与该等值线相交的扫描线的条数。对于等值线中的每条边都要产生一个边记录,记录该边的最大Y坐标ymax,Y值较小端对应的X坐标xmin,当扫描线增大1时X坐标的增量△x,以及等值线的值value。每一个边记录按该边的最小Y坐标和整条等值线的最小Y坐标的差值存人边桶中。有效边表AET:该表存储与当前扫描线相交的所有等值线的边在边Y桶中的记录指针。利用上面的数据结构,一个完整的扫描线转化填充算法如下:遍历所有的等值线,为每一条等值线生成一个等值线Y桶中的记录,并根据等值线的最小Y坐标将该记录加入到等值线Y桶中。将有效等值线表AIT和有效边表AET初始化为空。对于每一条扫描线i,它从最小值开始,做以下工作。①检查等值线Y桶对于扫描线i是否有新的等值线记录,如果有则生成该扫描线对应的边Y桶,并在有效等值线表AIT中加入该扫描线的桶记录。②遍历AIT中的每一条等值线对应的桶记录,检查该等值线对应的边Y桶对于扫描线i是否有新的边记录加入,如果有则将新的边记录按xmin字段的大小加入到有效边表AET中。③利用有效边表AET和扫描线填充算法填充该扫描线。④遍历AET,检查是否有边记录的ymax字段等于i,如果有则删除该边记录,否则令该边记录的xmin=xmin+△x。⑤遍历AIT表,检查是否有等值线记录的ymax字段等于i,如果有则删除该记录。5.2.3选择区块及对应的数据项,单击<等值线>按钮,则显示数据及等值图如下所示:图5-1等值图模块截图其中井位分布图可根据需要设定是否叠加显示:图5-2等值图模块截图等值图可根据需要选择不同的颜色方案显示,单击<保存>按钮可将等值图保存为图象文件。图5-3等值图模块保存图片截图等值图模块的核心代码如下:privateint[]color=newint[]{0xFF0000,0xFFFF00,0x00FF00,0x0000FF,0x8000FF,0xFFFF00,0xFF80FF,0xFF1CAE,0xE6E8FA,0x99CC32};//{0xFF0066,0x000CC,0xFF6600,0x006600,0xCCC33,0xFFFF00,0x23238E,0xFF1CAE,0xE6E8FA,0x99CC32};privatedoublemax=0,min=100000;//存放数据的最大最小值privateobject[]hzb=newobject[10000];//横坐标,大小在程序中动态确定privateobject[]zzb=newobject[10000];//纵坐标privatedouble[]A=newdouble[10000];//数据privatestring[]jhs=newstring[10000];//井号privatefloatxmax,xmin,ymax,ymin;//实际横纵坐标最大最小值privateobject[]hzb1=newobject[10000];privateobject[]zzb1=newobject[10000];//另一井别纵坐标privatestring[]jhs1=newstring[10000];//井号privateOleDbDataReaderdataReader=null;//临时变量privatestringcolumnTitle;//第三列标题privatestringjb="";//标识目前看的是哪一种井的数据privateArrayListAllItemBlocks=newArrayList();//存放所有图道的图元,每个元素是一个ItemDetailprivateArrayListfenji1=newArrayList();privateArrayListfenji2=newArrayList();privateArrayListfenjiColor=newArrayList();privateLabel[]fLabels=newLabel[15];privateTextBox[]fColors=newTextBox[15];privateBitmapbitmap;//存放图像文件privateGraphicsgraphics;//临时变量privatevoidstartDraw(){resizeArray();strings=null;if(dateTimePicker1.Value.Month<10){s="0"+dateTimePicker1.Value.Month.ToString();}else{s=dateTimePicker1.Value.Month.ToString();}s=dateTimePicker1.Value.Year.ToString()+s;//时间"yyyymm"stringselectItem=comboBox4.Text.ToString();stringqk=boBox3.Text;//获取井号,x,y,数据项值setA(selectItem,s,s,qk);if(this.jhs.Length>0){//库中有需要的数据try{drawContours();if(this.checkWellPos.Checked){this.AllItemBlocks.Clear();drawWellMap();drawWellOtherMap();object[]o;foreach(ItemDetailidinAllItemBlocks){o=id.getAll();walkOut(o,this.graphics);//this.pictureBox1.CreateGraphics());}}this.dataGridViewX1.DataSource=dataTable;this.dataGridViewX1.Columns[0].HeaderText="井号";this.dataGridViewX1.Columns[3].HeaderText=columnTitle;this.dataGridViewX1.Columns[0].Width=80;this.dataGridViewX1.Columns[1].Width=50;this.dataGridViewX1.Columns[2].Width=50;this.dataGridViewX1.Columns[3].Width=100;tabControl1.SelectedTab=tabItem2;}catch(Exceptione){MessageBox.Show(e.Message);}}else{MessageBox.Show("数据库中无该数据项在此时间内的数据,请重新选择!");}}//画选择类别井井位分布图privatevoiddrawWellMap(){//this.AllItemBlocks.Clear();ItemDetailitem=newItemDetail();ArrayListca=item.Blocks;Coordcord=newCoord(0,0,pictureBox1.Width,pictureBox1.Height,this.xmin,this.ymax,this.xmax-this.xmin,this.ymax-this.ymin);Lanelane=newLane(cord);TaskDrawCuretask=newTaskDrawCure(lane);task.setData(hzb);object[]nzzb=newobject[zzb.Length];for(inti=0;i<nzzb.Length;i++){nzzb[i]=2*ymax-(float)((double)zzb[i]);}task.setDepth(nzzb);PointF[]allPts=task.getAllScreenPoints();//主图if(allPts.Length>0)for(inti=0;i<allPts.Length;i++){if(jb=="oil"){ca.Add(newPointBlock(Color.Red,5,allPts[i]));}else{ca.Add(newTextBlock("◎",newFont("宋体",5),newSolidBrush(Color.Blue),allPts[i].X,allPts[i].Y));//PointBlock(Color.Red,5,allPts[i]));}ca.Add(newTextBlock(jhs[i],newFont("宋体",7),newSolidBrush(Color.Black),allPts[i].X-15,allPts[i].Y-13));}AllItemBlocks.Add(item);}5.3井类别标识点击标定按钮,触发Click事件,将单井的值cbb_SingleWell.Text传到要标定的井号。具体代码如下:privatevoidbuttonX2_Click(objectsender,EventArgse){BindBoxbd;if(cbb_SingleWell.Text==""||cbb_SingleWell.Text=="请选择井号")bd=newBindBox();elsebd=newBindBox(cbb_SingleWell.Text);bd.Show();}选择阶段含水变化关系、见效类型、见效时间及含水最低时间的值,点击确定按钮,将值插入或更新到WELL_BD表中。如下图所示:图5-4井类别标识5.4不同类别井生产状况表应对聚驱区块工作要求,同级区块内下降井、含水回升井、稳定井、未见效井的成产情况,按照井别以及日起范围进行统计。如下图所示:图5-5统计生产数据图实施方法:采用T_SQL命令通过提取库中数据,并进行统计合并。所用的T_SQL核心语句如下:select井信息.类别,井信息.井数,数据.见效日产液,数据.见效日产油,数据.见效含水,数据.见效沉没度,数据.见效采聚浓度,数据.目前日产液,数据.目前日产油,数据.目前含水,数据.目前沉没度,数据.目前采聚浓度from(selectmt1.类别,mt1.井数,(mt1.井数/mt2.总数)*100井数比例from(selectLBas类别,count(JH)as井数fromwell_bdgroupbyLBunionallselect'合计',sum(count(1))fromwell_bdgroupbyLB)mt1,(select总数as总数from(select'合计',sum(count(1))as总数fromwell_bdgroupbyLB))mt2)井信息,(select见效.类别,见效.日产液见效日产液,见效.日产油见效日产油,见效.含水见效含水,见效.沉没度见效沉没度,见效.采聚浓度见效采聚浓度,目前.日产液目前日产液,目前.日产油目前日产油,目前.含水目前含水,目前.沉没度目前沉没度,目前.采聚浓度目前采聚浓度from(select类别,round(AVG(日产油)+AVG(日产水),1)日产液,round(AVG(日产油),1)日产油,round((1-(round(AVG(日产油),1)/round(AVG(日产油)+AVG(日产水),1)))*100,1)含水,round(AVG(泵深)-AVG(动液面深度))沉没度,round(AVG(采聚浓度))采聚浓度from(selectwell_bd.lb类别,dba04.jh井号,dba04.RCYL日产油,dba04.RCSL日产水,dba04.HS含水,dba04.BS泵深,dba04.DYM动液面深度,dba04.CCJHWND采聚浓度fromwell_bd,DBA04wherewell_bd.jh=dba04.jhanddba04.ny='200912')mt1groupby类别unionallselect'合计',round(AVG(RCYL)+AVG(RCSL),1)日产液,round(AVG(RCYL),1)日产油,round((1-round(AVG(RCYL),1)/round(AVG(RCYL)+AVG(RCSL),1))*100,1)含水,round(AVG(BS)-AVG(DYM))沉没度,fromdba04wheredba04.ny='200912')见效,(select类别,round(AVG(日产油)+AVG(日产水),1)日产液,round(AVG(日产油),1)日产油,round((1-(round(AVG(日产油),1)/round(AVG(日产油)+AVG(日产水),1)))*100,1)含水,round(AVG(泵深)-AVG(动液面深度))沉没度,round(AVG(采聚浓度))采聚浓度from(selectwell_bd.lb类别,dba04.jh井号,dba04.RCYL日产油,dba04.RCSL日产水,dba04.HS含水,dba04.BS泵深,dba04.DYM动液面深度,dba04.CCJHWND采聚浓度fromwell_bd,DBA04wherewell_bd.jh=dba04.jhanddba04.ny='201001')mt1groupby类别unionallselect'合计',round(AVG(RCYL)+AVG(RCSL),1)日产液,round(AVG(RCYL),1)日产油,round((1-round(AVG(RCYL),1)/round(AVG(RCYL)+AVG(RCSL),1))*100,1)含水,round(AVG(BS)-AVG(DYM))沉没度,round(AVG(CCJHWND))采聚浓度fromdba04wheredba04.ny='201001')目前where见效.类别=目前.类别)数据where井信息.类别=数据.类别5.5不同指标变化生产数据表5.5.1根据日增油量数据,按照分级情况统计出每一级别的不同见效时期的日产液、日产油、含水、沉没度、采聚浓度等属性。生成数据表后用DSOFRAMER控件展示出来。如图5-6所示:图5-6不同增油量生产数据统计效果图5.5.2不同含水回升首先给出不同含水回升值的分级标准,然后统计不同含水分级井的见效高峰期和目前的生产状况,如下图所示。图5-7不同含水分级统计效果图具体实现:classExcelHelper{定义类的模板路径templetFile=null;定义类的文件输出路径outputFile=null;定义Excel函数缺省值missing=Missing.Value;publicExcelHelper(stringtempletFilePath,stringoutputFilePath){if模板路径templetFilePath未赋值抛出"Excel模板文件路径不能为空"的异常!;if输出文件路径outputFilePath未赋值抛出"输出Excel文件路径不能为空!"的异常;if模板路径templetFilePath不存在抛出"指定路径的Excel模板文件不存在!"的异常;类模板路径templetFile=templetFilePath;类输出文件路径outputFile=outputFilePath;}publicvoidDataTableToExcel(DataTabledt,introws,inttop,intleft,stringsheetPrefixName){定义源DataTable行数rowCount=dt.Rows.Count;源DataTable列数colCount=dt.Columns.Count;获取WorkSheet个数sheetCount=this.GetSheetCount(rowCount,rows);进程开始时间beforeTime=DateTime.Now;进程结束时间afterTime;if工作表前缀名sheetPrefixName未赋值或为空则工作表前缀名sheetPrefixName="sheet";创建一个Application对象并使其可见Excel.Applicationapp=newExcel.ApplicationClass();进程结束时间赋值afterTime=DateTime.Now;打开模板文件,得到工作簿对象Excel.WorkbookworkBook=app.Workbooks.Open(templetFile);得到工作表对象Excel.WorksheetworkSheet=(Excel.Worksheet)workBook.Sheets.get_Item(1);复制sheetCount-1个工作表对象for(inti=1;i<sheetCount;i++){((Excel.Worksheet)workBook.Worksheets.get_Item(i)).Copy(missing,workBook.Worksheets[i]);}将源DataTable数据写入各Excel工作表中for(inti=1;i<=sheetCount;i++){记录开始读datable起始位置startRow=(i-1)*rows;记录结束行索引endRow=i*rows;if最后一个WorkSheet,那么记录结束行索引为源DataTable行数)endRow=rowCount;获取要写入数据的工作表对象Excel.Worksheetsheet=(Excel.Worksheet)workBook.Worksheets.get_Item(i);重命名sheet.Name=sheetPrefixName+"-"+i.ToString();将datatable中的数据写入工作表for(intj=0;j<endRow-startRow;j++){for(intk=0;k<colCount;k++){sheet.Cells[top+j,left+k]=dt.Rows[startRow+j][k].ToString();}文件保存为outputFile路径workBook.SaveAs(outputFile);关闭文件,退出Excel应用,回收资源,否则抛出异常判断进程启动时间,删除当前的Excel进程p.Kill();}记录总行数对每个工作表行数求余n=rowCount%rows;if余数为零return记录总行数对工作表行数求商rowCount/rows;elsereturn记录总行数对工作表行数求商取整加1(rowCount/rows)+1;}}5.6不同指标对应变化曲线5.6.1将边井、角井、中心井、注采不完善井按照不同的含水分级作出统计表,按照不同时期不同注采的值,用chart插件设置不同颜色,每个颜色对应一种注采含水分级值,用插件描点,绘制出不同注采对应含水变化曲线图5-8不同注采对应关系含水变化曲线5.6.2根据不同含水分级中河道砂的数量,计算出不同时期含水分级的平均值,计算相对应时期提高采收率。以同样的统计方法,用chart算好比例,设置颜色属性,绘制出曲线。如图5-9所示:图5-9不同河道砂控制程度含水变化曲线5.7其他系统还包括不同含水变化类型生产状况表,不同含水回升值生产数据表,不同含水下降值生产数据表,不同见效类型生产状况表,不同含水下降值含水变化,不同含水下降值提高采收率变化曲线,不同含水回升值含水变化,不同含水回升值提高采收率变化曲线,不同注采对应关系提高采收率变化曲线,不同河道砂控制程度含水变化曲线,不同注聚前含水变化曲线,不同注聚前含水提高采收率变化曲线。第6章聚驱区块动态分析系统测试6.1测试方法软件测试是保证软件质量的关键步骤,它是对软件规格说明、设计而后编码的最后复审。测试时为了发现程序中的错误,最终把一个高质量的软件系统交给用户。测试任何产品都有两种方法:如果已经知道了产品应具有的功能,可以通过测试来检验是否每个功能都能正常使用;如果知道产品内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。前一个方法称为黑盒测试,后一个称为白盒测试。通常在编写出每个功能模块之后就对它做必要的测试,称为单元测试。这个阶段结束之后,对系统还应该进行各种综合测试,这是系统生存周期中一个独立的阶段。本系统采用了黑盒测试(功能测试)与白盒测试(结构测试)相结合的方式进行了测试。测试过程可分为模块测试,子系统测试,系统测试和验收测试。以下就本系统在开发过程中进行测试的主要环节做简要介绍。(1)模块测试在设计好的软件系统中,每个模块完成一个清晰定义的子功能,而且这个子功能和同级其它模块的功能之间没有相互依赖关系。因此,有可能把每个模块作为一个单独的实体来测试,通常比较容易设计检验模块正确性的测试方案。模块测试的目的是保证每个模块作为一个单元能正确运行。在这个测试步骤中所发现的往往是编码和详细设计中的错误。(2)子系统测试子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。模块相互间的协调和通信是这个测试过程中的主要问题,因此
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 出纳实操培训
- 《除尘装置李丹》课件
- 《吉尔吉斯课件JUNE》课件
- 企业安全教育知识培训教案课件
- 《光合作用主要考点》课件
- GPT4专题报告:构建模型理解能力
- 单位常用应用文写作培训
- 数学学案:课堂导学比较法
- 《线路种类及线间距》课件
- 外贸安全培训课件
- 校企合作存在的问题与对策研究
- 卫生院法律法规知识培训
- 2024年中粮集团有限公司校园招聘考试试题完美版
- (高清版)JTGT D81-2017 公路交通安全设施设计细则
- 2024年小学生科技素养比赛题库及答案(共180题)
- 车床加工Mastercam9.1数控车床加工教程(非常详细)
- 酒店前厅服务与管理实训总结
- 2024-2025年上半学期(三年级)教科版上册科学期中试卷【A4可打印】
- 滑雪国职公共理论知识考试题库及答案
- 2024年江西九江市交通航运发展集团有限公司招聘笔试参考题库含答案解析
- 慢性应激对心理健康的长期影响
评论
0/150
提交评论