ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 01.06.2020

Просмотров: 188

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


4 АЛГОРИТМЫ И ЛИСТИНГИ ПРОГРАММНОГО ПРОДУКТА ДЛЯ

МОДЕЛИРОВАНИЯ РАСПРЕДЕЛЕНИЯ ЭНЕРГЕТИКИ НАГРУЗОК


Основу программного продукта составляют функции написанные для расчета распределения энергетики нагрузок и функции построения графического интерфейса, основанной на функциях дискрипторной графики Handle Graphics которые поддерживают компоненты необходимые для создания компьютерных графиков.










Рисунок 7 – Иерархия графических объектов связанная с визуализацией

данных

Дескрипторная графика Handle Graphics - это объектно-ориентированная графическая система, которая поддерживает компоненты, необходимые для создания компьютерных графиков.

Объектами подсистемы дескрипторной графики являются базовые гра­фические элементы, которые используются для визуализации данных. Каждому графическому объекту присваивается уникальный идентификатор, назы­ваемый дескриптором. Используя дескриптор, можно управлять свойствами графического объекта.

В системе MATLAB используется следующая иерархия графических объектов /6/ связанных с визуализацией данных.

Графический объект Root находится в вершине иерархии и соответствует экрану компьютера. Существует единственный объект Root, который не имеет родителей, а все другие графические объекты являются его потомками. Прямым потомком этого объекта является графический объект Figure. Дескриптор объекта Root - 0. Этот объект создается в момент запуска системы MATLAB и не может быть удален. Тем не менее пользователь может управлять его свойствами.

Графические объекты Figure соответствуют отдельным графическим окнам на экране терминала, где отображаются визуализируемые данные. В системе MATLAB нет ограничений на количество создаваемых окон, однако возможные ограничения могут быть обусловлены особенностями исполь­зуемого компьютера. Графические объекты Figure являются прямыми по­томками объекта Root.

Все высокоуровневые команды и функции, которые выводят графики, например plot, surf, contour, автоматически создают графический объект Figure, если он не существует. Если открыто много графических окон, то одно из них выделяется в качестве текущего графического объекта. Дескриптором графического объекта Figure является номер графи­ческого окна.

Графический объект Axes задает область размещения графика в окне объекта Figure. Объект Axes является потомком для объекта Figure и в то же время родителем для графических объектов Line, Patch, Surface, Text, которые применяются для визуализации данных.

Все команды и функции, которые выводят графики, например plot, surf, contour, mesh, bar, автоматически создают графический объект Axes, если он не существует. Если в одном графическом окне создано несколько объектов Axes, то один из них выделяется в качестве текущего графического объекта. Дескриптор графического объекга Axes может быть определен с помощью команды gса.


Графический объект Patch - это один или несколько закрашенных многоугольников с выделенными границами. Объект Patch является потомком для объекта Axes.

Высокоуровневые команды и функции fill, fiH3, contour, contour3 создают графические объекты Patch.

Дескриптор графического объекта Patch может быть получен, например, с помощью функции [с, h] = contour3(...).

В левом столбце приводимой ниже таблицы указаны свойства объекта Patch с перечнем их допустимых значений, в правой части - текущие зна­чения этих свойств для объекта Patch с дескриптором h(1).

Графический объект Surface - это трехмерная визуализация массива данных, когда элемент массива определяет высоту точки над плоскостью х-у. Таким образом формируется трехмерная поверхность, состоящая из четы­рехугольников, вершины которых определяются массивом исходных данных. Поверхность может быть сплошной или интерполированной цветом либо представлять только сетку линий, соединяющих вершины.

Объект Surface является потомком объекта Axes.

Высокоуровневые команды и функции pcolor, surf, mesh создают графи­ческий объект Surface.

Дескриптор графического объекта Line может быть получен, например, с помощью функции h = surf(...).

Графические объекты Text - это строки символов. Объект Text является потомком объекта Axes.

Высокоуровневые команды и функции title, xlabel, ylabel, zlabel, gtext создаю! графические объекты Text.

Дескриптор графического объекта Text может быть получен, например, с помощью функции h = title(...).

Принципиальная схема взаимодействия модулей разработанной программы пока­зана на рисунке . Головная программа DRIVE вызывает основную графическую программу NAME.M, которая при первом исполнении создает графический ин­терфейсный экран с кнопками, окнами, поясняющим текстом и т.д. После этого система переходит в режим ожидания событий - нажатия мышкой в интерфейсном окне.

Если это нажатие происходит в редактируемом окне, после чего с помощью клавиатуры изменяется значение в этом окне и нажимается клавиша Enter, то на­чинается выполнение процедуры Func_Edit, которая и обновляет соответствую­щие данные в записи info, после чего заносит обновленные значения в UserData. Если же происходит нажатие на кнопку Run, то обновляются значения редакти­руемых окон и выполняется функция Run.


