Interface COM no VBA | 3. Ferramenta de criação

Artigo técnico

Este artigo foi traduzido pelo Google Tradutor

Ver texto original

A parte 2.2 da série de artigos sobre a interface COM descreveu a criação e a modificação de apoios nodais, cargas, casos de carga, combinações de carga e combinações de resultados num exemplo de barra. Esta parte explica a criação de ferramentas individuais.

Figura 01 - Ferramenta EXCEL criada individualmente no RFEM

Allgemeine Funktionen

Queremos criar uma ferramenta que crie apoios nodais não lineares nos nós atualmente selecionados no programa. Para isso, são necessários os seguintes elementos-chave:

  • Obter nós selecionados no momento
  • Criar apoios de nó
  • Criar e atribuir não-linearidade
  • Ferramenta de corrida no programa

Esses pontos devem ser explicados agora. Isso requer conhecimento das partes anteriores desta série de artigos, as quais não serão descritas novamente. No entanto, o código fonte disponível inclui comentários documentando os elementos mencionados anteriormente, tais como obter a estrutura.

Obter nó atualmente selecionado

Pode editar os elementos selecionados através da interface COM utilizando as funções já conhecidas, como IModelData.GetNodes para nós. No entanto, para retornar apenas os elementos selecionados, é necessário comutar para editar a seleção atual primeiro através da entrada IModelData.EnableSelections. Se EnableSelections estiver definido como True, IModelData.GetNodes apenas devolve os elementos selecionados. Aqui está um exemplo específico:

'Obter nós selecionados.
iModDat.EnableSelections Verdadeiro 'trabalha apenas com o objeto selecionado
Escuro nós () As RFEM5.Node
nodes = iModDat.GetNodes
iModDat.EnableSelections Falso 'trabalhar com todos os objetos novamente

Após obter os nós selecionados, EnableSelections é redefinido para false novamente, pois isso pode causar erros. Como o apoio nodal requer uma lista de nós como uma string para a definição, isso é fornecido ao mesmo tempo:

'Crie uma lista de nós.
Escuro nodeList As String
Escuro IAsLongo
Para i = 0 atéUBound (nós, 1)
nodeList = nodeList & nodes (i) .No & ","
Seguinte I

Criar apoios de nó

A não-linearidade, ou o diagrama no caso específico, é um elemento separado. Pode ser atribuído a um apoio nodal apenas se este já estiver disponível no sistema. Portanto, é necessário criar primeiro o apoio nodal, seguindo os princípios explicados nos artigos anteriores:

'Criar apoios nodais.
Escuro nodSup As RFEM5.NodalSupport
nodSup.No = 100
nodSup.IsColumn = Falso
nodSup.IsValid = Verdadeiro
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

'Definir não-linearidade.
nodSup.SupportNonlinearityZ = WorkingDiagramType

iModDat.PrepareModification
iModDat.SetNodalSupport nodSup
iModDat.FinishModification

Como pode ver no código, WorkingDiagramType é especificado como não-linearidade na direção z global.

Criar e atribuir apoio não linear

Após preparar o apoio nodal para a não-linearidade WorkingDiagramType, deve agora ser criado:

'Criar não-linearidade.
Escuro nldgrm As RFEM5.NonlinearityDiagram

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

'Criar diagrama.
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

O diagrama consiste em uma matriz bidimensional. A primeira dimensão corresponde ao conjunto de dados, a segunda dimensão aos elementos do conjunto de dados. Neste caso, o primeiro elemento no conjunto de dados é o deslocamento em m e o segundo elemento é a força em N. Portanto, o exemplo acima criou quatro conjuntos de dados em que o terceiro ponto do diagrama na posição é 30 mm e 0,2 kN, por exemplo. Esta não-linearidade deve agora ser atribuída ao apoio existente. Para isso, é necessário obter a interface para o apoio nodal e depois para a não-linearidade:

'Atribuir não-linearidade.
Escuro iNodSup As RFEM5.INodalSupport
Definir iNodSup = iModDat.GetNodalSupport (100, ItemAt.AtNo)
Escuro iNldiag As RFEM5.INonlinearityDiagram
Definir iNldiag = iNodSup.GetNonlinearity (AlongAxisZ)

iModDat.PrepareModification
iNldiag.SetData nldgrm
iModDat.FinishModification

Neste caso, a não-linearidade é ao longo do eixo Z, por isso, AlongAxisZ deve ser selecionado ao obter a não-linearidade. A não-linearidade é atribuída no bloco de modificação conhecido.

Ferramenta de corrida no programa

