Sunteți pe pagina 1din 29

Universitatea Tehnică ”Gheorghe Asachi” din Iași

Facultatea de Construcții și Instalații


Program universitar de master Inginerie Structurală
Disciplina Inginerie Seismică Avansată
Prof.dr.ing. Fideliu Păuleț-Crăiniceanu
Tematica: Folosirea limbajului Matlab și a Interfeței App Designer
An universitar: 2019-2020, semestrul II.

Aplicația
calculul caracteristicilor secționale ale unei secțiuni dublu T

Enunțul problemei
Se dă o secțiune dublu T simetrică după axa
verticală. Să se calculeze momentele de
inerție după axele verticale și orizontale.

Analiză
Se împarte secțiune în trei dreptunghiuri
(talpa superioară, inima și talpa inferioară)
notate cu 1, 2 și 3. Apoi, se calculează
succesiv:
 Aria fiecărui dreptunghi
A1=bts∗hts ; A2=bi∗hi; A3 =bti∗h ti
 Aria totală
At = A1 + A2 + A3
Centrul de greutate
3

∑ Ai yi
y g= i=1 =
( h2 +h + h )+ A ∗( h2 + h )+ A ∗h2
A 1∗
ts
i ti 2
i
ti
3 ti

At At
 Momentele de inerție ale fiecărui dreptunghi
bts∗h ts3 bi∗hi3 bti∗h ti3
I x 1= ; I x 2= ; I x 3=
12 12 12
3 3
hts∗bts hi∗b i hti∗bti 3
I y 1= ; I y 2= ; I y 3=
12 12 12
 Momentul de inerție pe direcția x
hts 2
(
I xg =I x 1+ A 1∗ H− y g−
2
+¿ )
hi 2 2
h
(
+ I x 2 + A 2∗ H− y g−hts −
2 )
+ I x3 + A 3∗ y g− ti
2 ( )
 Momentul de inerție pe direcția y
I yg=I y 1 + I y2 + I y 3

1/29
2/29
Programul creat de App Designer
 Programul Matlab pentru interfața grafică se numește momint1.mlapp
(generat odată cu realizarea sa vizuală și în care s-a intervenit pentru
indicarea procedurilor de CallBack) și este prezentat în ANEXA 2. Intervențiile
făcute de autor au fost subliniate cu galben, restul programului fiind generat
de App Designer pe baza realizării interfeței grafice.

 Funcția Matlab pentru preluarea datelor de intrare, calcule intermediare și


afișaj în fereastra App Designer
function calcule(app)
disp('calcule')

bts = app.btsEditField.Value;
bi = app.biEditField.Value;
bti = app.btiEditField.Value;
hts = app.htsEditField.Value;
hi = app.hiEditField.Value;
hti = app.htiEditField.Value;

if bts<=0 | bi<=0 | bti<=0 | hts<=0 | hi<=0 | hti<=0


app.Label.Text='Date de intrare incorecte!';
else
app.Label.Text='Date de intrare corecte!';
H=hts+hi+hti; app.HEditFieldLabel.Text=num2str(H);
A1=bts*hts; A2=bi*hi; A3=bti*hti; At=A1+A2+A3;
yg=(A1*(hts/2+hi+hti)+A2*(hi/2+hti)+A3*hti/2)/At;
app.HEditFieldLabel_2.Text=num2str(yg);
Ix1=bts*hts^3/12; Ix2=bi*hi^3/12; Ix3=bti*hti^3/12;
Ixg=Ix1+A1*(H-yg-hts/2)^2+Ix2+A2*(H-yg-hts-hi/2)^2+...
Ix3+A3*(yg-hti/2)^2;
app.HEditFieldLabel_3.Text=num2str(Ixg);
Iy1=hts*bts^3/12; Iy2=hi*bi^3/12; Iy3=hti*bti^3/12;
Iyg=Iy1+Iy2+Iy3;
app.HEditFieldLabel_4.Text=num2str(Iyg);
end

 Proiectul App Designer


Interfața App Designer cuprinde (a se vedea și captura ”COMPONENT
BROWSER”):
↓ Figura în ansamblu ”app.UIFigure” (părinte pentru toate celelalte
componente)
Titlul ”Caracteristici secționale”
(app.CaracteristicisecionaleLabel.Text)
Butonul ”Final” (app.finalButton.Text)
↓ Panelul ”!” pentru mesaje (app.Panel.Text) care conține
spațiul pentru mesaje (app.Label.Text)
Desenul secțiunii ”dt_incerc1.png” (app.Image.ImageSource)
↓ Panelul ”Date de intrare” (app.DatedeintrarePanel.Text) care
conține

