Sunteți pe pagina 1din 9

LABORATORUL 4

LUCRUL ÎN MODUL PROGRAMAT CU QUICKFIELD – GENERAREA UNUI RAPORT


IN VISUAL BASIC FOR APPLICATIONS (VBA)

1. Proiectarea interfeței utilizator

Aspectul documentului în care va fi generat raportul.

Aspectul ferestrei pentru proiectarea aplicatiei pentru generarea raportului.

1.1. Fereastra de comandă a aplicației


Fereastra de comandă a aplicației în etapa de proiectare

2. Rutinele programului pentru generarea raportului

2.1. Declararea variabilelor aplicatiei


Dim QuickFieldServer As New QuickField.Application 'porneste serverul
QuickField'
Dim Problema As QuickField.Problem 'se declara instanta problemei QuickField'
Dim Modelul As QuickField.Model 'se declara instanta modelului geometric al
problemei'
Dim Fereastra As QuickField.FieldWindow 'se declara instanta ferestrei
QuickField in care se reprezinta spectrul campului'
Dim punct As QuickField.Point 'se declara instanta punctului local din care se
vor preleva valori calculate'
Dim camp As QuickField.FieldPoint 'se declara instanta campului de valori
asociat punctului local'
Dim contur As QuickField.Contour 'se declara instanta conturului in raport cu
care se calculeaza valorile integrale'
Dim Tabel As QuickField.TableWindow 'creaza un obiect Table'
Dim col As QuickField.TableColumn 'creaza un obiect TableColumn'
Dim row As QuickField.TableRow 'creaza un obiect TableRow'

Dim dX As Double 'declaratie pentru coordonata geometrica a punctului curent'


Dim dY As Double 'declaratie pentru coordonata geometrica a punctului curent'
Dim dX_0 As Double 'declaratie pentru coordonata geometrica a punctului initial
al conturului'
Dim dY_0 As Double 'declaratie pentru coordonata geometrica a punctului initial
al conturului'
Dim dX_N As Double 'declaratie pentru coordonata geometrica a punctului final al
conturului'
Dim dY_N As Double 'declaratie pentru coorodnata geometrica a punctului final al
conturului'
Dim dL As Double 'declaratie pentru lunginea geometrica a conturului'
Dim iPunctePeContur As Variant 'declaratie pentru numarul de puncte aflate pe
perimetrul conturului'
Dim iLiniiDinTabel As Variant 'declaratie pentru numarul de linii din tabel'
Dim iColoaneDinTabel As Variant 'declaratie pentru numarul de coloane din tabel'
Dim aRezultate() As Double 'matricea in care se salveaza rezultatele'
Dim dDetH As Double 'declaratie pasul coordonatelor'
Dim dV As Double 'declaratie pentru valoarea calculata a potentialul
electrostatic intr-un punct'
Dim dE As Double 'declaratie pentru valoarea calculata a intensitatii campului
electrostatic intr-un punct'
Dim dEnergie As Double 'declaratie pentru valoarea calculata a energiei campului
electrostatic intr-un punct'
Dim aux As Variant 'variabila pentru depanare'
3. Rutine asociate obiectelor interfeței utilizator

3.1. Rutina asociata ferestrei utilizator


Private Sub UserForm_Activate()
ListBoxComenzi.AddItem ("Pregateste fisierul Word pentru noul raport")
End Sub
3.2. Rutina asociata butonului Server
Private Sub CommandButtonServer_Click()

ListBoxComenzi.AddItem ("Deschide serverul QuickField")


