Системы автоматизированного проектирования
УДК 681.3.06
А.Л. РУППЕЛЬ, И.С. ЩЕРБАКОВ
Сибирская автомобильно-дорожная академия
ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ ОДНОКОВШОВОГО ЭКСКАВАТОРА В СРЕДЕ MATLAB
Авторами разработана программа имитационного моделирования одноковшового экскаватора на пневмоходу. Программа позволяет задавать размеры, массу, моменты инерции твердых тел имитирующих рабочее оборудование и шасси, жесткости и вязкости соединений. Средства визуализации позволяют видеть работу модели в трехмерной сцене - «виртуальная реальность», или в виде диаграммы отображающей работу оборудования в виде перемещения жестких стержней. В статье рассматривается создание интерфейса программы и передача параметров в Simulink. В ходе разработки программы был найден способ передачи параметров в блок "Body", что позволяет менять параметры блока из интерфейса программы без открытия диалогового окна блока "Body".
Требования к программе
1. Развитый интерфейс пользователя GUI (Graphics User Interface) для ввода данных и структурирован по операциям.
2. Вводимые данные должны иметь реальные параметры разрабатываемой модели.
3. Средства управления рабочими органами в автоматическом и ручном режиме, возможность моделирования нагрузок на ковш в процессе копания.
4. Наличие средств визуализации и виртуальной реальности.
5. Контроль параметров с выводом в таблицы и графики.
Элементы интерфейса
1. Меню.
2. Окна с полями ввода геометрических, весовых, инерционных величин элементов конструкции.
3. Окна для просмотра реакций выбранных элементов на диаграммах и графиках,
4. Окна с элементами управления программой: Кнопки Пуск, Стоп, Сохранение введенных параметров и т.д.
stf E:WAVLAB701\single.fig [С" HP
| File Edit View Layout lools Help
□ Q L Ь «о ' - : $ gl , 1 I\M*i
® л
j Edit Text ... i.
jtDji I Т8Г
V
< >
Рис. 1. Вид окна визуального редактора с инструментами создания интерфейса программы
5. Окна просмотра в режиме «виртуальная реальность» и «диаграмма».
Создание интерфейса программы
Создание интерфейса программы производится с помощью программы GUIDE являющейся частью пакета Matlab.
Программа GUIDE работает с двумя файлами т-file и fig-file (назваными так по расширению ",ш и '.fig). В fig-file записываются данные создающегося интерфейса. Интерфейс создается в графическом окне перетаскиванием мышью; кнопок, полей, списков и т.д., из достаточно развитого набора инструментов (рис. 1) с последующим изменением размеров и центровкой (align). Свойства объектов записываются в fig-file — размеры, цвет, координаты расположения, тип объектов и т.д. (рис.2).
В m-file записываются вызовы функций. Каждый вызоп нового объекта (Callback) дописывается в конец файла, который можно затем редактировать, а также добавлять в этот файл свой код. M-file можно запускать на исполнение как любой другой m-file программы Matlab.
Обобщенная расчетная схема представлена на рис. 3.
В схеме рассматриваются следующие параметры:
1. Масса, тензор инерции (матрица), геометрические размеры платформы с шасси.
2. Тела Фохта в системе шасси (6 точек опоры) -18.
3. Коэффициенты вязкости и упругости (тела Фохта) в системе шасси — 36.
4. Количество точек опоры - 4(6). (При заданий нулевых значений в двух средних опорах, эти опоры можно считать отсутствующими и считать модель четырехопорной. В зависимости от значений вязкости и упругости в телах Фохта, шасси можно моделировать как пневматическое или на гусеничном ходу.
5. Масса, тензор инерции (матрица), геометрические размеры поворотной платформы.
6. Коэффициенты вязкости и упругости тел Фохта имитирующих работу гидроцилиндров управляющих поворотной колонкой — 2.
7. Масса, тензор инерции (матрица), геометрические размеры поворотной платформы и противовеса.
8. Масса, тензор инерции (матрица), геометрические размеры стрелы.
9. Коэффициенты вязкости и упругости тел Фох-та имитирующих работу гидроцилиндров управляющих подъемом/опусканием стрелы — 2.
10. Масса, тензор инерции (матрица), геометрические размеры рукояти.
11. Коэффициенты вязкости и упругости тел Фох-та имитирующих работу гидроцилиндров управляющих подъемом/опусканием рукояти - 2.
12. Масса, тензор инерции (матрица), геометрические размеры ковша.
13. Коэффициенты вязкости и упругости тел Фох-та имитирующих работу гидроцилиндров управляющих углом наклона ковша — 2.
14. Величина глубины земляных работ -1.
15. Угол наклона ковша (во время работы угол наклона ковша остается постоянным) — 1.
M-file формируется после описания объекта в "Property Inspector" (рис. 2). Рассмотрим на примере одного объекта — текстового поля ввода (рис.1). Программу назовем ео3322. %секция инициализации function varargout = eo3322(varargin) gui_Singleton = 1;
gui_State = struct('gui_Name', rnfilename, ... 'gui_Singleton\ gui_Singleton, ... 'gui_OpeningFcn', @eo3322_OpeningFcn, ... 'gui_OutputFcn', @eo3322_OutpulFcn,... 'gui_LayoutFcn', [] , ... 'gui_Callback\ []); if nargin && ischar(varargin{ 1}) gui_State.gui_Callback = str2func(varargin{l}); end
if nargout
[varargout{l:nargout}] = gui_mainfcn(gui_State, varargin{:}); else
gui_mainfcn (gui_Stale, varargin {:}) ; end
%конец секции инициализации. %Далыие можно вставлять свой кол или изменять сгенерированный программой. %вызов объекта
function editl_Callback(hObject. eventdata, handles)
%выполнение
function editl_CreateFcn(hObject, eventdata, handles)
На этом помощь GUIDE заканчивается и дальше нужно писать программу самостоятельно, вставляя свои функции вызова.
%function model_open(handles) % Открываем модель и считываем параметры
if isempty(find_system("Name",'eo3322')),
open_system("eo3322")
figure(handles.controller)
% Put values from the GUI into the Block dialogs set_param("eo3322/Angle_kovsh",'Gain',... get(handles.CurentVal,'String')) set_param("eo3322/GIubKopan",'Gain',... get(handles.GlubKopan Val,'String')) set_param("eo3322/Strela",'Mass',... get(handles.MassStre)Val,'String'))
se t_param (" eo3322/Rukoj at",' Mass',... get(handles.MassRukVal,'String')) set_param("eo3322/Kovsh",'Mass',.,.
.Eii Properly Inspector
uicofifrgl (DlinKowh "1 25")
- Callback Clipping : CreateFcn DeleteFcn '-■ Enable ф\ Extent ■ FonWngle Í FontName ; FontSize ; FontUnits ; FonlWeight ф ForegroundColor
qqqfDlinKov5h_Callback',ocbo,C,ouidala(gcbo))
a on
qqqCDIinKovsh^reateFcn'.gcijo.O.guidalatQcbo))
HandleVislbltlty [▼) on
-HltTest Hon
HonzQiilalAllgnmeni Reenter
- Intemi plibie В °n
UstboxTop 1.0
Max 1.0
--Min O.u
) Posilion 128,429 6,5 5 1,2]
-i SelectiohHIghllghi: 0°n
i- SüderStep Ю.010.1)
String OF) 1.25
style @aait
Тзд DilnKovsh
TooltfpStrlng
UIConlextMeriu 0«None>
Рис. 2. Вид описания свойств объекта в Инспекторе свойств с дальнейшим сохранением в Пд-Ше
Рис. 3. Обобщена» расчетная схема модели
iij Block Parameter;: Body
R#pr#Mrift a oeerdrtied rtpia botyflody defined ьуттп, tnorva Ismo? I. ano coortfrnvte and xiesta renter cíijíiw<iy(CO)and<^n«wi;o*c</l»rfReüvtctfwrtmaJft vétame.TMntiiaiog«емBody idiÍJal cweiMo iftd onenülicn, eodrandfCf connected Joints equated separaWr
Mass priip«rtt*s
Уз • ;k» fl 'л око is оно w oí ¡ у.
* with retpíft ro fce CG (Ceffl* оГОгаиМ E«tr coerdi-wJe
BJíív-coe'-íii'b'v irfifori', \ Pesftoi» i Oiwr-iawn
a
bhíw
pCfl 7'ori s'd« Nam?-
Ongift роыйся
ve:ioi[ny3
Tiansöledifom С arpónenla in offjkc. (í me 9 Ы
la.
¡i.« ■■»jco Ml 0 0| IT. s. twoPLt V ftOF.LD
1 LO»! iscíi n V CS
|S;OM - its; iraoucj CO
I № |[ Csn-.el |¡" Help ||~«rott I
Рис. 4. Диалоговое окно ввода параметров блока свойств твердого тела
[к at px >iMr> Г&тя t«« М>
□ tf ев i .. f a.: » >5" ■^M'-j.aw
Рис. 5. Общий вид модели в Simullnk
get(handles.MassKovshVal, 'String')) set_param("eo3322/Stop", 'Gain',... get(handles.StopVal, 'String')) set_param ("eo3322/Strela",' WorkingFrames',... get (handles. DlinSt.relVal,'String')) set_param ("eo3322/Rukoj at", 'WorkingFrames',... get(handle.s.DlmRukojatVal, 'String')) set_param( "eo3322/Kovsh",' WorkingFrames1,... get(handles.DlinKovshVal,'Slring')) end
%«Пуск» и «Стоп» — запуск и остановка работы программы.
%— Передача параметра «О» в блок "Gain" для остановки симуляции
function pushbutton l_Callback(hObject, eventdata, handles)
StopVal = "0";
StopVal = str2num (StopVal);
set_param("eo3322/Stop",'Gain',num2str(StopVal))
Передача в Симулинк
sim("eo3322");
%— Передача параметра «1» в блок "Gain" для запуска симуляции
function Stop_Callback(hObject, eventdata, handles)
StopVal = "1";
StopVal = str2num(StopVal);
set_param("eo3322/Stop",'Gain',num2str(StopVal))
% Передача в Симулинк
% Создание объекта после получения параметров, function Stop_CreateFcn(hObject, eventdata, handles)
if ispc &&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
%«Сохранить» — сохранение введенных параметров во внутренних переменных. Одновременно кнопка «Сохранить» вызывает функцию сохранения диаграммы модели eo3322.mdl и ее перерисовки (команды save_system и reloadsys("eo3322")), иначе анимация модели будет происходить со старыми параметрами.
%— Нажатие кнопки «Сохранить», function refresh_Callback(hObject, eventdata, handles)
save_system reloadsys (" eo3322")
%Передача параметра «Глубина копания» в элемент "Gain", в блоке "eo3322/GlubKopan"
function GlubKopan_Callback(hObject, eventdata, handles)
GlubKopanVal = get(hObject,'String') % Ввод в строковое поле
GlubKopanVal = str2num(GlubKopanVal); set_param("eo3322/GlubKopan", 'Gain',num2str(GlubKopanVal)) % Передача в Симулинк
function GlubKopan_CreateFcn (hObject, eventdata, handles)
if ispc && isequal (get (hObject,' BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,' BackgroundColor', 'white');
end
%Передача параметра «Масса Стрелы» в элемент "Mass", в блоке "eo3322/Strela"
function MassStrel_Callback(hObject, eventdata, handles)
MassStrelVal = get(hObject,'String') % Вводв строковое поле
MassStrelVal = str2num(MassStrelVal); set_param("eo3322/Strela", 'Mass', num2str (MassStrelVal)) % Передача в Симулинк
function MassStrel_CreateFcn (hObject, eventdata, handles)
if ispc && isequal (get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set (hObject,'BackgroundColor','white'); end
%Функции получения параметров длины Рукояти и Ковша аналогичны и в целях экономии места пропущены.
Изменение геометрических размеров и координаты центра массы элемента "Body" производится через изменение координат CS1.CS2 и CG, но получить и передать значения этих координат как это производилось в предыдущем блоке изменения массы стрелы не получится. Например: set_param("eo3322/Body",'CG','35') Система обновлений параметров в блоке диалога не производит, и сообщений об ошибке не выдает,
Для этого был найден «обходной» вариант. Просматривая структуру блока:
> > get_param ("eo3322/Body",' DialogParame ters') ans =
ClassName: [lxl struct] DialogClass: [lxl struct] Mass: [lxl struct] MassUnits: [lxl struct] InertiaUnits: [lxl struct] Inertia: [lxl struct] Shape: [lxl struct] ShapeDims: (lxl struct] ShapeUnits: [lxl struct] ShapeUse: [lxl struct] Density: [lxl struct] DensityUnits: [lxl struct] DensityUse: [lxl struct] CG: [lxl struct] WorkingFrames: [lxl struct] CSlPos: [lxl struct] CSlRot: [lxl struct] CS2Pos: [lxl struct] CS2Rot: [lxl struct] CGPos: [lxl struct] CGRot: [lxl struct]
была замечена переменная 'WorkingFrames', опросив ее:
аа = get_param("eo3322/Body",'WorkingFrames') была получена следующая структура: аа =
Left$CS1$[0 0 0]$CG$CG$m$[0 0 0)$Euler
X-Y-Z$deg$INERTIAL$true#Right$CS2$[0 О
0|$CG$CG$m$[0 О Oj$EuIer X-Y-Z$deg$INERTIAL$true Знаки доллара ($) в строке - делимитеры помогающие при разборе строки отделять одну переменную от другой. (Видимо, фирмой MathWorks это было сделано не случайно, интерфейс к блоку существует, но в документации, по каким-то причинам, упоминания об этом нет.)
Для изменения значения порта Right ( CS2 ), (изменяем размера тела по оси X) последовательно выполняем:
получаем структуру:
а = get_param("eo3322/Body", "WorkingFrames") [qwertyuiopsdfghjklzxcvbnmqq ww ее гг tt уу) = strread(a,'%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s
%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s','delimiter'l'$')
присваиваем одной из переменных значение 60: DlinBodyVal = 60
размещаем переменную в первой позиции трехмерного массива (соответствующей координате 60 на осиХ):
f = ["[" char(DliriBodyVal)......0........0" "1"]
формируем структуру аа с переменной f: аа= [char(q) "$" char(w) "$" char(e) "$" char(r) "$ char(t)
"$" char (у) "$" char(u) "$" char(i) "$" char(o) "$ char(p)
"$" char(s) "$M char(d) "$" char(f) "$" char(g) "$ char(h)
"$" char(j) "$" char(k) "$" char(l) "$" char(z) "$ char(x)
"$" char(c) "$" char(v) "$" char(b) "$" char(n) "$ char(m)
"$" char(qq) "$" char(ww) "$" char(ee) "$" char(rr) "$" char(tt) "$" char(yy)] запускаем на выполнение: set_param("eo3322/Body", "WorkingFrames", аа) и получаем ответ:
ааа = get_param("eo3322/Body", "Working-Frames") ааа =
Left.$CSl$[0 0 0]$CG$CG$m$[0 0 0]$Euler X-Y-Z$deg$INERTIAL$true#Right$CS2$[60 0 0]$CG$CG$m$[0 0 0]$Euler
X-Y-Z$deg$INERTlAL$true$$$$$$$$$$ массив CS2 [60 0 0] в первой позиции содержит новое значение переменной DlinBodyVal ( 60 ). Открыв окно параметров блока «Body« (рис.2) видим то же самое значение.
е г __________яшяш
Гкжпмюд Пуо; Игру»*» Параметр Рггуъгагы 6ф> Pitt/fcnxri. ГЫшь • :
АОЛЖЭ fVyiltCfM) Стрелэ Гуко<пъ К ген
а
(во?» оо. о . а; о. о о зато)
ЦГК1|) фЦЮд^н
i Ю00( m X^iarrrpiirtmy опф^аыг SlPUIHloe
Опора <ч1
Ho^ttiUiiiti . [..' li. I ib l 0]
10CUX) SfflOtT
Опер» hj2 H'e-iOS •■ 01
.....yJXK-i........
5ШКЁ......
Or»e< 43
Oncflrtll
.......iaxro"
vj-pixnTk rtgr.»
Рис. 6. Пример интерфейса ввода параметров моделируемой машины
В поле СЙ2$[60 0 0] появилось значение 60, что и требовалось (рис.4).
Теперь необходимо сохранить параметры;
5ауе_зуя1ет
и перегрузить модель:
ге1оабзуз("ео3322")
На рис. 5. представлена БтиНпк-модель программы. На рис. 6. представлен общий вид интерфейса программы. Интерфейс программы состоит из лиией-ки меню, окон, вызывающихся из «выпадающих» списков меню и свободно располагающихся на рабочем столе.
Библиографический список
1. А.Данилов. Компьютерный практикум по курсу «Теория управления».З^иПпк-моделиропаниевсреде МаНаЬ. МГУИО. 2002.
2. В.Потемкин. Вычисления в среде МАТЬАВ. Диалог-МИФИ. 2004.
3.В.Потемкин. МАТЬАВб; Среда проектирования инженерных приложений. Диалог-МИФИ. 2003.
4. И.Черных. БтиПпк; среда создания инженерных приложений. Диалог-МИФИ. 2003.
5. Д.Меэтьюз, К.Финк. Численные методы. Использование МАТЬАВ. Вильяме. 2001 (переводе английского Л.Ф. Казачен-ко, под редакцией д.ф.-м.н., проф. Ю.В. Коэаченко).
РУППЕЛЬ Алексей Александрович, кандидат технических наук, доцент, заведующий кафедрой «Автоматизация производственных процессов и электротехника».
ЩЕРБАКОВ Иван Сергеевич, аспирант.
Дата поступления статьи в редакцию: 30.06.2006 г. © РуппельА.А., Щербаков И.С.
Книжная полка
Павловская Т.Д. Паскаль. Программирование на языке высокого уровня: практикум: учебное пособие. - СПб.: Питер, 2006. - 316 с.
В книге рассматриваются базовые алгоритмы, методы и приемы написания программ, основные структуры данных, типичные ошибки, которые совершают начинающие (и не только) программисты, обсуждаются вопросы качества и стиля. Большое внимание уделяется процессу отладки и тестирования программ. Практикум является дополнением к учебнику Т. А. Павловской «Паскаль. Программирование на языке высокого уровня», но может быть использован в качестве независимого учебного пособия.
Допущено Министерством образования и науки Российской Федерации в качестве учебного пособия для студентов высших учебных заведении, обучающихся по направлению «Информатика и вычислительная техника».