Смекни!
smekni.com

Распределенная система терминального управления техническим объектом (стр. 15 из 15)

s="";

k++;

}

}

}

//------------------------------------------------------------

// Формирование массива конечных условий

//------------------------------------------------------------

S=Edit4->Text;

s="";

k=0;

double *xf;

xf=new double[FiniConditionNum];

for (i=1; i<=S.Length(); i++)

{

if ((S[i]!=' ')&(S[i]!='[')&(S[i]!=']'))

{

s+=S[i];

}

else

{

if (!s.IsEmpty())

{

xf[k]=StrToFloat(s);

s="";

k++;

}

}

}

//------------------------------------------------------------

// Вычисляем коэффициенты терминального управления

//------------------------------------------------------------

// Указатель на массив коэффициентов

double *C;

C=CoeffC(xo, InitConditionNum, xf, FiniConditionNum, T);

for (i=0; i<InitConditionNum+FiniConditionNum; i++)

{

ListBox1->Items->Add("C["+IntToStr(i)+"] = "

+FloatToStrF(C[i], ffFixed, 7, 5));

}

//------------------------------------------------------------

// Вычисляем управляющую функцию u(t)

//------------------------------------------------------------

double dT, t=0.0;

dT=StrToFloat(Edit6->Text);

int N=(int)T/dT;

StringGrid1->RowCount=N+3;

double u, sum=0.0;

for(i=0; i<=N+1; i++)

{

StringGrid1->Cells[0][i+1]=FloatToStrF(t, ffFixed, 7, 5);

for (k=0; k<InitConditionNum+FiniConditionNum; k++)

{

if (k==0)

{

sum+=C[k];

}

else

{

sum+=C[k]*pow(t, k);

}

}

Series1->AddXY(t, sum, "", clTeeColor);

Application->ProcessMessages();

StringGrid1->Cells[1][i+1]=FloatToStrF(sum, ffFixed, 5, 3);

sum=0.0;

t+=dT;

}

//------------------------------------------------------------

delete[] C;

delete[] xo;

delete[] xf;

}

//--------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

StringGrid1->Cells[0][0]="Время [сек]";

StringGrid1->Cells[1][0]="U(t)";

}

//--------------------------------------------------------------

void __fastcall TForm1::bbSaveClick(TObject *Sender)

{

ofstream out;

int i;

if (SaveDialog1->Execute())

{

out.open(SaveDialog1->FileName.c_str(), 0);

out<<"Файл протокола от "<<DateToStr(Now()).c_str()<<"&bsol;n";

for (i=0; i<ListBox1->Count; i++)

{

out<<"C["<<i<<"] = "<<ListBox1->Items->Strings[i].c_str()<<"&bsol;n";

}

for (i=0; i<StringGrid1->RowCount; i++)

{

out<<StringGrid1->Cells[0][i].c_str()<<"&bsol;t"<<StringGrid1->Cells[1][i].c_str()<<"&bsol;n";

}

out.close();

}

}

//--------------------------------------------------------------

void __fastcall TForm1::bbSendClick(TObject *Sender)

{

String S="@";

int i;

//------------------------------------------------------------

// Формируем пакет для передачи информации

//------------------------------------------------------------

for (i=0; i<ListBox1->Count; i++)

{

S+=ListBox1->Items->Strings[i]+"%";

}

S+="#";

//------------------------------------------------------------

// Вводим IP-адрес

//------------------------------------------------------------

UDP->Host=MaskEdit1->Text;

//------------------------------------------------------------

// Пересылка данных

//------------------------------------------------------------

try

{

UDP->Send(S);

}

catch(...)

{

ShowMessage("Не удалось передать информационный пакет!");

}

//------------------------------------------------------------

}

//--------------------------------------------------------------

void __fastcall TForm1::bbAboutClick(TObject *Sender)

{

FormAbout->ShowModal();

}

//--------------------------------------------------------------