QuickFieldServer.MainWindow.Visible = True 'deschide ferestrele serverului'
Set Problema =
QuickFieldServer.Problems.Open("F:\Toshiba1\CursMasterat\Laboratoare\Lab4\CalcCa
pCip\CalcCapCip.pbm") 'deschide problema'

End Sub
3.3. Rutina asociată butonului Problema
Private Sub CommandButtonProblema_Click()

ListBoxComenzi.AddItem ("Comanda si verifica rezolvarea problemei")

If Problema.Solved = False Then


Problema.SolveProblem 'verifica daca problema nu a fost rezolvata se
comanda rezolvarea acesteia'
End If
End Sub
3.4. Rutina asociată butonului Postprocesare
Private Sub CommandButtonPostProcesare_Click()

ListBoxComenzi.AddItem ("Analizeaza rezultatele si pregateste raportul")

Problema.AnalyzeResults 'apeleaza metoda care deschide fereastra


postprocesorului QuickField'

Set Fereastra = Problema.Result.Windows(1) 'atribuie obiectului Fereastra


valorile ferestrei cu rezultate returnate de QuickField'

Set contur = Fereastra.Contour 'atribuie obiectului contur valorile


obiectului omolog asociat ferestrei returnate de QuickField'

contur.Delete 'sterge continutul initial al obiectului si pregateste


pentru intializare'

contur.AddBlock "Substrat" 'adauga un bloc la obiectul contur'

Set Tabel = Problema.Result.GetTable(contur) 'preia rezultatele calculelor


in tabel'

''iColoaneDinTabel = Tabel.Columns.Count 'numarul de coloane al tabelului'


iLiniiDinTabel = Tabel.Rows.Count 'numarul de linii din tabel; egal cu
numarul de puncte pe perimetrul conturului'

iPunctePeContur = iLiniiDinTabel 'idem'

For k1 = 1 To iLiniiDinTabel
For k2 = 1 To 7 'iColoaneDinTabel'
ReDim aRezultate(1 To k1, 1 To k2) 'dimensioneaza matricea
rezultatelor la dimesniunea necesara'
Next
Next

For k1 = 1 To iLiniiDinTabel
Set row = Tabel.Rows.Item(k1) 'selecteaza prima linie din tabel'

dX = row.Point.X 'preia abscisa punctului in variabila dX'


dY = row.Point.Y 'preia ordonata punctului in variabila dY'

Set punct = QuickFieldServer.PointXY(dX, dY) 'actualizeaza obiectul'


Set camp = Problema.Result.GetLocalValues(punct) 'preia valorile locale'

aRezultate(k1, 1) = camp.X 'abscisa punctului'


aRezultate(k1, 2) = camp.Y 'ordonata punctului'
aRezultate(k1, 3) = camp.Phi 'unghiul in SC polare '
aRezultate(k1, 4) = camp.R 'raza in SC polare'
aRezultate(k1, 5) = camp.Energy 'densitatea de energie a campului'
aRezultate(k1, 6) = camp.Potential 'potentialul electrostatic al
campului'
''aRezultate(k1, 5) = camp.Grad'nu este permis'
aRezultate(k1, 7) = camp.K 'permitivitatea dielectrica a materialului;
in genere este un tensor care reprezinta termenul din partea stanga a ecuatiei
lui Poisson'
''aRezultate(k1, 7) = camp.KGrad'nu este permis'
Next
''aux = col.Number

''dX_0 = contur.StartPoint.X 'preleveaza abscisa punctul initial al


conturului Substrat'
''dY_0 = contur.StartPoint.Y 'preleveaza ordonata punctului initial al
conturului Substrat'
''dX_N = contur.EndPoint.X 'abscisa punctului final al conturului'
''dY_N = contur.EndPoint.Y 'ordonata punctului final al conturului'

''dL = contur.Lenght 'perimetrul conturului in mm'


''dDetH = dL / (iPunctePeContur - 1) 'pasul retelei'

''Dim dAriaConturului As Double


''dAriaConturului = contur.Square 'aria conturului'

''Dim dNprod As Double


''dNprod = dAriaConturului / (dDetH ^ 2) 'numarul de patrate din contur'
''Dim dNSum As Double
''dNSum = 0.5 * dL / dDetH 'numarul de puncte pe contur minus unu'

''Dim dNx, dNy, dDiscriminant As Double


''dDiscriminant = dNSum ^ 2 - 4 * dNprod
''dNx = 1 / 2 * (dNSum - Sqr(dDiscriminant))
''dNy = 1 / 2 * (dNSum + Sqr(dDiscriminant))

''Set punct = QuickFieldServer.PointXY(dX_0, dY_0 - dDetH)


''Set camp = QuickFieldServer.ActiveProblem.Result.GetLocalValues(punct)

''Dim dreptunghi As QuickField.Rectangle


''Set dreptunghi = QuickFieldServer.RectangleByLimits(0, 100, 50, 50)
End Sub
3.5. Rutina asociată butonului Raport
Private Sub CommandButtonRaport_Click()

ListBoxComenzi.AddItem ("Editeaza raportul in fisierul Word")

For k1 = 1 To iLiniiDinTabel + 1
If k1 = 1 Then
With ThisDocument
.Tables(2).Cell(k1, 1).Select 'selecteaza celula din primul tabel'
Selection.Text = "X" 'inscrie text'
.Tables(2).Cell(k1, 2).Select 'selecteaza celula din primul tabel'
Selection.Text = "Y" 'inscrie text'
.Tables(2).Cell(k1, 3).Select 'selecteaza celula din primul tabel'
Selection.Text = "Phi" 'inscrie text'
.Tables(2).Cell(k1, 4).Select
Selection.Text = "R" 'inscrie text'
.Tables(2).Cell(k1, 5).Select
Selection.Text = "Densitatea de energie" 'inscrie text'
.Tables(2).Cell(k1, 6).Select
Selection.Text = "Potentialul campului" 'inscrie text'
.Tables(2).Cell(k1, 7).Select
Selection.Text = "Permitivitatea materialului" 'inscrie text'
End With
Else
With ThisDocument
.Tables(2).Range.Rows.Add 'insereaza o linie in tabel'
.Tables(2).Cell(k1, 1).Select 'selecteaza celula din primul tabel'
Selection.Text = Format(aRezultate(k1 - 1, 1), "0####.#0") 'abscisa'
.Tables(2).Cell(k1, 2).Select 'selecteaza celula din primul tabel'
Selection.Text = Format(aRezultate(k1 - 1, 2), "0####.#0")
'ordonata'
.Tables(2).Cell(k1, 3).Select 'selecteaza celula din primul tabel'
Selection.Text = Format(aRezultate(k1 - 1, 3), "0##.##0") 'Phi'
.Tables(2).Cell(k1, 4).Select
Selection.Text = Format(aRezultate(k1 - 1, 4), "0####.##0") 'R'
.Tables(2).Cell(k1, 5).Select
Selection.Text = Format(aRezultate(k1 - 1, 5), "####e+") 'densitatea
de energie'
.Tables(2).Cell(k1, 6).Select
Selection.Text = Format(aRezultate(k1 - 1, 6), "####e+")
'potentialul electrostatic'
.Tables(2).Cell(k1, 7).Select
Selection.Text = Format(aRezultate(k1 - 1, 7), "####e+")
'permitivitatea dielectrica'
End With
End If
Next

End Sub

4. Definirea problemei in Quick field

4.1. Fereastra principala


4.2. Definirea proprietăților de material
4.3. Condițiile de frontieră
5. Postprocesarea soluției

S-ar putea să vă placă și