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 modificação de apoios nodais, cargas, casos de carga, combinações de carga e combinações de resultados num exemplo de uma barra. Esta parte explica a criação de ferramentas individuais

Figura 01 - Ferramenta EXCEL criada individualmente no RFEM

Noções básicas

Queremos criar uma ferramenta que crie apoios nodais não lineares no nó atualmente selecionado no programa. Os seguintes elementos principais são necessários para isso:

  • Obtendo nós atualmente selecionados
  • Criando apoios nodais
  • Criando e atribuindo não-linearidades
  • Criando ferramentas no programa

A seguir, esses pontos serão processados. Para isso, é necessário o conhecimento dos artigos anteriores e não será discutido novamente. No entanto, os elementos já disponíveis no código de origem disponível, como obter a estrutura nos comentários, estão quase documentados.

Obter nós atualmente selecionados

A edição de elementos selecionados através da interface COM é efetuada através das funções já familiares, tais como IModelData.GetNodes para nós. De forma a devolver apenas os elementos selecionados, tem de alternar para a edição da atual seleção através de IModelData.EnableSelections. Se EnableSelections estiver definido como True, IModelData.GetNodes retornará apenas os elementos selecionados.Aqui está o exemplo concreto:

'Obter nós selecionados'
iModDat.EnableSelections Verdadeiro 'Trabalhar apenas com objetos selecionados
Dim nós () AS RFEM5.Node
nós = iModDat.GetNodes
iModDat.EnableSelections Falsa 'trabalhe novamente com todos os objetos

Quando os nós selecionados foram buscados, EnableSelections é definido como Incorreto novamente porque pode se tornar uma fonte frequente de erros. Uma vez que o apoio nodal requer uma lista de nós como uma cadeia, é criado da seguinte forma:

'Criar lista de nós
Dim nodeList AS String
Dim eu ASLongo
Para i = 0 ParaU Ligação (nós, 1)
nodeList = nodeList & nodes (i) .Não & ","
Próxima I

Criando apoios nodais

A não-linearidade, neste caso o diagrama, é um elemento separado. Só pode ser atribuída a um apoio nodal se já estiver disponível na estrutura. Portanto, é necessário criar um apoio nodal de acordo com os princípios conhecidos das contribuições anteriores:

'Criar apoios nodais
Dim nodSup AS RFEM5.NodalSupport
nodSup.No = 100
nodSup.IsColumn = Falsa
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 ser visto no código, o tipo WorkingDiagramType é indicado como não-linearidade na direção z global.

Criando e atribuindo apoios não lineares

Agora que o apoio nodal foi preparado para a não-linearidade WorkingDiagramType, tem de ser criado:

'Criar não-linearidade'
Dim nldgrm AS RFEM5.NonlinearityDiagram

nldgrm.ForceType = DificuldadeDiagramForceType.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 é composto por um campo bidimensional. A primeira dimensão corresponde ao registro de dados e a segunda dimensão aos elementos do conjunto de dados. Aqui, o primeiro elemento no conjunto de dados é o deslocamento em me o segundo a força em N. O exemplo acima cria quatro conjuntos de dados, por exemplo, onde o terceiro ponto do diagrama é 30 mm e 0,2 kN. Esta não-linearidade tem agora de ser atribuída ao apoio disponível. Para isso, trazemos a interface para o apoio nodal e depois para a não-linearidade:

'Aplicar não-linearidade'
Dim iNodSup AS RFEM5.INodalSupport
Definir iNodSup = iModDat.GetNodalSupport (100, ItemAt.AtNo)
Dim iNldiag AS RFEM5.INlinlinearidadeDiagrama
Definir iNldiag = iNodSup.GetNonlinearity (AlongAxisZ)

iModDat.PrepareModification
iNldiag.SetData nldgrm
iModDat.FinishModification

A não-linearidade está ao longo do eixo Z e, por isso, tem de ser selecionada quando LengthAxisZ é chamado. Eles são atribuídos no bloco de modificação conhecido.

Criando ferramentas no programa

No RFEM, é possível integrar programas externos. Para o fazer, tem de modificar o RFEM.ini no caminho do programa. Em contraste com a programação em C # e VB, onde é criado um ficheiro executável, o Excel tem de ser utilizado para a execução da ferramenta no VBA. Pode ser atribuído ao Excel um ficheiro aberto através de um argumento no arranque. Isso se pareceria com isso na linha de comando, onde o arquivo do Excel é armazenado em C: \ temp e o Excel é instalado como uma versão de 32 bits:
"C: \ Arquivos de programas (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm

Isso abre o Excel com o arquivo desejado. Uma vez que apenas pode abrir um programa externo do RFEM sem argumentos adicionais (por exemplo, o nome do ficheiro EXCEL.EXE), tem de criar um ficheiro batch do Windows.Este ficheiro de texto simples com a extensão ".bat" é semelhante ao Windows abrange um ficheiro EXE executável Para criar um arquivo TXT, é necessário criar um arquivo TXT, por exemplo, que receba a nova extensão de arquivo ".bat" após a sua criação. Este ficheiro batch (a seguir designado "EXCEL-Werzeug.bat") tem de ter a seguinte entrada:
"C: \ Arquivos de programas (x86) \ Microsoft Office \ Office15 \ EXCEL.EXE" C: \ temp \ table1.xlsm
Isto corresponde ao comando como seria introduzido na linha de comando.

Após criar o ficheiro executável, pode introduzi-lo no ficheiro RFEM.ini como ferramenta externa. O RFEM.ini encontra-se no caminho do programa do RFEM (Norma para o RFEM 5.07 64-Bit: C: \ Arquivos de programas \ Dlubal \ RFEM 5.07). As seguintes entradas tem de ser adicionadas:

ModuleName2 = ferramenta EXCEL
ModuleExeName2 = "c: \ temp \ EXCEL-Werkzeug.bat"
ModuleDescription2 = Liberação final não-linear da barra

Naturalmente, tem de guardar o ficheiro batch EXCEL-Werkzeug.bat e a macro table1.xls em C:/temp/.

Para garantir que a macro também é executada automaticamente, tem de iniciar a sub-rotina na sub-rotina executada automaticamente pelo Excel quando abre a macro. Esta sub-rotina chama-se Workbook_Open e tem de ser armazenada no livro.

Figura 02 - Workbook_Open Sub-rotina no livro

Agora está faltando que o Excel será fechado após a execução bem sucedida. Se ocorrer um erro ou o RFEM não for aberto, a macro deve poder ser editada Para isso, será criada uma distinção entre maiúsculas e minúsculas. O modelo completo tem esta aparência:

Privado SubWorkbook_Open ()

'Erro no início do programa de rotina RFEM
No erro Ir para e

Traz a interface para o RFEM
Dim iApp ASRFEM5.Application
Definir iApp = GetObject (, "RFEM5.Application")

e: 'Em caso de erro,' RFEM aberto 'é exibido
Se Err.Number <> 0 Então
MsgBox "RFEM não aberto", Err.Source
   Saída Sub
Final Se

'Erro ao manipular o programa de rotina
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
Dim iModel AS RFEM5.model
Se iApp.GetModelCount> 0 Então
Definir iModel = iApp.GetActiveModel
Else
Erros se não houver modelos suficientes disponíveis
Err.Raise vbObjectError, "LoadModel ()", "iApp.GetModelCount <1"
End If

'Espaço para o próprio código-fonte

f: 'Erros de intercepção do código fonte
Se Err.Number <> 0 Then
MsgBox Err.Description ,, Err.Source
'A licença COM é liberada, o acesso ao programa é possível novamente
iModel.GetApplication.UnlockLicense
'Ferramenta deve manter o Excel aberto quando ocorre um erro
   Subitem de saída
End If

A licença COM é liberada, o acesso ao programa é possível novamente
iModel.GetApplication.UnlockLicense
'Ferramenta deve fechar o Excel quando a aplicação é bem sucedida
Aplicação.Quit

End Sub

Agora, tudo o que está faltando é a referência à sub-rotina criada anteriormente, que pode ser encontrada em "Local para o próprio código-fonte". O código-fonte completo está disponível no seguinte link.

Resumo

A criação do apoio nodal não linear é um complemento às contribuições anteriores, enquanto a criação de um módulo externo é um novo território. A incorporação é menos problemática ao usar arquivos executáveis, como aqueles normalmente criados com a ajuda do Visual Studio e VB ou C #. Por esse motivo, o procedimento mais complexo com o Excel foi descrito aqui.

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