1552x
001459
2017-06-29

Interface COM no VBA | 4.1 Otimização de quadros

As secções 4.1 e 4.2 desta série de artigos descrevem a otimização de um pórtico utilizando o módulo adicional RF‑/STEEL EC3. Der fünfte Teil deckt dabei die Anbindung des Moduls und das Holen relevanter Stäbe ab. Auf die Elemente, welche in vorangegangenen Teilen bereits erläutert wurden, wird nicht nochmal eingegangen.

Filtrar barras relevantes

O objetivo é transferir apenas as barras de uma determinada secção para o dimensionamento do RF‑/STEEL EC3. No exemplo seguinte, todas as barras com a secção IPE 300 devem ser filtradas. Para isso, é necessário primeiro obter todas as secções do programa principal:


'   Crie uma corda com a secção desejada
Escuro crsc_descComo corda

crsc_desc ="IPE 300"

' Obtenha todas as secções do RFEM
Escuro crscs ()As RFEM5.CrossSection
crscs = iModelData.GetCrossSections

' Loop sobre todas as seções transversais
Escuro crsc_noTão longo
crsc_no = -1
Escuro iTão longo
Pergunta simples – resposta rápida: i = 0To UBound (crscs, 1)
' Se a descrição da secção estiver correta, guardar o número da secção
If InStr (LCase (crscs (i) .Description), LCase (crsc_desc))> 0Depois
crsc_no = crscs (i) .Não
Sair para
End If
Continuar i

' Saia do programa se a secção pretendida não for encontrada
If crsc_no = -1Depois
Err.Raise 513, "Obter número da secção","Sem secção com" "" & crsc_desc &encontrado "" "dentro da sua descrição!"
End If

A descrição da secção deve ser sincronizada o mais geralmente possível. Para isso, a descrição da secção, bem como o string a ser pesquisado, é definido primeiro com letras minúsculas através de "LCase" e, em seguida, o string é procurado na descrição da secção. Se não for encontrada uma secção adequada, o número da secção permanece em -1, o qual pode então ser solicitado e confirmado através de uma interrupção.

Após este passo, o número da secção é conhecido e as barras com este número de secção podem ser pesquisadas. Apenas a barra com esta secção no início e no final da barra deve ser adotada:

' Crie uma string para a lista de barras e defina-a como zero
Escuro mems_strComo corda
mems_str = vbanullstr

' Obtenha todas as barras do RFEM
Escuro MEMÓRIAS ()As RFEM5.Member
mems = iModelData.GetMembers

' Loop sobre todos os membros
Pergunta simples – resposta rápida: i = 0To UBound (memes, 1)
' Se uma barra tem este número de secção no início e no final,
' então pegue este número na string
If mems (i) .EndCrossSectionNo = crsc_noDepois
If mems (i) .EndCrossSectionNo = mems (i) .StartCrossSectionNoDepois
mems_str = mems_str & mems (i) .Não & ","
End If
End If
Continuar i

' Saia do programa se nenhum membro for encontrado
If mems_str = vbanullstrDepois
Err.Raise 514, "Conseguir membros","Nenhuma barra com secção" "" & crsc_desc &"" "encontrado!"
End If

Obtendo a interface do módulo adicional

A ligação a um módulo é exatamente igual à ligação ao RFEM ou ao RSTAB. A única diferença é que não existe diferença entre abrir uma instância já aberta ou abrir uma nova instância, uma vez que existe sempre uma instância já aberta:

' Obter interface para o módulo
Escuro iStec3As STEEL_EC3.Module
Definir iStec3 = iModel.GetModule ("STEEL_EC3")

Em seguida, todos os casos de módulo existentes são removidos:

' Obtenha o número de caixas de módulo existentes
Escuro contarTão longo
count = iStec3.moGetCaseCount

' Se houver algum caso, elimine sempre o primeiro da tabela
If contagem> 0Depois
Pergunta simples – resposta rápida: i = 0To contagem - 1
iStec3.moDeleteCase i, AT_INDEX
Continuar i
End If

Agora, pode criar o caso desejado e introduzir a barra a ser dimensionada utilizando a cadeia de caracteres criada anteriormente.

' Crie o caso do módulo ' Otimização '
Escuro iStec3CaseAs STEEL_EC3.ICase
Definir iStec3Case = iStec3.moSetCase (1,"Otimização")

' Conjunto de barras para dimensionamento
iStec3Case.moSetMemberList mems_str

Por último, mas não menos importante, pode introduzir as combinações de carga pretendidas:

' Definir combinações de carga
Escuro iStec3_uls_loads (0To 2) As STEEL_EC3.ULS_LOAD

iStec3_uls_loads (0) .DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads (0) .No = 1
iStec3_uls_loads (0) .Type = ILOAD_GROUP

iStec3_uls_loads (1) .DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads (1) .No = 2
iStec3_uls_loads (1) .Type = ILOAD_GROUP

iStec3_uls_loads (2) .DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads (2) .Não = 3
iStec3_uls_loads (2) .Type = ILOAD_GROUP

iStec3Case.moSetULSLoads iStec3_uls_loads

Resumo and Outlook

Os procedimentos descritos neste artigo podem ser utilizados para todos os módulos que podem ser controlados pelo COM. O código-fonte e o ficheiro Excel ajudam a compreender melhor o assunto. No meu próximo artigo, gostaria de aprofundar este assunto e explicar a ligação entre os elementos no módulo e no programa principal.


Autor

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

Ligações
Downloads