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

📄 main.cpp

📁 信号生成:可以生成各种类型的信号包括正弦波、方波、三角波、扫频信号、调幅波、白噪声、窄带随机信号等
💻 CPP
📖 第 1 页 / 共 2 页
字号:
            TxtPulseWidth->Text=FloatToStrF(((TPulseSignal*) Obj)->PulseWidth,2,6,4);
    }
    else if (type==7)
    {
            TxtNarrowNoiseAmp->Text=FloatToStrF(((TNarrowNoiseSignal*) Obj)->Amp,2,6,2);
            TxtNarrowNoiseFangCha->Text=FloatToStrF(((TNarrowNoiseSignal*) Obj)->FangCha,2,6,2);
            TxtNarrowNoiseStartFreq->Text=FloatToStrF(((TNarrowNoiseSignal*) Obj)->StartFreq,2,6,4);
            TxtNarrowNoiseStopFreq->Text=FloatToStrF(((TNarrowNoiseSignal*) Obj)->StopFreq,2,6,4);
    }

}
void __fastcall TForm1::Update(int chan,int type)  //取值
{
    TSignal *Obj;
    if (chan!=-1)
    {
         Obj=(TSignal *) SignalList->Items[CurSetChan];
         Obj->Free();
         SignalList->Delete(CurSetChan);
         if (type==0)
         {
             Obj = new TSinSignal();
     	     ((TSinSignal *) Obj)->Amp  = StrToFloat(TxtSinAmp->Text);
	     ((TSinSignal *) Obj)->Freq = StrToFloat(TxtSinFreq->Text);
	     ((TSinSignal *) Obj)->Phase= StrToFloat(TxtSinPhase->Text);
	     ((TSinSignal *) Obj)->Ratio= StrToFloat(TxtSinRatio->Text);
	     SignalList->Insert(CurSetChan, Obj);
         }
         else if (type==1)
         {
             Obj = new TRectSignal();
     	     ((TRectSignal *) Obj)->Amp  =StrToFloat(TxtRectAmp->Text);
	     ((TRectSignal *) Obj)->Freq =StrToFloat(TxtRectFreq->Text);
	     ((TRectSignal *) Obj)->Ratio =StrToFloat(TxtRectRatio->Text);
             ((TRectSignal *) Obj)->Phase=StrToFloat(TxtRectPhase->Text);
             SignalList->Insert(CurSetChan, Obj);
         }
         else if (type==2)
         {
             Obj = new TTriSignal();
     	     ((TTriSignal *) Obj)->Amp  =StrToFloat(TxtTriAmp->Text);
	     ((TTriSignal *) Obj)->Freq =StrToFloat(TxtTriFreq->Text);
             ((TTriSignal *) Obj)->Phase=StrToFloat(TxtTriPhase->Text);
             SignalList->Insert(CurSetChan, Obj);
         }
         else if (type==3)
         {
             Obj = new TScanSignal();
     	     ((TScanSignal *) Obj)->Amp  =StrToFloat(TxtScanAmp->Text);
	     ((TScanSignal *) Obj)->StartFreq =StrToFloat(TxtScanStartFreq->Text);
	     ((TScanSignal *) Obj)->StopFreq =StrToFloat(TxtScanStopFreq->Text);
             ((TScanSignal *) Obj)->ScanTime=StrToFloat(TxtScanTime->Text);
             ((TScanSignal *) Obj)->ScanMode=RdgScanMode->ItemIndex;
              SignalList->Insert(CurSetChan, Obj);
         }
         else if (type==4)
         {
             Obj = new TAmSignal();
     	     ((TAmSignal *) Obj)->Amp  =StrToFloat(TxtAmAmp->Text);
	     ((TAmSignal *) Obj)->CarrierFreq =StrToFloat(TxtAmCarrierFreq->Text);
             ((TAmSignal *) Obj)->SignalFreq=StrToFloat(TxtAmSignalFreq->Text);
             SignalList->Insert(CurSetChan, Obj);
         }
         else if (type==5)
         {
             Obj = new TNoiseSignal();
     	     ((TNoiseSignal *) Obj)->Amp  =StrToFloat(TxtNoiseAmp->Text);
     	     ((TNoiseSignal *) Obj)->FangCha  =StrToFloat(TxtNoiseFangCha->Text);
             SignalList->Insert(CurSetChan, Obj);
         }
         else if (type==6)
         {
             Obj = new TPulseSignal();
     	     ((TPulseSignal *) Obj)->Type  =CmbPulseType->ItemIndex;
     	     ((TPulseSignal *) Obj)->Amp  =StrToFloat(TxtPulseAmp->Text);
     	     ((TPulseSignal *) Obj)->PulseWidth  =StrToFloat(TxtPulseWidth->Text);
             SignalList->Insert(CurSetChan, Obj);
         }
         else if (type==7)
         {
             Obj = new TNarrowNoiseSignal();
     	     ((TNarrowNoiseSignal *) Obj)->Amp  =StrToFloat(TxtNarrowNoiseAmp->Text);
     	     ((TNarrowNoiseSignal *) Obj)->FangCha  =StrToFloat(TxtNarrowNoiseFangCha->Text);
     	     ((TNarrowNoiseSignal *) Obj)->StartFreq  =StrToFloat(TxtNarrowNoiseStartFreq->Text);
     	     ((TNarrowNoiseSignal *) Obj)->StopFreq  =StrToFloat(TxtNarrowNoiseStopFreq->Text);
             SignalList->Insert(CurSetChan, Obj);
         }
    }
}
void __fastcall TForm1::CmbMaxChannelChange(TObject *Sender)
{
     int count=CmbMaxChannel->ItemIndex+1;
     TSignal *Obj;
     for (int i=0;i<count;i++)
     {
         Obj=(TSignal *)SignalList->Items[i];
         Obj->Selected=true;
         ChType[i]->Enabled=true;
     }

     for (int i=count;i<16;i++)
     {
         Obj=(TSignal *)SignalList->Items[i];
         Obj->Selected=false;
         ChType[i]->Enabled=false;
     }

}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
    int type=PgcType->ActivePageIndex;
    Update(CurSetChan,type);
    int maxchannel=CmbMaxChannel->ItemIndex+1;
    int count=CmbMaxChannel->ItemIndex+1;
    TSignal *Obj;
    for (int i=0;i<count;i++)
    {
        Obj=(TSignal *)SignalList->Items[i];
        Obj->Selected=true;
        ChType[i]->Enabled=true;
    }

     for (int i=count;i<16;i++)
     {
         Obj=(TSignal *)SignalList->Items[i];
         Obj->Selected=false;
         ChType[i]->Enabled=false;
     }

    ForceDirectories(EdtSavePath->Text);
    AnsiString filename=EdtSavePath->Text+"\\"+EdtSaveName->Text+CmbTestNo->Text;
    AnsiString file;
    if(FileExists(filename + ".yec"))
    {
         bool overwrite =(MessageDlg("当前目录下的数据文件已存在,需要覆盖以前的数据吗? ",
	  			mtInformation,
	  			TMsgDlgButtons() << mbYes << mbNo,
	  			0) == mrYes);
        if (!overwrite) return;
    }
    int length=StrToInt(EdtLength->Text)*1024;
    //写yec文件
    FILE *filep = fopen((filename+".yec").c_str(), "w+");
    fclose(filep);
    TYecType *YecType=new TYecType();
    TFileHead filehead;
    filehead.ADBits=16;
    filehead.ADFrom=-32768;
    filehead.ADTo=32768;
    filehead.VoltageFrom=-5000.0;
    filehead.VoltageTo=5000.0;
    filehead.Gain=1;
    filehead.EU=1.0;
    filehead.Price="mV";
    filehead.TotalChan=maxchannel;
    filehead.NonLinear="line";
    filehead.ADGain=1;
    filehead.ZeroValue=0;
    filehead.Speed=StrToInt(EdtSpeed->Text);
    filehead.DataLength=length;
    short *data=new short[length];
    for (int i=0;i<maxchannel;i++)
    {
         file=filename+"#"+IntToStr(i+1);
         filehead.Chan=i;
         Obj=(TSignal *)SignalList->Items[i];
         Obj->SetLength(length);
         Obj->Speed=StrToFloat(EdtSpeed->Text);
         Obj->GetData();
	 short *shortdata=new short[length];
         float minvalue=Obj->Data[0];
         float maxvalue=Obj->Data[0];
	 float max;
         for (int j=0;j<length;j++)
	 {
             if (minvalue>Obj->Data[j]) minvalue=Obj->Data[j];
             if (maxvalue<Obj->Data[j]) maxvalue=Obj->Data[j];
	 }
	 max=fabs(maxvalue);
	 if (max<fabs(minvalue)) max=fabs(minvalue);
         max=max/0.9;
         float bei=(filehead.ADTo-filehead.ADFrom)/2.0/max;
         filehead.EU=bei*float(filehead.VoltageTo-filehead.VoltageFrom)/float(filehead.ADTo-filehead.ADFrom);
         filep = fopen((file+".sts").c_str(), "w+");
	 fclose(filep);
         for (int j=0;j<length;j++)
         {
             data[j]=short(Obj->Data[j]*bei);
         }
         YecType->AppendData(file,length,data);  //sts file;
         YecType->StopSaveData(file,filehead);  //tsp file
    }
    delete []data;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    AnsiString Directory;
    if (EdtSavePath->Text!="")
        Directory = EdtSavePath->Text;
    else
        Directory="d:\data";
    if(SelectDirectory("数据存放路径选择", WideString(""), Directory))
    {
        EdtSavePath->Text = Directory;
    }
}
//---------------------------------------------------------------------------


void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    AnsiString  file= ExtractFilePath(Application->ExeName)+"system.ini";
    TIniFile *pIniFile = new TIniFile(file);
    pIniFile->WriteString("信号源", "SavePath", EdtSavePath->Text);
    pIniFile->WriteString("信号源", "SaveName", EdtSaveName->Text);
    pIniFile->WriteInteger("信号源", "TestNo", CmbTestNo->ItemIndex+1);
    pIniFile->WriteString("信号源", "Speed", EdtSpeed->Text);
    pIniFile->WriteString("信号源", "Length", EdtLength->Text);
    pIniFile->WriteInteger("信号源", "MaxChannel",CmbMaxChannel->ItemIndex+1);
    delete pIniFile;
}
//---------------------------------------------------------------------------


















⌨️ 快捷键说明

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