3/29
- valoarea ”bts” (app.btsEditField.Value)
- valoarea ”bi” (app.biEditField.Value)
- valoarea ”bti” (app.btiEditField.Value)
- valoarea ”hts” (app.htsEditField.Value)
- valoarea ”hi” (app.hiEditField.Value)
- valoarea ”hti” (app.htiEditField.Value)
↓ Panelul ”Rezultate” (app.DatedeintrarePanel) care conține
- valoarea-text ”H” (app.HEditFieldLabel_2.Text)
- valoarea-text ”yg” (app.HEditFieldLabel_3.Text)
- valoarea-text ”Ixg” (app.HEditFieldLabel_4.Text)
- valoarea-text ”Iyg” (app.HEditFieldLabel_5.Text)

Imaginea App Designer la finalul elaborării:

4/29
Rezultate
 La startare, interfața App Designer arată astfel:

 În cazul în care datele sunt incomplete sau greșite, interfața este, de exemplu:

5/29
 Pentru exemplificare, se prezintă următoarele rezultate:

Primul rezultat se referă la un caz curent de secțiune dublu T. Al doilea caz este folosit doar pentru a
verifica procedura (este în fapt un pătrat cu latura 3).

Comentarii
 Folosirea interfeței grafice pentru utilizatori App Designer face utilizarea produsului realizat,
programul Matlab, mai simplă, cu datele de intrare ușor de manipulat și schimbat. Rezultatele
sunt, de asemenea prezentate cu claritate și sistematizate.
 Desenul din cadrul App Designer arată parametrii fizici folosiți (datele de intrare) – în acest caz
se văd elementele secțiunii dublu T cu cotele clare și notațiile axelor.
 Prin dedicarea unui timp suplimentar pentru realizarea interfeței (în raport cu o folosire clasică,
fără aceasta), se obține un program prietenos care poate fi dat spre folosință utilizatorilor ne-
experimentați în programare și care poate fi ulterior modificat/adaptat pentru alte cerințe.
 Folosirea App designer poate fi propusă pentru programele Matlab deja create în stil clasic (fără
interfață grafică) în scopul deschiderii spre o gamă mult mai largă de utilizatori.

6/29
Anexa 1. Notă asupra creării figurii incluse în App Designer
 Desenul din interfața grafică a fost realizat în MS Word (a se vedea fișierul
DubT.docx).
 La final s-au grupat toate elementele desenului și i s-au determinat
dimensiunile.
 Apoi, s-au redus dimensiunile paginii Word (cu margini alese 0) astfel încât să
se poată încadra desenul creat anterior într-un pătrat (dar se poate alege
orice proporție care să fie apoi respectată în proporția laturilor obiectului
axes1 din GUI) – a se vedea fișierul DubT2.docx.
 Se salvează fișierul acesta, DubT2.docx, în format pdf (DubT2.pdf).
 Se deschide fișierul pdf, DubT2.pdf, cu Adobe Reader (de exemplu) și se
selectează imaginea.
 În Adobe Reader, opțional, se poate schimba rezoluția figurii (cu zoom) și se
copie (CTRL/C).
 Se deschide programul MS Paint (sau alt program de editare imagini) unde se
transferă imaginea copiată din pdf.
 Se salvează din Paint imaginea cu o extensie dorită, de exemplu png - a se
vedea fișierul dt_incerc1.png