Рисунок 8 – Принципиальная схема взаимодействия модулей разработан-

ной программы


4.1 Листинги программного продукта


Ниже приведены листинги разработанных функций программного продукта для моделирования распределения энергетики нагрузок по элементам устройств тяжелого машиностроения.

Функция main выводит главное диалоговое окно программы, представленное на рисунке 9.

function main

global hFig1

global hAxes

hF = figure('Name', 'моделирование распределения энергетики нагрузок', 'NumberTitle','off',...

'MenuBar', 'none', 'Units', 'characters');

%Настраиваем фигуру

set(hF, 'Position', [10 10 100 30]);

%Оси

hAxes=axes('Units', 'normalized',...


'Position', [0.2 0.2 0.6 0.67]);

%Загрузка рисунка

load 121.mat

image (x121)

axis off

%%%Кнопки%%%

hBut1=uicontrol(hF,'style','pushbutton',...

'Units', ' normalized',...

'Position',[0.2 0.1 0.2 0.05],...

'String','О ПРОГРАММЕ',...

'Callback','oprogramme');

%вызов функции 1 расчета

hBut2=uicontrol(hF,'style','pushbutton',...

'Units', ' normalized',...

'Position',[0.4 0.1 0.2 0.05],...

'String','ДИНАМИКА',...

'Callback','xxx');

hBut3=uicontrol(hF,'style','pushbutton',...

'Units', ' normalized',...

'Position',[0.6 0.1 0.2 0.05],...

'String','СТАТИКА',...

'Callback','xxxa');

hBut4=uicontrol(hF,'style','pushbutton',...

'Units', ' normalized',...

'Position',[0.375 0.9 0.25 0.05],...

'String','ПРЕДУПРЕЖДЕНИЕ',...

'Callback','vnimanie');

hBut5=uicontrol(hF,'style','pushbutton',...

'Units', ' normalized',...

'Position',[0.2 0.05 0.25 0.05],...

'String','НАПРЯЖЕННОСТЬ',...

'Callback','xxxaa');

hBut6=uicontrol(hF,'style','pushbutton',...

'Units', ' normalized',...

'Position',[0.55 0.05 0.25 0.05],...

'String','НАПРЯЖЕННОСТЬ',...

'Callback','xxxaaa');

Рисунок 9 – Основное диалоговое окно программы

Функция MyCLEAR предназначена для очистки осей.

function MyCLEAR

%----------------%

global hAxes

axes(hAxes);

cla;

Функция MyGO производит расчет динамической характеристики и производит построение ее графика.

function MyGO

global hAxes

global hEd1

global hEd2

global hEd3

global hEd4

global hEd5

global hEd6

global hEd7

str1=get(hEd1,'String');

str2=get(hEd2,'String');

str3=get(hEd3,'String');

str4=get(hEd4,'String');

str5=get(hEd5,'String');

str6=get(hEd6,'String');

str7=get(hEd7,'String');

%=-----------------------------------%

x=str2num(str1);

y=str2num(str2);

z=str2num(str3);

h=str2num(str4);

R=str2num(str5);

V=str2num(str6);

a=str2num(str7);

%------------------------------------%

%-------------------------------------%

k=sym('k');

n=sym('n');

b=sym('b');

t=sym('t');

tn=sym('tn');

q=sym('q');

P=1000*9.8*h;

Vx=2*pi*(y+x)*sqrt(V);

Vy=2*pi*R*sqrt(V);

gradV=Vx+2*Vy;

R1=(x-k)^2+(y-n)^2+(z-b)^2;

R2=(x-k)^2+(y-n)^2+(z+b)^2;

Grin=(exp(-R1/(4*t*a^2))+exp(-R2/(4*t*a^2)))/(2*a*sqrt(3.14*t))^2;

f=int(int(int (Grin ,k,0,x) ,b,0,y) ,n,0,z);

s=P*t;

q=f*s;

qn=subs(q,t,tn);

[un]=eval(qn);

dt=0.0001;t=0.0001;

[u]=eval(q);

plot([t t],[u u]);

T=t;

U=u;

for i=1:150;

tn=t+dt;

[un]=eval(qn);

T=[T tn];

U=[U un];

plot(T,U);

t=tn;

u=un;

drawnow

end

grid on;

Функция MyGOа производит расчет статической характеристики и производит построение ее графика.

function MyGOa

global hAxes

global hEd1

global hEd2

global hEd3

global hEd4

global hEd5

global hEd6

global hEd7

str1=get(hEd1,'String');

str2=get(hEd2,'String');

str3=get(hEd3,'String');

str4=get(hEd4,'String');

str5=get(hEd5,'String');

str6=get(hEd6,'String');

str7=get(hEd7,'String');

%=-----------------------------------%

x=str2num(str1);

y=str2num(str2);

