Интерфейс COM в VBA | 3. Создание инструмента

Техническая статья

Эта статья была переведена Google Translator Посмотреть исходный текст

Часть 2.2 серии статей об интерфейсе COM, описывающая создание и изменение узловых опор, нагрузок, загружений, сочетаний нагрузок и расчетных сочетаний на примере стержня. В данной части объясняется создание отдельных инструментов.

Pисунок 01 - Индивидуально созданный инструмент EXCEL в программе RFEM

Основа

Мы хотим создать инструмент, который создает нелинейные узловые опоры на выбранном в программе узле. Для этого необходимы следующие основные элементы:

  • Получение выбранных в данный момент узлов
  • Создание несущих опор
  • Создание и назначение нелинейностей
  • Создание инструментов в программе

Далее будут обработаны данные точки. Для этого необходимы знания из предыдущих статей, которые мы еще не обсудим. Тем не менее, уже доступные элементы в доступном исходном коде, такие как получение структуры в комментариях, почти документированы.

Получение выбранных в данный момент узлов

Редактирование выбранных элементов с помощью интерфейса COM выполняется с помощью уже знакомых функций, таких как IModelData.GetNodes для узлов. Чтобы только вернуть выбранные элементы, вам необходимо переключиться на редактирование текущего выбора с помощью функции IModelData.EnableSelections. Если для параметра EnableSelections установлено значение True, IModelData.GetNodes возвращает только выбранные элементы. Вот конкретный пример:

'Выбрано выбранных узлов'
iModDat.EnableSelections True 'Выполнять только работу с выбранными объектами
Дим Узлы () как RFEM5.Node
nodes = iModDat.GetNodes
iModDat.EnableSelections Неверно 'снова работать со всеми объектами

После выбора выбранных узлов снова появляется опция EnableSelections, которая может стать часто источником ошибок. Поскольку узловая опора требует список узлов в качестве строки, она создается следующим образом:

'Создание списка узлов
Дим nodeList как Строка
ДимкакДлинные
Для i = 0 КUBound (узлы, 1)
nodeList = nodeList & node (i) .No & ","
Далее i

Создание несущих опор

Нелинейность, в данном случае диаграмма, является отдельным элементом. Ее можно назначить узловой опоре, только если она уже имеется в конструкции. Нужно создать узловую опору в соответствии с известными принципами предыдущих вкладов:

'Создание несущих опор
Дим nodSup как RFEM5.NodalSupport
nodSup.No = 100
nodSup.IsColumn = Неверно
nodSup.IsValid = True
nodSup.nodeList = nodeList
nodSup.ReferenceSystem = GlobalSystemType

nodSup.RestraintConstantX = 0,01
nodSup.RestraintConstantY = 0.01
nodSup.RestraintConstantZ = 0.01

nodSup.SupportConstantX = -1
nodSup.SupportConstantY = -1
nodSup.SupportConstantZ = -1

'Определить нелинейность'
nodSup.SupportNonlinearityZ = Рабочий типграммы

iModDat.PrepareModification
iModDat.SetNodalSupport nodSup
iModDat.FinishModification

Как можно видеть в коде, тип WorkingDiagramType обозначается как нелинейность в глобальном z-направлении.

Создание и назначение нелинейных опор

Теперь, когда узловая опора подготовлена для нелинейности WorkDiagramType, она должна быть создана:

'Создание нелинейности'
Дим nldgrm как RFEM5.NellinearityDiagram

nldgrm.ForceType = StiffnessDiagramForceType.NoneStiffnessForce
nldgrm.PositiveZoneType = DiagramAfterLastStepType.StopDiagramType
nldgrm.Symmetric = True

'Диаграмма создания
ReDim nldgrm.PositiveZone (3, 1)
nldgrm.PositiveZone (0, 0) = 0 #
nldgrm.PositiveZone (0, 1) = 0 #

nldgrm.PositiveZone (1, 0) = 0,01
nldgrm.PositiveZone (1, 1) = 100

nldgrm.PositiveZone (2, 0) = 0,03
nldgrm.PositiveZone (2, 1) = 200

nldgrm.PositiveZone (3, 0) = 0,05
nldgrm.PositiveZone (3, 1) = 300

Диаграмма состоит из двухмерного поля. Первое измерение соответствует записи данных, а второе - элементам данного набора данных. Здесь первым элементом в наборе данных является смещение в m, а вторым - сила в N. Таким образом, в приведенном выше примере создаются четыре набора данных, где третья точка диаграммы равна 30 мм и 0,2 кН. Теперь данная нелинейность должна быть придана доступной опоре. Для этого, мы подключаем интерфейс к узловой опоре, а затем к нелинейности:

'Применить нелинейность'
Дим iNodSup как RFEM5.INodalSupport
Набор iNodSup = iModDat.GetNodalSupport (100, ItemAt.AtNo)
Дим iNldiag как RFEM5.INonlinearityDiagram
Набор iNldiag = iNodSup.GetНовости стержня (AlongAxisZ)

iModDat.PrepareModification
iNldiag.SetData nldgrm
iModDat.FinishModification

