Interface COM no VBA | 2.2 Criar barra

Artigo técnico

Este artigo foi traduzido pelo Google Tradutor Ver texto original

A parte 2.1 da série de artigos sobre a interface COM descreveu a criação e modificação de elementos num exemplo de uma barra Na terceira parte, esses elementos principais são utilizados novamente para criar apoios nodais, cargas, combinações de carga e combinações de resultados. Assim, o modelo criado na segunda parte será ampliado. Portanto, os elementos explicados na Parte 1 e Parte 2.1 não são descritos novamente.

Figura 01 - System

Obter interface do modelo aberto

Ao contrário dos dois últimos artigos, um modelo existente já aberto no RFEM será carregado agora. Neste exemplo, o modelo do segundo artigo é aberto. Primeiro, a interface para a aplicação aberta é recuperada:

' Interface with RFEM is retrieved.
Dim iApp As RFEM5.Application
Set iApp = GetObject(, "RFEM5.Application" )

Em seguida, a rotina de tratamento de erros é iniciada e a licença está bloqueada:

' Error Handler
On Error GoTo e

' COM license and program access is locked.
iApp.LockLicense

É recomendado iniciar o manuseador antes de bloquear a licença, caso contrário o RFEM permanecerá trancado em caso de erro e só pode ser fechado através do Gestor de Tarefas. Uma vez que a interface está agora pronta para ser aplicada, pode obter a interface para o modelo:

' Get interface for the first model.
Dim iModel As RFEM5.model
If iApp.GetModelCount > 0 Then
Set iModel = iApp.GetModel(0)
Else
Err.Raise vbObjectError, "LoadModel()" , "iApp.GetModelCount < 1"
End If

Para um melhor tratamento de erros, pode verificar se o modelo está realmente disponível (GetModelCount neste caso) antes de recuperar o modelo. Mesmo no caso de outras interfaces, como a interface para casos de carga ou cargas, é possível indicar erros de uma maneira melhor.

Criando apoios nodais

Uma viga de alcance único deve ser criada e como a barra está ao longo do eixo x, a translação x, y, z e a rotação sobre os eixos xez tem também de ser bloqueado no nó 1. O suporte no nó 2 é semelhante ao primeiro até a conversão livre na direção x. Antes de criar os apoios nodais, é ainda necessário recuperar a interface para os dados do modelo. Ao definir o apoio, deve certificar-se de que, no caso de graus de liberdade, o número maior ou igual a 0 é igualado com o desbloqueador utilizando uma constante de mola. Aqui, também são utilizadas as unidades do SI, ou seja, N / m ou N / rad:

' Get interface for model data.
Dim iModelData As RFEM5.iModelData
Set iModelData = iModel.GetModelData()

' Create nodal supports.
Dim nodsups(0 To 1) As RFEM5.NodalSupport
nodsups(0).No = 1
nodsups(0).nodeList = "1"
nodsups(0).RestraintConstantX = -1
nodsups(0).RestraintConstantY = 0#
nodsups(0).RestraintConstantZ = -1
nodsups(0).SupportConstantX = -1
nodsups(0).SupportConstantY = -1
nodsups(0).SupportConstantZ = -1

nodsups(1).No = 2
nodsups(1).nodeList = "2"
nodsups(1).RestraintConstantX = -1
nodsups(1).RestraintConstantY = 0#
nodsups(1).RestraintConstantZ = -1
nodsups(1).SupportConstantX = 0#
nodsups(1).SupportConstantY = -1
nodsups(1).SupportConstantZ = -1

Se ocorrer algum problema, este pode ser causado pelo tipo de dados incorreto. Se for necessário o dobro, a entrada de número inteiro pode causar erros. Assim, é necessário adicionar uma chave hash após o valor inteiro, para que seja utilizado como um valor duplo.

Naturalmente, o apoio nodal tem de ser novamente transferido para o modo de edição (PrepareModification / FinishModification):

' Transfer nodal supports.
iModelData.PrepareModification
iModelData.SetNodalSupports nodsups
iModelData.FinishModification

Criar casos de carga

