📄 tableoperation.cpp
字号:
MCTBL[i].OPTIONS.tp=0;
MCTBL[i].OPTIONS.cp=0;
MCTBL[i].OPTIONS.sp=0;
/*根据读取值设置选择项值*/
if(((buff1[12])&(0x80))!=0x00)MCTBL[i].OPTIONS.ac=1;
if(((buff1[12])&(0x20))!=0x00)MCTBL[i].OPTIONS.cm=1;
if(((buff1[12])&(0x10))!=0x00)MCTBL[i].OPTIONS.lg=1;
if(((buff1[12])&(0x08))!=0x00)MCTBL[i].OPTIONS.tp=1;
if(((buff1[12])&(0x04))!=0x00)MCTBL[i].OPTIONS.cp=1;
if(((buff1[12])&(0x01))!=0x00)MCTBL[i].OPTIONS.sp=1;
MCTBL[i].GALVOS.x10=buff1[29];//读取检流计号
MCTBL[i].GALVOS.x2=buff1[30];
MCTBL[i].GALVOS.bu=buff1[31];
MCTBL[i].AOPTION.crtflg=0; // 设置附加OPTIONS项参数(crtflg,corcrv,crvoff,spcrv)
MCTBL[i].AOPTION.corcrv=0;
MCTBL[i].AOPTION.crvoff=0;
MCTBL[i].AOPTION.spcrv=0;
tem1=buff1[14]; /* 读取刻度乘因子 */
tem2=buff1[15];
x1=256*tem1+tem2;
tem1=buff1[16];
tem2=buff1[17];
x2=256*tem1+tem2;
MCTBL[i].MULT=f3786(x1,x2);
tem1=buff1[18]; /* 读取刻度加因子 */
tem2=buff1[19];
x1=256*tem1+tem2;
tem1=buff1[20];
tem2=buff1[21];
x2=256*tem1+tem2;
MCTBL[i].ADD=f3786(x1,x2);
tem1=buff1[50]; /* 读取记录仪的低工程值LOW */
tem2=buff1[51];
x1=256*tem1+tem2;
tem1=buff1[52];
tem2=buff1[53];
x2=256*tem1+tem2;
MCTBL[i].LOW=f3786(x1,x2);
tem1=buff1[54]; /* 读取记录仪的高工程值LOW */
tem2=buff1[55];
x1=256*tem1+tem2;
tem1=buff1[56];
tem2=buff1[57];
x2=256*tem1+tem2;
MCTBL[i].HIGH=f3786(x1,x2);
tem1=buff1[36]; /* 读取CRT乘因子 */
tem2=buff1[37];
x1=256*tem1+tem2;
tem1=buff1[38];
tem2=buff1[39];
x2=256*tem1+tem2;
MCTBL[i].CRTMULT=f3786(x1,x2);
tem1=buff1[40]; /* 读取CRT加因子 */
tem2=buff1[41];
x1=256*tem1+tem2;
tem1=buff1[42];
tem2=buff1[43];
x2=256*tem1+tem2;
MCTBL[i].CRTADD=f3786(x1,x2);
MCTBL[i].CRTMIN=256*buff1[44]+buff1[45];//读取CRT最小和最大坐标
MCTBL[i].CRTMAX=256*buff1[46]+buff1[47];
MCTBL[i].filter=buff1[32]; /* 读取滤波器号 */
MCTBL[i].DELAY=256*buff1[8]+buff1[9]; /* 读取延迟量 */
MCTBL[i].POSLO=buff1[48]; /* 读取 high P/R and low P/R */
MCTBL[i].POSHI=buff1[49];
MCTBL[i].BACKUP.O=0; /* 初始化后备计算信息*/
MCTBL[i].BACKUP.C=0;
MCTBL[i].BACKUP.U=0;
MCTBL[i].GALVOS.pr=(0x000f)&(buff1[28]);//读取主检流计号以及设置越界处理标志
if(((0x0040)&(buff1[28]))==0x00) MCTBL[i].BACKUP.O=1;
if(((0x0010)&(buff1[28]))==0x00) MCTBL[i].BACKUP.C=1;
if(((0x0020)&(buff1[28]))!=0x00) MCTBL[i].BACKUP.U=1;
MCTBL[i].GALVOS.x10=buff1[29]; /* 读取 x10 和 x0.2检流计号 */
MCTBL[i].GALVOS.x2=buff1[30];
}
file.Close();
}
}
TableOperation::OnTableDisplay()
{
}
TableOperation::OnTableWrite()
{
unsigned int i,i1,x1,x2,curvetrue=0;
unsigned char buff1[64];
unsigned int y[4]={0,0,0,0};
for(i=0;i<2560;i++)
buffer[i]=0x00;//清空存储缓冲区buffer
CFileDialog WriteFileDialog(0,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"测井服务表(*.*)|*.*|");
if(WriteFileDialog.DoModal()==IDOK)
{
for(i=0;i<6;i++)
tablenum[i]=0;
CString filename=WriteFileDialog.GetFileName();
memcpy(tablenum,filename,6); //将CString类转换为Z字符数组的第一种解决方法
//tablenum=filename.GetBuffer(filename.GetLength());//第二种解决方法
//tablenum=(LPSTR)(LPCTSTR)filename; //第三种解决方法
for(i=0;i<6;i++)
buffer[i]=(unsigned char)tablenum[i]; //保存服务表号
//************************************************************************************
//保存CRT表至存储缓冲区buffer
if(crttbl.UNITS[0]=='E')
{
buffer[2176+16]=0x00;
buffer[2176+17]=0x00;
}
if(crttbl.UNITS[0]=='M')
{
buffer[2176+16]=0x00;
buffer[2176+17]=0x01;
}
for(i=0;i<8;i++)
{
buffer[i+2560-36]=0x20;
}
i1=0;
for(i=2560-36;i<2560-36+3;i++)
{
buffer[i]=crttbl.UPPGRID[i1];
i1=i1+1;
}
i1=0;
for(i=2560-36+4;i<2560-36+4+3;i++)
{
buffer[i]=crttbl.LOWGRID[i1];
i1=i1+1;
}
//************************************************************************
//保存表SRTTBL至存储缓冲区buffer
i=6;
for(i1=0;i1<20;i1++)
{
buffer[i]=(int)(order[i1]/256);
i=i+1;
buffer[i]=order[i1]-256*buffer[i];
i=i+1;
if(order[i1]==0x8000)
break;
}
if(order[i1]!=0x8000)
{
i=53;
for(i1=20;i1<25;i1++)
{
buffer[i]=(int)(order[i1]/256);
i=i+1;
buffer[i]=order[i1]-256*buffer[i];
i=i+1;
if(order[i1]==0x8000)
break;
}
}
//**************************************************************************
//保存表STATBL至存储缓冲区buffer
buffer[32+14]=samrate;
i1=0;
for(i=32+15;i<32+15+18;i++)
{
buffer[i]=relay[i1];
if(relay[i1]==0xff)
break;
i1=i1+1;
}
//*************************************************************************
//保存表CALTBL至存储缓冲区buffer
for(i=0;i<=10;i++)
{
if((TNAME[i].toolname[0]=='F')&&(TNAME[i].toolname[1]=='F'))
{
for(i1=0;i1<2;i1++)
{
buffer[64+16+i*6+i1]=0xff;
}
break;
}
else
{
for(i1=0;i1<=5;i1++)
{
buffer[64+16+i*6+i1]=TNAME[i].toolname[i1];
}
}
}
//***************************************************************************
//保存表CMLTBL至存储缓冲区buffer
buffer[66]=UPP_SCALE_COM;
buffer[67]=LOW_SCALE_COM;
x1=0;
x2=1;
for(i=1;i<16;i++)
{
x1=x1+(TYPE[i].BIT.uall)*x2;
x2=x2*2;
}
buffer[64+4]=x1/256;
buffer[64+5]=x1-256*buffer[64+4];
/*****************/
x1=0;
x2=1;
for(i=1;i<16;i++)
{
x1=x1+(TYPE[i].BIT.lall)*x2;
x2=x2*2;
}
buffer[64+4+2]=x1/256;
buffer[64+5+2]=x1-256*buffer[64+4+2];
/*****************/
x1=0;
x2=1;
for(i=1;i<16;i++)
{
x1=x1+(TYPE[i].BIT.udotted)*x2;
x2=x2*2;
}
buffer[64+4+4]=x1/256;
buffer[64+5+4]=x1-256*buffer[64+4+4];
/*****************/
x1=0;
x2=1;
for(i=1;i<16;i++)
{
x1=x1+(TYPE[i].BIT.ldotted)*x2;
x2=x2*2;
}
buffer[64+4+6]=x1/256;
buffer[64+5+6]=x1-256*buffer[64+4+6];
/*****************/
x1=0;
x2=1;
for(i=1;i<16;i++)
{
x1=x1+(TYPE[i].BIT.udashed)*x2;
x2=x2*2;
}
buffer[64+4+8]=x1/256;
buffer[64+5+8]=x1-256*buffer[64+4+8];
/*****************/
x1=0;
x2=1;
for(i=1;i<16;i++)
{
x1=x1+(TYPE[i].BIT.ldashed)*x2;
x2=x2*2;
}
buffer[64+4+10]=x1/256;
buffer[64+5+10]=x1-256*buffer[64+4+10];
//***********************************************************************
//保存表MCTBL至存储缓冲区buffer
for(i=0;i<32 /*curvenumber*/;i++)
{
for(i1=0;i1<64;i1++)
{
buff1[i1]=0x00;
}
if ((MCTBL[i].crvnam[0]=='/')||(MCTBL[i].crvnam[1]=='/')
||(MCTBL[i].crvnam[2]=='/')||(MCTBL[i].crvnam[3]=='/'))
{
MCTBL[i].crvnam[0]='/';
MCTBL[i].crvnam[1]='\0';
MCTBL[i].LOW=0.0;
MCTBL[i].HIGH=0.0;
}
f8637(MCTBL[i].LOW,y);
buff1[50]=y[0];
buff1[51]=y[1];
buff1[52]=y[2];
buff1[53]=y[3];
f8637(MCTBL[i].HIGH,y);
buff1[50+4]=y[0];
buff1[51+4]=y[1];
buff1[52+4]=y[2];
buff1[53+4]=y[3];
for(i1=0;i1<6;i1++)
{
if (((MCTBL[i].crvnam[i1]>='A')&&(MCTBL[i].crvnam[i1]<='Z'))
||((MCTBL[i].crvnam[i1]>='0')&&(MCTBL[i].crvnam[i1]<='9')))
buff1[i1]=MCTBL[i].crvnam[i1];
else buff1[i1]=' '; /*1997.1.7*/
/*buff1[i1]=MCTBL[i].crvnam[i1];*/
}
buff1[4]=((MCTBL[i].DLSTAD)&(0xff00))>>8;
buff1[5]=(MCTBL[i].DLSTAD)&(0x00ff);
/* buff1[6]=((MCTBL[i].DLSTLN)&(0xff00))>>8;
buff1[7]=(MCTBL[i].DLSTLN)&(0x00ff);
*/
buff1[8]=((MCTBL[i].DLIPTR)&(0xff00))>>8;
buff1[9]=(MCTBL[i].DLIPTR)&(0x00ff);
buff1[6]=buff1[8];
buff1[7]=buff1[9]+1;
if(buff1[7]==0x00)buff1[6]=buff1[6]+1;
if(MCTBL[i].DLSTLN==0xffff){buff1[6]=0xff;buff1[7]=0xff;}
buff1[10]=((MCTBL[i].DLOPTR)&(0xff00))>>8;
buff1[11]=(MCTBL[i].DLOPTR)&(0x00ff);
buff1[12]=(0x80)*(MCTBL[i].OPTIONS.ac)+(0x20)*(MCTBL[i].OPTIONS.cm)
+(0x10)*(MCTBL[i].OPTIONS.lg)+(0x08)*(MCTBL[i].OPTIONS.tp)
+(0x04)*(MCTBL[i].OPTIONS.cp)+(0x01)*(MCTBL[i].OPTIONS.sp);
buff1[31]=MCTBL[i].GALVOS.bu;
buff1[30]=MCTBL[i].GALVOS.x2;
buff1[29]=MCTBL[i].GALVOS.x10;
f8637(MCTBL[i].MULT,y);
buff1[14]=y[0];
buff1[15]=y[1];
buff1[16]=y[2];
buff1[17]=y[3];
f8637(MCTBL[i].ADD,y);
buff1[18]=y[0];
buff1[19]=y[1];
buff1[20]=y[2];
buff1[21]=y[3];
f8637(MCTBL[i].CRTMULT,y);
buff1[36]=y[0];
buff1[37]=y[1];
buff1[38]=y[2];
buff1[39]=y[3];
f8637(MCTBL[i].CRTADD,y);
buff1[40]=y[0];
buff1[41]=y[1];
buff1[42]=y[2];
buff1[43]=y[3];
buff1[32]=MCTBL[i].filter;
buff1[48]=MCTBL[i].POSLO;
buff1[49]=MCTBL[i].POSHI;
buff1[28]=MCTBL[i].GALVOS.pr+(0x40)*(!(MCTBL[i].BACKUP.O))
+(0x10)*(!(MCTBL[i].BACKUP.C))+(0x20)*(MCTBL[i].BACKUP.U);
if ((MCTBL[i].crvnam[0]!='?')&&(MCTBL[i].crvnam[1]!='?')
&&(MCTBL[i].crvnam[2]!='?')&&(MCTBL[i].crvnam[3]!='?'))
{
for(i1=0;i1<64;i1++)
{
buffer[128+14+64*curvetrue+i1]=buff1[i1];
}
if ((MCTBL[i].crvnam[0]==0xff)&&(MCTBL[i].crvnam[1]==0xff))
break;
curvetrue++;
}
}
//********************************************************************************
//将存储缓冲区数据写入磁盘
CString szlstfile = WriteFileDialog.GetPathName();
CFile file;
if(!file.Open(szlstfile,CFile::modeWrite|CFile::modeCreate,NULL))
AfxMessageBox("保存失败");
CArchive ar(&file,CArchive::store);//构建CArchive 对象
for(i=0;i<2560;i++)
ar<<buffer[i];//写入磁盘
ar.Flush(); //写完毕,关闭文件流
ar.Close();
file.Close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -