Idea Statica
  • Ocel
  • Beton
  • BIM & pracovní postupy
  • Ceník
  • O společnosti
  • Přehled oceli
  • Návrh přípojů
  • Návrh ocelových prvků
  • Parametrický návrh
  • Ocelové případové studie
  • Přehled betonu
  • Stěny a D-oblasti
  • Kotvení do železobetonu
  • Průřezy a prvky
  • Betonové případové studie
  • BIM přehled
  • Podporované integrace
  • Checkbot
  • Viewer
  • API
  • Centrum podpory
  • Online kurzy a certifikace
  • Blog
  • Stahování a licence
  • Plány
  • Bezplatný komunitní nástroj
  • Enterprise licence
  • Studenti a univerzity
  • Spočítejte si úspory
  • O nás
  • Kontakty
  • Výzkum & vývoj
  • Distributoři
  • Poznejte naše zákazníky
  • Kariéra
  • Ocel
    Přehled oceliNávrh přípojůNávrh ocelových prvkůParametrický návrhOcelové případové studie
  • Beton
    Přehled betonuStěny a D-oblastiKotvení do železobetonuPrůřezy a prvkyBetonové případové studie
  • BIM & pracovní postupy
    BIM přehledPodporované integraceCheckbotViewerAPI
  • Centrum podporyOnline kurzy a certifikaceBlogStahování a licence
  • Ceník
    PlányBezplatný komunitní nástrojEnterprise licenceStudenti a univerzitySpočítejte si úspory
  • O společnosti
    O násKontaktyVýzkum & vývojDistributořiPoznejte naše zákazníkyKariéra
14denní zkušební verze
14denní zkušební verze

Přihlaste se k odběru našeho newsletteru

Společnost

  • O nás
  • Partneři
  • Kariéra
  • Patent

Zdroje

  • Zákaznické projekty
  • Případové studie
  • Connection Library
  • Odborné publikace

Práva

  • EULA
  • Zásady soukromí
  • Smluvní podmínky Viewer
  • Licencování

Pomoc

  • Kontakt
  • Cenová nabídka
  • Distributoři
  • Ke stažení
FacebookInstagramLinkedInYouTube

© IDEA StatiCa 2009-2026

Důvěryhodný a používaný po celém světě inženýry, výrobci a konzultanty.

Centrum podporyNávodyJak začít s API – Optimalizace komponent ve styčníku 04
Jak začít s API – Optimalizace komponent ve styčníku 04
SteelConnection designTutorialsConnectionIDEA Open Model (API)

Jak začít s API – Optimalizace komponent ve styčníku 04

Tento článek je také dostupný v
ENCZDEESFRITPTNLHUROKRPLTHTRVIZH

V tomto tutoriálu se naučíte, jak pomocí parametrů optimalizovat některé komponenty (svary, šrouby) ve styčníku.

První kroky

Doporučujeme projít si tutoriál How to get started with API - Basics 01, který vás naučí o API a jak nastavit prostředí.

Soubor přípoje 

Tento příklad vychází ze souborů vytvořených v rámci tutoriálu How to get started with API - Import a template and run calculation 03.

Stáhněte si prosím soubor tutorial 03 with template-new.ideaCon.

Chceme optimalizovat komponenty přípoje (svary, průměr a počet šroubů). Výsledkem optimalizace jsou náklady na styčník, které jsou přehledně zobrazeny v grafu.

Python klient

Spusťte "IdeaStatiCa.ConnectionRestApi.exe" v CMD ve správné složce IDEA StatiCa a otevřete IDE nástroj dle vašeho výběru.

  • Vytvořte nový soubor a importujte balíčky které umožní použití výpočtu a propojení s localhost URL. 

Zdrojový kód:

## Import of API package
from ideastatica_connection_api.models.con_calculation_parameter import ConCalculationParameter
from ideastatica_connection_api.models.idea_parameter_update import IdeaParameterUpdate

## Link with 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

#additional packages
import matplotlib.pyplot as plt
import numpy as np
from typing import Concatenate

  • Nakonfigurujte logování pomocí proměnné "baseUrl," která vyvolá váš localhost. Ve druhém kroku spárujte absolutní cestu k vašemu souboru IDEA StatiCa Connection.

## Configure logging
baseUrl = "http://localhost:5000"

## Absolute path into folder with your python script and connection module
project_file_path = r"C:\Users\AlexanderSzotkowski\Documents\IDEA\API\Tutorial 04\tutorial 03 with template -new.ideaCon"
print(project_file_path)

  • Spárujte klienta s již běžící službou. Použijte blok try/except - jelikož blok try vyvolá chybu, provede se blok except. V první fázi je potřeba otevřít projekt a najít ID projektu vašeho projektu, které je jedinečné pro každý projekt IDEA StatiCa. Poté vybereme první přípoj uložený v našem souboru.

# Create a client attached to an already running service
with connection_api_service_attacher.ConnectionApiServiceAttacher(baseUrl).create_api_client() as api_client:
    try:
        # Open project
        print("Opening project %s" % project_file_path)
       #api_client.project.active_project_id  - ID of opened 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)

  • Načtěte všechny potřebné parametry z ideaCon (počet šroubů, průměr, velikost svaru, sestava šroubu)

       #get parameters from ideaCon file
       include_hidden = True
       parameters = api_client.parameter.get_parameters(activeProjectId, firstConId, include_hidden=include_hidden)       
       #get default values from the ideaCon file
       #Diameter of the bolt
       boltParameter = parameters[3]
       #print('bolt ',boltParameter.value)
       #Number of bolt rows
       rowParameter = parameters[11]
       #print('row ',rowParameter.value)
       #Weld size
       weldParameter = parameters[28]
       #print('weld ',weldParameter.value)
       #Bolt assembly
       boltAssemblyParameter = parameters[29]
       #print('bolt assembly ',boltAssemblyParameter.value)

  • Chceme získat výsledky pouze tehdy, když je výpočet 100% pozitivní pro všechny části (plechy, svary, šrouby), takže musíme nastavit Stop at the limit strain na True. Výsledky budou uloženy v seznamu nazvaném matrix, který poté použijeme k zobrazení grafu.

       #setup
      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)  

       #Final results database
       matrix = []             

  • Nyní spustíme cyklus změnou svarů (od t = 8 do 5 mm), průměru šroubu (od M16 do M12) a počtu řad (od 3 do 1). Čísla 8, M16 a 3 jsou hodnoty převzaté ze souboru ideaCon. Průběžné výsledky se vypisují na obrazovku a také se přidávají do seznamu výsledků.

       #cycling through welds with given rows and bolts
       for row in range(rowParameter.value,1, -1):
           #print ('Number of bolt rows 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()            # Create a new instance
                   par_row.key = rowParameter.key
                   par_row.expression = str(row)                    

                   par_bolt = IdeaParameterUpdate()            # Create a new instance
                   par_bolt.key = boltParameter.key
                   par_bolt.expression = str(bolt/1000)  # Decrement the expression                                                        

                   par_boltAssembly = IdeaParameterUpdate()            # Create a new instance  
                 par_boltAssembly.key = boltAssemblyParameter.key
                 par_boltAssembly.expression = str('M'+ str(bolt) + ' 8.8')                                 

                   par_weld = IdeaParameterUpdate()            # Create a new instance
                   par_weld.key = weldParameter.key
                   par_weld.expression = str(weld/1000)  # Decrement the expression

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

                   # Check if the parameters were updated successfully
                   if updateResponse.set_to_model == False:
                  print('Parameters failed: %s' % ', '.join(updateResponse.failed_validations))

                   #set the type of analysis
                   ConCalculationParameter.analysis_type = "stress_strain"                        

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

                  # Get results after calculation, store it in separate file and print the actual results          
                   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,'rows of', bolt, 'bolts', 'and weld size ',par_weld.expression,' results are OK. Costs: ', costs.total_estimated_cost)
                    values= [row, bolt,par_weld.expression,costs.total_estimated_cost]
                    #print(values)
                    matrix.append(values)                   

                   else:
                     print ('Iteration %i failed' % weld)

               else:
                     print ('Iteration %i for weld failed' % weld)                    

           else:
                  print ('Iteration %i for bolts failed' % bolt)                 

       else:
           print ('Iteration %i for rows failed' % row)

  • Poslední částí je vytvoření grafu s našimi výsledky. 

           #Create graph with results
           # Extracting values from the 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( )
           # Use a loop to plot each point with a different marker based on diameter and number of rows
           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("Costs")
           ax.set_ylabel('Costs in €')
           ax.set_xlabel('Welds in m')
           ax.axhline(0, color='grey', linewidth=0.8)
           ax.grid(True)
           plt.show()

Jak je vidět, v tomto konkrétním případě je nejekonomičtějším styčníkem ten se svarem 6 mm a třemi řadami šroubů M14.

Připojené soubory ke stažení

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

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

Související články

Webové stránky s dokumentací API/vývojář
  • Ocel
  • Beton
  • IDEA Open Model (API)
  • v25.1
  • v23.1
  • +5
  • Ocel
  • Beton
  • IDEA Open Model (API)
  • v25.1
  • v23.1

Knowledge base

Webové stránky s API/dokumentací pro vývojáře

Číst více
Jak začít s API - Základy 01
  • Ocel
  • Connection
  • IDEA Open Model (API)
  • +3
  • Ocel
  • Connection
  • IDEA Open Model (API)

Tutorials

Jak začít s API - Základy 01

Číst více
Parametrický návrh v IDEA StatiCa Connection – Základy (01)
  • Ocel
  • Connection
  • Connection Library
  • Parametric design
  • IDEA Open Model (API)
  • +5
  • Ocel
  • Connection
  • Connection Library
  • Parametric design
  • IDEA Open Model (API)

Tutorials

Parametrický návrh v IDEA StatiCa Connection – Základy (01)

Číst více