De forma a criar cargas, tem primeiro de definir casos de carga exatamente como no RFEM. Na programação, os casos de carga são criados e transferidos em primeiro lugar e só depois as cargas podem ser transferidas através das interfaces dos casos de carga. Primeiro, criamos os casos de carga:

' Get interface for loads.
Dim iLoads As RFEM5.iLoads
Set iLoads = iModel.GetLoads

' Create load cases.
Dim loadcases(0 To 2) As RFEM5.LoadCase

loadcases(0).Loading.No = 1
loadcases(0).SelfWeight = True
loadcases(0).ToSolve = True
loadcases(0).SelfWeightFactor.X = 0
loadcases(0).SelfWeightFactor.Y = 0
loadcases(0).SelfWeightFactor.Z = 1
loadcases(0).ActionCategory = Permanent

Existem três casos de carga a serem criados: peso próprio, neve e carga imposta. Na programação COM, todos os identificadores estão em inglês. Portanto, Permanente é utilizado para ActionCategory no caso do caso de carga de peso próprio. Para a propriedade SelfWeightFactor, pode definir a direção e o valor do peso próprio. No entanto, estas aplicam-se apenas se a propriedade de peso próprio estiver definida como Verdadeiro.

Além disso, ToSolve também tem de ser definido como Verdadeiro de forma a incluir o caso de carga no cálculo e a atribuir um número ao caso de carga (.Carregar.Não). Os outros dois casos de carga são definidos mais facilmente porque não existe peso próprio:

loadcases(1).Loading.No = 2
loadcases(1).SelfWeight = False
loadcases(1).ToSolve = True
loadcases(1).ActionCategory = ShowHLowerThan1000

loadcases(2).Loading.No = 3
loadcases(2).SelfWeight = False
loadcases(2).ToSolve = True
loadcases(2).ActionCategory = ImposedCategoryA

' Transfer load cases.
iLoads.PrepareModification
iLoads.SetLoadCases loadcases
iLoads.FinishModification

A categoria ShowHLowerThan1000 é utilizada para neve abaixo de uma altitude de 1.000 m acima do nível do mar e ImposedCategoryA é utilizado para a carga imposta da Categoria A. De seguida, os casos de carga podem ser transferidos para o RFEM. No entanto, a interface ILoads é utilizada para isso em vez da interface IModelData porque os dados do modelo já não estão em causa, mas sim os dados de carga.

Criar combinações de carga e resultados

Quando cria combinações de carga ou de resultados, existem apenas algumas diferenças. A razão para isto é que o método de cálculo e outras configurações apenas podem ser aplicadas depois de criar a combinação de carga através da interface correspondente. A definição é efetuada como no RFEM. Para isso, pode utilizar o identificador LC (caso de carga). Os diferentes separadores decimais e as letras maiúsculas e minúsculas não desempenham qualquer função e ambas são aceites:

' Create load combinations.
Dim loadcombs(0 To 0) As RFEM5.LoadCombination

loadcombs(0).Loading.No = 1
loadcombs(0).ToSolve = True
loadcombs(0).Definition = "1.35*lc1 + 1.5*lc2 + 1.05*lc3"

' Transfer load combinations.
iLoads.PrepareModification
iLoads.SetLoadCombinations loadcombs
iLoads.FinishModification

' Create result combinations.
Dim rescombs(0 To 0) As RFEM5.ResultCombination

rescombs(0).Loading.No = 1
rescombs(0).Definition = "1.35*lc1 + 0.75*lc2 + 1.5*lc3"

' Transfer result combinations.
iLoads.PrepareModification
iLoads.SetResultCombinations rescombs
iLoads.FinishModification

Criando cargas

Como mencionado acima, as cargas serão agora transferidas utilizando as interfaces para os casos de carga. No nosso exemplo, quaisquer cargas adicionais são criadas no Caso de carga 1. No caso de carga 2, é aplicada uma carga distribuída trapezoidal. O caso de carga 3 aplica uma carga linear constante e uma carga nodal. Aqui está o procedimento para o caso de carga 2:

