Idea Statica
  • Staal
  • Beton
  • Ondersteuning & Leren
  • Prijzen
  • Bedrijf
  • Overzicht staal
  • Verbinding ontwerp
  • Staafontwerp
  • Parametrisch ontwerp
  • Casestudies staal
  • Overzicht beton
  • Wand & detailontwerp
  • Concrete casestudies
  • Ondersteuningscentrum
  • Persoonlijke opleiding
  • Blog
  • Downloads & Licenties
  • Plannen
  • Gratis community tool
  • Licentie voor ondernemingen
  • Studenten en Universiteiten
  • Calculators
  • Over ons
  • Contact
  • Onderzoek & ontwikkeling
  • Blog
  • Evenementen
  • Staal
    Overzicht staalVerbinding ontwerpStaafontwerpParametrisch ontwerpCasestudies staal
  • Beton
    Overzicht betonWand & detailontwerpConcrete casestudies
  • Ondersteuning & Leren
    OndersteuningscentrumPersoonlijke opleidingBlogDownloads & Licenties
  • Prijzen
    PlannenGratis community toolLicentie voor ondernemingenStudenten en UniversiteitenCalculators
  • Bedrijf
    Over onsContactOnderzoek & ontwikkelingBlogEvenementen
14-daagse proefperiode
14-daagse proefperiode

Abonneer u op onze nieuwsbrief

Bedrijf

  • Over ons
  • Partnerships
  • Vacatures
  • Gepatenteerde technologie voor constructeurs

Bronnen

  • Klantprojecten
  • Case studies
  • IDEA StatiCa Connection Library
  • Verificatieboeken

Juridisch

  • Gebruiksrechtovereenkomst IDEA StatiCa
  • Privacybeleid
  • Terms of Services – IDEA StatiCa Viewer
  • Licenties

Help

  • Contact
  • Offerteaanvraag
  • Resellers
  • Downloads
FacebookInstagramLinkedInYouTube

© IDEA StatiCa 2009-2026

Vertrouwd en wereldwijd gebruikt door ingenieurs, fabrikanten & consultants.

OndersteuningscentrumTutorialsHoe te beginnen met API - Componenten optimaliseren in een verbinding 04
Hoe te beginnen met API - Componenten optimaliseren in een verbinding 04
SteelConnection designTutorialsConnectionIDEA Open Model (API)

Hoe te beginnen met API - Componenten optimaliseren in een verbinding 04

Dit artikel is ook beschikbaar in
ENCZDEESFRITPTNLHUROKRPLTHTRVIZH

In deze tutorial leert u hoe u enkele componenten (lassen, bouten) in een verbinding kunt optimaliseren met behulp van parameters.

Eerste stappen

We raden aan de tutorial Hoe te beginnen met API - Basis 01 te doorlopen, waarin u leert over de API en hoe u de omgeving instelt.

Verbindingsbestand 

Dit voorbeeld is gebaseerd op bestanden die zijn aangemaakt in de tutorial Hoe te beginnen met API - Een template importeren en berekening uitvoeren 03.

Download het bestand tutorial 03 with template-new.ideaCon.

We willen de componenten van de verbinding optimaliseren (lassen, diameter en aantal bouten). Het resultaat van de optimalisatie zijn de kosten van de verbinding, die overzichtelijk worden weergegeven in een grafiek.

Python client

Voer "IdeaStatiCa.ConnectionRestApi.exe" uit in CMD vanuit de juiste IDEA StatiCa map en open de IDE-tool naar keuze.

  • Maak een nieuw bestand aan en importeer de pakketten die het gebruik van berekeningen en de koppeling met de localhost-URL mogelijk maken. 

Broncode:

## Import van API-pakket
from ideastatica_connection_api.models.con_calculation_parameter import ConCalculationParameter
from ideastatica_connection_api.models.idea_parameter_update import IdeaParameterUpdate

## Koppeling met baseUrl
import ideastatica_connection_api.connection_api_service_attacher as connection_api_service_attacher
from ideastatica_connection_api.models.con_calculation_parameter import ConCalculationParameterfrom ideastatica_connection_api.models.con_production_cost import ConProductionCost

#aanvullende pakketten
import matplotlib.pyplot as plt
import numpy as np
from typing import Concatenate

  • Configureer de logging via de variabele "baseUrl," die uw localhost opent. Koppel in de tweede stap het absolute pad van uw IDEA StatiCa Connection-bestand.

## Logging configureren
baseUrl = "http://localhost:5000"

## Absoluut pad naar de map met uw python-script en verbindingsmodule
project_file_path = r"C:\Users\AlexanderSzotkowski\Documents\IDEA\API\Tutorial 04\tutorial 03 with template -new.ideaCon"
print(project_file_path)

  • Koppel de client aan een reeds actieve service. Gebruik het blok try/except - wanneer het try-blok een fout genereert, wordt het except-blok uitgevoerd. In de eerste fase is het noodzakelijk het project te openen en de project-ID van uw project te vinden, die uniek is voor elk IDEA StatiCa-project. Vervolgens selecteren we de eerste verbinding die in ons bestand is opgeslagen.

# Maak een client aan die is gekoppeld aan een reeds actieve service
with connection_api_service_attacher.ConnectionApiServiceAttacher(baseUrl).create_api_client() as api_client:
    try:
        # Project openen
        print("Opening project %s" % project_file_path)
       #api_client.project.active_project_id  - ID van het geopende project
       openedProject = api_client.project.open_project_from_filepath(project_file_path)      

       #openedProject.connections = [  {Con1}, {Con2}, {Con3} ....      ]
       firstConId = openedProject.connections[0].id
       activeProjectId = api_client.project.active_project_id
       print("Active project ID: %s" % activeProjectId)

  • Haal alle benodigde parameters op uit het ideaCon-bestand (aantal bouten, diameter, lasgrootte, boutsamenstelling)

       #parameters ophalen uit ideaCon-bestand
       include_hidden = True
       parameters = api_client.parameter.get_parameters(activeProjectId, firstConId, include_hidden=include_hidden)       
       #standaardwaarden ophalen uit het ideaCon-bestand
       #Diameter van de bout
       boltParameter = parameters[3]
       #print('bout ',boltParameter.value)
       #Aantal boutrijen
       rowParameter = parameters[11]
       #print('rij ',rowParameter.value)
       #Lasgrootte
       weldParameter = parameters[28]
       #print('las ',weldParameter.value)
       #Boutsamenstelling
       boltAssemblyParameter = parameters[29]
       #print('boutsamenstelling ',boltAssemblyParameter.value)

  • We willen alleen resultaten verkrijgen wanneer de berekening 100% positief is voor alle onderdelen (platen, lassen, bouten), dus moeten we Stop bij grensrek instellen op True. Resultaten worden opgeslagen in een lijst, genaamd matrix, die we vervolgens gebruiken om een grafiek weer te geven.

       #instellingen
      updateSettings = api_client.settings.get_settings(api_client.project.active_project_id)

       from typing import Dict
       updateSettings: Dict [str, object] = {
        "calculationCommon/Analysis/AnalysisGeneral/Shared/StopAtLimitStrain@01" : True,
        "calculationCommon/Checks/Shared/LimitPlasticStrain@01" : 0.05        
             }
       api_client.settings.update_settings(api_client.project.active_project_id, updateSettings)  

       #Definitieve resultatenlijst
       matrix = []             

  • Nu starten we een cyclus door de lassen te variëren (van t = 8 tot 5 mm), de boutdiameter (van M16 tot M12) en het aantal rijen (van 3 tot 1). De getallen 8, M16 en 3 zijn waarden afkomstig uit het ideaCon-bestand. De lopende resultaten worden op het scherm weergegeven en ook toegevoegd aan de resultatenlijst.

       #doorlopen van lassen met gegeven rijen en bouten
       for row in range(rowParameter.value,1, -1):
           #print ('Aantal boutrijen is', row)
           for bolt in range(int(1000*boltParameter.value), 12,-2):               

               for weld in range(int(1000*weldParameter.value), 5,-1):                   

                   par_row = IdeaParameterUpdate()            # Maak een nieuw exemplaar aan
                   par_row.key = rowParameter.key
                   par_row.expression = str(row)                    

                   par_bolt = IdeaParameterUpdate()            # Maak een nieuw exemplaar aan
                   par_bolt.key = boltParameter.key
                   par_bolt.expression = str(bolt/1000)  # Verlaag de expressie                                                        

                   par_boltAssembly = IdeaParameterUpdate()            # Maak een nieuw exemplaar aan  
                 par_boltAssembly.key = boltAssemblyParameter.key
                 par_boltAssembly.expression = str('M'+ str(bolt) + ' 8.8')                                 

                   par_weld = IdeaParameterUpdate()            # Maak een nieuw exemplaar aan
                   par_weld.key = weldParameter.key
                   par_weld.expression = str(weld/1000)  # Verlaag de expressie

                   updateResponse = api_client.parameter.update(activeProjectId, firstConId, [par_row, par_bolt, par_boltAssembly, par_weld]  )
                   updateResponse.set_to_model                                 

                   # Controleer of de parameters succesvol zijn bijgewerkt
                   if updateResponse.set_to_model == False:
                  print('Parameters mislukt: %s' % ', '.join(updateResponse.failed_validations))

                   #stel het type analyse in
                   ConCalculationParameter.analysis_type = "stress_strain"                        

                   conParameter = ConCalculationParameter()
                   conParameter.connection_ids = [ firstConId ]
                   summary = api_client.calculation.calculate(activeProjectId, conParameter.connection_ids)                    

                  # Resultaten ophalen na berekening, opslaan in apart bestand en de actuele resultaten weergeven          
                   results = api_client.calculation.get_results(activeProjectId, conParameter.connection_ids)
                 CheckResSummary = results[0].check_res_summary
                  costs = api_client.connection.get_production_cost(api_client.project.active_project_id, firstConId)

                   api_client.project.download_project(activeProjectId, r'C:\Users\AlexanderSzotkowski\Documents\IDEA\API\Tutorial 04\tutorial 03 with template-updated.ideaCon')

                   if CheckResSummary[0].check_status == False:
                      break

                   if CheckResSummary[0].check_status == True:
                    print (row,'rijen van', bolt, 'bouten', 'en lasgrootte ',par_weld.expression,' resultaten zijn OK. Kosten: ', costs.total_estimated_cost)
                    values= [row, bolt,par_weld.expression,costs.total_estimated_cost]
                    #print(values)
                    matrix.append(values)                   

                   else:
                     print ('Iteratie %i mislukt' % weld)

               else:
                     print ('Iteratie %i voor las mislukt' % weld)                    

           else:
                  print ('Iteratie %i voor bouten mislukt' % bolt)                 

       else:
           print ('Iteratie %i voor rijen mislukt' % row)

  • Het laatste deel betreft het aanmaken van een grafiek met onze resultaten. 

           #Grafiek aanmaken met resultaten
           # Waarden extraheren uit de matrix          
           flat = [x for row in matrix for x in row]
           rows = flat[0::4]
           #print('rows', rows)
           diameter = flat[1::4]
           #print('diammeter', diameter)  
           weld = flat[2::4]
           #print('weld', weld)
           costs = flat[3::4]  
           #print('costs', costs)
           s = 50

           fig, ax = plt.subplots( )
           # Gebruik een lus om elk punt te plotten met een ander markeertype op basis van diameter en aantal rijen
           for weldi, costsi, rowsi, diameteri in zip(weld, costs, rows, diameter):

            if diameteri == 16 and rowsi == 3:
                    marker_style = 'o'
                    col = 'blue'

            elif diameteri == 16 and rowsi == 2:
                    marker_style = 'o'
                    col = 'red' 

            elif diameteri == 14 and rowsi == 3:
                    marker_style = '+'
                    col = 'blue'

            elif diameteri == 14 and rowsi == 2:
                    marker_style = '+'
                    col = 'red' 

            else:
                    marker_style = 'D'
                   col = 'black'                  

            ax.scatter(weldi, costsi, s, marker=marker_style, c=col)           

           ax.set_ylim([min(costs)-10, max(costs)+10])

           #ax.legend()
           plt.text(0, 90, 'red "x" 2 rows of M12', fontsize=10, color='red', ha='left', va='center')
           plt.text(0, 92, 'blue "x" 3 rows of M12', fontsize=10, color='blue', ha='left', va='center')
           plt.text(0, 94, 'red "+" 2 rows of M14', fontsize=10, color='red', ha='left', va='center')
           plt.text(0, 96, 'blue "+" 3 rows of M14', fontsize=10, color='blue', ha='left', va='center')
           plt.text(0, 98, 'red "dot" 2 rows of M16', fontsize=10, color='red', ha='left', va='center')
           plt.text(0, 100, 'blue "dot" 3 rows of M16', fontsize=10, color='blue', ha='left', va='center')

           ax.set_title("Kosten")
           ax.set_ylabel('Kosten in €')
           ax.set_xlabel('Lassen in m')
           ax.axhline(0, color='grey', linewidth=0.8)
           ax.grid(True)
           plt.show()

Zoals u kunt zien, is in dit specifieke geval de meest economische verbinding die met een 6 mm las en drie rijen M14-bouten.

Bijgevoegde downloads

  • tutorial 04 - 3 optimize bolts and welds.py (PY, 8.9 KB)

  • tutorial 03 with template-new.ideaCon (IDEACON, 58.9 KB)

Gerelateerde artikelen

API/Developer-documentatiewebsite
  • Staal
  • Beton
  • IDEA Open Model (API)
  • v25.1
  • v23.1
  • +5
  • Staal
  • Beton
  • IDEA Open Model (API)
  • v25.1
  • v23.1

Knowledge base

API/Developer-documentatiewebsite

Lees meer
Hoe te beginnen met API - Basis 01
  • Staal
  • Connection
  • IDEA Open Model (API)
  • +3
  • Staal
  • Connection
  • IDEA Open Model (API)

Tutorials

Hoe te beginnen met API - Basis 01

Lees meer
Parametrisch ontwerp in IDEA StatiCa Connection - Basisprincipes (01)
  • Staal
  • Connection
  • Connection Library
  • Parametric design
  • IDEA Open Model (API)
  • +5
  • Staal
  • Connection
  • Connection Library
  • Parametric design
  • IDEA Open Model (API)

Tutorials

Parametrisch ontwerp in IDEA StatiCa Connection - Basisprincipes (01)

Lees meer