пятница, 21 августа 2015 г.

8 узлов

Нам пишут, есть ли в Robot 8 узловые конечные элементы для оболочек? Уважаемая редакция Robot & Хобот отвечает, что такие конечные элементы есть, но не для всех пользователей. Вы не найдете их через пользовательский интерфейс. Увидеть и использовать их можно только через API. Много лет назад разработчики убрали эти конечные элементы из диалоговых окон и оставили только по причине обратной совместимости. Сегодня мы научимся основам работы с API Robot на примере доставания из мрачных глубин 8 узловых конечных элементов и назначения их оболочкам.

Будем использовать встроенный в Microsoft Excel редактор VBA. Вызовем его из открытой книги Excel сочетанием клавиш Alt+F11, зайдем в Tools – References и добавим ссылку на библиотеку Robot Object Model:
001NODES
Скопируйте текст программы в окно редактора, выберите в Robot оболочки и выполните команду Run.
Sub MeshParams()
Dim robApp As IRobotApplication
Set robApp = New RobotApplication

Dim PanelSel As RobotSelection
Set PanelSel = robApp.Project.Structure.Selections.Get(I_OT_PANEL)

Dim PanelCol As RobotObjObjectCollection
Set PanelCol = robApp.Project.Structure.Objects.GetMany(PanelSel)

Dim obj As IRobotObjObject
For I = 1 To PanelCol.Count
    Set obj = PanelCol.Get(I)
    obj.Mesh.Params.SurfaceParams.Method.Method = I_MMT_DELAUNAY
    obj.Mesh.Params.SurfaceParams.FiniteElems.Type = I_MSFET_8NODE_QUADRIL
    obj.Mesh.Params.SurfaceParams.Delaunay.RegularMesh = False
   
    obj.Mesh.Params.SurfaceParams.Generation.Type = I_MGT_ELEMENT_SIZE
    obj.Mesh.Params.SurfaceParams.Generation.ElementSize = 1
   
    obj.Mesh.Generate
Next I

Set objParams = Nothing
Set robApp = Nothing

End Sub
Представленный макрос очень сырой, не содержит проверок, обработчика ошибок и пользовательского интерфейса, но он позволяет очень быстро получить желаемый результат.Давайте разберем, что происходит при исполнении данного макроса.
Получаем все выбранные нами оболочки в Robot:
Dim PanelSel As RobotSelection
Set PanelSel = robApp.Project.Structure.Selections.Get(I_OT_PANEL)


Даже если мы в модели размашисто выделим рамкой и зацепим стержни с узлами, все равно выбор сработает корректно, т.к. используется I_OT_PANEL.
Создаем коллекцию из выбранных оболочек:
Dim PanelCol As RobotObjObjectCollection
Set PanelCol = robApp.Project.Structure.Objects.GetMany(PanelSel)

Это нам необходимо, чтобы автоматически получить количество выбранных оболочек для запуска цикла перебора:
For I = 1 To PanelCol.Count

В этом цикле макрос обрабатывает каждую выбранную оболочку по очереди. Получаем i-ую оболочку и начинаем назначать ей свойства.
Set obj = PanelCol.Get(I)

Практически все свойства, доступные через пользовательский интерфейс, можно назначить через API:
001
В этом макросе мы назначаем только необходимые параметры, без которых  не получится извлечь из темного угла 8 узловые элементы.
Назначаем метод Делоне. При желании можно использовать и метод Кунса (I_MMT_COONS)
obj.Mesh.Params.SurfaceParams.Method.Method = I_MMT_DELAUNAY

Выбираем нужный тип конечных элементов:
obj.Mesh.Params.SurfaceParams.FiniteElems.Type = I_MSFET_8NODE_QUADRIL

Снимаем флажок Регулярная сетка:
obj.Mesh.Params.SurfaceParams.Delaunay.RegularMesh = False

Устанавливаем размер конечного элемента в метрах:  
obj.Mesh.Params.SurfaceParams.Generation.Type = I_MGT_ELEMENT_SIZE
obj.Mesh.Params.SurfaceParams.Generation.ElementSize = 0.5


Создаем сетку:
obj.Mesh.Generate

В принципе эту команду можно и не выполнять и создать сетку для всех оболочек в Robot нажав кнопочку. Для этого перед в начале отроки попробуйте добавить символ ‘ .
Результат макроса:
002NODES
Как видим, API это не страшно и даже очень полезно.

