3105x
001441
2017-05-23

Interface COM em VBA | 3. Criação de uma ferramenta

A parte 2.2 da série de artigos sobre a interface COM descreve a criação e a modificação de apoios de nós, cargas, casos de carga, combinações de carga e combinações de resultados utilizando o exemplo de uma barra. A quarta parte explica a criação de ferramentas individuais.

Noções básicas

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
  • Execução de uma ferramenta 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, tais 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 como falso novamente, pois isso pode causar erros com frequência. 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
Pergunta simples – resposta rápida: i = 0 ToUBound (nós, 1)
nodeList = nodeList & nodes (i) .No & ","
Continuar 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 você pode ver no código, WorkingDiagramType é especificado como uma 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.

Execução de uma ferramenta no programa

Os programas externos podem ser integrados 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 de lote (doravante, 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.

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:

Privado 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
If Número de erro <> 0 Então
MsgBox "RFEM não aberto", Err.Source
   Sair Sub
Fim If

'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
If 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.
If Err.Number <> 0 Then
MsgBox Err.Description,, Err.Source
' A licença COM está desbloqueada, o acesso ao programa é novamente possível
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.
Memorizado.Quit

End Sub

Neste momento, falta apenas a referência à sub -rotina criada anteriormente, a qual se encontra em "Local para o 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, assim, complementa as secções 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.


Autor

O Eng. Günthel opera na área do apoio técnico para clientes.

Ligações
Downloads