7/29
Anexa 2. Programul interfeței grafice, momint1.mlapp
classdef momindt1 < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
UIFigure matlab.ui.Figure
CaracteristicisecionaleLabel matlab.ui.control.Label
finalButton matlab.ui.control.Button
Panel matlab.ui.container.Panel
Label matlab.ui.control.Label
Image matlab.ui.control.Image
DatedeintrarePanel matlab.ui.container.Panel
btsEditFieldLabel matlab.ui.control.Label
btsEditField matlab.ui.control.NumericEditField
biEditFieldLabel matlab.ui.control.Label
biEditField matlab.ui.control.NumericEditField
btiEditFieldLabel matlab.ui.control.Label
btiEditField matlab.ui.control.NumericEditField
htsEditFieldLabel matlab.ui.control.Label
htsEditField matlab.ui.control.NumericEditField
hiEditFieldLabel matlab.ui.control.Label
hiEditField matlab.ui.control.NumericEditField
htiEditFieldLabel matlab.ui.control.Label
htiEditField matlab.ui.control.NumericEditField
RezultatePanel matlab.ui.container.Panel
htiEditFieldLabel_2 matlab.ui.control.Label
HEditFieldLabel matlab.ui.control.Label
HEditFieldLabel_2 matlab.ui.control.Label
htiEditFieldLabel_3 matlab.ui.control.Label
HEditFieldLabel_3 matlab.ui.control.Label
htiEditFieldLabel_4 matlab.ui.control.Label
HEditFieldLabel_4 matlab.ui.control.Label
htiEditFieldLabel_5 matlab.ui.control.Label
end
% Callbacks that handle component events
methods (Access = private)
% Code that executes after component creation
function startupFcn(app)
calcule(app)
end
% Button pushed function: finalButton
function finalButtonPushed(app, event)
closereq
end

8/29
% Value changed function: btsEditField
function btsEditFieldValueChanged(app, event)
calcule(app)
end
% Value changed function: biEditField
function biEditFieldValueChanged(app, event)
calcule(app)
end
% Value changed function: btiEditField
function btiEditFieldValueChanged(app, event)
calcule(app)
end
% Value changed function: htsEditField
function htsEditFieldValueChanged(app, event)
calcule(app)
end
% Value changed function: hiEditField
function hiEditFieldValueChanged(app, event)
calcule(app)
end
% Value changed function: htiEditField
function htiEditFieldValueChanged(app, event)
calcule(app)
end
end
% Component initialization
methods (Access = private)
% Create UIFigure and components
function createComponents(app)
% Create UIFigure and hide until all components are created
app.UIFigure = uifigure('Visible', 'off');
app.UIFigure.Position = [100 100 701 596];
app.UIFigure.Name = 'MATLAB App';
% Create CaracteristicisecionaleLabel
app.CaracteristicisecionaleLabel = uilabel(app.UIFigure);
app.CaracteristicisecionaleLabel.FontSize = 24;
app.CaracteristicisecionaleLabel.FontColor = [0 0 1];
app.CaracteristicisecionaleLabel.Position = [84 553 262 30];
app.CaracteristicisecionaleLabel.Text = 'Caracteristici secționale';
% Create finalButton
app.finalButton = uibutton(app.UIFigure, 'push');
app.finalButton.ButtonPushedFcn = createCallbackFcn(app, @finalButtonPushed,
true);

9/29
app.finalButton.BackgroundColor = [0.5922 0.7686 0.4627];
app.finalButton.FontSize = 24;
app.finalButton.Position = [1 1 100 37];
app.finalButton.Text = 'final';
% Create Panel
app.Panel = uipanel(app.UIFigure);
app.Panel.Title = '!';
app.Panel.FontSize = 24;
app.Panel.Position = [48 61 334 74];
% Create Label
app.Label = uilabel(app.Panel);
app.Label.BackgroundColor = [0.902 0.7725 0.4784];
app.Label.HorizontalAlignment = 'center';
app.Label.FontSize = 18;
app.Label.Position = [19 8 295 31];
app.Label.Text = '';
% Create Image
app.Image = uiimage(app.UIFigure);
app.Image.Position = [15 144 400 400];
app.Image.ImageSource = 'dt_incerc1.png';
% Create DatedeintrarePanel
app.DatedeintrarePanel = uipanel(app.UIFigure);
app.DatedeintrarePanel.ForegroundColor = [0.4667 0.6745 0.1882];
app.DatedeintrarePanel.Title = 'Date de intrare';
app.DatedeintrarePanel.BackgroundColor = [0.8902 0.7569 0.4431];
app.DatedeintrarePanel.FontSize = 24;
app.DatedeintrarePanel.Position = [442 257 249 287];
% Create btsEditFieldLabel
app.btsEditFieldLabel = uilabel(app.DatedeintrarePanel);
app.btsEditFieldLabel.HorizontalAlignment = 'right';
app.btsEditFieldLabel.FontSize = 24;
app.btsEditFieldLabel.Position = [18 219 65 30];
app.btsEditFieldLabel.Text = 'bts = ';
% Create btsEditField
app.btsEditField = uieditfield(app.DatedeintrarePanel, 'numeric');
app.btsEditField.ValueChangedFcn = createCallbackFcn(app,
@btsEditFieldValueChanged, true);
app.btsEditField.FontSize = 24;
app.btsEditField.Position = [82 220 146 30];
% Create biEditFieldLabel
app.biEditFieldLabel = uilabel(app.DatedeintrarePanel);
app.biEditFieldLabel.HorizontalAlignment = 'right';
app.biEditFieldLabel.FontSize = 24;

10/29
app.biEditFieldLabel.Position = [31 178 52 30];
app.biEditFieldLabel.Text = 'bi = ';
% Create biEditField
app.biEditField = uieditfield(app.DatedeintrarePanel, 'numeric');
app.biEditField.ValueChangedFcn = createCallbackFcn(app,
@biEditFieldValueChanged, true);
app.biEditField.FontSize = 24;
app.biEditField.Position = [82 179 146 30];
% Create btiEditFieldLabel
app.btiEditFieldLabel = uilabel(app.DatedeintrarePanel);
app.btiEditFieldLabel.HorizontalAlignment = 'right';
app.btiEditFieldLabel.FontSize = 24;
app.btiEditFieldLabel.Position = [25 137 58 30];
app.btiEditFieldLabel.Text = 'bti = ';
% Create btiEditField
app.btiEditField = uieditfield(app.DatedeintrarePanel, 'numeric');
app.btiEditField.ValueChangedFcn = createCallbackFcn(app,
@btiEditFieldValueChanged, true);
app.btiEditField.FontSize = 24;
app.btiEditField.Position = [82 138 146 30];
% Create htsEditFieldLabel
app.htsEditFieldLabel = uilabel(app.DatedeintrarePanel);
app.htsEditFieldLabel.HorizontalAlignment = 'right';
app.htsEditFieldLabel.FontSize = 24;
app.htsEditFieldLabel.Position = [18 96 65 30];
app.htsEditFieldLabel.Text = 'hts = ';
% Create htsEditField
app.htsEditField = uieditfield(app.DatedeintrarePanel, 'numeric');
app.htsEditField.ValueChangedFcn = createCallbackFcn(app,
@htsEditFieldValueChanged, true);
app.htsEditField.FontSize = 24;
app.htsEditField.Position = [82 97 146 30];
% Create hiEditFieldLabel
app.hiEditFieldLabel = uilabel(app.DatedeintrarePanel);
app.hiEditFieldLabel.HorizontalAlignment = 'right';
app.hiEditFieldLabel.FontSize = 24;
app.hiEditFieldLabel.Position = [31 55 52 30];
app.hiEditFieldLabel.Text = 'hi = ';
% Create hiEditField
app.hiEditField = uieditfield(app.DatedeintrarePanel, 'numeric');
app.hiEditField.ValueChangedFcn = createCallbackFcn(app,
@hiEditFieldValueChanged, true);
app.hiEditField.FontSize = 24;