15 комментариев:

  1. Уважаемая редакция Robot & Хобот! Большое спасибо за полезную информацию. Осталось разобраться, что же такое API? С чего нужно начать, с VBA?
    Romanich, а с помощью API можно упростить/оптимизировать/ускорить армирование балок и колонн?

    ОтветитьУдалить
    Ответы
    1. Мне кажется, что использование VBA самый легкий и быстрый путь. Если знаете C#, C++ и т.д. можно их использовать. А что именно вы хотите с армированием балок и колонн сделать?

      Удалить
    2. Romanich, хотелось бы быстро менять настройки, например, количество вертикальных рядов араматуры, горизонтальных рядов, упростить расстановку поперечной арматуры - иногда приходится вручную копировать в эксель, что бы правильно посчитать расстановку. В роботе, примерно 80 процентов настроек по армированию балок не трогаю, а вот к 20 процентам хотелось бы иметь быстрый доступ. Работаю по нормам BAEL.

      Удалить
    3. Насколько я помню, нет возможности залезть через API в фактическое армирование.

      Удалить
    4. Романыч, я наверное путаю красное с горячим. Я хотел бы иметь более быстрый доступ к настройкам, в виде, возможно, панели инструментов, с возможностью галками быстро выбрать нужную комбинацию.

      Удалить
  2. Для тех у кого от слов VBA, C#, C++ и т.д. волосы на голове дыбом встают, так же как у меня, есть штатный инструмент Revit который позволяет перегнать подобранную арматуру для балок и колонн из ROBOT.
    Останется только проставить выноски, образмерить и закомпоновать все на лист.
    P.S. ну разве это не круто ???

    ОтветитьУдалить
  3. Зачем нам 8 узловой конечный элемент?

    ОтветитьУдалить
    Ответы
    1. Нам он совершенно не нужен :)

      Удалить
    2. Если следовать теории МКЭ, то в 4х узловом пластинчато-оболочечном конечном элементе, перемещения меняются линейно от узла к узлу в рамках элемента, а напряжения (суть - первая производная от перемещений помноженная на модуль упругости) являются константными. Узловые значения напряжений получаются путем осреднения значений элементов которым принадлежит узел.

      При 8 узловом элементе перемещения меняются по квадратичному закону по элементу, а напряжения, соответственно, по линейному. Что приводит к более точному (в теории) распределению напряженно деформированного состояния.

      Кроме того 8 узловые элементы более точно описывают криволинейные поверхности. Если эти поверхности сферические, конические или цилиндрические - то вообще без искажений. Для сложных сплайновых поверхностей - искажения описания формы существенно меньше (особенно при мелких сетках) чем для обычного линейного (4х узлового).

      А вот нужно ли строителям-проектировщикам это не в теории, а на практике. Тут уже ответил Romanich

      Удалить
  4. Давеча пробовал узнать через API расчетную длину стального элемента - так и не нашел способ.

    P.S. Есть еще проблема с автоматической расчетной длинной - если рама стоит на фундаменте (оболочки), а не на опоре, то длина считается неправильно. Добавление пружинной опоры малой жесткости помогает, но только не для норм СНиП.

    ОтветитьУдалить
    Ответы
    1. Киньте тестовую модельку.

      Удалить
    2. https://www.dropbox.com/s/99slu9qrdoiz2oj/ABL_diff_supports.rtd?dl=0
      При переключении на нормы еврокода расчетные длины считаються корректно.

      Удалить
    3. Пару лет назад писал в ветке по Robot на Autodesk Discussion об этом. По Eurocode тоже пишет об ошибке: Ошибка при расчете расчетной длины (ось Y) для элементов ' 5 7 21 22 '. Принимается значение 1.0
      По СНиП принимается 100 )))

      Удалить
  5. Напишите о работе в UAE. Простому нашему инженеру реально там работать? Какие стоят задачи перед инженерами? Как выдают задания? Большое спасибо. Очень интересно.

    ОтветитьУдалить
  6. Thermoplastics like styrene and polycarbonate can withstand warm or even hot conditions—but at sure temperatures they'll eventually soften once more, and thus are in a position to} be recycled. The world COVID-19 pandemic has led to a sudden pause to manufacturing activities across the globe, affecting the demand for plastics and in addition manufacturing & processing Bluetooth Motorcycle Headset of them. The most critically impacted end-use segments of the plastics trade include automotive & transportation, shopper items, industrial equipment, construction, and electronics. The world injection molded plastics market is expected to grow at a compound annual progress rate of four.2% from 2022 to 2030 to succeed in USD 423.7 billion by 2030.

    ОтветитьУдалить