вторник, 7 апреля 2015 г.

Семейства для армирования - часть 3

Продолжаю цикл статей о создании семейств арматуры, попадающих в одну спецификацию со стандартной арматурой.
В первой части мы создали rfa-семейство в категории "Несущая арматура", а во второй части - разобрали принцип создания спецификации, выводящей нужные параметры.

В этой части рассмотрим принцип создания остальных параметров, необходимых нам в спецификации - названия, массы, количества.




Часть 1 - Наименование

Самое простое, что часто рекомендуют - просто выводить в столбец "Имя типа". Неплохой способ, вот только у нас может быть два типа арматуры "12 А400" - например, если это нижняя и верхняя арматура плиты. Если в спецификации будет написано "12 А400 верхняя" - это нам явно не подойдет.

Другой способ - создать текстовый параметр, по "типу", и вручную добавить его к типам арматуры и семейств. Этот способ мне тоже не нравится - он увеличивает вероятность ошибки. Есть вероятность того, что человек создаст новый типоразмер, но забудет изменить параметр наименования - с не очень приятными последствиями.

Я предпочитаю потратить больше сил, но сделать так, чтобы система была устойчива к ошибкам. Параметр наименования - "12 А400" - будем вычислять при помощи формулы, точнее, цепочки из if-ов.

Правда, еще один параметр понадобится добавить - для класса арматуры. Сделаем также, как я описывал в статье про ведомость расхода стали, но будем использовать общий параметр.

Создаю общий параметр "Класс арматуры", тип данных - целое:


Добавляю этот параметр как параметр проекта, по типу, для категории "Несущая арматура", прописываю для каждого типа арматуры нужный класс.


Добавляю этот же параметр для семейства арматуры:


Загружаю семейство в проект. Любознательный читатель наверняка подумает - "Интересно, не будут ли конфликтовать параметры проекта и семейства - ведь это один и тот же общий параметр?". Конфликтовать не будут, но кое-что интересное будет происходить - расскажу как-нибудь :)

Добавляю в спецификацию арматуры параметр "АрмКласс". Должно получиться что-то такое:


Дополнительных расчетных параметров не надо, так как используется единый общий параметр.

Создаю расчетный параметр "НаименованиеРасчетное", тип данных - текст. Напишу формулу, подставляющую нужный текст в зависимости от параметров "АрмКласс" и "ДиаметрРасчетный":

if(and(АрмКласс = 240, ДиаметрРасчетный = 6 мм), "Ø6 А240", if(and(АрмКласс = 240, ДиаметрРасчетный = 8 мм), "Ø8 А240", if(and(АрмКласс = 240, ДиаметрРасчетный = 10 мм), "Ø10 А240", if(and(АрмКласс = 240, ДиаметрРасчетный = 12 мм), "Ø12 А240", if(and(АрмКласс = 240, ДиаметрРасчетный = 14 мм), "Ø14 А240", if(and(АрмКласс = 240, ДиаметрРасчетный = 16 мм), "Ø16 А240", if(and(АрмКласс = 240, ДиаметрРасчетный = 18 мм), "Ø18 А240", if(and(АрмКласс = 240, ДиаметрРасчетный = 20 мм), "Ø20 А240", if(and(АрмКласс = 400, ДиаметрРасчетный = 10 мм), "Ø10 А400", if(and(АрмКласс = 400, ДиаметрРасчетный = 12 мм), "Ø12 А400", if(and(АрмКласс = 400, ДиаметрРасчетный = 14 мм), "Ø14 А400", if(and(АрмКласс = 400, ДиаметрРасчетный = 16 мм), "Ø16 А400", if(and(АрмКласс = 400, ДиаметрРасчетный = 18 мм), "Ø18 А400", if(and(АрмКласс = 400, ДиаметрРасчетный = 20 мм), "Ø20 А400", if(and(АрмКласс = 400, ДиаметрРасчетный = 22 мм), "Ø22 А400", if(and(АрмКласс = 400, ДиаметрРасчетный = 25 мм), "Ø25 А400", if(and(АрмКласс = 400, ДиаметрРасчетный = 32 мм), "Ø32 А400", if(and(АрмКласс = 400, ДиаметрРасчетный = 40 мм), "Ø40 А400", "Проверьте формулу"))))))))))))))))))

Выглядит страшно, но работает - как из пушки. Для более удобного создания таких формул можно воспользоваться Notepad++ или программкой от Романа Митина.

Должно получиться что-то такое:


Часть 2 - Масса

Обратите внимание - тут я уже создал параметр расчетной длины, по тому же принципу, что и для диаметра - думаю, разберетесь. Длину и диаметр будем использовать для подсчета массы.

Насчет принципа подсчета - опять же, не претендую на истину. Может быть, у вас есть свои способы подсчета массы. Я пользуюсь теми же if-цепочками - тем же способом, что описывал в статье про ведомость расхода стали, но с использованием хитрого округления.

Создаю расчетный параметр "МассПогМетра", в качестве условия использую "ДиаметрРасчетный":
if(ДиаметрРасчетный = 6 мм, 0.222, if(ДиаметрРасчетный = 8 мм, 0.395, if(ДиаметрРасчетный = 10 мм, 0.617, if(ДиаметрРасчетный = 12 мм, 0.888, if(ДиаметрРасчетный = 14 мм, 1.208, if(ДиаметрРасчетный = 16 мм, 1.578, if(ДиаметрРасчетный = 18 мм, 1.998, if(ДиаметрРасчетный = 20 мм, 2.465, if(ДиаметрРасчетный = 22 мм, 2.984, if(ДиаметрРасчетный = 25 мм, 3.85, if(ДиаметрРасчетный = 28 мм, 4.83, if(ДиаметрРасчетный = 32 мм, 6.31, if(ДиаметрРасчетный = 36 мм, 7.99, if(ДиаметрРасчетный = 40 мм, 9.865, 0))))))))))))))



Создаю параметр "МассаРасчетная", вычисляю массу стержня через длину и массу погонного метра:

if((МассаПогМетра * ДлинаРасчетная) < 1000 мм, 0.01 * roundup(МассаПогМетра * ДлинаРасчетная / 10 мм), 0.1 * roundup(МассаПогМетра * ДлинаРасчетная / 100 мм))


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

Часть 3 - Количество

Тот самый столбец, который задавал нам проблем - и сейчас мы его победим!

Во первых, обратим внимание, что в обычной спецификации арматуры мы используем не параметр "Число", а "Количество" - оно и понятно, ведь объект массива арматуры может быть один, а стержней внутри него - несколько. Построим наши семейства по тому же принципу.

Создаю обычное семейство в "Обобщенной модели" с профилем арматуры, который я буду размножать массивом. Это семейство не следует делать общим! Оно нам нужно только для геометрии:


Загружаю этот хомут в свое семейство категории "Несущая арматура". Не общие семейства, как мы помним, при такой загрузке приобретают в проекте свойства "Родительского" семейства, так что все будет управляться вместе.

Создам общий параметр "АрмКоличество", типа "Целое". Добавлю его к семейству. Создаю массив хомутов с использованием этого параметра:


А вот это семейство уже можно сделать "Общим", если планируется подгружать его в какие-то другие семейства-сборки. Кстати, можно делать каждый стержень и отдельным общим семейством, тогда в параметр "АрмКоличество" надо просто вписывать единицу.

Загружаем семейство в проект. Обратите мнение, что из-за того, что отдельные хомуты - не общие семейства, мы не сможем выбрать их при помощи tab.



 Вывожу в спецификацию параметр "АрмКоличество". По тому же принципу, что и для "Диаметра", создаю параметр "КоличествоРасчетное":

КоличествоРасчетное = if(АрмВыполненаСемейством, АрмКоличество, Количество)


Ну вот у нас есть все основные параметры для того, чтобы собрать спецификацию арматуры. Нужно скрыть-передвинуть столбцы, настроить границы и получить что-то такое:


Тут уже дело техники, расскажу как-нибудь в следующий раз :)

Удачи!



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

  1. "Благодаря использованию округления через формулы я могу выводить массу с округлением до одного или двух знаков после запятой, а также не получу проблем при подсчете итогов."
    О каких проблемах идет речь? Все четко. А при таком способе округления получаем повышенный расход.

    ОтветитьУдалить
    Ответы
    1. Если поставить сто стержней массой 1.373кг и округлить массу до одного знака через "Форматирование" - получим 1.4кг. Если определить суммарную массу - получится 137.3кг. Если кто-нибудь решит проверить спецификации вручную - он умножит 1.4х100 = 140кг, и напишет замечание "Не хватает 2.7кг деталей". А так - да, Ревит всё считает четко.

      Удалить
    2. Бодрый день,Александр! При загрузке хомута - ревит пишет - При загрузке '26': Невозможно загрузить семейство арматурных профилей в любое другое семейство. Почему не загружается? Я просто открыл созданное загружаемое семейство - несущая арматура. В чем тут дело?

      Удалить
    3. Скиньте семейство на почту, что-то я вообще плохо понимаю, чего вы там делаете

      Удалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
    Ответы
    1. Нужно включить для столбца "КоличествоРасчетное" опцию "Вычислять итоги".

      Удалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
  4. Добрый день,Александр!
    Хотелось бы узнать как можно создать подкатегорию -конструктивная арматура или несущая арматура? Дело в том,что при выборе обобщенной модели,появляется подкатегория с тем же именем,но теряется несущая арматура. Благодарю.

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