Monday, June 13, 2011

ARSA-класс. R-12. Введение в работу с API

Здравствуйте. Это курс по программе Autodesk RSA, она же "Робот", раздел R-12: "По ту сторону интерфейса". Больше о программе курса можно почитать в силлабусе.

Для этого занятия вам понадобится: установленный Robot Structural Analysis 2010 (ссылка на дистрибутив), некоторое знание этой программы, минимальный опыт программирования, SDK из дистрибутива RSA 2010 (ссылка) и файл примера, который мы будем разбирать (ссылка).

API, или " программный интерфейс" - это инструмент автоматизации работы с программами. Это - набор функций, через которые программа может управляться написанной специально для этого другой программой. Наличие API - несомненное преимущество любого инженерного инструмента, потому что мы вкладываем в наш инструмент душу и труд, и, получив некий опыт и навыки, хотим, чтобы программа выполняла рутинные действия автоматически и экономила нам время для чего-то более интересного.

Для начала нам нужно выбрать инструменты и запастись справочной литературой. Часть нужной нам литературы и примеров идёт в комплекте к дистрибутиву RSA 2010. Их можно взять или из ссылки на архив в начале поста, или из дистрибутива Робота (когда вы распакуете файл установки Robot 2010, в директории дистрибутива будет папка /SDK).

capture_06132011_013442.png

В папке есть почти всё необходимое: справка по API на английском в формате HTML и PDF, а также примеры работы с API в формате XLS.

На текущем этапе всё, что нам нужно знать для работы с API - это названия свойств, методов объектов и прочей кухни, через которую можно брать информацию о расчетной модели из программы или, наоборот, давать программе информацию и заставлять её выполнять действия. Совокупность этих свойств и методов называется "объектной моделью", Robot Object Model, или попросту RobotOM. Указанные выше справочные файлы как раз в основном описывают, какие объекты есть в объектной модели и как ими пользоваться.

Теперь перейдем к инструменту, с помощью которого мы будем программировать RSA. Поскольку мы будем использовать язык VBA, подойдёт тот инструмент, который у вас уже наверняка есть - встроенный в Excel редактор Visual Basic. Распакуйте архив с уроком, откройте файл примера XLS в своём Экселе и перейдите в редактор нажатием <Alt+F11>.

Среда для экспериментов над API Робота у нас есть. Проверим, имеем ли мы доступ к объектной модели. Щёлкнем меню "Tools->References..." и проверим, подключена ли ссылка на Robot Object Model:

capture_06132011_231943.png

Если не подключена, щёлкните "Browse..." и укажите файл robotom.tlb, который расположен в месте, куда вы установили RSA 2010, это где-то в районе "C:\Program Files (x86)\Autodesk\Autodesk Robot Structural Analysis 2010\SYSTEM\EXE\". Всё, теперь мы имеем доступ к объектной модели Робота.

Вернёмся в наш редактор и откроем Module1 (посмотрите в левой колонке на скриншоте). Перед вами откроется подпрограмма R1201_TestTimeHistory, которая делает то же, что делает кнопка преобразования акселерограммы в спектр при определении спектрального анализа в Роботе. Вот такая кнопка:

Для тех, кто ещё не работал со спектральным анализом в Роботе, просто поясню, что с помощью этой функции можно открыть запись акселерограммы и преобразовать её в спектр ответа, для которого можно затем провести спектральный анализ. Это довольно продвинутая функция. Давайте посмотрим, как замечательно справляется с этой задачей наша тестовая подпрограмма. Проанализируем её построчно.

Поставьте курсор внутрь подпрограммы и нажмите F8, начнется пошаговая отладка программы. Желтым подсвечивается инструкция, которую VBA собирается выполнить. Нажимайте F8 всякий раз, чтобы перейти к следующей инструкции. Пройдите всю программу и следите за комментариями.



'Объявляем переменную, содержащую объектную модель Робота
'Объявление нужно для того, чтобы были видны компоненты модели по Ctrl+Пробел
Dim Robot As New RobotApplication

'Начало пробной подпрограммы
Sub R1201_TestTimeHistory()

' Установить связь с Роботом
Set Robot = CreateObject("Robot.Application")
' Создать новый пустой проект, если он ещё не открыт
If Not Robot.Project.IsActive Or Robot.Project.Type <> I_PT_FRAME_3D Then
Robot.Project.New I_PT_FRAME_3D
End If

Как вы могли заметить, программа задумалась на этих инструкциях из-за того, что загружался Робот (если он ещё не запущен).

'Сделать Робот видимым, просто так
Robot.Visible = True



'Объявления переменных для удобства работы
'Спектр ответа
Dim RSpectrum As RobotSpectralAnalysisSpectrum
'Набор точек акселерограммы
Dim THCollection As IRobotTimeHistoryPointsCollection
'Нагружение
Dim LoadCase As RobotSimpleCase
'Набор точек, описывающий график спектра ответа
Dim PointCollection As RobotSpectralAnalysisPointsCollection




Вот здесь начинается собственно работа.

'Загружаем в список функций акселерограммы из файла AAM.thf
Robot.Project.Structure.Cases.TimeHistoryFunctions.AddFromFile ActiveWorkbook.Path & "\AAM.thf"
'Забираем в переменную THCollection одну из функций
Set THCollection = Robot.Project.Structure.Cases.TimeHistoryFunctions.Get(1)


Эти инструкции считали из файла AAM.thf все акселерограммы и первую из них отправили в THCollection

'Задаем переменную спектра
Set RSpectrum = Robot.CmpntFactory.Create(I_CT_SPECTRAL_ANALYSIS_SPECTRUM)
'Эта функция преобразует акселерограмму в спектр
'Диапазон от 0.02с до 2с, в графике спектра будет 10 точек, демпфирование 5%
RSpectrum.AddFromTimeHistory PointCollection, 0.02, 2, 10, 0.05

В этом месте мы ознакомимся, как редактор помогает нам освоиться в объектной модели Робота.
После объявления переменной начните новую
строку и напишите буквы TH, после этого нажмите <Ctrl+Пробел>:

Теперь нажмите точку, чтобы дописать название переменной - и автозаполнение покажет,
какие команды доступны для переменной THCollection. Очень удобно.

'Сохраним в файл по месту

RSpectrum.SaveToFile ActiveWorkbook.Path & "\AAM.SPE"

'Отпускаем Робот
Set Robot = Nothing
End Sub

Теперь в файле AAM.spe содержится спектр, сгенерированный RSA в процессе выполнения нашей подпрограммы. Как видим, ничего принципиально сложного в работе с API нет.

Итак, в этом занятии мы получили первое представление о том, как выглядит работа с API RSA. В следующих занятиях модуля R-12 "По ту сторону интерфейса" мы разберёмся, какие навыки позволяют эффективно программировать RSA через его API и увидим, как много полезного даст нам это крутое умение.

Задача по материалам класса: модифицировать программу так, чтобы для преобразования использовался не первый график из AAM.thf, а отдельно записанная единичная акселерограмма AAM.ths (есть в материалах).

***

Всегда рад комментариям и критике. Моя цель - понять, как в курсе передать максимум знания и отнять меньше всего времени. Может, слишком много воды или наоборот, всё сжато и ни черта не понятно? Есть ошибки в материале или, может, вы знаете, как сделать лучше? Если у вас что-то не клеится, спрашивайте.



No comments: