Имитационное моделирование одноковшового экскаватора в среде Matlab

Системы автоматизированного проектирования

УДК 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

%выполнение

function editl_CreateFcn

На этом помощь GUIDE заканчивается и дальше нужно писать программу самостоятельно, вставляя свои функции вызова.

%function model_open(handles) % Открываем модель и считываем параметры

if isempty(find_system("Name",'eo3322')),

open_system

figure

% Put values from the GUI into the Block dialogs set_param

se t_param (" eo3322/Rukoj at",' Mass',... get(handles.MassRukVal,'String')) set_param("eo3322/Kovsh",'Mass',.,.

.Eii Properly Inspector

uicofifrgl

- Callback Clipping : CreateFcn DeleteFcn '- Enable ф\ Extent  FonWngle Í FontName ; FontSize ; FontUnits ; FonlWeight ф ForegroundColor

qqqfDlinKov5h_Callback',ocbo,C,ouidala

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

Рис. 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

StopVal = "0";

StopVal = str2num (StopVal);

set_param

Передача в Симулинк

sim("eo3322");

%— Передача параметра «1» в блок "Gain" для запуска симуляции

function Stop_Callback

StopVal = "1";

StopVal = str2num(StopVal);

set_param

% Передача в Симулинк

% Создание объекта после получения параметров, function Stop_CreateFcn

if ispc &&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');

end

%«Сохранить» — сохранение введенных параметров во внутренних переменных. Одновременно кнопка «Сохранить» вызывает функцию сохранения диаграммы модели eo3322.mdl и ее перерисовки (команды save_system и reloadsys("eo3322")), иначе анимация модели будет происходить со старыми параметрами.

%— Нажатие кнопки «Сохранить», function refresh_Callback

save_system reloadsys

%Передача параметра «Глубина копания» в элемент "Gain", в блоке "eo3322/GlubKopan"

function GlubKopan_Callback

GlubKopanVal = get(hObject,'String') % Ввод в строковое поле

GlubKopanVal = str2num(GlubKopanVal); set_param("eo3322/GlubKopan", 'Gain',num2str(GlubKopanVal)) % Передача в Симулинк

function GlubKopan_CreateFcn

if ispc && isequal (get (hObject,' BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,' BackgroundColor', 'white');

end

%Передача параметра «Масса Стрелы» в элемент "Mass", в блоке "eo3322/Strela"

function MassStrel_Callback

MassStrelVal = get(hObject,'String') % Вводв строковое поле

MassStrelVal = str2num(MassStrelVal); set_param("eo3322/Strela", 'Mass', num2str (MassStrelVal)) % Передача в Симулинк

function MassStrel_CreateFcn

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 Знаки доллара

Для изменения значения порта 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

"$" char (у) "$" char

"$" char(s) "$M char

"$" char(j) "$" char

"$" char(c) "$" char

"$" 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оабзуз

На рис. 5. представлена БтиНпк-модель программы. На рис. 6. представлен общий вид интерфейса программы. Интерфейс программы состоит из лиией-ки меню, окон, вызывающихся из «выпадающих» списков меню и свободно располагающихся на рабочем столе.

Библиографический список

1. А.Данилов. Компьютерный практикум по курсу «Теория управления».З^иПпк-моделиропаниевсреде МаНаЬ. МГУИО. 2002.

2. В.Потемкин. Вычисления в среде МАТЬАВ. Диалог-МИФИ. 2004.

3.В.Потемкин. МАТЬАВб; Среда проектирования инженерных приложений. Диалог-МИФИ. 2003.

4. И.Черных. БтиПпк; среда создания инженерных приложений. Диалог-МИФИ. 2003.

5. Д.Меэтьюз, К.Финк. Численные методы. Использование МАТЬАВ. Вильяме. 2001 (переводе английского Л.Ф. Казачен-ко, под редакцией д.ф.-м.н., проф. Ю.В. Коэаченко).

РУППЕЛЬ Алексей Александрович, кандидат технических наук, доцент, заведующий кафедрой «Автоматизация производственных процессов и электротехника».

ЩЕРБАКОВ Иван Сергеевич, аспирант.

Дата поступления статьи в редакцию: 30.06.2006 г. © РуппельА.А., Щербаков И.С.

Книжная полка

Павловская Т.Д. Паскаль. Программирование на языке высокого уровня: практикум: учебное пособие. - СПб.: Питер, 2006. - 316 с.

В книге рассматриваются базовые алгоритмы, методы и приемы написания программ, основные структуры данных, типичные ошибки, которые совершают начинающие (и не только) программисты, обсуждаются вопросы качества и стиля. Большое внимание уделяется процессу отладки и тестирования программ. Практикум является дополнением к учебнику Т. А. Павловской «Паскаль. Программирование на языке высокого уровня», но может быть использован в качестве независимого учебного пособия.

Допущено Министерством образования и науки Российской Федерации в качестве учебного пособия для студентов высших учебных заведении, обучающихся по направлению «Информатика и вычислительная техника».