Одним з основних ресурсів в сучасному проектуванні є час. Як відомо, "час - гроші" і нікому не хочеться виконувати безглузді повтори одних і тих же операцій. У зв'язку з цим CAD / CAE пакети мають певний набір інструментів для виконання одних і тих же дій натисненням всього лише однієї кнопки.
У даній статті буде розглянуто один із способів автоматизації проектування на основі макросу в Femap API.
Малюнок 1 - Діалогове вікно програми
В ході виконання курсової роботи пов'язаної з дослідженням впливу корозійних процесів на несучу здатність конструкцій, було зміна товщини поверхонь. Дана процедура проводилася не один десяток разів і в зв'язку з тим що властивостей було досить багато, то дана операція займала багато часу і була досить нудною. Тому було прийнято рішення автоматизувати даний процес за допомогою Femap API. Таким чином був спочатку створений узагальнений варіант макросу зі зміни товщини.
Суть макросу полягає в тому, щоб автоматично змінювати значення товщини поверхневих елементів на відсоток або конкретне значення задане користувачем.
При запуску макросу перед користувачем з'явиться діалогове вікно (рис. 1) в якому потрібно буде вибрати дію (збільшення або зменшення) і вибрати ступінь зміни товщини (процентне або чисельне зміна), а потім ввести число на яке потрібно змінити товщину.
Тепер більш детально розглянемо всі елементи програми і алгоритм дій.
Так як створення будь-якої програми починається з блок-схеми (я так ніколи не роблю), ми так само розпишемо порядок наших дій (рис. 2).
Малюнок 2 - Блок-схема програми
Після складання алгоритму програми сміливо можна приступати до її створення. В даному випадку ми будемо працювати з об'єктом "Property" і для початку власне його ми і створимо. Далі ми створимо "Set" - це вибірка, яка представляє собою масив. У нього ми будемо додавати наявні в моделі властивості і всі параметри які вони мають (в тому числі і товщину елемента, яка має своє позначення у властивості - pval (0)). Наступним кроком буде створення діалогового вікна і створення необхідних нам елементів (рис. 3).
Малюнок 3 - Створення діалогового вікна
Потім перебираючи масив ми витягуємо з властивості товщини, проводимо перерахунок з урахуванням обраних параметрів зміни і повертаємо товщину назад. Далі буде показаний код програми з поясненнями. Кольори виділення будуть відповідати кольорам блок-схеми для зіставлення шматків програми і алгоритму.
If App.Info_Count (FT_PROP) = 0 Then // виняток помилки відсутності властивостей
Msg = "No Properties In Model, Exiting."
rc = MsgBox (Msg, vbOkOnly)
GoTo OK
End If
Begin Dialog UserDialog 400,203, "Thickness" '% GRID: 10,7,1,1 // діалогове вікно
OKButton 20,175,90,21
TextBox 130,119,130,21, .TextBox1
OptionGroup .Group1
OptionButton 20,49,210,14, "increase in the thickness",. OptionButton1
OptionButton 20,70,180,14, "decrease in the thickness",. OptionButton2
OptionGroup .Group2
OptionButton 250,49,90,14, "Persent",. OptionButton3
OptionButton 250,70,90,14, "Value",. OptionButton4
CancelButton 310,175,80,21
text 110,98,210,14, "Value change in thickness",. Text1
End Dialog
Dim dlg As UserDialog
If Dialog (dlg) = 0 Then // виняток помилки закриття програми кнопкою скасування
GoTo OK
End If
If Thick <= 0 Then //исключение ошибки значения толщины
Msg = "Thickness Field is Blank"
rc = MsgBox (Msg, vbOkOnly)
GoTo OK
End If
PropSet.AddAll (FT_PROP) // додавання до вибірки всіх властивостей моделі
If dlg. group1 = 0 Then
If dlg.group2 = 0 Then
While feProp.Next // цикл перерахунку товщини
feProp.Get (PropSet.CurrentID) // виймаємо поточний властивість з вибірки
a = feProp.pval (0) * Thick / 100 // перерахунок коефіцієнта зміни
feProp.pval (0) = feProp.pval (0) + a // перерахунок товщини
feProp.Put (feProp.ID) // повертаємо значення товщини в властивість
Wend
End If
If dlg.group2 = 1 Then
While feProp.Next
feProp.Get (PropSet.CurrentID)
feProp.pval (0) = feProp.pval (0) + Thick
feProp.Put (feProp.ID)
Wend
End If
End If
If dlg.group1 = 1 Then
If dlg.group2 = 0 Then
While feProp.Next
feProp.Get (PropSet.CurrentID)
a = feProp.pval (0) * Thick / 100
feProp.pval (0) = feProp.pval (0) - a
feProp.Put (feProp.ID)
Wend
End If
If dlg.group2 = 1 Then
While feProp.Next
feProp.Get (PropSet.CurrentID)
feProp.pval (0) = feProp.pval (0) - Thick
feProp.Put (feProp.ID)
Wend
End If
End If
OK:
End Sub
Далі даний макрос був підігнаний під модель рами тепловоза і проведено оновлення. Основними змінами стали можливість коригування значень конкретних товщини, все товщини були розбиті по основних елементів конструкції і розкидані по різним формам, а так само додана можливість повторного використання макросу без його перезапуску. Приклад форми зміненого макросу зображена на малюнку 4.
Малюнок 4 - Приклад форми зміненого макросу
Таким чином ми виконали основне властивість автоматизації - заощадити час проектування і змінити всі властивості моделі декількома кліками миші.