z=str2num(str3);

h=str2num(str4);

R=str2num(str5);

V=str2num(str6);

a=str2num(str7);

%-------------------------------------%

k=sym('k');

n=sym('n');

b=sym('b');

t=sym('t');

tn=sym('tn');

q=sym('q');

P=1000*9.8*h;

Vx=2*pi*(y+x)*sqrt(V);

Vy=2*pi*R*sqrt(V);

gradV=Vx+2*Vy;

R1=(x-k)^2+(y-n)^2+(z-b)^2;

R2=(x-k)^2+(y-n)^2+(z+b)^2;

Grin=(exp(-R1/(4*t*a^2))+exp(-R2/(4*t*a^2)))/(2*a*sqrt(3.14*t))^2;

f=int(int(int (Grin ,k,0,x) ,b,0,y) ,n,0,z);

t=1;

[u]=eval(f);

d=0:1:100;

q=u*d;

plot(d,q);

grid on;

Color = [0 0 0]

Функция MyGOаа производит расчет напреженности и производит построение ее графика.

function MyGOaa

global hAxes

global hEd1

global hEd2

global hEd3

str1=get(hEd1,'String');

str2=get(hEd2,'String');

str3=get(hEd3,'String');

%=-----------------------------------%

k1=str2num(str1);

k2=str2num(str2);

k3=str2num(str3);

%-------------------------------------%

y=sym('y');

z=sym('z');

x=sym('x');

k=-1/k1

f1=int(z,z,0,k3)+(k*y^2+k2)

f2=k*x^2+k2

f=f1+f2

[u]=eval(f);

ezsurf(u);

Функция MyGOааа производит расчет распространения мощности по поверхности и производит построение графика.

function MyGOaаа

global hAxes

global hEd1

global hEd2

global hEd3

global hEd4

global hEd5

global hEd6

global hEd7

str1=get(hEd1,'String');

str2=get(hEd2,'String');

str3=get(hEd3,'String');

str4=get(hEd4,'String');

str5=get(hEd5,'String');

str6=get(hEd6,'String');

str7=get(hEd7,'String');

%=-----------------------------------%

o=str2num(str1);

p=str2num(str2);

z=str2num(str3);


h=str2num(str4);

R=str2num(str5);

V=str2num(str6);

a=str2num(str7);

%-------------------------------------%

t=1;

x=sym('x');

y=sym('y');

k=sym('k');

n=sym('n');

b=sym('b');

t=sym('t');

tn=sym('tn');

q=sym('q');

P=1000*9.8*h;

Vx=2*pi*(y+x)*sqrt(V);

Vy=2*pi*R*sqrt(V);

gradV=Vx+2*Vy;

R1=(x-k)^2+(y-n)^2+(z-b)^2;

R2=(x-k)^2+(y-n)^2+(z+b)^2;

Grin=(exp(-R1/(4*t*a^2))+exp(-R2/(4*t*a^2)))/(2*a*sqrt(3.14*t))^2;

f=int(int(int (Grin ,k,0,z) ,b,0,x) ,n,0,y)

t=1;

[u]=eval(f)

grid on

ezmesh(u,[0,o,0,p])

Функция oprogramme и function [ output_args ] = Untitled1( input_args ) выводят информационные окна.

function oprogramme

%UNTITLED1 Summary of this function goes here

%Detailed explanation goes here

% считывание рисунка и карты цветов из файла

[pic, map] = imread('568.gif');

h = msgbox(' БИТТиУ Факультет инженерностроительный, кафедра УИТ - ВЕРСИЯ ПРОДУКТА 1.0.0.1

с пожеланиями и вопросами обращаться на E-mail Saturn@Portal-Saratov.Ru - Copyright 2006-2007 г.', 'О программе', 'custom', pic, map);

function [ output_args ] = Untitled1( input_args )

%UNTITLED1 Summary of this function goes here

% Detailed explanation goes here

h = warndlg('Для корректной и правильной работы программы, при введение значений в поля ввода, необходимо задавать числа с дробной частью через точку', 'Внимание');

Функции ххх, ххха, хххаа, хххааа выводят окна-формы с полями ввода числовых значений для произведения расчетов. Окно-форма для ввода представлено на рисунке 10.

function xxx

global hFig1

global hAxes

global hEd1

global hEd2

global hEd3

global hEd4

global hEd5

global hEd6

global hEd7

global hTxt1

global hTxt2

global hTxt3

global hTxt4

global hTxt5

global hTxt6

global hTxt7

global hTxt8

global hTxt9

global hTxt10

% Окно приложения допускает пропорциональное изменение размеров

% Элементы интерфейса заданны в нормализованных единицах измерения

% создание графического окна

hF = figure('Name', 'динамическая характеристика', 'NumberTitle','off',...

'Units', 'characters');

set(hF, 'Position', [10 10 100 30]);

%Область ввода текста%

hEd1=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.85 0.1 0.045],...

'HorizontalAlignment','left');

hEd2=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.75 0.1 0.045],...

'HorizontalAlignment','left');

hEd3=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.65 0.1 0.045],...

'HorizontalAlignment','left');

hEd4=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.55 0.1 0.045],...

'HorizontalAlignment','left');

hEd5=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.45 0.1 0.045],...

'HorizontalAlignment','left');

hEd6=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.35 0.1 0.045],...

'HorizontalAlignment','left');

hEd7=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.25 0.1 0.05],...

'HorizontalAlignment','left');

%---------------------------------------------%

%Кнопки%

hBut1=uicontrol(hF,'style','pushbutton',...

'Units', ' normalized',...

'Position',[0.2 0.1 0.2 0.05],...

'String','Clear',...

'Callback','MyCLEAR');

hBut2=uicontrol(hF,'style','pushbutton',...

'Units', ' normalized',...

'Position',[0.4 0.1 0.2 0.05],...

'String','Start',...

'Callback','MyGO');

%----------------------------------------------%

%Статический текст подпись%

hTxt1=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.8 0.895 0.1 0.045],...

'String','X,м');

hTxt2=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.8 0.795 0.1 0.045],...

'String','Y,м');

hTxt3=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.8 0.695 0.1 0.045],...


'String','Z,м');

hTxt4=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.8 0.595 0.1 0.045],...

'String','h,м');

hTxt5=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.8 0.495 0.1 0.045],...

'String','Rв,м');

hTxt6=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.8 0.395 0.1 0.045],...

'String','V,м/с');

hTxt7=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.8 0.295 0.1 0.045],...

'String','a');

hTxt8=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.01 0.9 0.1 0.045],...

'String','Q(t),Н*с');

hTxt9=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.67 0.17 0.05 0.045],...

'String','с');

%----------------------------------------------%

%чертим прямую%

hTxt10=uicontrol(hF,'Style','text',...

'BackgroundColor',[0.7 0.7 0.7],...

'Position',[750 5 1 900]);

%----------------------------------------------%

hAxes=axes('Units', 'normalized',...

'Position', [0.06 0.2 0.6 0.67]);

Рисунок 10 - Окно ввода исходных данных для расчета

grid on

function xxxa

global hFig1

global hAxes

global hEd1

global hEd2

global hEd3

global hEd4

global hEd5

global hEd6

global hEd7

global hList

global hTxt1

global hTxt2

global hTxt3

global hTxt4

global hTxt5

global hTxt6

global hTxt7

global hTxt8

global hTxt9

global hTxt10

% Окно приложения допускает пропорциональное изменение размеров

% Элементы интерфейса заданны в нормализованных единицах измерения

% создание графического окна

hF = figure('Name', 'статическая характеристика', 'NumberTitle','off',...

'Units', 'characters');

set(hF, 'Position', [10 10 100 30]);

%Область ввода текста%

hEd1=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.85 0.1 0.045],...

'HorizontalAlignment','left');

hEd2=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.75 0.1 0.045],...

'HorizontalAlignment','left');

hEd3=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.65 0.1 0.045],...

'HorizontalAlignment','left');

hEd4=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.55 0.1 0.045],...

'HorizontalAlignment','left');

hEd5=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.45 0.1 0.045],...

'HorizontalAlignment','left');

hEd6=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.35 0.1 0.045],...

'HorizontalAlignment','left');

hEd7=uicontrol(hF,'style','edit',...

'BackgroundColor',[1 1 1],...

'Units', ' normalized',...

'Position',[0.8 0.25 0.1 0.05],...

'HorizontalAlignment','left');

%---------------------------------------------%

%Кнопки%

hBut1=uicontrol(hF,'style','pushbutton',...

'Units', ' normalized',...

'Position',[0.2 0.1 0.2 0.05],...

'String','Clear',...

'Callback','MyCLEAR');

hBut2=uicontrol(hF,'style','pushbutton',...

'Units', ' normalized',...

'Position',[0.4 0.1 0.2 0.05],...

'String','Start',...

'Callback','MyGOa');

%----------------------------------------------%

%Статический текст подпись%

hTxt1=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.8 0.895 0.1 0.045],...

'String','x,м');

hTxt2=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.8 0.795 0.1 0.045],...

'String','y,м/с');

hTxt3=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.8 0.695 0.1 0.045],...

'String','z,м');

hTxt4=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.8 0.595 0.1 0.045],...

'String','h,м');

hTxt5=uicontrol(hF,'Style','text',...

'Units', ' normalized',...

'BackgroundColor',[0.8 0.8 0.8],...

'Position',[0.8 0.495 0.1 0.045],...

'String','Rв,м');

hTxt6=uicontrol(hF,'Style','text',...

'Units', ' normalized',...