11/29
app.hiEditField.Position = [82 56 146 30];
% Create htiEditFieldLabel
app.htiEditFieldLabel = uilabel(app.DatedeintrarePanel);
app.htiEditFieldLabel.HorizontalAlignment = 'right';
app.htiEditFieldLabel.FontSize = 24;
app.htiEditFieldLabel.Position = [25 14 58 30];
app.htiEditFieldLabel.Text = 'hti = ';
% Create htiEditField
app.htiEditField = uieditfield(app.DatedeintrarePanel, 'numeric');
app.htiEditField.ValueChangedFcn = createCallbackFcn(app,
@htiEditFieldValueChanged, true);
app.htiEditField.FontSize = 24;
app.htiEditField.Position = [82 15 146 30];
% Create RezultatePanel
app.RezultatePanel = uipanel(app.UIFigure);
app.RezultatePanel.ForegroundColor = [0 0.4471 0.7412];
app.RezultatePanel.Title = 'Rezultate';
app.RezultatePanel.BackgroundColor = [0.6353 0.6863 0.9098];
app.RezultatePanel.FontSize = 24;
app.RezultatePanel.Position = [442 37 249 204];
% Create htiEditFieldLabel_2
app.htiEditFieldLabel_2 = uilabel(app.RezultatePanel);
app.htiEditFieldLabel_2.BackgroundColor = [0.902 0.902 0.902];
app.htiEditFieldLabel_2.HorizontalAlignment = 'right';
app.htiEditFieldLabel_2.FontSize = 24;
app.htiEditFieldLabel_2.Position = [18 131 58 30];
app.htiEditFieldLabel_2.Text = 'H = ';
% Create HEditFieldLabel
app.HEditFieldLabel = uilabel(app.RezultatePanel);
app.HEditFieldLabel.BackgroundColor = [0.902 0.902 0.902];
app.HEditFieldLabel.HorizontalAlignment = 'right';
app.HEditFieldLabel.FontSize = 24;
app.HEditFieldLabel.Position = [82 131 146 30];
app.HEditFieldLabel.Text = '';
% Create HEditFieldLabel_2
app.HEditFieldLabel_2 = uilabel(app.RezultatePanel);
app.HEditFieldLabel_2.BackgroundColor = [0.902 0.902 0.902];
app.HEditFieldLabel_2.HorizontalAlignment = 'right';
app.HEditFieldLabel_2.FontSize = 24;
app.HEditFieldLabel_2.Position = [82 91 146 30];
app.HEditFieldLabel_2.Text = '';
% Create htiEditFieldLabel_3
app.htiEditFieldLabel_3 = uilabel(app.RezultatePanel);

12/29
app.htiEditFieldLabel_3.BackgroundColor = [0.902 0.902 0.902];
app.htiEditFieldLabel_3.HorizontalAlignment = 'right';
app.htiEditFieldLabel_3.FontSize = 24;
app.htiEditFieldLabel_3.Position = [18 91 58 30];
app.htiEditFieldLabel_3.Text = 'yg = ';
% Create HEditFieldLabel_3
app.HEditFieldLabel_3 = uilabel(app.RezultatePanel);
app.HEditFieldLabel_3.BackgroundColor = [0.902 0.902 0.902];
app.HEditFieldLabel_3.HorizontalAlignment = 'right';
app.HEditFieldLabel_3.FontSize = 24;
app.HEditFieldLabel_3.Position = [82 51 146 30];
app.HEditFieldLabel_3.Text = '';
% Create htiEditFieldLabel_4
app.htiEditFieldLabel_4 = uilabel(app.RezultatePanel);
app.htiEditFieldLabel_4.BackgroundColor = [0.902 0.902 0.902];
app.htiEditFieldLabel_4.HorizontalAlignment = 'right';
app.htiEditFieldLabel_4.FontSize = 24;
app.htiEditFieldLabel_4.Position = [11 51 65 30];
app.htiEditFieldLabel_4.Text = 'Ixg = ';
% Create HEditFieldLabel_4
app.HEditFieldLabel_4 = uilabel(app.RezultatePanel);
app.HEditFieldLabel_4.BackgroundColor = [0.902 0.902 0.902];
app.HEditFieldLabel_4.HorizontalAlignment = 'right';
app.HEditFieldLabel_4.FontSize = 24;
app.HEditFieldLabel_4.Position = [82 11 146 30];
app.HEditFieldLabel_4.Text = '';
% Create htiEditFieldLabel_5
app.htiEditFieldLabel_5 = uilabel(app.RezultatePanel);
app.htiEditFieldLabel_5.BackgroundColor = [0.902 0.902 0.902];
app.htiEditFieldLabel_5.HorizontalAlignment = 'right';
app.htiEditFieldLabel_5.FontSize = 24;
app.htiEditFieldLabel_5.Position = [11 11 65 30];
app.htiEditFieldLabel_5.Text = 'Iyg = ';
% Show the figure after all components are created
app.UIFigure.Visible = 'on';
end
end
% App creation and deletion
methods (Access = public)
% Construct app
function app = momindt1
% Create UIFigure and components
createComponents(app)

13/29
% Register the app with App Designer
registerApp(app, app.UIFigure)
% Execute the startup function
runStartupFcn(app, @startupFcn)
if nargout == 0
clear app
end
end
% Code that executes before app deletion
function delete(app)
% Delete UIFigure when app is deleted
delete(app.UIFigure)
end
end
end

14/29
Anexa 3. Principalii pași în folosirea App Designer

15/29
16/29
17/29
18/29
19/29
20/29
21/29
22/29
23/29
24/29
25/29
26/29
27/29
28/29
29/29

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