Нелинейность лежит вдоль оси Z, поэтому ее необходимо выбрать при вызове LengthAxisZ. Они назначены в известном блоке модификаций.

Создание инструментов в программе

В программе RFEM можно интегрировать внешние программы. Для этого, вам нужно изменить RFEM.ini в пути к программе. В отличие от программирования на C # и VB, где создается исполняемый файл, Excel требуется использовать для выполнения данного инструмента в VBA. Excel может быть назначен открытый файл с помощью аргумента при запуске. Это будет выглядеть следующим образом в командной строке, где файл Excel хранится в C: \ temp, а Excel устанавливается как 32-битная версия:
«C: \ Program Files (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE» C: \ temp \ table1.xlsm

После этого открывается Excel с нужным файлом. Поскольку без дополнительных аргументов можно открыть только внешнюю программу программы RFEM (например, имя файла EXCEL.EXE), необходимо создать пакетный файл Windows. Этот простой текстовый файл с расширением «.bat» похож на Windows охватывает исполняемый файл EXE. Чтобы создать файл TXT, необходимо, например, создать файл TXT, который получит новое расширение файла «.bat» после его создания. Этот командный файл (в дальнейшем EXCEL-Werzeug.bat) должен иметь следующую запись:
«C: \ Program Files (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE» C: \ temp \ table1.xlsm
Это соответствует данной команде, так как она будет введена в командной строке.

После создания исполняемого файла, можно ввести его в файл RFEM.ini в качестве внешнего инструмента. RFEM.ini находится по пути программы RFEM (стандарт для RFEM 5.07 64-бит: C: \ Program Files \ Dlubal \ RFEM 5.07). Нужно добавить следующие записи:

ModuleName2 = инструмент EXCEL
ModuleExeName2 = "c: \ temp \ EXCEL-Werkzeug.bat"
ModuleDescription2 = Нелинейный конец конца стержня

Конечно же, для сохранения командного файла EXCEL-Werkzeug.bat и макроса table1.xlsmauch требуется C:/temp/.

Чтобы макрос был также выполнен автоматически, вам нужно запустить данную подпрограмму в автоматической при ее открытии Excel. Данная подпрограмма называется Workbook_Open и должна быть сохранена в книге.

Pисунок 02 - Подпрограмма Workbook_Open в учебнике

Теперь отсутствует, что Excel будет закрыт после успешного выполнения. Если возникает ошибка или программа RFEM не открывается, макрос можно редактировать Для этого будет построено различие в данных случаях. Весь шаблон выглядит следующим образом:

Частный SubWorkbook_Open ()

Запуск программы обычной программы RFEM
Ошибка при сбое

Передача интерфейса к RFEM
Дим iApp какRFEM5.Приложение
Набор iApp = GetObject (, RFEM5.Application)

e: 'При возникновении ошибки отображается RFEM, не открытая
Если Err.Number <> 0 Тогда
MsgBox RFEM не открывается, Err.Source
   Выход Sub
Конец Если

Процедура обработки ошибок
Ошибка при сбое f

Блокировка лицензии COM и доступа к программе
iApp.LockLicense

'Получить интерфейс для активной модели
Дим iModel как RFEM5.model
Если iApp.GetModelCount> 0 Тогда
Установка iModel = iApp.GetActiveModel
Else
'Ошибки при наличии доступных моделей
Err.Raise vbObjectError, «LoadModel (), iApp.GetModelCount <1 "
End If

'Место для собственного исходного кода

: Перехватывать ошибки из исходного кода
Если Err.Number <> 0 Then
MsgBox Err.Description ,, Err.Source
Выпущена лицензия COM, возможен снова доступ к программе
iModel.GetApplication.UnlockLicense
Инструмент должен держать Excel открытым при возникновении ошибки
   Выход из базы данных Sub
End If

Выпущена лицензия COM, возможен снова доступ к программе
iModel.GetApplication.UnlockLicense
Инструмент должен закрыть Excel, когда приложение будет успешным
ПрименениеЛюк

End Sub

Теперь все, что отсутствует, это ссылка на ранее созданную подпрограмму, которую вы можете найти в разделе «Место для собственного исходного кода». Полный исходный код доступен по следующей ссылке.

Резюме

Создание нелинейной узловой опоры является дополнением к предыдущим вкладам, тогда как создание внешнего модуля - это новая территория. Встраивание менее проблематично при использовании исполняемых файлов, таких как созданные, как правило, с помощью Visual Studio и VB или C #. По этой причине здесь описана более сложная процедура с Excel.

Загрузки

Ссылки

Контакты

Свяжитесь с Dlubal

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

+49 9673 9203 0

info@dlubal.com

RFEM Основная программа
RFEM 5.xx

Основная программа

Программное обеспечение для расчета конструкций методом конечных элементов (МКЭ) плоских и пространственных конструктивных систем, состоящих из плит, стен, оболочек, стержней (балок), тел и контактных элементов

Цена первой лицензии
3 540,00 USD
RFEM Прочие
RF-COM 5.xx

Дополнительный модуль

Программируемый интерфейс (API), основанный на технологии COM

Цена первой лицензии
580,00 USD