logplus/DataOutput/include/MyLisLib.h

1153 lines
26 KiB
C
Raw Permalink Normal View History

2025-10-29 17:23:30 +08:00
/////////////////////////////////////////////
// MyDlisLib.h
#pragma once
#define MAX_CURVE_NUM 256
struct Info_Reel // <20><><EFBFBD><EFBFBD>Ϣ Type 132 133
{
char ServiceName[6]; //6 65 Service Name
char NoUse1[6]; //6 65
char Date[8]; //6 65
char NoUse2[2]; //6 65
char DataOrigin[4]; //6 65
char Nouse3[2]; //6 65
char ReelName[8]; //6 65
char NoUse4[2]; //6 65
char ReelContinueNo[2]; //2 65
char NoUse5[2]; //2 65
char PreReelName[8]; //8 65
char NoUse6[2]; //2 65
char Comments[74]; //74 65
};
struct Info_Tape // <20>Ŵ<EFBFBD><C5B4><EFBFBD>Ϣ Type 130 131
{
char ServiceName[6]; //6 65 Service Name
char NoUse1[6]; //6 65
char Date[8]; //6 65
char NoUse2[2]; //6 65
char DataOrigin[4]; //6 65
char Nouse3[2]; //6 65
char TapeName[8]; //6 65
char NoUse4[2]; //6 65
char TapeContinueNo[2]; //2 65
char NoUse5[2]; //6 65
char PreTapeName[8]; //8 65
char NoUse6[2]; //2 65
char Comments[74]; //74 65
};
struct Info_File //<2F>ļ<EFBFBD>ͷβ<CDB7><CEB2>Ϣ
{
char FileName[10]; // 10 65 <20>ļ<EFBFBD><C4BC><EFBFBD>
char NoUse1[2]; // 2 65 <20>հ<EFBFBD>
char ServiceID[6]; // 6 65 <20>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char VerID[8]; // 8 65 <20><EFBFBD><E6B1BE>
char ProductDate[8]; // 8 65 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char NoUse2; // 1 65 <20>հ<EFBFBD>
char MaxPhiLen[5]; // 5 65 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
char NoUse3[2]; // 2 65 <20>հ<EFBFBD>
char FileType[2]; // 2 65 <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
char NoUse4[2]; // 4 65 <20>հ<EFBFBD>
char FileNameB[10]; // 10 65 ǰ<><C7B0><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
};
struct Info_Block
{
BYTE Type ; // 1 66 Ԫ<><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE DataCode; // 1 66 Ԫ<><D4AA><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
BYTE Length; // 1 66 Ԫ<><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE Kind; // 1 66 Ԫ<><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char MNEM[4]; // 4 65 Ԫ<><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char UNIT[4]; // 4 65 Ԫ<><D4AA><EFBFBD><EFBFBD>λ
};
struct DataItem
{
BYTE Type; // 1 66 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE Length; // 1 66 <20><><EFBFBD><EFBFBD><E9B3A4>
BYTE DataCode; // 1 66 <20><>ʾ<EFBFBD><CABE>ֵ
};
struct CurveS0 //40 BYTE <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD> 0
{
char Name[4]; // 4 65 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char ServeID[6]; // 6 65 <20><><EFBFBD><EFBFBD>ID
char ServeSort[8]; // 8 65 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char Unit[4]; // 4 65 <20><>λ
struct APICodeS // API<50><49><EFBFBD><EFBFBD>
{
BYTE LogType; // 1 66 API<50><EFBFBD><E2BEAE><EFBFBD><EFBFBD>
BYTE CurveType; // 1 66 API<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE CurveGrade; // 1 66 API<50><49><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>
BYTE DefineData; // 1 66 API<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}APICode;
BYTE FileNo[2]; // 2 79 <20>ļ<EFBFBD><C4BC><EFBFBD>
BYTE Length[2]; // 2 79 <20><><EFBFBD><EFBFBD> ֡<>д<EFBFBD><D0B4>ŵ<EFBFBD><C5B5>ֽ<EFBFBD><D6BD><EFBFBD>
short noUse1; // 2 79 <20><><EFBFBD><EFBFBD>
BYTE ProcID; // 1 66 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE DotsNum; // 1 66 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE DataType; // 1 66 <20><>ʾ<EFBFBD><CABE> <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE Nouse2; // 1 66 <20><><EFBFBD><EFBFBD>
int Nouse3; // 4 73 <20><><EFBFBD><EFBFBD>
};
struct CurveS1 //40 BYTE <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD> 1
{
char Name[4]; // 4 65 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char ServeID[6]; // 6 65 <20><><EFBFBD><EFBFBD>ID
char ServeSort[8]; // 8 65 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char Unit[4]; // 4 65 <20><>λ
struct APICodeS // API<50><49><EFBFBD><EFBFBD>
{
BYTE LogType; // 1 66 API<50><EFBFBD><E2BEAE><EFBFBD><EFBFBD>
BYTE CurveType; // 1 66 API<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE CurveGrade; // 1 66 API<50><49><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>
BYTE DefineData; // 1 66 API<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}APICode;
BYTE FileNo[2]; // 2 79
BYTE Length[2]; // 2 79
BYTE noUse1[3]; // 3 66 <20><><EFBFBD><EFBFBD>
BYTE DotsNum; // 1 66 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE DataType; // 1 66 <20><>ʾ<EFBFBD><CABE> <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE ProcID[5]; // 5 77 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
struct Data_Explain_Block
{
BYTE End_Flag; // 1 66 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
BYTE Data_Type; // 1 66 <20><><EFBFBD>ݼ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
BYTE Data_Mode; // 1 66 <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int Frame_Length; // 1 73 <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
BYTE Log_Dir; // 1 66 <20><><EFBFBD>²<EFBFBD><C2B2><EFBFBD>־
BYTE Record_Unit; // 1 66 <20><EFBFBD><E2BEAE><EFBFBD>ȵ<EFBFBD>λ
float Refer_Point; // 4 68 <20><><EFBFBD>ݲο<DDB2><CEBF><EFBFBD>
char Refer_Unit[4]; // 4 65 <20><><EFBFBD>ݲο<DDB2><CEBF>㵥λ
float Frame_Step; // 2 79 ֮֡<D6A1><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD>
int Max_Frame_Count; // 1 66 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼֡<C2BC><D6A1>
float Invalid_Data; // 4 68 <20><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
BYTE Depth_Mode; // 1 66 <20><><EFBFBD>ȼ<EFBFBD>¼<EFBFBD><C2BC>ʽ
char Depth_Unit[4]; // 1 65 <20><><EFBFBD>ȼ<EFBFBD>¼<EFBFBD><C2BC>λ
BYTE Depth_Code; // 1 66 <20><><EFBFBD>ȱ<EFBFBD>ʾ<EFBFBD><CABE>
BYTE Curve_Mode; // 1 66 <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
struct UseCurveS
{
char Name[40];
char Unit[40];
byte DotCount;
float BytesNum;
byte DataType;
};
class MyLisLib
{
private:
struct CurveS0 theCurveS0[MAX_CURVE_NUM];
struct CurveS1 theCurveS1[MAX_CURVE_NUM];
bool openFlag;
int fileOptions;
int Max_Phi_Len;
BYTE tmpb[8200];
struct Data_Explain_Block m_explain_block;
float curIndex;
double realFrame_Step;
int m_depth_mode;
int b_ptr ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
BYTE tmp[40*1000*4];
int ii;
int DataPtr[MAX_CURVE_NUM]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD><CEBB>
public:
//attrib
struct UseCurveS Curve[MAX_CURVE_NUM];
QFile *DataFile;
int Year,Month,Day;
int LogDir ; //-1 Up, 0 Time ,1 Down;
float Frame_Step;
int ProcessBlock;
int CurveNum;
int projRecordCount;
MyLisLib()
{
Max_Phi_Len=1024;
memset(tmpb,0,8200);
Year=2000;
Month=1;
Day=1;
openFlag=false;
fileOptions=0;
projRecordCount=1;
LogDir=-1;
Frame_Step=0.1f;
m_depth_mode=1;//1;//<2F><><EFBFBD>ȼ<EFBFBD>¼<EFBFBD><C2BC>ʽ:0-ÿ֡<C3BF><D6A1><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,1-һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
//=1ʱ<31><CAB1>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD><E0B2BB>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ProcessBlock=0;
CurveNum=0;
for(int i=0;i<MAX_CURVE_NUM;i++)
{
memset(&theCurveS0[i],0,sizeof(CurveS0));
memset(&theCurveS1[i],0,sizeof(CurveS1));
DataPtr[i]=0;
}
};
~MyLisLib()
{
delete DataFile;
};
int OpenDataFile(QString dataFileName, int nOpenFlags)
{
// srcFileFlag //nOpenFlags =0,Read,=1 Write,=2,readwrite;
if (openFlag)
{
DataFile->close();
openFlag = false;
}
//////////////////////////////////////////////////////////////////////////
///ע<>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ٴδ򿪱<CEB4><F2BFAAB1><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ѿ<EFBFBD><D1BE>رյ<D8B1><D5B5><EFBFBD><ECB3A3>ʾ
//////////////////////////////////////////////////////////////////////////
{
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 CloseDataFile()
{
if (openFlag)
{
DataFile->close();
openFlag = false;
}
return 0;
};
int FillLisFileHead()
{
unsigned short phiLen;
struct Info_File *fileH;
///////////////////////////////////////// <20>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
tmpb[0]=0;
tmpb[1]=62; // =4+2+sizoef(Info_File){56}
tmpb[2]=0x80;
tmpb[3]=0;
////////////////////////////////////////// // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ
tmpb[4]=128;
tmpb[5]=0;
fileH=(struct Info_File *)(&tmpb[6]);
memset(fileH,0x20,sizeof(struct Info_File));
strcpy(fileH->FileName,"LISOUT.001");
strcpy(fileH->ServiceID,"MYYLIS");
strcpy(fileH->VerID,"2.00");
strcpy(fileH->ProductDate,"10/10/10");
strcpy(fileH->FileType,"LO");
char tmp[10];
memset(tmp,0,10);
sprintf(tmp,"%d",Max_Phi_Len);
strncpy(fileH->MaxPhiLen,tmp,5);
//////////////////////////////////////////////
phiLen =tmpb[1]+tmpb[0]*0x100;
DataFile->seek(0);
DataFile->write((char*)&tmpb[0],phiLen);
return phiLen;
};
int FillLisFileTail()
{
unsigned short phiLen;
struct Info_File * fileT;
///////////////////////////////////////// <20>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
tmpb[0]=0;
tmpb[1]=62; // =4+2+sizoef(Info_File){56}
tmpb[2]=0x80;
tmpb[3]=0;
////////////////////////////////////////// // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ
tmpb[4]=129;
tmpb[5]=0;
fileT = (struct Info_File *)(&tmpb[6]);
memset(fileT,0x20,sizeof(struct Info_File));
strcpy(fileT->FileName,"LISOUT.001");
strcpy(fileT->ServiceID,"MYYLIS");
strcpy(fileT->VerID,"2.00");
sprintf(fileT->ProductDate,"%2d/%2d/%2d",Month,Day,Year%100);
strcpy(fileT->FileType,"LO");
char tmp[10];
memset(tmp,0,10);
sprintf(tmp,"%d",Max_Phi_Len);
strncpy(fileT->MaxPhiLen,tmp,5);
//////////////////////////////////////////////
phiLen =tmpb[1]+tmpb[0]*0x100;
DataFile->write((char*)&tmpb[0],phiLen);
return phiLen;
};
int FillLisDataItemT(BYTE Type, BYTE Length, BYTE DataCode, BYTE tmpt[],unsigned short phiLen)
{
int item_Len;
struct DataItem item;
item.Type = Type;
item.Length = Length;
item.DataCode= DataCode;
memcpy(tmpb+phiLen,&item,sizeof(DataItem));
if( item.Length>0)
{
memcpy(tmpb+phiLen+sizeof(DataItem),tmpt,item.Length);
}
item_Len = sizeof(struct DataItem) +item.Length ;
return item_Len;
};
long FillLisDataBolck()
{
int i,tmpi;
unsigned short phiLen;
BYTE t1[100];
ProcessBlock=0;
for(i=0;i<CurveNum;i++)
{
ProcessBlock+=Curve[i].BytesNum;
}
/////////////////////////////// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
tmpb[0] = 0;
tmpb[1] = 0;
tmpb[2] = 0x80;
tmpb[3] = 0;
tmpb[4] =64; //type
tmpb[5] =0;
phiLen=6;
memset(&m_explain_block,0,sizeof(struct Data_Explain_Block));
m_explain_block.Data_Mode = 0;
m_explain_block.Data_Type = 0;
if(LogDir<0)m_explain_block.Log_Dir=1;
else m_explain_block.Log_Dir=255;
if(LogDir==0)m_explain_block.Record_Unit = 0;
else m_explain_block.Record_Unit = 255;
m_explain_block.Frame_Step=Frame_Step;
m_explain_block.Invalid_Data= -9999.99f;
m_explain_block.Depth_Mode = m_depth_mode;
m_explain_block.Depth_Code = 68;
m_explain_block.Curve_Mode = 1;
m_explain_block.Frame_Length= ProcessBlock+(1-m_explain_block.Depth_Mode)*sizeof(float) ;
//<2F>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
t1[0]=m_explain_block.Data_Mode;
phiLen += FillLisDataItemT(1,1,66,t1,phiLen);
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
t1[0]=m_explain_block.Data_Type;
phiLen += FillLisDataItemT(2,1,66,t1,phiLen);
//֡<><D6A1><EFBFBD><EFBFBD>
tmpi=m_explain_block.Frame_Length;
ConvertFloatToLisData((float)tmpi,t1,79);
phiLen += FillLisDataItemT(3,2,79,t1,phiLen);
// <20><EFBFBD><E2BEAE><EFBFBD><EFBFBD>
// 1=<3D>ϲ<EFBFBD> <20><>255=<3D>²⣻ 0Ϊ<30><CEAA><EFBFBD>߶<EFBFBD><DFB6><EFBFBD><EFBFBD>ǣ<EFBFBD>ȱʡΪ1
t1[0]=m_explain_block.Log_Dir;
phiLen += FillLisDataItemT(4,1,66,t1,phiLen);
// <20><><EFBFBD>ȵ<EFBFBD>λ
// 1= Ӣ<><D3A2> <20><> 255=<3D><> <20><>0= ʱ<>䣻 ȱʡΪ1 *
t1[0]=m_explain_block.Record_Unit;
phiLen += FillLisDataItemT(5,1,66,t1,phiLen);
//<2F><><EFBFBD>ݲο<DDB2><CEBF><EFBFBD>
memset(t1,0,4);
phiLen += FillLisDataItemT(6,4,73,t1,phiLen);
if(LogDir !=0 ) //depth
{
//<2F><><EFBFBD>ݲο<DDB2><CEBF><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>λ
memcpy(t1,"M ",4);
phiLen += FillLisDataItemT(7,4,65,t1,phiLen);
//֡<><D6A1><EFBFBD><EFBFBD>
ConvertFloatToLisData(float(m_explain_block.Frame_Step),t1,68);
phiLen += FillLisDataItemT(8,4,68,t1,phiLen);
//֡<><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
memcpy(t1,"M ",4);
phiLen += FillLisDataItemT(9,4,65,t1,phiLen);
}
else //time
{
//<2F><><EFBFBD>ݲο<DDB2><CEBF><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>λ
memcpy(t1,"S ",4);
phiLen += FillLisDataItemT(7,4,65,t1,phiLen);
//֡<><D6A1><EFBFBD><EFBFBD>
ConvertFloatToLisData(float(m_explain_block.Frame_Step),t1,68);
phiLen += FillLisDataItemT(8,4,68,t1,phiLen);
//֡<><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
memcpy(t1,"S ",4);
phiLen += FillLisDataItemT(9,4,65,t1,phiLen);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼֡<C2BC><D6A1>
t1[0]=(Max_Phi_Len-6 -m_explain_block.Depth_Mode *sizeof(float))/ProcessBlock;
if(t1[0]>255)
t1[0]=255;
if(t1[0]==0)
t1[0]=1;
phiLen += FillLisDataItemT(11,1,66,t1,phiLen);
//<2F><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD> ȱʡΪ-9999.95
ConvertFloatToLisData(m_explain_block.Invalid_Data,t1,68);
phiLen += FillLisDataItemT(12,4,68,t1,phiLen);
if(m_explain_block.Depth_Mode==1)
{
//<2F><><EFBFBD>ȼ<EFBFBD>¼<EFBFBD><C2BC>ʽ
t1[0]=m_explain_block.Depth_Mode;
phiLen += FillLisDataItemT(13,1,66,t1,phiLen);
//<2F><><EFBFBD>ȵ<EFBFBD>λ
if(LogDir !=0)
memcpy(t1,"M ",4);
else
memcpy(t1,"S ",4);
phiLen += FillLisDataItemT(14,4,65,t1,phiLen);
//<2F><><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>
t1[0]=m_explain_block.Depth_Code;
phiLen += FillLisDataItemT(15,1,66,t1,phiLen);
}
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
t1[0]=m_explain_block.Curve_Mode;
phiLen += FillLisDataItemT(16,1,66,t1,phiLen);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
t1[0]=0;
m_explain_block.End_Flag= (phiLen+sizeof(struct DataItem))%2;
phiLen += FillLisDataItemT(0,m_explain_block.End_Flag,66,t1,phiLen);
///////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD>
struct CurveS1 curve1;
struct CurveS0 curve0;
memset(&curve1,0x20,sizeof(struct CurveS1));
memset(&curve0,0x20,sizeof(struct CurveS0));
BYTE ProcID=2;
if(LogDir<0) // Up logging
ProcID += 128;
else if( LogDir>0 ) // down logging
ProcID += 64;
else // time logging
ProcID += 16; // data channel not on depth
//////////////////////////////// DEPT//////////////////////
if(m_explain_block.Depth_Mode==0)
{
if(m_explain_block.Curve_Mode==1)
{
memset(&curve1,0x20,sizeof(struct CurveS1));
strncpy(curve1.Name,"DEPT",4);
strncpy(curve1.ServeID ,"MYYLIS",6);
strncpy(curve1.Unit,"M ",4);
memset(&curve1.APICode,0,4);
curve1.DotsNum = 1;
ConvertFloatToLisData(float( 1 *sizeof(float)),curve1.Length,79);
curve1.DataType = 68; //PC<50><43><EFBFBD><EFBFBD>IEEE<45><45>ʽ <20><>ʾ<EFBFBD><CABE>Ϊ?
ConvertFloatToLisData((float)1.0,curve1.FileNo,79);
memset(&curve1.ProcID,0,5);
curve1.ProcID[0]=ProcID;
memcpy(tmpb+phiLen,&curve1,sizeof(struct CurveS1));
phiLen+=sizeof(struct CurveS1);
}
else
{
memset(&curve0,0x20,sizeof(struct CurveS0));
strncpy(curve0.Name,"DEPT",4);
strncpy(curve0.ServeID ,"MYYLIS",6);
strncpy(curve0.Unit,"M ",4);
memset(&curve0.APICode,0,4);
curve0.DotsNum = 1;
ConvertFloatToLisData(float( 1 *sizeof(float)),curve0.Length,79);
curve0.DataType = 68; //PC<50><43><EFBFBD><EFBFBD>IEEE<45><45>ʽ <20><>ʾ<EFBFBD><CABE>Ϊ?
ConvertFloatToLisData((float)1.0,curve0.FileNo,79);
memset(&curve0.ProcID,0,1);
curve0.ProcID=ProcID;
memcpy(tmpb+phiLen,&curve0,sizeof(struct CurveS0));
phiLen+=sizeof(struct CurveS0);
}
}
///////////////////////////////////////////
for(i=0;i<CurveNum;i++)
{
memset(&curve1,0x20,sizeof(struct CurveS1));
if(m_explain_block.Curve_Mode==1)
{
strncpy(curve1.Name,Curve[i].Name,4);
strncpy(curve1.ServeID ,"MYYLIS",6);
strncpy(curve1.Unit,Curve[i].Unit,4);
memset(&curve1.APICode,0,4);
curve1.DotsNum = Curve[i].DotCount;
ConvertFloatToLisData(Curve[i].BytesNum,curve1.Length,79);
curve1.DataType = Curve[i].DataType; //PC<50><43><EFBFBD><EFBFBD>IEEE<45><45>ʽ <20><>ʾ<EFBFBD><CABE>Ϊ?
memset(&curve1.ProcID,0,5);
curve1.ProcID[0]=ProcID;
memcpy(tmpb+phiLen,&curve1,sizeof(struct CurveS1));
phiLen+=sizeof(struct CurveS1);
}
else
{
strncpy(curve0.Name,Curve[i].Name,4);
strncpy(curve0.ServeID ,"MYYLIS",6);
strncpy(curve0.Unit,Curve[i].Unit,4);
memset(&curve0.APICode,0,4);
curve0.DotsNum = Curve[i].DotCount;
ConvertFloatToLisData(Curve[i].BytesNum,curve0.Length,79);
curve0.DataType = Curve[i].DataType; //PC<50><43><EFBFBD><EFBFBD>IEEE<45><45>ʽ <20><>ʾ<EFBFBD><CABE>Ϊ?
memset(&curve0.ProcID,0,1);
curve0.ProcID=ProcID;
memcpy(tmpb+phiLen,&curve0,sizeof(struct CurveS0));
phiLen+=sizeof(struct CurveS0);
}
}
///////////////////////////// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
if(phiLen > Max_Phi_Len)
{
tmpb[0] = Max_Phi_Len/0x100;
tmpb[1] = Max_Phi_Len%0x100;
tmpb[2] = 0x80;
tmpb[3] = 0x01;
DataFile->write((char*)&tmpb[0],Max_Phi_Len);
int lastLen;
lastLen= phiLen - Max_Phi_Len + 4 ;
tmpb[Max_Phi_Len-4] = lastLen /0x100;
tmpb[Max_Phi_Len-3] = lastLen %0x100;
tmpb[Max_Phi_Len-2] = 0x80;
tmpb[Max_Phi_Len-1] = 0x02;
DataFile->write((char*)&tmpb[0] + Max_Phi_Len -4,lastLen);
}
else
{
tmpb[0] = phiLen/0x100;
tmpb[1] = phiLen%0x100;
tmpb[2] = 0x80;
tmpb[3] = 0;
DataFile->write((char*)&tmpb[0],phiLen);
}
return phiLen;
};
BYTE t1[100];
void Data_Write(BYTE *ProjBuf)
{
if(m_explain_block.Depth_Mode==0)//ÿ֡<C3BF><D6A1><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
ConvertFloatToLisData((float)(curIndex+ii*realFrame_Step) ,t1,m_explain_block.Depth_Code);
memcpy(&tmp[b_ptr],t1,4);
b_ptr+=4;
}
for(int i=0;i<CurveNum;i++)
{
if(Curve[i].DataType==79)
{
int len=Curve[i].BytesNum/2;
for(int j=0;j<len;j++)
{
ConvertFloatToLisData(*(short*)(ProjBuf+DataPtr[i]+j*2),&tmp[b_ptr],Curve[i].DataType);
b_ptr+=2;
}
}
else if(Curve[i].DataType==73)
{
int len=Curve[i].BytesNum/4;
for(int j=0;j<len;j++)
{
ConvertFloatToLisData(*(int*)(ProjBuf+DataPtr[i]+j*4),&tmp[b_ptr],Curve[i].DataType);
b_ptr+=4;
}
}
else
{
int len=Curve[i].BytesNum/4;
for(int j=0;j<len;j++)
{
ConvertFloatToLisData(*(float*)(ProjBuf+DataPtr[i]+j*4),&tmp[b_ptr],68);
b_ptr+=4;
}
}
}
ii++;
int curRecordCount=projRecordCount;
if(ii%projRecordCount==0)//һ<><D2BB><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD>ݿ<EFBFBD>
{
b_ptr=(ProcessBlock+(1-m_explain_block.Depth_Mode)*sizeof(float))*curRecordCount;
int PhiN=0,LogHead;
do//ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ݷֿ<DDB7><D6BF><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PhiN
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼ͷ4bytes,<2C>߼<EFBFBD><DFBC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>2bytes,<2C><><EFBFBD>ȳ<EFBFBD>ʼֵ
tmpb[2]=0x80;
tmpb[3]=0x00;
unsigned short phiLen;
phiLen = 4;
if(PhiN==0)
{
tmpb[4] = 0; //<2F>߼<EFBFBD><DFBC><EFBFBD>¼ͷ <20><><EFBFBD>ݼ<EFBFBD>¼
tmpb[5] = 0;
phiLen += 2;
if(m_explain_block.Depth_Mode==1)//һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
{
ConvertFloatToLisData((float)(curIndex+(ii-projRecordCount+1)*realFrame_Step) ,t1,m_explain_block.Depth_Code);
memcpy(tmpb+phiLen,t1,4);
phiLen += 4;
}
}
else
{//ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>û<EFBFBD><C3BB><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>Ϣ
}
LogHead=phiLen;
if(Max_Phi_Len-LogHead<b_ptr)
{
memcpy(tmpb+phiLen,tmp+(ProcessBlock+(1-m_explain_block.Depth_Mode)*sizeof(float))*curRecordCount-b_ptr,Max_Phi_Len-LogHead);
phiLen+= (Max_Phi_Len-LogHead);
b_ptr -= (Max_Phi_Len-LogHead);
if(PhiN==0)
tmpb[3] = 1;
else if(b_ptr>0)
tmpb[3] = 3;
else
tmpb[3] = 2;
}
else
{
memcpy(tmpb+phiLen,tmp+(ProcessBlock+(1-m_explain_block.Depth_Mode)*sizeof(float))*curRecordCount-b_ptr,b_ptr);
phiLen+= b_ptr;
b_ptr=0;
if(PhiN==0)
tmpb[3]=0;
else
tmpb[3] = 2;
}
tmpb[0] =(BYTE)(phiLen / 0x100);
tmpb[1] =(BYTE)(phiLen % 0x100);
DataFile->write((char*)&tmpb[0], phiLen);
PhiN++;
}while(b_ptr>0);
}
};
void End_Flush()
{
int curRecordCount=projRecordCount;
if(ii%projRecordCount>0 )
{
curRecordCount=ii%projRecordCount; //ʣ<><CAA3><EFBFBD><EFBFBD>
b_ptr=(ProcessBlock+(1-m_explain_block.Depth_Mode)*sizeof(float))*curRecordCount;
int PhiN=0,LogHead;
do
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼ͷ4bytes,<2C>߼<EFBFBD><DFBC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>2bytes,<2C><><EFBFBD>ȳ<EFBFBD>ʼֵ
tmpb[2]=0x80;
tmpb[3]=0x00;
unsigned short phiLen;
phiLen = 4;
if(PhiN==0)
{
tmpb[4] = 0; //<2F>߼<EFBFBD><DFBC><EFBFBD>¼ͷ <20><><EFBFBD>ݼ<EFBFBD>¼
tmpb[5] = 0;
phiLen += 2;
if(m_explain_block.Depth_Mode==1)//һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
{
ConvertFloatToLisData((float)(curIndex+(ii-curRecordCount+1)*realFrame_Step) ,t1,m_explain_block.Depth_Code);
memcpy(tmpb+phiLen,t1,4);
phiLen += 4;
}
}
else
{//ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>û<EFBFBD><C3BB><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>Ϣ
}
LogHead=phiLen;
if(Max_Phi_Len-LogHead<b_ptr)
{
memcpy(tmpb+phiLen,tmp+(ProcessBlock+(1-m_explain_block.Depth_Mode)*sizeof(float))*curRecordCount-b_ptr,Max_Phi_Len-LogHead);
phiLen+= (Max_Phi_Len-LogHead);
b_ptr -= (Max_Phi_Len-LogHead);
if(PhiN==0)
tmpb[3] = 1;
else if(b_ptr>0)
tmpb[3] = 3;
else
tmpb[3] = 2;
}
else
{
memcpy(tmpb+phiLen,tmp+(ProcessBlock+(1-m_explain_block.Depth_Mode)*sizeof(float))*curRecordCount-b_ptr,b_ptr);
phiLen+= b_ptr;
b_ptr=0;
if(PhiN==0)
tmpb[3]=0;
else
tmpb[3] = 2;
}
tmpb[0] =(BYTE)(phiLen / 0x100);
tmpb[1] =(BYTE)(phiLen % 0x100);
DataFile->write((char*)&tmpb[0], phiLen);
PhiN++;
}while(b_ptr>0);
}
};
void Begin_Write(float StartIndex)
{
curIndex=StartIndex;
ii=0;
realFrame_Step = m_explain_block.Frame_Step;
if(LogDir<0) //up logging
realFrame_Step *= (-1);
if(m_explain_block.Depth_Mode) //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
projRecordCount= (Max_Phi_Len-6-sizeof(float) )/ProcessBlock;
else //ÿ֡<C3BF><D6A1><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
projRecordCount= (Max_Phi_Len-6)/ (ProcessBlock+sizeof(float));
if(projRecordCount>255) projRecordCount=255;
if(projRecordCount==0) projRecordCount=1;
int recl=0;
for(int i=0;i<CurveNum;i++)
{
DataPtr[i]=recl;
recl+=Curve[i].BytesNum;
}
b_ptr=0;
memset(t1,0,100);
};
void ConvertFloatToLisData(float srcData, BYTE tmpb[], BYTE dataCode)
{
int i,j,sign,dd,IntData;
double TailData;
if(srcData<0) sign=-1;
else sign=1;
switch(dataCode)
{
case 65: // 'C' ASCII
case 66: // 'B' 8λ<38>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tmpb[0]= (BYTE)(srcData);
break;
case 56: // 8λ<38><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dd= (int)fabs(srcData);
if(srcData<0)
{
dd = ((~dd) &0x0ff +1)&0xff;
dd=dd|0x80;
}
tmpb[0]=dd;
break;
case 79:// 16λ<36><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dd= (int)(fabs(srcData)+0.5);
if(srcData<0)
{
dd=( (~dd)+1)&0xffff;
dd=dd|0x8000;
}
tmpb[0]=dd>>8;
tmpb[1]=dd&0x0ff;
break;
case 73:// 32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dd= (int)(srcData);
if(srcData<0)
{
dd=( (~dd)+1)&0xffffffff;
dd=dd|0x80000000;
}
tmpb[0]=dd>>24;
tmpb[1]=dd>>16;
tmpb[2]=dd>>8;
tmpb[3]=dd&0x0ff;
break;
case 70: // 32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dd=(int)(fabs(srcData)*10);
dd=dd/10;
IntData=dd;
if(srcData<0)
{
dd=( (~dd)+1)&0xffff;
dd=dd|0x8000;
}
tmpb[0]=dd>>8;
tmpb[1]=dd&0x0ff;
//С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TailData = fabs(srcData) -IntData;
for(i=0;i<2;i++)
{ tmpb[2+i]=0;
for(j=0;j<8;j++)
{
TailData *=2.0;
if(TailData>=1)
tmpb[2+i]+=(int)pow(2.,8-j);
}
}
break;
case 49: // 16λ <20>ͷֱ<CDB7><D6B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case 50: // 'F' 32λ<32>ͷֱ<CDB7><D6B1>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD>
break;
case 68: // 'D' 32λ<32>߷ֱ<DFB7><D6B1>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD>
{
int ExData,TailData;
float *tmpf;
BYTE tmpt[4];
tmpf=(float *)tmpt;
*tmpf=srcData;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ExData = (tmpt[3]&0x7f )<<1;
ExData = ExData+(tmpt[2]>>7);
ExData = ExData-127;
ExData = ExData+1;
if(srcData>0)
{
ExData=128 + ExData;
tmpb[0] = ExData>>1 ;
tmpb[1] =(ExData &0x01) *0x80;
}
else
{
ExData=127 - ExData;
tmpb[0] =( ExData>>1) +0x80;
tmpb[1] =(ExData &0x01) *0x80;
}
//<2F><><EFBFBD><EFBFBD>β<EFBFBD><CEB2>
TailData = (tmpt[2]&0x7f) *0x10000 + tmpt[1]*0x100+ tmpt[0];
TailData =TailData &0x7fffff;
double aa;
aa=0;
for(i=0;i<23;i++)
{
if(TailData &0x01)
aa+=pow(2.,i-23);
TailData=TailData>>1;
}
aa=aa+1;
aa=aa/2.0;
int ww;
ww=0;
for(i=0;i<23;i++)
{
aa =aa*2;
if(aa>=1.0)
{
ww+=(int)pow(2.,22-i);
aa=aa-1.0;
}
}
if(srcData<0)
{
ww= (~ww)+1;
}
ww =ww&0x7fffff;
int aq;
aq=ww>>16;
aq=aq&0x7f;
tmpb[1]+=aq;
aq=ww>>8;
aq=aq&0xff;
tmpb[2]=aq;
aq=ww&0xff;
tmpb[3]=aq;
}
break;
}
};
float ConvertLisDataToFloat(BYTE dataCode, BYTE srcData[])
{
int i,sign,dd;
double rData,ExData,TailData;
rData=0;
if(srcData[0]&0x80) sign=-1;
else sign=1;
switch(dataCode)
{
case 56: // //8 λ<>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rData=srcData[0];
if(sign<0)
rData = rData -pow(2.,8);
break;
case 65: //'C'
case 66: // 'B' //8 λ<>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rData=srcData[0];
break;
case 73: // 'I' //32λ<32><CEBB><EFBFBD><EFBFBD>
{
dd = ((srcData[0] &0x7f)*0x100 +srcData[1]) *0x10000
+srcData[2]*0x100 +srcData[3];
if(sign<0)
{
dd=~(dd-1);
}
rData =sign *dd;
}
break;
case 79: // 'N' //16λ<36><CEBB><EFBFBD><EFBFBD>
{
dd = (srcData[0] &0x7f)*0x100 +srcData[1];
if(sign<0)
{
dd=~(dd-1);
}
rData =sign *dd;
}
break;
case 49: // 16λ<36><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ExData= srcData[1] &0x0f;
//<2F><><EFBFBD><EFBFBD>β<EFBFBD><CEB2>
dd=(srcData[0] &0x7f )*0x10 +(srcData[1]>>4);
if(sign<0)
{
dd=~(dd-1);
}
TailData=0;
for(i=0;i<11;i++)
{
if(dd &0x01)
{
TailData+=pow(2.,i-11);
}
dd=dd>>1;
}
TailData =sign *TailData;
rData = TailData *pow(2,ExData);
}
break;
case 50: // 'F' 32λ<32>ͷֱ<CDB7><D6B1>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD>
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dd= srcData[0]*0x100 + srcData[1];
if(sign<0)
{
dd=~(dd-1);
}
dd=dd&0x7f;
ExData=0;
for(i=0;i<15;i++)
{
if(dd&0x01)
ExData+=pow(2.,i+1);
dd=dd>>1;
}
ExData= sign *ExData;
//<2F><><EFBFBD><EFBFBD>β<EFBFBD><CEB2>
if(srcData[2]&0x80) sign=-1;
else sign=1;
dd= srcData[2]*0x100 + srcData[3];
if(sign<0)
{
dd=~(dd-1);
}
dd=dd&0x7f;
TailData=0;
for(i=0;i<15;i++)
{
if(dd &0x01)
TailData+=pow(2.,i-15);
dd=dd>>1;
}
TailData = sign *TailData;
rData=TailData *pow(2.,ExData);
}
break;
case 68: // 'D' //32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ //<2F><><EFBFBD><EFBFBD><E4B8A1><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
dd=(srcData[0]&0x7f)*2 +(srcData[1]>>7);
ExData=dd &0x0ff;
// <20><><EFBFBD><EFBFBD><E4B8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2>
dd= ((srcData[1]&0x7f)*0x100 + srcData[2])*0x100+ srcData[3];
if(sign<0)
{
dd=~(dd-1);
}
TailData=0;
for(i=0;i<23;i++)
{
if(dd&0x01)
TailData+=pow(2.,i-23);
dd=dd>>1;
}
TailData = sign *TailData;
if(sign>0)
rData= TailData *pow(2.,ExData-128);
else
rData= TailData *pow(2.,127-ExData);
}
break;
case 70: // 32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dd= (srcData[0] &0x7f)*0x100+ srcData[1];
if(sign<0)
{
dd=~(dd-1);
}
dd=dd&0x7fff;
ExData=dd*sign;
//<2F><><EFBFBD><EFBFBD>β<EFBFBD><CEB2>
dd=srcData[2]*0x100+srcData[3];
TailData=0;
for(i=0;i<16;i++)
{
if(dd&0x01)
TailData+=pow(2.,i-16);
dd=dd>>1;
}
TailData =sign *TailData;
rData=ExData+TailData;
}
break;
}//switch
return (float)rData;
};
};