' Create loads.
' Load Case 2.
Dim iLoadCase As RFEM5.iLoadCase
Set iLoadCase = iLoads.GetLoadCase(2, AtNo)

Uma vez que sabemos o número do caso de carga, este pode ser utilizado com o AtNo quando recupera a interface:

' Create member loads.
Dim memLoads() As RFEM5.MemberLoad
ReDim memLoads(0 To 0)

Neste caso, a matriz não é dimensionada na inicialização, mas posteriormente, porque os memLoads devem ser utilizados novamente para o Caso de carga 3. Isto tem a vantagem de o conteúdo ser reposta para os valores padrão quando utilizar ReDim novamente. Em ObjectList, pode selecionar as barras para carregamento separadas por vírgulas ou ligadas por hífenes. Além dos dois valores de carga para o início de carga (Magnitude1) e o final da carga (Magnitude2), a carga trapezoidal requer a especificação de distâncias para o início de carga (DistânciaA) e fim (DistânciaB). A propriedade RelativeDistances determina se os dados absolutos (Falso) em m ou os dados relativos (Verdadeiros) de 0‑1 serão utilizados:

memLoads(0).No = 1
memLoads(0).ObjectList = "1"
memLoads(0).Distribution = TrapezoidalType
memLoads(0).Magnitude1 = 6000#
memLoads(0).Magnitude2 = 4000#
memLoads(0).RelativeDistances = False
memLoads(0).DistanceA = 0.2
memLoads(0).DistanceB = 0.9

' Transfer member loads.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification

Quando transferir as cargas, tem de ser definida a interface correta, neste caso a interface ILoadCase. As cargas do Caso de carga 3 são definidas de forma semelhante como segue:

' Create nodal loads.
Dim nodalLoads(0 To 0) As NodalLoad
nodalLoads(0).No = 1
nodalLoads(0).nodeList = "2"
nodalLoads(0).Component.Force.X = -15000
nodalLoads(0).Component.Force.Y = 0
nodalLoads(0).Component.Force.Z = 0
nodalLoads(0).Component.Moment.X = 0
nodalLoads(0).Component.Moment.Y = 0
nodalLoads(0).Component.Moment.Z = 0

' Transfer nodal loads.
iLoadCase.PrepareModification
iLoadCase.SetNodalLoads nodalLoads
iLoadCase.FinishModification

' Create member loads.
ReDim memLoads(0 To 0)
memLoads(0).No = 1
memLoads(0).ObjectList = "1"
memLoads(0).Distribution = UniformType
memLoads(0).Magnitude1 = 5000#

' Transfer member loads.
iLoadCase.PrepareModification
iLoadCase.SetMemberLoads memLoads
iLoadCase.FinishModification

Quando fecha o programa, a rotina da rotina de tratamento de erros é concluída e a licença é desbloqueada:

e: If Err.Number <> 0 Then MsgBox Err.Description, , Err.Source

' COM license is unlocked, the program access is possible again.
iModel.GetApplication.UnlockLicense

Resumo e visão geral

Os procedimentos apresentados no artigo baseiam-se nos dois artigos anteriores. Como já foi mencionado, a estrutura é semelhante para todos os elementos. A exceção mencionada de releases de barras não-lineares ou apoios nodais será explicada no próximo artigo.

Downloads

Ligações

Contacto

Contacto da Dlubal

Tem alguma questão ou necessita de ajuda? Então entre em contacto com a nossa equipa de apoio técnico gratuita por e-mail, chat ou no fórum, ou então consulte as perguntas mais frequentes (FAQ).

+49 9673 9203 0

(falamos português)

info@dlubal.com

RFEM Programa principal
RFEM 5.xx

Programa principal

Software de engenharia estrutural para análises de elementos finitos (AEF) de estruturas planas e espaciais constituídas por lajes, paredes, vigas, sólidos e elementos de contacto

Preço de primeira licença
3.540,00 USD
RFEM Outros
RF-COM 5.xx

Módulo adicional

Interface programável (API) com base na tecnologia COM

Preço de primeira licença
580,00 USD