Здесь разработаем переход со смещением.
За основу возьмем наш разработанный переход и начнем разбирать разницу между ними.
В "Параметризации" простого перехода у нас есть только 2 параметра:
Это длина первой и второй половины.
У перехода со смещением появляются еще 2 параметра, характеризирующие смещение и одиин расчетный.
Расчетный параметр "Смещение Offset" это гипотенуза между двумя центрами в одной плоскости.
Прочерчиваем две линии паралельных от осей перехода:
И линия соединяющая эти осевые в одной плоскости(Например по X) и будет Offset.
Не понятно зачем нам эта информация, но вдруг где пригодится.
Дальше берем наш прошлый отвод, копируем в него из стандартного объекты "Параметризация", "Порт1", "Порт2" и меняем "Тип компонента трубопровода" на "Переход эксцентрический". Данный объект поместим в библиотеку и оттуда добавим его вместо стандартного перехода.
Получается вот такой переход:
Поправим параметры пирамиды:
Геометрия X-Смещение:
-1*child.[OFFSETY]
Геометрия Y-Смещение:
-1*child.[OFFSETX]
Аналогично сделаем и у "Вычитаемой" пирамиды.
Аналогично корректируем группу "Фланец2"
Базовая точка. Y координата:
-1*child.[OFFSETX]
Базовая точка. Z координата:
child.[OFFSETY]
И вот наш переход готов, но есть одно но. Он у нас не меняется, т.к. OFFSETX и OFFSETY остаются из моего перехода, а не принимаются из условного стандартного перехода. Т.е. не получиться придумать какой то универсальный переход, который будет подстраиваться под систему.
Поэтому в своей базе я могу только четко привязаться к типам перехода. Для дальнейшей работы нам нужно понимание как измеряется OFFSETX и OFFSETY.
Когда вызываем меню создания стандартного перехода, то появляется вот такое окно:
Почему оно такое несуразное и трудночитаемое-непонятно. Иногда даже прямоугольники друг на друга налетают и становится совсем не читаемо.
И так верхняя картинка это вид сбоку на наш переход. Расставленный размер это длина. Длина у нас подбирается взависимости из размеров, тут нам ее не принципиально менять. Но придется помнить, что если периметр перехода до 2500 мм. это 300 мм., в противном случае 500 мм.
Второй(синий) прямоугольник у нас показывает тип нашего перехода и меняется с помощью параметра "Вариант расположения DIM_ALIGN_VARIANT" или ручным заданием OFFSETX и OFFSETY.
Параметр Вариант расположения DIM_ALIGN_VARIANT увы дальше никуда не уходит и нигде в детали не отображается. А зря!
Теперь разберемся с OFFSETX и OFFSETY:
Оси Х и Y правдивы только для этого окна.
На последнем прямоугольники есть куча размеров, выбираю строку с параметрами слева нужный параметр выделяется зеленым.
OFFSETX считается от оси прямоугольника начального(DIMA и DIMB) до оси прямоугольника конечного(DIMA1 и DIMB1) по горизонтали.
OFFSETY считается от оси прямоугольника начального(DIMA и DIMB) до оси прямоугольника конечного(DIMA1 и DIMB1) по вертикали.
Далее наш переход должен разделиться по типам.
Тип 4(Без смещений) мы уже нарисовали в прошлой статье. Остальные типы мы ручками прописываем какой тип в определенный параметр и проставляем формулу расчета в OFFSETX и OFFSETY.
MS предлагает нам 8 вариантов типов переходов:
9 тип возникает если в ручную расставлять промежуточные значения OFFSETX и OFFSETY. Этот тип индивидуальный и его мы рассмотрим отдельно- В базу такой переход добавлять смысла нет. Также 9 тип возникает когда OFFSETX и OFFSETY равны нулю, но тогда это простой переход, который мы разработали ранее .
Вернемся к нашим 8 типам:
Все типы удобно подписаны циферками в окне "Параметра перехода".
4 варианта это расположение по углам и 4 варианта расположения по серединам сторон. При этом мы понимаем, что типы 1 и 3, 2 и 4, 5 и 7, 8 и 6 это зеркальные переходы, на монтаже мы просто переворачиваем переход в нужную сторону. Поэтому большинство производителей унифицировали типы и оставили 4-6 типов:
Назначение типа усложняется тем, что каждый посчитал своим долгом назначить тип под себя и получилось кто в лес, кто по дрова.
В своих переходах буду использовать каталог "Неватом"(Вторая картинка). Данную картинку хотел добавить к файлам объекта в базе, но в базе есть ограничение по длине пути. И наши 8 типов превратятся в 3.
Типы 1,2,3,4 будут типом 2.
Типы 8, 6 будут типом 1.
Типы 5,7 будут типом 3.
Но для OFFSETX и OFFSETY Все равно формулы будут разные, т.е. у нас для внутреннего разделения остаются все равно 8 типов, а для наименования и спецификации их будет 3. Сложно. Проектировщику в любом случае будет сложно разобраться в нужном типе. Придется добавить еще один параметр с типом для MS "DIM_ALIGN_VARIANT Тип перехода по MS".
OFFSETX
case(parent.[DIM_ALIGN_VARIANT]
when 1 then 0,
when 2 then ([PART_PIPE_RECT_DIMA]/2)-([PART_PIPE_RECT_DIMA1]/2),
when 3 then 0,
when 4 then -1*(([PART_PIPE_RECT_DIMA]/2)-([PART_PIPE_RECT_DIMA1]/2)),
when 5 then ([PART_PIPE_RECT_DIMA]/2)-([PART_PIPE_RECT_DIMA1]/2),
when 6 then ([PART_PIPE_RECT_DIMA]/2)-([PART_PIPE_RECT_DIMA1]/2),
when 7 then -1*(([PART_PIPE_RECT_DIMA]/2)-([PART_PIPE_RECT_DIMA1]/2)),
when 8 then -1*(([PART_PIPE_RECT_DIMA]/2)-([PART_PIPE_RECT_DIMA1]/2)),
else "Укажите тип перехода")
OFFSETY
case(parent.[DIM_ALIGN_VARIANT]
when 1 then ([PART_PIPE_RECT_DIMB]/2)-([PART_PIPE_RECT_DIMB1]/2),
when 2 then 0,
when 3 then (([PART_PIPE_RECT_DIMB]/2)-([PART_PIPE_RECT_DIMB1]/2))*(-1),
when 4 then 0,
when 5 then ([PART_PIPE_RECT_DIMB]/2)-([PART_PIPE_RECT_DIMB1]/2),
when 6 then (([PART_PIPE_RECT_DIMB]/2)-([PART_PIPE_RECT_DIMB1]/2))*(-1),
when 7 then (([PART_PIPE_RECT_DIMB]/2)-([PART_PIPE_RECT_DIMB1]/2))*(-1),
when 8 then ([PART_PIPE_RECT_DIMB]/2)-([PART_PIPE_RECT_DIMB1]/2),
else "Укажите тип перехода")
В зависимости от выбора типа в параметре "DIM_ALIGN_VARIANT Тип перехода по MS" сразу меняются на необходимые OFFSETX и OFFSETY.
Подкорректируем теперь параметры:
Площадь поверхности SURFACE_AREA:
Думал, что будет проще с этими площадями, но оказалось, что надо считать каждый тип перехода:
/*Формулы для типа 1 и 3*/
var А:=[PART_PIPE_RECT_DIMB]/2/1000; /*Половина высоты верхнего основания*/
var Б:=([PART_VENT_LENGTH]-[PART_VENT_SECTION_DIMC]*2)/1000; /*Высота усеченной пирамиды*/
var В:=[PART_PIPE_RECT_DIMB1]/2/1000; /*Половина высоты нижнего основания*/
var Г:=([PART_PIPE_RECT_DIMA]/1000+[PART_PIPE_RECT_DIMA1]/1000)/2*Б; /*Площадь боковой поверхности(Под прямым углом) по стороне DIMA(Берется в расчет)*/
var Д:=sqrt(sqr(Б)+sqr(abs([PART_PIPE_RECT_DIMB]/1000-[PART_PIPE_RECT_DIMB1]/1000))); /*Высота боковой трапеции по ширине пирамиды*/
var Е:=([PART_PIPE_RECT_DIMA]/1000+[PART_PIPE_RECT_DIMA1]/1000)/2*Д; /*Площадь боковой поверхности(Напротив прямой трапеции) по стороне DIMA(Берется в расчет)*/
var Ж:=[PART_PIPE_RECT_DIMA]/2/1000; /*Половина ширины верхнего основания*/
var З:=[PART_PIPE_RECT_DIMA1]/2/1000; /*Половина ширины нижнего основания*/
var И:=sqrt(sqr(Б)+sqr(abs(Ж-З))); /*Высота боковой трапеции по высоте пирамиды*/
var К:=([PART_PIPE_RECT_DIMB]/1000+[PART_PIPE_RECT_DIMB1]/1000)/2*И; /*Площадь боковой поверхности(Равнобедренной трапеции) по стороне DIMB(Берется в расчет)*/
var Л:=([PART_PIPE_RECT_DIMA]/1000+[PART_PIPE_RECT_DIMB]/1000)*2*[PART_VENT_SECTION_DIMC]/1000; /*Площадь прямого участков отвода с первой стороны*/
var М:=([PART_PIPE_RECT_DIMA1]/1000+[PART_PIPE_RECT_DIMB1]/1000)*2*[PART_VENT_SECTION_DIMC]/1000; /*Площадь прямого участков отвода со второй стороны*/
/*Формулы для типа 2 и 4*/
var О:=([PART_PIPE_RECT_DIMB]/1000+[PART_PIPE_RECT_DIMB1]/1000)/2*Б; /*Площадь боковой поверхности(Под прямым углом) по стороне DIMB(Берется в расчет)*/
var П:=sqrt(sqr(Б)+sqr(abs([PART_PIPE_RECT_DIMA]/1000-[PART_PIPE_RECT_DIMA1]/1000))); /*Высота боковой трапеции по ширине пирамиды*/
var Р:=([PART_PIPE_RECT_DIMB]/1000+[PART_PIPE_RECT_DIMB1]/1000)/2*П; /*Площадь боковой поверхности(Напротив прямой трапеции) по стороне DIMB(Берется в расчет)*/
var С:=[PART_PIPE_RECT_DIMB]/2/1000; /*Половина ширины верхнего основания*/
var Т:=[PART_PIPE_RECT_DIMB1]/2/1000; /*Половина ширины нижнего основания*/
var У:=sqrt(sqr(Б)+sqr(abs(Ж-З))); /*Высота боковой трапеции по высоте пирамиды*/
var Ф:=([PART_PIPE_RECT_DIMA]/1000+[PART_PIPE_RECT_DIMA1]/1000)/2*У; /*Площадь боковой поверхности по стороне DIMA(Берется в расчет)*/
/*Формулы для типа 5, 6, 7, 8*/
/*Прямоугольная трапеция по стороне DIMB берется по букве О*/
/*Прямоугольная трапеция по стороне DIMA берется по букве Г*/
/*Высота трапеции по стороне DIMA берется по букве Д*/
/*Трапеция напротив прямоугольной трапеции по стороне DIMA берется по букве Е*/
/*Высота трапеции по стороне DIMB берется по букве П*/
/*Трапеция напротив прямоугольной трапеции по стороне DIMB берется по букве Р*/
case([DIM_ALIGN_VARIANT]
when 1 then format("%0.2f", (Г+Е+К*2+Л+М)*1.1),
when 2 then format("%0.2f", (О+П+Ф*2+Л+М)*1.1),
when 3 then format("%0.2f", (Г+Е+К*2+Л+М)*1.1),
when 4 then format("%0.2f", (О+П+Ф*2+Л+М)*1.1),
when 5 then format("%0.2f", (О+Г+Е+Р+Л+М)*1.1),
when 6 then format("%0.2f", (О+Г+Е+Р+Л+М)*1.1),
when 7 then format("%0.2f", (О+Г+Е+Р+Л+М)*1.1),
when 8 then format("%0.2f", (О+Г+Е+Р+Л+М)*1.1),
else 0)
Толщина стенки PART_VENT_THICKNESS:
var А:=if(real([PART_PIPE_RECT_DIMA])>real([PART_PIPE_RECT_DIMA1]),real([PART_PIPE_RECT_DIMA]), real([PART_PIPE_RECT_DIMA1]));
var Б:=if(real([PART_PIPE_RECT_DIMB])>real([PART_PIPE_RECT_DIMB1]),real([PART_PIPE_RECT_DIMB]), real([PART_PIPE_RECT_DIMB1]));
if((if (А>Б,
if (А<=250, 0.5,
if (А<=1000, 0.7,
if (А<=2000, 0.9, 1.2))),
if (Б<=250, 0.5,
if (Б<=1000, 0.7,
if (Б<=2000, 0.9, 1.2)))))<0.9 and [PART_INSULATION_THICKNESS]>0, 0.9, if (А>=Б,
if (А<=250, 0.5,
if (А<=1000, 0.7,
if (А<=2000, 0.9, 1.2))),
if (Б<=250, 0.5,
if (Б<=1000, 0.7,
if (Б<=2000, 0.9, 1.2)))))
Маленько переделал формулу, т.к. надо было дополнительно сверить размеры входов и выходов.
Тип перехода TYPE_OF_DUCT_TRANSITION
if([DIM_ALIGN_VARIANT]=1 or [DIM_ALIGN_VARIANT]=2 or [DIM_ALIGN_VARIANT]=3 or [DIM_ALIGN_VARIANT]=4, 2,
if([DIM_ALIGN_VARIANT]=8 or [DIM_ALIGN_VARIANT]=6, 1,
if([DIM_ALIGN_VARIANT]=5 or [DIM_ALIGN_VARIANT]=7, 3, "Выберите тип по MS")))
Взависимости от типа перехода по MS возвращаем тип перехода по каталогу.
Обозначение (модель) PART_TAG
var А:=([PART_PIPE_RECT_DIMA]+[PART_PIPE_RECT_DIMB]);
var Б:=([PART_PIPE_RECT_DIMA1]+[PART_PIPE_RECT_DIMB1]);
var В:=if(A>Б, А, Б);
"Переход-"&[TYPE_OF_DUCT_TRANSITION]&"-"&[PART_VENT_SECTION_LABEL]&"-"&
[PART_VENT_LENGTH]&"-"&[PART_VENT_SECTION_DIMC]&"-"&[PART_VENT_SECTION_DIMC]&"-ОЦ-"&[PART_VENT_THICKNESS]&
if(В>1000 and (parent.[PART_PIPE_RECT_DIMA]>700) or (parent.[PART_PIPE_RECT_DIMB]>700) ,"-Ш20.Ш20", "-Ш30.Ш30")
Наименование PART_NAME
if([FIRST_LAYER_OF_INSULATION]="НЕПРАВИЛЬНО ДОБАВЛЕНА ТЕПЛОИЗОЛЯЦИЯ. НЕСКОЛЬКО ПЕРВЫХ СЛОЕВ"
or [SECOND_LAYER_OF_INSULATION]="НЕПРАВИЛЬНО ДОБАВЛЕНА ТЕПЛОИЗОЛЯЦИЯ. НЕСКОЛЬКО ПЕРВЫХ СЛОЕВ",
"НЕПРАВИЛЬНО ДОБАВЛЕНА ТЕПЛОИЗОЛЯЦИЯ. НЕСКОЛЬКО ПЕРВЫХ СЛОЕВ",
"Переход прямоугольного сечения, тип "&[TYPE_OF_DUCT_TRANSITION]&", (Ширина х Высота), смещение по ширине "&child.[OFFSETX]&
" мм. , смещение по высоте "&child.[OFFSETY]&" мм. , из оцинкованной стали по ГОСТ 14918-80, b="&[PART_VENT_THICKNESS]
&" мм.,c прямыми участками с обеих сторон l="&
[PART_VENT_SECTION_DIMC]&" мм.,с шинореечным соединением")
Наименование по ВР PART_NAME_WORK
"Монтаж перехода прямоугольного сечения, тип "&[TYPE_OF_DUCT_TRANSITION]&", из оцинкованной стали по ГОСТ 14918-80, b="&[PART_VENT_THICKNESS]
&" мм., сечением(Ширина х Высота) "&[PART_VENT_SECTION_LABEL]&" мм., смещение по ширине "&child.[OFFSETX]&
" мм. , смещение по высоте "&child.[OFFSETY]&" мм. ,c прямыми участками с обеих сторон l="&
[PART_VENT_SECTION_DIMC]&" мм., на отм. "&[MOUNTING_HEIGHT]&" м. от пола."
Аналогично правим теплоизоляцию и ее площадь.
Я поправлю формулы в статье "Теплоизоляции".
Как обычно прикладываю файл: