Idea Statica
  • Metal
  • Concrete
  • Legături BIM
  • Support tehnic
  • Prețuri
  • Compania
  • Prezentare generală a oțelului
  • Proiectarea conexiunii
  • Design membru
  • Proiectare parametrică
  • Pereți și regiuni D
  • Checkbot
  • Integrări acceptate
  • Prezentare generală BIM
  • Vizualizator
  • API-uri
  • Centrul de asistență
  • E-learning și certificare
  • Blog
  • Descărcări și licențe
  • Planuri
  • Instrument gratuit pentru comunitate
  • Clienți de tip Enterprise
  • Studenți și profesori
  • Contact
  • Blog
  • Cercetare și dezvoltare
  • Distribuitori autorizați
  • Metal
    Prezentare generală a oțeluluiProiectarea conexiuniiDesign membruProiectare parametrică
  • Concrete
    Pereți și regiuni D
  • Legături BIM
    CheckbotIntegrări acceptatePrezentare generală BIMVizualizatorAPI-uri
  • Support tehnic
    Centrul de asistențăE-learning și certificareBlogDescărcări și licențe
  • Prețuri
    PlanuriInstrument gratuit pentru comunitateClienți de tip EnterpriseStudenți și profesori
  • Compania
    ContactBlogCercetare și dezvoltareDistribuitori autorizați
Probă gratuită de 14 zile
Probă gratuită de 14 zile

Abonați-vă la newsletter-ul nostru

Companie

  • Despre noi
  • Parteneriate
  • Cariere
  • Tehnologie brevetată pentru ingineri structuriști

Resurse

  • Proiecte ale clienților
  • Studii de caz
  • IDEA StatiCa Connection Library
  • Cărți de verificare

Legal

  • ACORD DE LICENȚĂ PENTRU UTILIZATORUL FINAL IDEA StatiCa
  • Politica globală de confidențialitate
  • Termeni și Condiții de Utilizare – IDEA StatiCa Viewer
  • Licențiere

Ajutor

  • Contact
  • Solicitare ofertă
  • Distribuitori
  • Descărcări
FacebookInstagramLinkedInYouTube

© IDEA StatiCa 2009-2026

Folosit și de încredere la nivel mondial de ingineri, fabricanți și consultanți.

Centrul de SuportTutorialeCum să începeți cu API - Optimizarea componentelor într-un nod 04
Cum să începeți cu API - Optimizarea componentelor într-un nod 04
SteelConnection designTutorialsConnectionIDEA Open Model (API)

Cum să începeți cu API - Optimizarea componentelor într-un nod 04

Acest articol este disponibil și în
ENCZDEESFRITPTNLHUROKRPLTHTRVIZH
Tradus automat din engleză

În acest tutorial, veți învăța cum să optimizați unele componente (suduri, șuruburi) într-un nod folosind parametri.

Primii pași

Vă recomandăm să parcurgeți tutorialul Cum să începeți cu API - Noțiuni de bază 01, care vă învață despre API și cum să configurați mediul de lucru.

Fișierul Connection 

Acest exemplu se bazează pe fișierele create în cadrul tutorialului Cum să începeți cu API - Importați un șablon și rulați calculul 03.

Vă rugăm să descărcați fișierul tutorial 03 with template-new.ideaCon.

Dorim să optimizăm componentele îmbinării (suduri, diametru și număr de șuruburi). Rezultatul optimizării îl reprezintă costurile nodului, prezentate în mod clar într-un grafic.

Client Python

Rulați "IdeaStatiCa.ConnectionRestApi.exe" în CMD din folderul corespunzător IDEA StatiCa și deschideți instrumentul IDE preferat.

  • Creați un fișier nou și importați pachetele care vor permite utilizarea calculului și legătura cu URL-ul localhost. 

Cod sursă:

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

  • Configurați jurnalizarea prin variabila "baseUrl", care va apela localhost-ul dumneavoastră. În al doilea pas, asociați calea absolută a fișierului 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)

  • Asociați clientul cu un serviciu deja în execuție. Utilizați blocul try/except - deoarece blocul try generează o eroare, blocul except va fi executat. În prima fază, este necesar să deschideți proiectul și să găsiți ID-ul proiectului, care este unic pentru fiecare proiect IDEA StatiCa. Apoi selectăm prima îmbinare stocată în fișierul nostru.

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

  • Preluați toți parametrii necesari din fișierul ideaCon (număr de șuruburi, diametru, dimensiune sudură, ansamblu șuruburi)

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

  • Dorim să obținem rezultate doar atunci când calculul este 100% pozitiv pentru toate componentele (plăci, suduri, șuruburi), astfel că trebuie să setăm Oprire la deformația limită pe True. Rezultatele vor fi stocate într-o listă numită matrix, pe care o folosim ulterior pentru afișarea unui grafic.

       #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 = []             

  • Acum, pornim un ciclu prin modificarea sudurilor (de la t = 8 la 5 mm), diametrului șuruburilor (de la M16 la M12) și numărului de rânduri (de la 3 la 1). Valorile 8, M16 și 3 sunt preluate din fișierul ideaCon. Rezultatele curente sunt afișate pe ecran și adăugate în lista de rezultate.

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

  • Ultima parte constă în crearea unui grafic cu rezultatele noastre. 

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

După cum se poate observa, în acest caz particular, nodul cel mai economic este cel cu o sudură de 6 mm și trei rânduri de șuruburi M14.

Descărcări atașate

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

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

Articole conexe

Site-ul de documentație API/Developer
  • Oțel
  • Beton
  • IDEA Open Model (API)
  • v25.1
  • v23.1
  • +5
  • Oțel
  • Beton
  • IDEA Open Model (API)
  • v25.1
  • v23.1

Knowledge base

Site-ul de documentație API/Developer

Citește mai mult
Cum să începi cu API - Noțiuni de bază 01
  • Oțel
  • Connection
  • IDEA Open Model (API)
  • +3
  • Oțel
  • Connection
  • IDEA Open Model (API)

Tutorials

Cum să începi cu API - Noțiuni de bază 01

Citește mai mult
Proiectare parametrică în IDEA StatiCa Connection - Noțiuni de bază (01)
  • Oțel
  • Connection
  • Connection Library
  • Parametric design
  • IDEA Open Model (API)
  • +5
  • Oțel
  • Connection
  • Connection Library
  • Parametric design
  • IDEA Open Model (API)

Tutorials

Proiectare parametrică în IDEA StatiCa Connection - Noțiuni de bază (01)

Citește mai mult