É possível integrar programas externos no RFEM. Para tal, é necessário modificar o RFEM.ini no caminho do programa. Ao contrário da programação em C # e VB onde é criado um ficheiro executável, o VBA requer o Excel para implementar a ferramenta. O Excel pode ser atribuído por um argumento ao abrir um ficheiro a ser aberto. Isso aparece na linha de comando da seguinte forma (o ficheiro do Excel está em C: \ temp e o Excel está instalado como uma versão de 32 bits):
"C: \ Ficheiros de programa (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm

Assim, o Excel abre com o ficheiro pretendido. De forma a garantir que o RFEM abre apenas o programa externo sem os argumentos adicionais (neste caso, o nome do ficheiro por trás do EXCEL.EXE), é necessário criar primeiro um ficheiro em lotes do Windows. Este ficheiro de texto simples incluindo a extensão de ficheiro ".bat" é gerido pelo Windows como um ficheiro EXE executável. Portanto, pode utilizar o editor para criar um ficheiro TXT, o qual inclui a nova extensão de ficheiro ".bat". A opção para mostrar a extensão do ficheiro tem de ser definida primeiro no Explorador do Windows. Este ficheiro em lote (em seguida, EXCEL-Tool.bat) tem de incluir a seguinte entrada:
"C: \ Ficheiros de programa (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm
Isso corresponde ao comando como seria introduzido na linha de comando.

Após criar este ficheiro executável, o RFEM.ini pode ser introduzido como ferramenta externa. O RFEM.ini está incluído no caminho do programa do RFEM (caminho predefinido para o RFEM 5.07 de 64 bits: C: \ Ficheiros de programa \ Dlubal \ RFEM 5.07). Lá, deve adicionar as seguintes entradas:

ModuleName2 = Ferramenta EXCEL
ModuleExeName2 = "c: \ temp \ EXCEL-Tool.bat"
ModuleDescription2 = Libertação final de barra não-linear

Claro que, o ficheiro em lote EXCEL-Tool.bat e a macro table1.xlsm também devem ser armazenados em C:/temp/.

Para executar a macro automaticamente, inicia o procedimento na sub-rotina executada automaticamente pelo Excel ao abrir o ficheiro. Esta sub-rotina é chamada Workbook_Open e deve ser armazenada na Pasta de Trabalho.

Figura 02 - Workbook_Open Sub-rotina no livro

Agora, precisamos fechar o Excel após serem executados com sucesso. Se ocorrer um erro ou o RFEM não abrir, pode editar a macro. Para isso, é integrada uma distinção de casos. O esboço completo é o seguinte:

Particular SubWorkbook_Open ()

'O tratamento de erros executa o RFEM.
No erro Ir para e

'A interface com o RFEM é recuperada.
Escuro iApp AsRFEM5.Application
Definir iApp = GetObject (, "RFEM5.Application")

e: ', no caso de um erro, "RFEM não aberto" é apresentado
Se Número de erro <> 0 Então
MsgBox "RFEM não aberto", Err.Source
   Sair Sub
Fim Se

'Programa manipulador de erros.
No erro Ir para F

'A licença COM e o acesso ao programa estão bloqueados.
iApp.LockLicense

'Obter interface para o modelo ativo.
Escuro iModel As RFEM5.model
Se iApp.GetModelCount> 0 Então
Defina iModel = iApp.GetActiveModel
Else
'Erro de visualização quando não existem modelos suficientes disponíveis.
Err.Raise vbObjectError, "LoadModel ()","iApp.GetModelCount <1"
End If

'Coloque para o seu próprio código-fonte.

f: 'Erro de interceptação do código fonte.
Se Err.Number <> 0 Então
MsgBox Err.Description,, Err.Source
'Licença COM liberada, acesso ao programa possível novamente
iModel.GetApplication.UnlockLicense
'A ferramenta deve deixar o Excel aberto quando ocorrer um erro
   Sair da sub
End If

' A licença COM está desbloqueada, o acesso ao programa é novamente possível
iModel.GetApplication.UnlockLicense
'A ferramenta fecha o Excel quando aplicada com sucesso.
Aplicação.Quit

End Sub

Neste momento, apenas falta a referência à sub-rotina criada anteriormente, a qual é colocada em "Colocar pelo seu próprio código-fonte". O código fonte completo está disponível na seguinte ligação.

Resumo

Este artigo sobre a criação de um apoio nodal não linear descreve a aplicação de um novo módulo externo e complementa as partes anteriores desta série de artigos. A integração é mais direta quando se utilizam ficheiros executáveis, os quais são normalmente criados através do VisualStudio e VB ou C #. Portanto, o processo complexo com o Excel foi descrito.

Downloads

Ligações

Contacto

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