logplus/DataOutput/include/MyXtfLib.h

1516 lines
48 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
class XtfCvt
{
public:
int SystemCode;
CString findLetter(int nCode);
CString GetLetter(CString strText)
{
return strText;
};
short ToInt16(byte data[],int offset)
{
byte temp[2] ;
if (SystemCode == 1)
{
temp[0] = data[0 + offset];
temp[1] = data[1 + offset];
}
else
{
temp[0] = data[1 + offset];
temp[1] = data[0 + offset];
}
short result = *(short*)temp;
return result;
};
int ToInt32(byte data[], int offset)
{
byte temp[4];
if (SystemCode == 1)
{
temp[0] = data[0 + offset];
temp[1] = data[1 + offset];
temp[2] = data[2 + offset];
temp[3] = data[3 + offset];
}
else
{
temp[0] = data[3 + offset];
temp[1] = data[2 + offset];
temp[2] = data[1 + offset];
temp[3] = data[0 + offset];
}
int result = *(int*)temp;
return result;
};
long ToInt64(byte data[], int offset)
{
byte temp[8];// = new byte[8];
if (SystemCode == 1)
{
temp[0] = data[0 + offset];
temp[1] = data[1 + offset];
temp[2] = data[2 + offset];
temp[3] = data[3 + offset];
temp[4] = data[4 + offset];
temp[5] = data[5 + offset];
temp[6] = data[6 + offset];
temp[7] = data[7 + offset];
}
else
{
temp[0] = data[7 + offset];
temp[1] = data[6 + offset];
temp[2] = data[5 + offset];
temp[3] = data[4 + offset];
temp[4] = data[3 + offset];
temp[5] = data[2 + offset];
temp[6] = data[1 + offset];
temp[7] = data[0 + offset];
}
long result = *(long*)temp;
return result;
};
float ToFloat(byte data[], int offset)
{
byte temp[4];// = new byte[4];
if (SystemCode == 1)
{
temp[0] = data[0 + offset];
temp[1] = data[1 + offset];
temp[2] = data[2 + offset];
temp[3] = data[3 + offset];
}
else
{
temp[0] = data[3 + offset];
temp[1] = data[2 + offset];
temp[2] = data[1 + offset];
temp[3] = data[0 + offset];
}
float result = *(float*)temp;
return result;
};
double ToDouble(byte data[], int offset)
{
byte temp[8];// = new byte[8];
if (SystemCode == 1)
{
temp[0] = data[0 + offset];
temp[1] = data[1 + offset];
temp[2] = data[2 + offset];
temp[3] = data[3 + offset];
temp[4] = data[4 + offset];
temp[5] = data[5 + offset];
temp[6] = data[5 + offset];
temp[7] = data[6 + offset];
}
else
{
temp[0] = data[7 + offset];
temp[1] = data[6 + offset];
temp[2] = data[5 + offset];
temp[3] = data[4 + offset];
temp[4] = data[3 + offset];
temp[5] = data[2 + offset];
temp[6] = data[1 + offset];
temp[7] = data[0 + offset];
}
double result = *(double*)temp;
return result;
};
byte ToByte(byte data[], int offset)
{
byte temp = data[offset];
return temp;
};
CString ToCString(byte data[], int offset,int length)
{
char temp[4096]="";
for (int i = 0; i < length; i++)
{
temp[i] = (char)(data[i + offset]);
}
CString result =temp;
result.TrimLeft();
result.TrimRight();
return result;
};
int ToBytes(int data, byte bdata[], int offset)
{
byte temp[4];
byte result[4];
memcpy(temp,&data,4);
if (SystemCode == 1)
{
result[0] = temp[0];
result[1] = temp[1];
result[2] = temp[2];
result[3] = temp[3];
}
else
{
result[0] = temp[3];
result[1] = temp[2];
result[2] = temp[1];
result[3] = temp[0];
}
memcpy((void*)(bdata+offset),result,4);
return data;
};
byte ToBytes(byte data, byte bdata[], int offset)
{
bdata[offset]=data;
return data;
};
short ToBytes(short data, byte bdata[], int offset)
{
byte temp[2];
byte result[2];
memcpy(temp,&data,2);
if (SystemCode == 1)
{
result[0] = temp[0];
result[1] = temp[1];
}
else
{
result[0] = temp[1];
result[1] = temp[0];
}
memcpy((void*)(bdata+offset),result,2);
return data;
};
float ToBytes(float data, byte bdata[], int offset)
{
byte temp[4];
byte result[4];
memcpy(temp,&data,4);
if (SystemCode == 1)
{
result[0] = temp[0];
result[1] = temp[1];
result[2] = temp[2];
result[3] = temp[3];
}
else
{
result[0] = temp[3];
result[1] = temp[2];
result[2] = temp[1];
result[3] = temp[0];
}
memcpy((void*)(bdata+offset),result,4);
return data;
};
double ToBytes(double data, byte bdata[], int offset)
{
byte temp[8];
byte result[8];
memcpy(temp,&data,8);
if (SystemCode == 1)
{
result[0] = temp[0];
result[1] = temp[1];
result[2] = temp[2];
result[3] = temp[3];
result[4] = temp[4];
result[5] = temp[5];
result[6] = temp[6];
result[7] = temp[7];
}
else
{
result[0] = temp[7];
result[1] = temp[6];
result[2] = temp[5];
result[3] = temp[4];
result[4] = temp[3];
result[5] = temp[2];
result[6] = temp[1];
result[7] = temp[0];
}
memcpy((void*)(bdata+offset),result,8);
return data;
};
CString ToBytes(CString data, byte bdata[], int offset, int length)
{
int len=data.GetLength();
if(length<len)len=length;
for(int i=0;i<len;i++)
bdata[offset+i]=data.GetAt(i);
return data;
};
};
class CurveHeadInfo
{
public :
CString CurveName;
CString CurveUnit;
CString CurveRemark;
CString ServiceCompany;
CString ToolType;
CString CurveClass;
CString DepthUnit;
CString WaveTimeUnit;
CString StartTimeUnit;
CString OrinHeadRecord;
CString LogDirection; //???
float Step;
float Window;
float CBILAngle;
float TR_Distance;
float RR_Distance;
float OrinToSurface;
CString AIFName;
CString OCTName;
CString LisName;
CString ToolName;
float StartDepth;
float EndDepth;
float DepthLevel;
float MinValue;
float MaxValue;
float AvgValue;
float TimeValuesLevel;
float DACTimeOffset;
float StaticMeasureDepth;
float StandardDeviation;
double DoubleInitValues;
double DoubleStartDepth;
double DoubleEndDepth;
double DoubleDepthLevel;
int CreateDate;
int CreateTime;
int AccessDate;
int AccessTime;
int CurveHeadRecordNum;
int EndPosition;
float InitValues;
int SamplesNum;
short MajorVersion;
short MinorVersion;
short CurveIndex;
short CurveType;
short CurveDataType;
short CurveHorz;
short CurveVert;
short CurveDimNum;
short CurveE1Num;
short CurveE2Num;
short CurveE3Num;
short DataTypeFlag;
short HaveNegFlag;
short DataBitsNum;
short FixedWaveStartFlag;
short FixedWaveGain;
short WaveGainExp;
short GainMethod;
short GainApplyFlag;
short WaveLength;
short ToolNo;
short CurveSerialNo;
byte TranFillArea[24];//=new byte[24];
byte RecvFillArea[24];//=new byte[24];
byte SystemCode;
};
class MyXtfLib
{
public :
QFile *dataFile;
bool openFlag;
int fileOptions;
int BlockNum; //8
int CurveFlag[512]; //曲线处理标志,
//表1
byte HeadRecord[512];
CString FileExtation;
CString FilePath;
CString SystemDepthUnit;
CString AIFVersion;
byte SystemCode;
byte Version1;
byte Version2;//E;
int CurveNum;
int MaxCurveNum;
float FileStartDepth;
float FileEndDepth;
float FileDepthLevel;
//表2
byte BitmapHead; //头
byte BitmapRecords[4071];
byte BitmapValues[4];
byte BitmapFirst[4];
byte BitmapSecond[4];
byte BitmapPreview[4];
byte BitmapCurrent[4];
byte BitmapNext[4];
//表3
CString CurveName[512]; //曲线名
//表4
int CurveStartPos[512] ;//曲线开始位置
int CurveSampleNum[512] ; //曲线总采样点数
int CurveEndPos[512]; //曲线开始位置
//表5
short CurveDimNum[512]; //维数
short CurveE1Num[512]; //第1维数据个数
short CurveE2Num[512]; //第2维数据个数
short CurveE3Num[512]; //第3维数据个数
//表6
float CurveStartDepth[512];
float CurveEndDepth[512];
//表7
float CurveDepthLevel[512];
byte CurveType[512];
byte CurveDataType[512] ;
byte CurveHorz[512];
byte CurveVert[512] ;
//表8
CString WSI;
CString WellName;
CString OilFieldName;
CString CompanyName;
CString CountryName;
CString StatesName;
CString WellLocate;
float JingDu;
float WeiDu;
float HaiBa;
short SystemForM; //公英
float MagtCPJ; //磁偏角
//表9
CString CurveUnit[512];
CurveHeadInfo curveInfo[512];
int CreateDate;
int CreateTime;
int LastAccessDate;
int LastAccessTime;
XtfCvt XtfConvert;
MyXtfLib()//初始化所有变量
{
int i=0;
byte ByteArray[4096] = {0};
//表1
memset(ByteArray,0, 4096);
// HeadRecord = XtfConvert.ToCString(ByteArray, 0, 32);
FileExtation = XtfConvert.ToCString(ByteArray, 760, 4);
FileExtation.MakeLower();
FilePath = XtfConvert.ToCString(ByteArray, 764, 80);
SystemDepthUnit = XtfConvert.ToCString(ByteArray, 844, 8);
AIFVersion = XtfConvert.ToCString(ByteArray, 852, 8);
SystemCode = XtfConvert.ToByte(ByteArray, 948); //5=工作站1=PC机
XtfConvert.SystemCode = SystemCode;
Version1 = XtfConvert.ToByte(ByteArray, 950);
Version2 = XtfConvert.ToByte(ByteArray, 951);
CurveNum = XtfConvert.ToInt32(ByteArray, 996);
MaxCurveNum = XtfConvert.ToInt32(ByteArray, 1000);
FileStartDepth = XtfConvert.ToFloat(ByteArray, 2048);
FileEndDepth = XtfConvert.ToFloat(ByteArray, 2052);
FileDepthLevel = XtfConvert.ToFloat(ByteArray, 2056);
//表2
memset(ByteArray,0, 4096);
BitmapHead = ByteArray[0];
memcpy(BitmapRecords,ByteArray+1,4071);
memcpy(BitmapValues,ByteArray+4072,4);
//表3
memset(ByteArray,0, 4096);
for ( i = 0; i < 512; i++)
{
CurveName[i] = XtfConvert.ToCString(ByteArray, i * 8, 8);
}
//表4
memset(ByteArray,0, 4096);
for ( i = 0; i < 256; i++)
{
CurveStartPos[i] = XtfConvert.ToInt32(ByteArray, i * 8);
CurveStartPos[i+256] = XtfConvert.ToInt32(ByteArray, i * 8+4);
}
for ( i = 0; i < 256; i++)
{
CurveSampleNum[i] = XtfConvert.ToInt32(ByteArray, i * 8 + 2048);
CurveSampleNum[i + 256] = XtfConvert.ToInt32(ByteArray, i * 8 + 4 + 2048);
}
//表5
memset(ByteArray,0, 4096);
for ( i = 0; i < 256; i++)
{
CurveDimNum[i] = XtfConvert.ToInt16(ByteArray, i * 8);
CurveE1Num[i ] = XtfConvert.ToInt16(ByteArray, i * 8 + 2);
CurveDimNum[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 4);
CurveE1Num[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 6);
}
for ( i = 0; i < 256; i++)
{
CurveE2Num[i] = XtfConvert.ToInt16(ByteArray, i * 8 + 2048);
CurveE3Num[i] = XtfConvert.ToInt16(ByteArray, i * 8 + 2 + 2048);
CurveE2Num[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 4 + 2048);
CurveE3Num[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 6 + 2048);
}
//表6
memset(ByteArray,0, 4096);
for ( i = 0; i < 256; i++)
{
CurveStartDepth[i] = XtfConvert.ToFloat(ByteArray, i * 8);
CurveStartDepth[i + 256] = XtfConvert.ToFloat(ByteArray, i * 8 + 4);
}
for ( i = 0; i < 256; i++)
{
CurveEndDepth[i] = XtfConvert.ToFloat(ByteArray, i * 8 + 2048);
CurveEndDepth[i + 256] = XtfConvert.ToFloat(ByteArray, i * 8 + 4 + 2048);
}
//表7
memset(ByteArray,0, 4096);
for ( i = 0; i < 256; i++)
{
CurveDepthLevel[i] = XtfConvert.ToFloat(ByteArray, i * 8);
CurveDepthLevel[i + 256] = XtfConvert.ToFloat(ByteArray, i * 8 + 4);
}
for ( i = 0; i < 256; i++)
{
CurveType[i] = XtfConvert.ToByte(ByteArray, i * 8 + 2048);
CurveDataType[i] = XtfConvert.ToByte(ByteArray, i * 8 + 1 + 2048);
CurveHorz[i] = XtfConvert.ToByte(ByteArray, i * 8 + 2 + 2048);
CurveVert[i] = XtfConvert.ToByte(ByteArray, i * 8 + 3 + 2048);
CurveType[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 4 + 2048);
CurveDataType[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 5 + 2048);
CurveHorz[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 6 + 2048);
CurveVert[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 7 + 2048);
}
//表8
memset(ByteArray,0, 4096);
WSI = XtfConvert.ToCString(ByteArray, 0, 8);
WellName = XtfConvert.ToCString(ByteArray, 8, 80);
OilFieldName= XtfConvert.ToCString(ByteArray, 88, 80);
CompanyName = XtfConvert.ToCString(ByteArray, 168, 80);
CountryName = XtfConvert.ToCString(ByteArray, 248, 32);
// StatesName = XtfConvert.ToCString(ByteArray, 328, 32);
WellLocate = XtfConvert.ToCString(ByteArray, 336, 40);
JingDu = XtfConvert.ToFloat(ByteArray, 1024);
WeiDu = XtfConvert.ToFloat(ByteArray, 1028);
HaiBa = XtfConvert.ToFloat(ByteArray, 1040);
SystemForM = XtfConvert.ToInt16(ByteArray, 2060);
//扫描表9
// CreateDate = 0; //测井时间
// CreateTime = 0;
//whp change 2012.11.6
CreateDate=GetCurrentTime();
CreateTime = GetCurrentTime();
openFlag=false;
};
int Init()
{
int i=0;
byte aa[32768] ={0};
for( i=0;i<32;i++)
HeadRecord[i] = 0;
for ( i = 1; i <= 8; i++)
HeadRecord[i*4-1] = (byte)i;
WSI = "WSI";
SystemCode = 5; // //SUN
Version1 = 0x06;//4;
Version2 = 0x00;//E;
SystemForM = 0; //公制
SystemDepthUnit = "meters";
AIFVersion = "";
FileExtation = ".xtf";
CurveNum = 0;
MaxCurveNum = 512;
BlockNum = 8;
XtfConvert.SystemCode = SystemCode;
for ( i = 0; i < 512; i++)
{
CurveName[i] = "";
CurveStartPos[i] = 0;
CurveSampleNum[i] = 0;
CurveDimNum[i] = 0;
CurveE1Num[i] = 0;
CurveE2Num[i] = 0;
CurveE3Num[i] = 0;
CurveStartDepth[i] = 0;
CurveEndDepth[i] = 0;
CurveDepthLevel[i] = 0;
CurveType[i] = 0;
CurveDataType[i] = 0;
CurveHorz[i] = 0;
CurveVert[i] = 0;
CurveUnit[i] = "none";
SystemForM = 0;
CurveFlag[i]=0;
byte ccc[4096]={0};
CurveHeadGet(i,ccc);
memset(curveInfo[i].TranFillArea,0,24);
memset(curveInfo[i].RecvFillArea ,0,24);
}
return 0;
};
//method
int OpenDataFile(QString dataFileName, int nOpenFlags)
{
// srcFileFlag //nOpenFlags =0,Read,=1 Write,=2,readwrite;
Init();
if (openFlag)
{
dataFile->close();
openFlag = false;
}
//////////////////////////////////////////////////////////////////////////
///注释掉:是因为当再次打开别的文件时会提醒文件已经关闭的异常提示
//////////////////////////////////////////////////////////////////////////
{
dataFile=new QFile(dataFileName);
fileOptions = nOpenFlags;
if (fileOptions == 0)
{
dataFile->open(QIODevice::ReadOnly);
}
else if (fileOptions == 1)
{
dataFile->open(QIODevice::WriteOnly);
}
else if (fileOptions == 2)
{
dataFile->open(QIODevice::ReadWrite);
}
openFlag = true;
}
return 1;
};
int FileHead_Read()
{
int i=0;
int FileHead = 32*1024;
byte ByteArray[32768] = {0};
dataFile->seek(0);
//表1
dataFile->read((char*)&ByteArray[0], 4096);
// HeadRecord = XtfConvert.ToCString(ByteArray, 0, 32);
FileExtation = XtfConvert.ToCString(ByteArray, 760, 4);
FileExtation.MakeLower();
FilePath = XtfConvert.ToCString(ByteArray, 764, 80);
SystemDepthUnit = XtfConvert.ToCString(ByteArray, 844, 8);
AIFVersion = XtfConvert.ToCString(ByteArray, 852, 8);
SystemCode = XtfConvert.ToByte(ByteArray, 948); //5=工作站1=PC机
XtfConvert.SystemCode = SystemCode;
Version1 = XtfConvert.ToByte(ByteArray, 950);
Version2 = XtfConvert.ToByte(ByteArray, 951);
CurveNum = XtfConvert.ToInt32(ByteArray, 996);
MaxCurveNum = XtfConvert.ToInt32(ByteArray, 1000);
FileStartDepth = XtfConvert.ToFloat(ByteArray, 2048);
FileEndDepth = XtfConvert.ToFloat(ByteArray, 2052);
FileDepthLevel = XtfConvert.ToFloat(ByteArray, 2056);
//表2
dataFile->read((char*)&ByteArray[0], 4096);
BitmapHead = ByteArray[0];
memcpy(BitmapRecords,ByteArray+1,4071);
memcpy(BitmapValues,ByteArray+4072,4);
//表3
dataFile->read((char*)&ByteArray[0], 4096);
for ( i = 0; i < 512; i++)
{
CurveName[i] = XtfConvert.ToCString(ByteArray, i * 8, 8);
}
//表4
dataFile->read((char*)&ByteArray[0], 4096);
for ( i = 0; i < 256; i++)
{
CurveStartPos[i] = XtfConvert.ToInt32(ByteArray, i * 8);
CurveStartPos[i+256] = XtfConvert.ToInt32(ByteArray, i * 8+4);
}
for ( i = 0; i < 256; i++)
{
CurveSampleNum[i] = XtfConvert.ToInt32(ByteArray, i * 8 + 2048);
CurveSampleNum[i + 256] = XtfConvert.ToInt32(ByteArray, i * 8 + 4 + 2048);
}
//表5
dataFile->read((char*)&ByteArray[0], 4096);
for ( i = 0; i < 256; i++)
{
CurveDimNum[i] = XtfConvert.ToInt16(ByteArray, i * 8);
CurveE1Num[i ] = XtfConvert.ToInt16(ByteArray, i * 8 + 2);
CurveDimNum[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 4);
CurveE1Num[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 6);
}
for ( i = 0; i < 256; i++)
{
CurveE2Num[i] = XtfConvert.ToInt16(ByteArray, i * 8 + 2048);
CurveE3Num[i] = XtfConvert.ToInt16(ByteArray, i * 8 + 2 + 2048);
CurveE2Num[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 4 + 2048);
CurveE3Num[i + 256] = XtfConvert.ToInt16(ByteArray, i * 8 + 6 + 2048);
}
//表6
dataFile->read((char*)&ByteArray[0], 4096);
for ( i = 0; i < 256; i++)
{
CurveStartDepth[i] = XtfConvert.ToFloat(ByteArray, i * 8);
CurveStartDepth[i + 256] = XtfConvert.ToFloat(ByteArray, i * 8 + 4);
}
for ( i = 0; i < 256; i++)
{
CurveEndDepth[i] = XtfConvert.ToFloat(ByteArray, i * 8 + 2048);
CurveEndDepth[i + 256] = XtfConvert.ToFloat(ByteArray, i * 8 + 4 + 2048);
}
//表7
dataFile->read((char*)&ByteArray[0], 4096);
for ( i = 0; i < 256; i++)
{
CurveDepthLevel[i] = XtfConvert.ToFloat(ByteArray, i * 8);
CurveDepthLevel[i + 256] = XtfConvert.ToFloat(ByteArray, i * 8 + 4);
}
for ( i = 0; i < 256; i++)
{
CurveType[i] = XtfConvert.ToByte(ByteArray, i * 8 + 2048);
CurveDataType[i] = XtfConvert.ToByte(ByteArray, i * 8 + 1 + 2048);
CurveHorz[i] = XtfConvert.ToByte(ByteArray, i * 8 + 2 + 2048);
CurveVert[i] = XtfConvert.ToByte(ByteArray, i * 8 + 3 + 2048);
CurveType[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 4 + 2048);
CurveDataType[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 5 + 2048);
CurveHorz[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 6 + 2048);
CurveVert[i + 256] = XtfConvert.ToByte(ByteArray, i * 8 + 7 + 2048);
}
//表8
dataFile->read((char*)&ByteArray[0], 4096);
WSI = XtfConvert.ToCString(ByteArray, 0, 8);
WellName = XtfConvert.ToCString(ByteArray, 8, 80);
OilFieldName= XtfConvert.ToCString(ByteArray, 88, 80);
CompanyName = XtfConvert.ToCString(ByteArray, 168, 80);
CountryName = XtfConvert.ToCString(ByteArray, 248, 32);
// StatesName = XtfConvert.ToCString(ByteArray, 328, 32);
WellLocate = XtfConvert.ToCString(ByteArray, 336, 40);
JingDu = XtfConvert.ToFloat(ByteArray, 1024);
WeiDu = XtfConvert.ToFloat(ByteArray, 1028);
HaiBa = XtfConvert.ToFloat(ByteArray, 1040);
SystemForM = XtfConvert.ToInt16(ByteArray, 2060);
//扫描表9
for ( i = 0; i < CurveNum; i++)
{
long pos = (CurveStartPos[i] - 1) * 4096;
dataFile->seek(pos);
dataFile->read((char*)&ByteArray[0], 4096);
CurveHeadGet(i,ByteArray); //分析各个曲线头
CurveName[i] =curveInfo[i].CurveName;
CurveUnit[i] = curveInfo[i].CurveUnit;
CurveEndPos[i] = curveInfo[i].EndPosition;
}
CreateDate = curveInfo[0].CreateDate; //测井时间
CreateTime = curveInfo[0].CreateTime;
if (FileExtation != ".xtf" || MaxCurveNum != 512) // || UnixToPc.ToCString(head1.ExtendFileType) != ".XTF")
{
// MessageBox(" 不是EPLIPS5700 XTF格式的数据文件!");
return 0;
}
dataFile->seek(0);
return FileHead;
};
int FileHead_Write()
{
int i=0;
int FileHead = 32 * 1024;
Version1 = 0x06;
Version2 = 0x00;
// Version1 = 0x06;
// Version2 = 0x00;
SystemCode = 5; //5,new,输出固定为工作站模式
XtfConvert.SystemCode = SystemCode; //??????????????????????
////////////////////////////////////
byte ByteArray[32768] = {0};
dataFile->seek(0);
//表1
// HeadRecord="10002000300040005000600070008000";
for ( i = 0; i < 32; i++) ByteArray[i] = HeadRecord[i];
// XtfConvert.ToBytes(HeadRecord,ByteArray, 0,32);
FileExtation.MakeLower();
XtfConvert.ToBytes(FileExtation, ByteArray, 760, 4);
FilePath="/data1/data.xtf";
XtfConvert.ToBytes(FilePath, ByteArray, 764, 80);
XtfConvert.ToBytes(SystemDepthUnit, ByteArray, 844, 8);
XtfConvert.ToBytes(AIFVersion, ByteArray, 852, 8);
//whp add 2012.11.6 for SystemDepthUnit和AIFVersion不够8个字符的用空格填充
for ( i = 0; i < 16; i++)
{
if(ByteArray[844+i]==0)
{
ByteArray[844+i]=32;
}
}
XtfConvert.ToBytes(SystemCode, ByteArray, 948);
XtfConvert.ToBytes(Version1, ByteArray, 950);
XtfConvert.ToBytes(Version2, ByteArray, 952);
XtfConvert.ToBytes(CurveNum, ByteArray, 996);
XtfConvert.ToBytes(MaxCurveNum, ByteArray, 1000);
XtfConvert.ToBytes(FileStartDepth, ByteArray, 2048);
XtfConvert.ToBytes(FileEndDepth, ByteArray, 2052);
XtfConvert.ToBytes(FileDepthLevel, ByteArray, 2056);
//float temp_float = 0.00508f;
//XtfConvert.ToBytes(temp_float, ByteArray, 2056);
ByteArray[4094] = 0x0E;
ByteArray[4095] = 0xE0;
dataFile->write((char*)&ByteArray[0], 4096);
//表2
memset(ByteArray,0,4096); //清0
int xx = BlockNum / 8;
int yy = BlockNum % 8;
for( i=0;i<xx;i++)ByteArray[i]=255;
ByteArray[xx]=0;
byte tt[8]={0x80,0x40,0x20,0x10,8,4,2,1};
for( i=0;i<yy;i++)
{
ByteArray[xx] |= tt[i];
}
xx = 0;
XtfConvert.ToBytes(xx, ByteArray, 4072); //旗标值
xx = 1;
XtfConvert.ToBytes(xx, ByteArray, 4076); //第一个
xx = 32576;
XtfConvert.ToBytes(xx, ByteArray, 4080); //第二个
xx = 0;
XtfConvert.ToBytes(xx, ByteArray, 4084); //前一个
xx = 2;
XtfConvert.ToBytes(xx, ByteArray, 4088); //当前记录数
xx = 0;
XtfConvert.ToBytes(xx, ByteArray, 4092); //下一个
dataFile->write((char*)&ByteArray[0], 4096);
//表3
memset(ByteArray,0,4096); //清0
for ( i = 0; i < 512; i++)
{
// CurveName[i] = HzClass.Convert(CurveName[i]); //去除汉字
XtfConvert.ToBytes(CurveName[i],ByteArray,i * 8, 8);
}
//whp add 2012.11.6 for 曲线名用不够8个字符的用空格填充
for ( i = 0; i < 4096; i++)
{
if(ByteArray[i]==0)
{
ByteArray[i]=32;
}
}
dataFile->write((char*)&ByteArray[0], 4096);
//表4
memset(ByteArray, 0,4096); //清0
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveStartPos[i], ByteArray, i * 8);
XtfConvert.ToBytes(CurveStartPos[i+256],ByteArray,i * 8+4);
}
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveSampleNum[i],ByteArray,i * 8 + 2048);
XtfConvert.ToBytes(CurveSampleNum[i+256],ByteArray,i * 8 + 4 + 2048);
}
dataFile->write((char*)&ByteArray[0], 4096);
//表5
memset(ByteArray,0, 4096); //清0
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveDimNum[i], ByteArray, i * 8);
XtfConvert.ToBytes(CurveE1Num[i], ByteArray, i * 8 + 2);
XtfConvert.ToBytes(CurveDimNum[i+256], ByteArray, i * 8+4);
XtfConvert.ToBytes(CurveE1Num[i+256], ByteArray, i * 8 + 6);
}
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveE2Num[i], ByteArray, i * 8 + 2048);
XtfConvert.ToBytes(CurveE3Num[i], ByteArray, i * 8 + 2 + 2048);
XtfConvert.ToBytes(CurveE2Num[i + 256], ByteArray, i * 8 + 4 + 2048);
XtfConvert.ToBytes(CurveE3Num[i + 256], ByteArray, i * 8 + 6 + 2048);
}
dataFile->write((char*)&ByteArray[0], 4096);
//表6
memset(ByteArray,0,4096); //清0
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveStartDepth[i], ByteArray, i * 8);
XtfConvert.ToBytes(CurveStartDepth[i + 256], ByteArray, i * 8 + 4);
}
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveEndDepth[i], ByteArray, i * 8 + 2048);
XtfConvert.ToBytes(CurveEndDepth[i + 256], ByteArray, i * 8 + 4 + 2048);
}
dataFile->write((char*)&ByteArray[0], 4096);
//表7
memset(ByteArray,0,4096); //清0
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveDepthLevel[i], ByteArray, i * 8);
XtfConvert.ToBytes(CurveDepthLevel[i+256], ByteArray, i * 8+4);
}
for ( i = 0; i < 256; i++)
{
XtfConvert.ToBytes(CurveType[i], ByteArray, i * 8 + 2048);
XtfConvert.ToBytes(CurveDataType[i], ByteArray, i * 8 + 1 + 2048);
XtfConvert.ToBytes(CurveHorz[i], ByteArray, i * 8 + 2 + 2048);
XtfConvert.ToBytes(CurveVert[i], ByteArray, i * 8 + 3 + 2048);
XtfConvert.ToBytes(CurveType[i + 256], ByteArray, i * 8 + 4 + 2048);
XtfConvert.ToBytes(CurveDataType[i + 256], ByteArray, i * 8 + 5 + 2048);
XtfConvert.ToBytes(CurveHorz[i + 256], ByteArray, i * 8 + 6 + 2048);
XtfConvert.ToBytes(CurveVert[i + 256], ByteArray, i * 8 + 7 + 2048);
}
dataFile->write((char*)&ByteArray[0], 4096);
//表8
memset(ByteArray,0,4096); //清0
for ( i = 0; i < 1024; i++) ByteArray[i] = 0x20;
WellName = XtfConvert.GetLetter(WellName);
OilFieldName = XtfConvert.GetLetter(OilFieldName);
CompanyName = XtfConvert.GetLetter(CompanyName);
CountryName = XtfConvert.GetLetter(CountryName);
WellLocate = XtfConvert.GetLetter(WellLocate);
XtfConvert.ToBytes(WSI, ByteArray, 0 ,8); //有效图头
XtfConvert.ToBytes(WellName, ByteArray, 8, 80); //井名
XtfConvert.ToBytes(OilFieldName, ByteArray, 88, 80); // 油田名
XtfConvert.ToBytes(CompanyName, ByteArray, 168, 80); //公司名
XtfConvert.ToBytes(CountryName, ByteArray, 248, 32); //国家名
XtfConvert.ToBytes(WellLocate, ByteArray, 336, 40); //井位
XtfConvert.ToBytes(JingDu, ByteArray, 336); //经度
XtfConvert.ToBytes(WeiDu, ByteArray, 1028); //维度
XtfConvert.ToBytes(HaiBa, ByteArray, 1040); //海拔
XtfConvert.ToBytes(SystemForM, ByteArray,2060); //系统制
dataFile->write((char*)&ByteArray[0], 4096);
dataFile->flush();
return FileHead;
};
int CloseDataFile()
{
if (openFlag)
{
dataFile->close();
openFlag = false;
}
return 0;
};
int CurveHeadGet(int CurveNo, byte ByteArray[])
{
curveInfo[CurveNo].CurveName = XtfConvert.ToCString(ByteArray, 0, 8); //曲线名称
curveInfo[CurveNo].CurveUnit = XtfConvert.ToCString(ByteArray, 8, 8); //曲线单位
curveInfo[CurveNo].CurveRemark = XtfConvert.ToCString(ByteArray, 16, 8); //曲线备注
curveInfo[CurveNo].ServiceCompany = XtfConvert.ToCString(ByteArray, 48, 8); //服务公司
curveInfo[CurveNo].ToolType = XtfConvert.ToCString(ByteArray, 48, 8); //仪器类型
curveInfo[CurveNo].CurveClass = XtfConvert.ToCString(ByteArray, 56, 8); //曲线类型
curveInfo[CurveNo].DepthUnit = XtfConvert.ToCString(ByteArray, 64, 8); //深度单位
curveInfo[CurveNo].WaveTimeUnit = XtfConvert.ToCString(ByteArray, 72, 8); //波列时间增量单位
//???
//???
curveInfo[CurveNo].LogDirection = XtfConvert.ToCString(ByteArray, 120, 8); //测井方向
curveInfo[CurveNo].AIFName = XtfConvert.ToCString(ByteArray, 128, 8); //AIF名
curveInfo[CurveNo].OCTName = XtfConvert.ToCString(ByteArray, 152, 8); //OCT名
curveInfo[CurveNo].ToolName = XtfConvert.ToCString(ByteArray, 152, 8); //仪器名
curveInfo[CurveNo].LisName = XtfConvert.ToCString(ByteArray, 224, 8); //LIS名
curveInfo[CurveNo].StartDepth = XtfConvert.ToFloat(ByteArray, 1024); //开始深度
curveInfo[CurveNo].EndDepth = XtfConvert.ToFloat(ByteArray, 1028); //结束深度
curveInfo[CurveNo].DepthLevel = XtfConvert.ToFloat(ByteArray, 1032); //深度采样间隔
curveInfo[CurveNo].MinValue = XtfConvert.ToFloat(ByteArray, 1036); //曲线最小值
curveInfo[CurveNo].MaxValue = XtfConvert.ToFloat(ByteArray, 1040); //曲线最大值
curveInfo[CurveNo].AvgValue = XtfConvert.ToFloat(ByteArray, 1044); //曲线平均值
curveInfo[CurveNo].TimeValuesLevel = XtfConvert.ToFloat(ByteArray, 1048); //基于时间曲线的时间增量
curveInfo[CurveNo].DACTimeOffset = XtfConvert.ToFloat(ByteArray, 1052); //DAC起始时间
curveInfo[CurveNo].StaticMeasureDepth = XtfConvert.ToFloat(ByteArray, 1056); //静态测量深度
curveInfo[CurveNo].Step = XtfConvert.ToFloat(ByteArray, 1068); //静态测量深度
curveInfo[CurveNo].Window = XtfConvert.ToFloat(ByteArray, 1072); //静态测量深度
curveInfo[CurveNo].CBILAngle = XtfConvert.ToFloat(ByteArray, 1076); //静态测量深度
curveInfo[CurveNo].TR_Distance = XtfConvert.ToFloat(ByteArray, 1080); //静态测量深度
curveInfo[CurveNo].RR_Distance = XtfConvert.ToFloat(ByteArray, 1084); //静态测量深度
curveInfo[CurveNo].OrinToSurface = XtfConvert.ToFloat(ByteArray, 1088); //静态测量深度
curveInfo[CurveNo].DoubleStartDepth = XtfConvert.ToDouble(ByteArray, 1544); //设备类型
curveInfo[CurveNo].DoubleEndDepth = XtfConvert.ToDouble(ByteArray, 1552); //设备类型
curveInfo[CurveNo].DoubleDepthLevel = XtfConvert.ToDouble(ByteArray, 1560); //设备类型
curveInfo[CurveNo].CreateDate = XtfConvert.ToInt32(ByteArray, 2048); //设备类型
curveInfo[CurveNo].CreateTime = XtfConvert.ToInt32(ByteArray, 2052); //设备类型
curveInfo[CurveNo].AccessDate = XtfConvert.ToInt32(ByteArray, 2056); //设备类型
curveInfo[CurveNo].AccessTime = XtfConvert.ToInt32(ByteArray, 2060); //设备类型
curveInfo[CurveNo].AccessTime = XtfConvert.ToInt32(ByteArray, 2060); //设备类型
curveInfo[CurveNo].CurveHeadRecordNum = XtfConvert.ToInt32(ByteArray, 2064); //设备类型
curveInfo[CurveNo].EndPosition = XtfConvert.ToInt32(ByteArray, 2068); //设备类型
curveInfo[CurveNo].SamplesNum = XtfConvert.ToInt32(ByteArray, 2076); //设备类型
curveInfo[CurveNo].CurveIndex = XtfConvert.ToInt16(ByteArray, 2564); //设备类型
curveInfo[CurveNo].CurveType = XtfConvert.ToInt16(ByteArray, 2566); //设备类型
curveInfo[CurveNo].CurveDataType = XtfConvert.ToInt16(ByteArray, 2568); //设备类型
curveInfo[CurveNo].CurveVert = XtfConvert.ToInt16(ByteArray, 2570); //设备类型
curveInfo[CurveNo].CurveHorz = XtfConvert.ToInt16(ByteArray, 2572); //设备类型
curveInfo[CurveNo].CurveDimNum = XtfConvert.ToInt16(ByteArray, 2574); //设备类型
curveInfo[CurveNo].CurveE1Num = XtfConvert.ToInt16(ByteArray, 2576); //设备类型
curveInfo[CurveNo].CurveE2Num = XtfConvert.ToInt16(ByteArray, 2578); //设备类型
curveInfo[CurveNo].CurveE3Num = XtfConvert.ToInt16(ByteArray, 2580); //设备类型
curveInfo[CurveNo].DataTypeFlag = XtfConvert.ToInt16(ByteArray, 2592); //设备类型
curveInfo[CurveNo].HaveNegFlag = XtfConvert.ToInt16(ByteArray, 2594); //设备类型
curveInfo[CurveNo].DataBitsNum = XtfConvert.ToInt16(ByteArray, 2596); //设备类型
curveInfo[CurveNo].FixedWaveStartFlag = XtfConvert.ToInt16(ByteArray, 2606); //设备类型
curveInfo[CurveNo].FixedWaveGain = XtfConvert.ToInt16(ByteArray, 2608); //设备类型
curveInfo[CurveNo].WaveGainExp = XtfConvert.ToInt16(ByteArray, 2610); //设备类型
curveInfo[CurveNo].GainMethod = XtfConvert.ToInt16(ByteArray, 2612); //设备类型
curveInfo[CurveNo].GainApplyFlag = XtfConvert.ToInt16(ByteArray, 2614); //设备类型
curveInfo[CurveNo].WaveLength = XtfConvert.ToInt16(ByteArray, 2616); //设备类型
curveInfo[CurveNo].ToolNo = XtfConvert.ToInt16(ByteArray, 2618); //设备类型
curveInfo[CurveNo].CurveSerialNo = XtfConvert.ToInt16(ByteArray, 2620); //设备类型
for (int i = 0; i < 24; i++)
{
curveInfo[CurveNo].TranFillArea[i] = XtfConvert.ToByte(ByteArray, 3072+i); //设备类型
curveInfo[CurveNo].RecvFillArea[i] = XtfConvert.ToByte(ByteArray, 3096+i); //设备类型
}
curveInfo[CurveNo].SystemCode = XtfConvert.ToByte(ByteArray, 4095); //设备类型
/* if (curveInfo[CurveNo].CurveName.Contains("TX"))
{
byte b1=ByteArray[0x668];
byte b2 = ByteArray[0x669];
byte b3 = ByteArray[0x66A];
byte c1 = ByteArray[0xA00];
byte c2 = ByteArray[0xA01];
byte c3 = ByteArray[0xA02];
byte c4 = ByteArray[0xA03];
byte d1 = ByteArray[0xD55];
byte d2 = ByteArray[0xD56];
}*/
return CurveNo;
};
int CurveHeadSet(int CurveNo, byte ByteArray[])
{
CString temp_str = "";
int temp_int = 0;
long temp_long = 0;
float temp_float = 0;
short temp_short = 0;
double temp_double = 0;
for (int i = 0; i < 1024; i++) ByteArray[i] = 0x20;
XtfConvert.ToBytes(CurveName[CurveNo], ByteArray, 0,8); //曲线名称
curveInfo[CurveNo].CurveName = CurveName[CurveNo];
curveInfo[CurveNo].CurveUnit = CurveUnit[CurveNo];
//单位变换
/* if (CurveUnit[CurveNo] == "") CurveUnit[CurveNo] = "raw";
if (CurveUnit[CurveNo].Contains("Ω")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("Ω", "ohm");
if (CurveUnit[CurveNo].Contains("℃")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("℃", "degC");
if (CurveUnit[CurveNo].Contains("^")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("^", "");
if (CurveUnit[CurveNo].Contains("度")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("度", "deg");
if (CurveUnit[CurveNo].Contains("°")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("°", "deg");
if (CurveUnit[CurveNo].Contains("%")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("%", "pu");
if (CurveUnit[CurveNo].Contains("mS/m")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("mS/m", "mmho/m");
if (CurveUnit[CurveNo].Contains("g/cm^3")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("g/cm^3", "g/cm3");
if (CurveUnit[CurveNo].Contains("CPS")) CurveUnit[CurveNo] = CurveUnit[CurveNo].Replace("CPS", "cts/s");
if (curveInfo[CurveNo].CurveName == "GR") CurveUnit[CurveNo] = "gAPI";
curveInfo[CurveNo].CurveUnit = CurveUnit[CurveNo];
if (CurveFlag[CurveNo] > 1)
{
if (curveInfo[CurveNo].CurveName.Contains("WV") || (curveInfo[CurveNo].CurveName.Contains("GN")) || (curveInfo[CurveNo].CurveName.Contains("ST")))
{
if (curveInfo[CurveNo].CurveName.Contains("TF"))
{
curveInfo[CurveNo].OrinToSurface = -5.334f;
curveInfo[CurveNo].TR_Distance = 3.6576f;
curveInfo[CurveNo].RR_Distance = 0.1524f;
curveInfo[CurveNo].StartTimeUnit = "us";
curveInfo[CurveNo].WaveTimeUnit = "us";
// curveInfo[CurveNo].TimeValuesLevel = 12;
curveInfo[CurveNo].FixedWaveStartFlag = 1;
curveInfo[CurveNo].FixedWaveGain = 1;
for (int i = 0; i < 8; i++)
{
curveInfo[CurveNo].TranFillArea[i] = (byte)0x01;//发射器填充区
curveInfo[CurveNo].RecvFillArea[i] = (byte)(0x01 + i);//接收器填充区
}
}
if (curveInfo[CurveNo].CurveName.Contains("TN"))
{
curveInfo[CurveNo].OrinToSurface = -5.7912f;
curveInfo[CurveNo].TR_Distance = 2.5908f;
curveInfo[CurveNo].RR_Distance = 0.1524f;
curveInfo[CurveNo].StartTimeUnit = "us";
curveInfo[CurveNo].WaveTimeUnit = "us";
// curveInfo[CurveNo].TimeValuesLevel = 8;
curveInfo[CurveNo].FixedWaveStartFlag = 1;
curveInfo[CurveNo].FixedWaveGain = 1;
for (int i = 0; i < 4; i++)
{
curveInfo[CurveNo].TranFillArea[i] = (byte)0x02;//发射器填充区
curveInfo[CurveNo].RecvFillArea[i] = (byte)(0x01 + i);//接收器填充区
}
}
if (curveInfo[CurveNo].CurveName.Contains("TXX") || curveInfo[CurveNo].CurveName.Contains("TXY"))
{
curveInfo[CurveNo].OrinToSurface = -5.6388f;
curveInfo[CurveNo].TR_Distance = 3.2004f;
curveInfo[CurveNo].RR_Distance = 0.1524f;
curveInfo[CurveNo].StartTimeUnit = "us";
curveInfo[CurveNo].WaveTimeUnit = "us";
// curveInfo[CurveNo].TimeValuesLevel = 36;
curveInfo[CurveNo].FixedWaveStartFlag = 1;
curveInfo[CurveNo].FixedWaveGain = 1;
for (int i = 0; i < 8; i++)
{
curveInfo[CurveNo].TranFillArea[i] = (byte)0x03;//发射器填充区
curveInfo[CurveNo].RecvFillArea[i] = (byte)(0x01 + i);//接收器填充区
}
}
if (curveInfo[CurveNo].CurveName.Contains("TYX") || curveInfo[CurveNo].CurveName.Contains("TYY"))
{
curveInfo[CurveNo].OrinToSurface = -5.6388f;
curveInfo[CurveNo].TR_Distance = 3.2004f;
curveInfo[CurveNo].RR_Distance = 0.1524f;
curveInfo[CurveNo].StartTimeUnit = "us";
curveInfo[CurveNo].WaveTimeUnit = "us";
// curveInfo[CurveNo].TimeValuesLevel = 36;
curveInfo[CurveNo].FixedWaveStartFlag = 1;
curveInfo[CurveNo].FixedWaveGain = 1;
for (int i = 0; i < 8; i++)
{
curveInfo[CurveNo].TranFillArea[i] = (byte)0x04;//发射器填充区
curveInfo[CurveNo].RecvFillArea[i] = (byte)(0x01 + i);//接收器填充区
}
}
}
}*/
XtfConvert.ToBytes(CurveUnit[CurveNo], ByteArray, 8,8);
temp_str = "j727e03.aff";// CurveName[CurveNo];
XtfConvert.ToBytes(temp_str, ByteArray, 16, 24); //曲线备注
temp_str = "ATLAS";
XtfConvert.ToBytes(temp_str, ByteArray, 40, 8); //设备类型
temp_str = " ";
XtfConvert.ToBytes(temp_str, ByteArray, 48,8); //仪器类型
temp_str = "AFF";
XtfConvert.ToBytes(temp_str, ByteArray, 56,8); //曲线类型
temp_str = SystemDepthUnit;
XtfConvert.ToBytes(temp_str, ByteArray, 64, 8);
temp_str = "up";
XtfConvert.ToBytes(temp_str, ByteArray, 120, 8); //测井方向
XtfConvert.ToBytes(CurveName[CurveNo], ByteArray, 128, 4); //AIF
temp_str = "j727e";
XtfConvert.ToBytes(temp_str, ByteArray, 152, 8); //OCT
temp_str = "1515MA";
XtfConvert.ToBytes(temp_str, ByteArray, 160, 48); //仪器名字
XtfConvert.ToBytes(CurveName[CurveNo], ByteArray, 224, 4); //LIS
temp_str = " aff2xtf Rev 1.0";
XtfConvert.ToBytes(temp_str, ByteArray, 228, 796); //no use
XtfConvert.ToBytes(CurveStartDepth[CurveNo], ByteArray, 1024); //开始深度float
XtfConvert.ToBytes(CurveEndDepth[CurveNo], ByteArray, 1028); //结束深度float
XtfConvert.ToBytes(CurveDepthLevel[CurveNo], ByteArray, 1032); //深度间隔float
temp_float = -999999.;//0;
XtfConvert.ToBytes(temp_float, ByteArray, 1036); //min
temp_float = 999999.;//0;
XtfConvert.ToBytes(temp_float, ByteArray, 1040); //max
temp_float = 0;
XtfConvert.ToBytes(temp_float, ByteArray, 1044); //avg
temp_double = 1000000;
XtfConvert.ToBytes(temp_double, ByteArray, 1536); //start depth, double
temp_double = CurveStartDepth[CurveNo];
XtfConvert.ToBytes(temp_double, ByteArray, 1544); //start depth, double
temp_double = CurveEndDepth[CurveNo];
XtfConvert.ToBytes(temp_double, ByteArray, 1552); //end depth,double
temp_double = CurveDepthLevel[CurveNo];
XtfConvert.ToBytes(temp_double, ByteArray, 1560); //depth level,double
XtfConvert.ToBytes(CreateDate, ByteArray, 2048); //创建时间
XtfConvert.ToBytes(CreateTime, ByteArray, 2052); //创建时间
XtfConvert.ToBytes(CreateDate, ByteArray, 2056); //访问时间
XtfConvert.ToBytes(CreateTime, ByteArray, 2060); //访问时间
temp_int = 1;
XtfConvert.ToBytes(temp_int, ByteArray, 2064); //头记录数
temp_int = CurveEndPos[CurveNo];
XtfConvert.ToBytes(temp_int, ByteArray, 2068); //曲线结束记录位置
// temp_int = 0;
// XtfConvert.ToBytes(temp_int, ByteArray, 2072); //
temp_float = -9999.0f;
XtfConvert.ToBytes(temp_float, ByteArray, 2072); //浮点数初始值
temp_int = CurveSampleNum[CurveNo];
XtfConvert.ToBytes(temp_int, ByteArray, 2076); //曲线采样总点数
// temp_str = " ";
// XtfConvert.ToBytes(temp_str, ByteArray, 2088, 472); //no use
temp_short = (short)(CurveNo+1);
XtfConvert.ToBytes(temp_short, ByteArray, 2564); //曲线索引号
temp_short = (short)CurveType[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2566); //曲线类型
temp_short = (short)CurveDataType[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2568); //数据类型
temp_short = (short)CurveVert[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2570); //垂直特性
temp_short = (short)CurveHorz[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2572); //垂直特性
temp_short = (short)CurveDimNum[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2574); //维数
temp_short = (short)CurveE1Num[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2576); //第1维个数
temp_short = (short)CurveE2Num[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2578); //第2维个数
temp_short = (short)CurveE3Num[CurveNo];
XtfConvert.ToBytes(temp_short, ByteArray, 2580); //第3维个数
temp_short = -32767;
XtfConvert.ToBytes(temp_short, ByteArray, 2590); //INT*2初始值
if (CurveDataType[CurveNo] == 2 || CurveDataType[CurveNo] == 9)
{
temp_short = 1;
}
else
{
temp_short = 2;
}
XtfConvert.ToBytes(temp_short, ByteArray, 2592); //数据类型旗标
temp_short = 1;
XtfConvert.ToBytes(temp_short, ByteArray, 2594); //有无负号标志1有
if (CurveDataType[CurveNo] == 2 || CurveDataType[CurveNo] == 9)
temp_short = 16;
else
temp_short = 32;
XtfConvert.ToBytes(temp_short, ByteArray, 2596); //每个数据元素位数
if (CurveFlag[CurveNo] > 0)
{
XtfConvert.ToBytes(curveInfo[CurveNo].TR_Distance, ByteArray, 1080); //T-R距离
XtfConvert.ToBytes(curveInfo[CurveNo].RR_Distance, ByteArray, 1084); //R-R距离
XtfConvert.ToBytes(curveInfo[CurveNo].OrinToSurface, ByteArray, 1088); //R-R距离
for (int i = 0; i < 24; i++)
{
XtfConvert.ToBytes(curveInfo[CurveNo].TranFillArea[i], ByteArray, 3072 + i); //发射填充区
XtfConvert.ToBytes(curveInfo[CurveNo].RecvFillArea[i], ByteArray, 3096+i); //接收器填充区
}
XtfConvert.ToBytes(curveInfo[CurveNo].StartTimeUnit, ByteArray, 80,8); //开门时间
XtfConvert.ToBytes(curveInfo[CurveNo].WaveTimeUnit, ByteArray, 72,8); //波形时间
XtfConvert.ToBytes(curveInfo[CurveNo].FixedWaveStartFlag, ByteArray, 2606); //0阵列声波固定开门时间
XtfConvert.ToBytes(curveInfo[CurveNo].FixedWaveGain, ByteArray, 2608); //0阵列声波固定增益
//whp del 2016.6.2
//XtfConvert.ToBytes(curveInfo[CurveNo].TimeValuesLevel, ByteArray, 1048); //时间增量,时间采样间隔
}
//whp add 2016.6.2 for 转换阵列数据开始时间和时间间隔
XtfConvert.ToBytes(curveInfo[CurveNo].TimeValuesLevel, ByteArray, 1048); //时间增量,时间采样间隔
XtfConvert.ToBytes(curveInfo[CurveNo].DACTimeOffset, ByteArray, 1052); //DAC起始时间
//whp add end
ByteArray[2618] = 0x01; //仪器号
ByteArray[0xA00] = 0x00;
ByteArray[0xA01] = Version1;
ByteArray[0xA02] = 0x00;
ByteArray[0xA03] = Version2;
if(CurveFlag[CurveNo] > 1)
{
ByteArray[0xA1E] = 0x80; //0x00;//
ByteArray[0xA1F] = 0x01; //0x00;//
ByteArray[0x668] = 0xBF;
ByteArray[0x669] = 0xE3;
ByteArray[0x66A] = 0x82;
ByteArray[0xD55] = 0x88;
ByteArray[0xD56] = 0x44;
}
ByteArray[4095] = SystemCode;//系统码
// XtfConvert.ToBytes(SystemCode, ByteArray, 4095);
return CurveNo;
};
int CurveHead_Write(int CurveNo)
{
byte ByteArray[4096] = {0};
CurveHeadSet(CurveNo, ByteArray);
long pos = CurveStartPos[CurveNo] - 1;
dataFile->seek(pos * 4096);
dataFile->write((char*)&ByteArray[0], 4096);
dataFile->flush();
return CurveNo;
};
int CurveRecord_Write(byte buf[],int offset,int length)
{
dataFile->write((char*)&buf[offset], length);
return 0;
};
int CurveHead_Read(int CurveNo)
{
byte ByteArray[4096] = {0};
long pos = CurveStartPos[CurveNo] - 1;
dataFile->seek(pos * 4096);
dataFile->read((char*)&ByteArray[0], 4096);
CurveHeadGet(CurveNo, ByteArray);
return 0;
};
int CurveRecord_Read(byte buf[], int offset, int length)
{
dataFile->read((char*)&buf[offset], length);
return 0;
};
};