• [石油能源] WIS文件说明及相关算法


    WIS(Well Information Standard)是中国石油天然气总公司推出的Forward 测
    井处理平台所采用的一种测井数据记录格式,WIS 数据格式可记录以下测井数据:
    ⑴ 常规测井曲线(深度连续)。
    ⑵ 点测井斜曲线(深度不连续)。
    ⑶ 波形数据(深度连续,时间连续,时间范围相同)。
    ⑷ 地层测试数据(深度离散,时间连续,时间范围不定)。
    ⑸ 生产测井数据(时间离散(不同次测井),深度离散,时
    间离散)。
    ⑹ 二维表格数据。
    ⑺ 二进制数据流(参数文件,图片,其他各种数据)

    图1.1为WIS数据存储结构:

     
    WIS数据总共分为三大块:文件头、数据对象头和数据对象记录体。其中文件头由10字节文件标识和56字节文件头组成,共占用66字节。

    文件头:记录WIS文件创建的日期,数据量,文件大小及机器类型等信息。在读写WIS文件的时候,它将是相当重要的依据。

    数据对象头:用于记录每个数据对象的相关信息,包括:对象的主、子属性,修改时间,对象状态及数据体偏移量等信息。

    在WIS数据文件中,包含的三大数据对象:通道对象、表对象、流对象。

    其中,通道对象又分分对象数据头及对象维度信息。

    对象数据头包含单位、别名、单位别名、极值、维数量及数据类型等信息。

    对象维度信息包含指定维的名称、单位、别名、起始值、增量及数据采样点数量信息(这些信息足够根据相关的算法计算相关数据)

    接下来,WIS数据的又一大对象——流对象。它存在的目的是可以存储测井工程计算的时候,比如一些参数信息及相关配置和二进制数据信息(可存储任何二进制数据)

    WIS文件头结构定义:

        /// <summary>
        /// WIS数据文件结构体定义
        /// </summary>
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct WISDATAFILE
        {
            /// <summary>
            /// WIS文件标识(默认值 WIS 1.0)
            /// </summary>
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
            public string Version;
            [MarshalAs(UnmanagedType.Struct)]
            public WISDATAHEAD WisDataHead;
    
        }
        /// <summary>
        /// WIS数据文件头结构定义
        /// </summary>
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct WISDATAHEAD
        {
            /// <summary>
            /// 创建设备的类型
            /// PC=0; SUN=1; IBM=2; HP=3;
            /// </summary>
            public short wMachineType;
            /// <summary>
            /// WIS文件允许最大的对象数量(缺省:512)
            /// </summary>
            public short wMaximumRecord;
            /// <summary>
            /// WIS文件当前对象数量
            /// </summary>
            public short wCurrentRecord;
            /// <summary>
            /// WIS文件对象占用磁盘块长
            /// </summary>
            /// <remarks>
            /// WIS文件对象占用磁盘空间以块为单位,该值指示每一数据块的字节数
            /// </remarks>
            public short wBlockLength;
            /// <summary>
            /// 对象入口记录从文件开始的偏移量
            /// </summary>
            public uint dwEntryOffset;
            /// <summary>
            /// 对象数据记录从文件开始的偏移量
            /// </summary>
            public uint dwDataOffset;
            /// <summary>
            /// WIS数据文件的字节数大小
            /// </summary>
            public uint dwFileSize;
            /// <summary>
            /// WIS文件创建的时间
            /// </summary>
            public uint dwCreationDateTime;
            /// <summary>
            /// 保留字节
            /// </summary>
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
            public string Reserved;
        }
    

      WIS数据对象入口结构:

        /// <summary>
        /// WIS数据结构对象入口
        /// </summary>
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct WISDATAOBJECTENTRY
        {
            /// <summary>
            /// 名称
            /// </summary>
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
            public string Name;
            /// <summary>
            /// 状态
            /// [正常:0 抛弃:1 删除:2]
            /// </summary>
            public uint Status;
            /// <summary>
            /// 主属性
            /// [通道对象=1; 表对象=2; 流对象=3;]
            /// </summary>
            public short wAttr;
            /// <summary>
            /// 子属性
            /// 通道对象子属性[曲线对象=1; 波形对象=2; 地层测试对象=3; 时深时对象=4;]
            /// 流对象子属性[ASCII码流=1; 二进制流=2;]
            /// </summary>
            public short wSubAttr;
            /// <summary>
            /// 对象数据体从文件开始处的偏移量
            /// </summary>
            public uint dwPosOffset;
            /// <summary>
            /// 对象数据体占用磁盘的块数。
            /// </summary>
            public uint dwBlock;
            /// <summary>
            /// 对象产生的时间
            /// </summary>
            public uint dwTimeCreate;
            /// <summary>
            /// 对象最近修改时间
            /// </summary>
            public uint dwTimeWrite;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
            public string Reserved;
        }
    

      WIS数据结构通道对象及通道维信息定义:

        /// <summary>
        /// WIS数据结构通道对象定义
        /// </summary>
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct WISDATACHANNEL
        {
            /// <summary>
            /// 单位
            /// </summary>
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
            public string Unit;
            /// <summary>
            /// 别名
            /// </summary>
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
            public string AliasName;
            /// <summary>
            /// 单位别名
            /// </summary>
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
            public string AliasUnit;
            /// <summary>
            /// 数据类型
            /// </summary>
            public short wDataType;
            /// <summary>
            /// 数据类型长度
            /// </summary>
            public short wDataLength;
            /// <summary>
            /// 最小值(测井曲线缺省左刻度值)
            /// </summary>
            public float wMinValue;
            /// <summary>
            /// 最大值(测井曲线缺省右刻度值)
            /// </summary>
            public float wMaxValue;
            /// <summary>
            /// 保留字节
            /// </summary>
            public short Reserved;
            /// <summary>
            /// 维信息数量
            /// </summary>
            public short wDimension;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
            public WISDATADIMENSION[] DataDimension;
        }
    
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct WISDATADIMENSION
        {
            /// <summary>
            /// 名称
            /// </summary>
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
            public string Name;
            /// <summary>
            /// 单位
            /// </summary>
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
            public string Unit;
            /// <summary>
            /// 别名
            /// </summary>
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
            public string AliasName;
            /// <summary>
            /// 开始值
            /// </summary>
            public float StartValue;
            /// <summary>
            /// 增量
            /// </summary>
            public float Increment;
            /// <summary>
            /// 采样点数量
            /// </summary>
            public uint dwSample;
            /// <summary>
            /// 最大采样点数量
            /// </summary>
            public uint dwMaximumSample;
            /// <summary>
            /// 采样点占用字节数
            /// </summary>
            public uint dwBytesOfSample;
            /// <summary>
            /// 数据类型
            /// </summary>
            public short wDataType;
            /// <summary>
            /// 保留字节
            /// </summary>
            public short wReserved;
        }
    

      WIS数据文件表结构相关定义:

        /// <summary>
        /// WIS数据文件表结构
        /// </summary>
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct WISDATATABLE
        {
            /// <summary>
            /// 名称
            /// </summary>
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
            public string Name;
            /// <summary>
            /// 数据类型
            /// </summary>
            public short wFieldType;
            /// <summary>
            /// 数据类型长度
            /// </summary>
            public short wFieldLength;
            /// <summary>
            /// 保留字节
            /// </summary>
            public uint dwReserved;
        }
    

      特别值在表结构这说一下的是,表结构由于存放的是二维表结构数据,在国内目前只有中海油准备实施二维核磁测井,所以国内暂无任何相关的解决方案,包括Forword在处理表结构的时候也没实现将表字段对象存入至WIS文件中,而是在系统目录通过定义一个defulttable.ini文件来完成随时修改的表结构数据(当然,我们在项目中也可以将它存入流对象^_^)

    WIS数据文件流结构:

        /// <summary>
        /// WIS数据文件流结构
        /// </summary>
        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct WISDATASTREAM
        {
            /// <summary>
            /// 数据流长度
            /// </summary>
            public uint dwStreamLength;
        }
    

      以上便是基本的WIS数据文件结构。

  • 相关阅读:
    find 查找练习
    shell脚本基础练习
    新增ceph节点报错
    正则表达式作业练习
    3.Linux文件管理和IO重定向
    2.Linux入门和帮助
    作业练习
    1.安装虚拟机和Linux操作系统
    “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构、登录窗口、以及主界面)
    redis数据结构-布隆过滤器
  • 原文地址:https://www.cnblogs.com/briny/p/2822563.html
Copyright © 2020-2023  润新知