⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 光学仪器的控制系统 用于教学和科研的仪器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
      csd[2]=ptc.lamp;
      csd[3]=ptc.speed;
      csd[4]=ptc.m3;
      csd[5]=ptc.m4;
      csd[8]=ptc.source;
      csd[9]=ptc.slit;
      csd[10]=ptc.vol;
      strcpy(samp,ptc.samp);
      strcpy(oper,ptc.oper);
      gpdata=1;
      gpdisp=1;
    }
    else
    {
      ws=0;
      we=(int)ptc.wne;
      for(i=ws;i<=we;i++)
        FileWrite(iFileHandle,&tc[i],4);
    }
    FileClose(iFileHandle);
    bSaveFile=true;
  }//if( (iFileHandle = FileOpen(file_name1, fmOpenWrite))!=-1)
  else
  {
    Application->MessageBox("无法存储文件!","存储文件错误",MB_OK|MB_ICONWARNING);
  }
  //FileClose(iFileHandle);
}
//---------------------------------------------------------------------------
void TForm1::file_load_option()
{
  int iFileHandle;
  if( (iFileHandle = FileOpen(file_name1, fmOpenRead))!=-1)// -1 失败
  {
        FileRead(iFileHandle,wfz25bj,10);
        if(!strcmp(wfz25bj2,wfz25bj))
        {
                FileRead(iFileHandle,&csd[1],2);
                FileRead(iFileHandle,&csd[2],2);
                FileRead(iFileHandle,&csd[3],2);
                FileRead(iFileHandle,&csd[4],2);
                FileRead(iFileHandle,&csd[5],2);
                FileRead(iFileHandle,&csd[0],2);
                FileRead(iFileHandle,&tnh,4);
                FileRead(iFileHandle,&tnl,4);
                FileRead(iFileHandle,&wns,4);
                FileRead(iFileHandle,&wne,4);
                FileRead(iFileHandle,&csd[8],2);
                FileRead(iFileHandle,&csd[9],2);
                FileRead(iFileHandle,&csd[10],2);
                FileRead(iFileHandle,wfz25bj2,10);
        }
        else
        {
                Application->MessageBox("不是光谱参数文件!"
                                ,"文件错误",MB_OK|MB_ICONWARNING);
        }
        FileClose(iFileHandle);
  }
  else
  {
        Application->MessageBox(file_name1,"不能打开文件",MB_OK|MB_ICONWARNING);
  }
  //FileClose(iFileHandle);
}
//---------------------------------------------------------------------------
void TForm1::file_save_ascii()
{
  int iFileHandle;
  char deschar[7];
  char datachar[10];
//float start;
  float interval;
  int data_total_n;

//start=ptc.wns;
  interval=(float)itl[ptc.interval]/(float)wnd0;
  data_total_n=(ptc.wne-ptc.wns)/(int)(interval*1000)*1000;
  strcat(file_name1,".txt");
  if( (iFileHandle = FileCreate(file_name1))!=-1)
    {
      for(int i = 0;i<=data_total_n;i++)
        {
          sprintf(deschar,"%3.1f",ptc.wns+interval*(float)i);
          FileWrite(iFileHandle,deschar,5);
          if(tc[i]<10)
            {
              sprintf(datachar," %1.3f",tc[i]);
              strcat(datachar,"\r\n");
              FileWrite(iFileHandle,datachar,8);
            }
          else if(tc[i]<100)
            {
              sprintf(datachar," %2.2f",tc[i]);
              strcat(datachar,"\r\n");
              FileWrite(iFileHandle,datachar,8);
            }
          else  if(tc[i]<1000)
            {
              sprintf(datachar," %3.2f",tc[i]);
              strcat(datachar,"\r\n");
              FileWrite(iFileHandle,datachar,9);
            }
          else
            {
              sprintf(datachar," %4.1f",tc[i]);
              strcat(datachar,"\r\n");
              FileWrite(iFileHandle,datachar,9);
            }
          strcat(datachar,"\r\n");
          //FileWrite(iFileHandle,"/n")
        }
      FileClose(iFileHandle);
    }
}
//---------------------------------------------------------------------------
void TForm1::file_save_option()
{ /*光谱参数存盘*/
  int iFileHandle = FileCreate(file_name1);
  if( iFileHandle!=-1)
  {
        FileWrite(iFileHandle,wfz25bj2,10);
        FileWrite(iFileHandle,&csd[1],2);
        FileWrite(iFileHandle,&csd[2],2);
        FileWrite(iFileHandle,&csd[3],2);
        FileWrite(iFileHandle,&csd[4],2);
        FileWrite(iFileHandle,&csd[5],2);
        FileWrite(iFileHandle,&csd[0],2);
        FileWrite(iFileHandle,&tnh,4);
        FileWrite(iFileHandle,&tnl,4);
        FileWrite(iFileHandle,&wns,4);
        FileWrite(iFileHandle,&wne,4);
        FileWrite(iFileHandle,&csd[8],2);
        FileWrite(iFileHandle,&csd[9],2);
        FileWrite(iFileHandle,&csd[10],2);
        FileWrite(iFileHandle,wfz25bj2,10);
        FileClose(iFileHandle);
  }
  else
  {
        Application->MessageBox("无法存储文件!","存储文件错误",MB_OK|MB_ICONWARNING);
  }
  //FileClose(iFileHandle);
}
//---------------------------------------------------------------------------
void TForm1::file_load_a()
{ // 光谱数据读入
  int iFileHandle;
  int i,n1,n2,ws,we;
  try
  {
    if( (iFileHandle = FileOpen(file_name1, fmOpenRead))!=-1)// -1 失败
    {
      FileRead(iFileHandle,wfz25bj,10);
      if(!strcmp(wfz25bj1,wfz25bj))
      {
        FileRead(iFileHandle,&ptc.m1,2);
        FileRead(iFileHandle,&ptc.m2,2);
        FileRead(iFileHandle,&ptc.m3,2);
        FileRead(iFileHandle,&ptc.m4,2);
        FileRead(iFileHandle,&ptc.wns,4);
        FileRead(iFileHandle,&ptc.wne,4);
        FileRead(iFileHandle,&ptc.tnh,4);
        FileRead(iFileHandle,&ptc.tnl,4);
        FileRead(iFileHandle,&ptc.lamp,2);
        FileRead(iFileHandle,&ptc.speed,2);
        FileRead(iFileHandle,&ptc.interval,2);
        FileRead(iFileHandle,&ptc.source,2);
        FileRead(iFileHandle,&ptc.slit,2);
        FileRead(iFileHandle,&ptc.vol,2);
        FileRead(iFileHandle,ptc.samp,50);
        FileRead(iFileHandle,ptc.oper,50);
        FileRead(iFileHandle,&ptc.dattim[1],2);
        FileRead(iFileHandle,&ptc.dattim[2],2);
        FileRead(iFileHandle,&ptc.dattim[3],2);
        FileRead(iFileHandle,&ptc.dattim[4],2);
        FileRead(iFileHandle,&ptc.dattim[5],2);
        FileRead(iFileHandle,&ptc.dattim[6],2);
        FileRead(iFileHandle,wfz25bj,10);
        if(ptc.m3!=3)//不是时间扫描
        {
          ws=ptc.wns*10;
          we=ptc.wne*10;
          n1=0;
          n2=(ptc.wne-ptc.wns)*(float)wnd0/(float)itl[ptc.interval];//??
          if(ws>=wns0*10&&ws<wne0*10&&we>wns0*10&&we<=wne0*10)
          {
            for(i=n1;i<=n2;i++)
            FileRead(iFileHandle,&tc[i],4);
	    FileClose(iFileHandle);
	    if(ptc.m3!=3)
	    {
              wns=ptc.wns;
	      wne=ptc.wne;
	    }
	    tnh=ptc.tnh;
	    tnl=ptc.tnl;
            csd[0]=ptc.interval;
	    csd[1]=ptc.m1;
	    csd[2]=ptc.lamp;
	    csd[3]=ptc.speed;
	    csd[4]=ptc.m3;
	    csd[5]=ptc.m4;
            if(ptc.source>=320&&ptc.source<=400)
	      csd[8]=ptc.source;
	    csd[9]=ptc.slit;
            if(ptc.vol>=1&&ptc.vol<=8)
  	      csd[10]=ptc.vol;
	    strcpy(samp,ptc.samp);
	    strcpy(oper,ptc.oper);
            gpdata=1;
	    gpdisp=1;
          }
        }
        else
        {
          ws=0;
          we=(int)ptc.wne;
          if(we<=6000)//6000秒,100分
	  {
            for(i=ws;i<=we;i++)
	      FileRead(iFileHandle,&tc[i],4);
	    FileClose(iFileHandle);
	    //if(ptc.m3!=3)
	    //{
            //  wns=ptc.wns;
	    //  wne=ptc.wne;
	    //}
            wns=ptc.wns;
	    wne=ptc.wne;
	    tnh=ptc.tnh;
	    tnl=ptc.tnl;
            csd[0]=ptc.interval;
	    csd[1]=ptc.m1;
	    csd[2]=ptc.lamp;
	    csd[3]=ptc.speed;
	    csd[4]=ptc.m3;
	    csd[5]=ptc.m4;
            ptc.interval=1;
            ptc.speed=1;
	    csd[8]=ptc.source;
	    csd[9]=ptc.slit;
	    csd[10]=ptc.vol;
	    strcpy(samp,ptc.samp);
	    strcpy(oper,ptc.oper);
            gpdata=1;
	    gpdisp=1;
          }
        }
      }
      else
      {
        Application->MessageBox("不是光谱数据文件!","文件错误",MB_OK|MB_ICONWARNING);
        gpdata=0;
      }
    }
    else
    {
      Application->MessageBox(file_name1,"不能打开文件",MB_OK|MB_ICONWARNING);
    }
  }// try
  catch(...)
  {
    //FileClose(iFileHandle);
    Application->MessageBox(file_name1, "打开文件错误", MB_OK|MB_ICONWARNING);
  }
}
//---------------------------------------------------------------------------
void TForm1::DrawQX(void)
{ // 画光谱曲线
  int n1,n2,x,y,i;
  float t = 0.0;
  if(ptc.m2==0) return;  // 如果没有光谱数据就返回

  if(csd[1]==3&&ptc.m1!=3) return;
  if(csd[1]!=3&&ptc.m1==3) return;
  if(ptc.m2==8&&csd[4]!=3) return;

  if(wns>ptc.wns)
    n1=(wns-ptc.wns)*(float)wnd0/(float)itl[ptc.interval];
  else
    n1=0;
  if(wne<ptc.wne)
    n2=(wne-ptc.wns)*(float)wnd0/(float)itl[ptc.interval];
  else
    n2=(ptc.wne-ptc.wns)*(float)wnd0/(float)itl[ptc.interval];
  t=tc[n1];
  switch(csd[1])
  {
    case 1:break;
    case 2:t=toa(t);break;
    case 3:break;
  }
  x=wx0+(wx1-wx0)/(wne-wns)*(-wns+(ptc.wns+(float)(n1*itl[ptc.interval])/(float)wnd0));
  y=wy0+(float)(wy1-wy0)*(tnh-t)/(tnh-tnl);
  if(x<wx0)
    x=wx0;
  else if(x>wx1)
    x=wx1;
  if(y>(wy1+5))
    y=wy1+5;
  else if(y<(wy0-5))
    y=wy0-5;
  Image1->Canvas->MoveTo(x,y);
  Image1->Canvas->Pen->Style=psSolid;
  Image1->Canvas->Pen->Color=clQX;
  for(i=n1;i<=n2;i++)
  {
    t=tc[i];
    switch(csd[1])
    {
      case 1:break;
      case 2:t=toa(t);break;
      case 3:break;
    }
    x=wx0+(wx1-wx0)/(wne-wns)*(-wns+(ptc.wns+(float)(i*itl[ptc.interval])/(float)wnd0));
    y=wy0+(float)(wy1-wy0)*(tnh-t)/(tnh-tnl);
    if(x<wx0)
      x=wx0;
    else if(x>wx1)
      x=wx1;
    if(y>(wy1+5))
      y=wy1+5;
    else if(y<(wy0-5))
      y=wy0-5;
    Image1->Canvas->LineTo(x,y);
  }
  if(bReadData==true)//正在读取数据
  {
    IMTemp->Canvas->CopyRect(RSRect,Image1->Canvas,RDRect);//Get
    /*Image1->Canvas->MoveTo(Rx-5,Ry-5);
    Image1->Canvas->LineTo(Rx+5,Ry+5);
    Image1->Canvas->MoveTo(Rx-5,Ry+4);//?
    Image1->Canvas->LineTo(Rx+5,Ry-5);*/
    DrawCross(Rx,Ry);
    GetData(Rwi);
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{ //限制窗体的大小
  //if(WindowState!=wsMaximized)
  //    WindowState=wsMaximized;
  if(Form1->Width<200)  Form1->Width=200;
  if(Form1->Height<200) Form1->Height=200;

  //Image1->Canvas->MoveTo(Image1->Width-100,0);
  //Image1->Canvas->LineTo(Image1->Width-5,Image1->Height-5);
  DrawBK();
  if(ptc.m2!=0)
      DrawQX();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdleHandler(TObject *Sender, bool &Done)
{
//
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  SetResetorNot(false);
  ReadDelay();
  sCurBC="当前波长:"; sCurEn="测量值:"; sBaseEn="基线值:";
  Thread1=NULL;// 线程指针
  clQX=clBlue; // 曲线颜色
  clCross=clRed;// 读取数据十字颜色
  clBK=clBlack; // 光谱框颜色
  clMulti[0]=clFuchsia; clMulti[1]=clGreen; clMulti[2]=clOlive; clMulti[3]=clNavy; clMulti[4]=clPurple;
  clMulti[5]=clRed; clMulti[6]=clYellow; clMulti[7]=clAqua; clMulti[8]=clSkyBlue; clMulti[9]=clCream;
  bReadData=false;// 读取数据标志 =true 读取;=false 不读取
  bOnIdle=true;   // 闲循环为真
  mfs=0; mls=0; mss=0;
  mcs=6400-wavemove; wn=6400; // 当前波长和电机总步数
  StatusBar1->Font->Size=12;
//FormTest_On->Show();
//FormTest_On->Repaint();
//delaypara=165;
//Pci1->initial();
//baseaddr=Pci1->GetBaseAddr();
  baseaddr=0x3e0;
  Init();
  ReadPP();
//Application->OnIdle = IdleHandler;
}
//---------------------------------------------------------------------------
void TForm1::Init(void)
{// 系统初始化
        bSaveFile=false;
        bMouseLeft=false;
        wx0=JUKUAN; wy0=JUKUAN;
        wx1=Image1->Width-JUKUAN;
        wy1=Image1->Height-JUKUAN;
        memset(&ptb,0,sizeof(para));//清零
        memset(&ptc,0,sizeof(para));
        memset(&ptd,0,sizeof(para));
        pp1=0.0;pp2=1.0;
        dds=-75;wds=80;
        con=750;con1=4;con2=2;
        wac=40;was=80;waf=80;wal=100; //wac=30;was=80;waf=80;wal=100;
        wnd0=40;        //wnd0=40;
	wns0=190.0;     //wns0=190.0;
	wne0=900.0;     //wne0=900.0;
        itl[0]=40; itl[1]=40; itl[2]=20; itl[3]=4; itl[4]=1;
        grid[0]=1;grid[1]=2;grid[2]=5;grid[3]=10;
        bScale=false;
        bGrid=false;
        Xgridindex=2;
        Ygridindex=2;
        wns=wns0;
        wne=wne0;
        tnl=0;   tnh=4095;
        csd[0]=1;
        csd[1]=3;               // 测量模式为 透过率
        csd[2]=1;               // 工作光源为 氘灯
        csd[3]=2;               // 扫描速度为 快速
        csd[4]=1;               // 扫描方式为 重复扫描
        csd[5]=1;               // 次数时间为 1次
        csd[8]=360;             // 换灯波长为 360 nm
        csd[9]=5;               // 狭缝宽度为 2 nm
        csd[10]=2;              // 负高压为 1 档
        csd[11]=1;              // 增  益为 1 档
//26改完
        pad1[0]=baseaddr+4;pad1[1]=baseaddr+5;pad1[2]=baseaddr+6;pad1[3]=baseaddr+7;
        pad2[0]=baseaddr+0;pad2[1]=baseaddr+1;pad2[2]=baseaddr+2;pad2[3]=baseaddr+3;
//26改完
        add_c=pad1[1];
        add_f=pad1[1];
	add_l=pad1[2];
	add_s=pad1[2];
	add_csfl=pad2[1];
//26改完
        in_c0=0x20; in_s0=0x80; in_f0=0x01; in_l0=0x40;
//26改完
//0514  增加小刻度距离数组
        iArrayScale[0]=1;iArrayScale[1]=2;iArrayScale[2]=5;iArrayScale[3]=10;
        iScaleIndex=2;

        for(int i=0;i<28500;i++)
        {   tc[i]=0.0;
            tb[i]=1.0;
            td[i]=0.0;}
        for(int i=0;i<8100;i++)
        {   pkw1[i]=0;
            pkw2[i]=0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -