Interface COM en VBA | 3 Création d’outils

Article technique

La partie 2.2 de cette série d’articles à propos de l’interface COM a décrit la création et modification d’appuis nodaux, de charges, de cas de charge, de combinaisons de charge et de résultats à partir d’un exemple de barre. L’article ci-dessous explique la création d’outils individuels.

Figure 01 – EXCEL Tool, un outil créé et importé dans RFEM

Théorie

Nous souhaitons créer un outil qui définit des appuis nodaux non-linéaires sur les nœuds sélectionnés dans le programme. Les éléments clés suivants sont nécessaires :

  • Saisir les nœuds sélectionnés
  • Créer des appuis nodaux
  • Créer et assigner des non-linéarités
  • Démarrer l’outil dans le programme

Nous allons décrire ces éléments individuellement. Les informations présentées dans les articles précédents ne le seront pas dans celui-ci. Toutefois, le code source mis à disposition comprend des commentaires qui documentent des éléments déjà évoqués, comme la saisie de la structure.

Saisie du nœud sélectionné

Vous pouvez modifier les éléments sélectionnés via l’interface COM en utilisant des fonctionnalités déjà présentées, comme IModelData.GetNodes pour les nœuds. Toutefois, afin que seuls les éléments sélectionnés soient retournés, il est nécessaire de passer à l’édition de la sélection actuelle en entrant IModelData.EnableSelections. Si EnableSelections est définie comme True, IModelData.GetNodes ne retourne que les éléments sélectionnés. Voici un exemple :

' Saisie des nœuds sélectionnés.
iModDat.EnableSelections True ' Travail avec l'objet sélectionné uniquement
Dim nodes() As RFEM5.Node
nodes = iModDat.GetNodes
iModDat.EnableSelections False ' Travail avec tous les objets

Après avoir saisi les nœuds sélectionnés, EnableSelections est redéfini comme faux car il peut provoquer des erreurs. L’appui nodal requiert une liste de nœuds comme une chaîne pour la définition :

' Création d'une liste de nœuds.
Dim nodeList As String
Dim i As Long
For i = 0 To UBound(nodes, 1)
nodeList = nodeList & nodes(i).No & ","
Next i

Création des appuis nodaux

La non-linéarité, ou le diagramme dans le cas spécifique, est un élément à part. Il ne peut être assigné qu’à un appui nodal déjà existant dans le système. Ainsi, il est nécessaire de d’abord créer l’appui nodal en suivant les principes expliqués dans les articles précédents :

' Création d'appuis nodaux.
Dim nodSup As RFEM5.NodalSupport
nodSup.No = 100
nodSup.IsColumn = False
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

' Définition de la non-linéarité.
nodSup.SupportNonlinearityZ = WorkingDiagramType

iModDat.PrepareModification
iModDat.SetNodalSupport nodSup
iModDat.FinishModification

Comme vous pouvez voir dans le code, WorkingDiagramType est précisé comme non-linéarité dans la direction z globale.

Création et assignation de l’appui non-linéaire

Après avoir préparé l’appui nodal pour la non-linéarité WorkingDiagramType, créons :

' Création de la non-linéarité.
Dim nldgrm As RFEM5.NonlinearityDiagram

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

' Création du diagramme.
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

Le diagramme consiste en un tableau bidimensionnel. La première dimension correspond à l’ensemble de données, la deuxième dimension aux éléments de l’ensemble de données. Dans ce cas, le premier élément dans l’ensemble de données est le déplacement en m et le deuxième élément est la force en N. Ainsi, l’exemple ci-dessus a créé quatre ensembles de données où le troisième point du diagramme à la position est de 30 mm et de 0,2 kN, par exemple. Cette non-linéarité est maintenant assignée à l’appui existant. Il est nécessaire de saisir l’interface pour l’appui nodal, puis pour la non-linéarité :

' Assignation de la non-linéarité.
Dim iNodSup As RFEM5.INodalSupport
Set iNodSup = iModDat.GetNodalSupport(100, ItemAt.AtNo)
Dim iNldiag As RFEM5.INonlinearityDiagram
Set iNldiag = iNodSup.GetNonlinearity(AlongAxisZ)

iModDat.PrepareModification
iNldiag.SetData nldgrm
iModDat.FinishModification

Dans ce cas, la non-linéarité est le long de l’axe Z, ainsi AlongAxisZ doit être sélectionné lors de la saisie de la non-linéarité. La non-linéarité est assignée dans le bloc de modification vu précédemment.

Utiliser l’outil dans le programme

L’intégration de programmes externes dans RFEM requiert de modifier RFEM.ini dans le répertoire de programme. Contrairement à la programmation en C# et VB où un fichier exécutable est créé, VBA requiert Excel pour ajouter l’outil. Excel peut être assigné par un argument lorsqu’un fichier s’ouvre. Ceci apparaît dans la ligne de commande comme suit (le fichier Excel est sous C:\temp et Excel est installé comme une version 32-bit) : "C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE" C:\temp\table1.xlsm

Ainsi, Excel ouvre le fichier désiré. Afin d’assurer que RFEM n’ouvre que le programme externe sans arguments supplémentaires (comme le nom de fichier après EXCEL.EXE dans ce cas), il est nécessaire de commencer par créer un fichier batch. Ce simple fichier texte avec une extension de type « .bat » est utilisé par Windows comme un fichier EXE exécutable. Ainsi, vous pouvez utiliser l’éditeur pour créer un fichier TXT avec extension « .bat ». L’option d’afficher l’extension de fichier doit d’abord être définie dans l’Explorateur de fichiers Windows. Ce fichier batch (ci-après EXCEL-Tool.bat) doit comprendre l’entrée suivante : "C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE" C:\temp\table1.xlsm
Ceci correspond à la commande, comme elle devrait être entrée dans la ligne de commande.

Après avoir ce fichier exécutable, ceci peut être entré dans RFEM.ini comme un outil externe. RFEM.ini est compris dans le répertoire de fichier de RFEM (le répertoire par défaut de RFEM 5.07 64‑bit est C:\Program Files\Dlubal\RFEM 5.07). Ajoutez-y les entrées suivantes :

ModuleName2=EXCEL-Tool
ModuleExeName2="c:\temp\EXCEL-Tool.bat"
ModuleDescription2=Libération de fin de barre non-linéaire

Bien évidemment, le fichier batch EXCEL-Tool.bat et le macro table1.xlsm doivent également être enregistrés sous C:/temp/.

Pour lancer le macro automatiquement, vous devez démarrer la sous-routine dans la sous-routine exécutée automatiquement par Excel lors de l’ouverture du fichier. Cette sous-routine s’appelle Workbook_Open et doit être enregistré dans Workbook.

Figure 02 – Sous-routine Workbook_Open dans Workbook

Nous devons maintenant fermer Excel après avoir été exécuté. Si une erreur a lieu, ou si RFEM ne s’ouvre pas, vous pouvez éditer la macro. Pour ceci, une distinction de cas est intégrée. L’ébauche complète est la suivante :

Private Sub Workbook_Open()

' Gestionnaire d'erreur démarre RFEM.
On Error GoTo e

' Interface avec RFEM est extraite.
Dim iApp As RFEM5.Application
Set iApp = GetObject(, "RFEM5.Application")

e: ' En cas d'erreur, le message not open" s'affiche
If Err.Number <> 0 Then
   MsgBox "RFEM not open", , Err.Source
   Exit Sub
End If

' Programme de gestionnaire d'erreur.
On Error GoTo f

' Licence COM et accès au programme bloqués.
iApp.LockLicense

' Saisie de l'interface pour le modèle actif.
Dim iModel As RFEM5.model
If iApp.GetModelCount > 0 Then
   Set iModel = iApp.GetActiveModel
Else
   ' Affichage de l'erreur lorsque pas assez de modèles sont disponibles.
   Err.Raise vbObjectError, "LoadModel()", "iApp.GetModelCount < 1"
End If

' Place for your own source code.

f: ' Interception de l'erreur dans le code source.
If Err.Number <> 0 Then
   MsgBox Err.Description, , Err.Source
   ' Licence COM débloquée, l'accès au programme est à nouveau possible. iModel.GetApplication.UnlockLicense
   ' L'outil permet à Excel de s'ouvrir lorsqu'une erreur a lieu.
   Exit Sub
End If

' Licence COM débloquée, l'accès au programme est à nouveau possible.
iModel.GetApplication.UnlockLicense
' L'outil ferme Excel lorsqu'il est correctement démarré.
Application.Quit

End Sub

À ce niveau seule une référence à la sous-routine créée précédemment est manquante, elle est placée sous «Place for your own source code ». Le code source complet est disponible en fin d’article.

Résumé

Cet article traite de la création d’appuis nodaux non-linéaires et décrit l’application d’un nouveau module externe, complétant ainsi les parties précédentes de cette série d’articles. L’intégration est plus directe avec l’utilisation de fichier exécutables, typiquement créés avec VisualStudio et VB ou C#.

Téléchargements

Liens

Contactez-nous

Contactez-nous

Vous avez des questions relatives à nos produits ? Vous avez besoin de conseils pour votre projet en cours ? Contactez-nous ou visitez notre FAQ, vous y trouverez de nombreuses astuces et solutions.

+33 1 78 42 91 61

info@dlubal.fr

RFEM Logiciel principal
RFEM 5.xx

Programme de base

Logiciel de calcul de structures aux éléments finis (MEF) pour les structures 2D et 3D composées de plaques, voiles, coques, barres (poutres), solides et éléments d'assemblage

Prix de la première licence
3 540,00 USD