Перейти к публикации

Автоматический рассчет массива


Рекомендованные сообщения

Доброго всем времени суток.

Хочу попросить помощи в решении следующей проблемы:

Есть деталь с равномерно пробитыми присоединительными отверстиями, количество и межосевое расстояние которых зависит от длины детали. Задача: сделать модель детали, на которой задавалась бы только необходимая длина, а количество отверстий и их положение рассчитывались автоматически. Сами отверстия задаю массивом.

Пробовал несколькими способами, везде свои проблемы.

1. Через уравнения - получается так (расстояние между каями детали и крайними отверстиями - 30 мм, приблизительное межосевое расстояние, от которого обычно отталкиваюсь - 180 мм):

Количество отверстий = (D1@Длина детали - 60)/180 + 1

Точное межосевое = (D1@Длина детали - 60)/(Количество отверстий - 1)

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

2. При помощи DriveWorks не получается выразить межосевое через уже просчитанное количество отверстий, приходится городить формулы, и такое чувство, что в итоге программа рассчитывая только однин параметр.

Ссылка на сообщение
Поделиться на других сайтах


Вопрос такой уже был.

Вам нужно для начала определиться что у вас задается, а что рассчитывается (количество элементов или шаг).

Количество отверстий нужно округлять до целого...

"Количество"= int ( ( "Длина@Эскиз1" - "Смещение@Эскиз2" * 2 ) / 180 ) + 1

"D1@Линейный массив1"= "Количество"

"D3@Линейный массив1"= ( "Длина@Эскиз1" - "смещение@Эскиз2" * 2 ) / ( "Количество" - 1 )

Когда длинна малая и получается 1 или 0 отв. То нужно менять уравнения, писать условия:

"Линейный массив1"= ( if ( "Количество" < 2 , "suppressed" , "unsuppressed" ) )
Ссылка на сообщение
Поделиться на других сайтах

Значит оставлять расчет через уравнения.

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

Ссылка на сообщение
Поделиться на других сайтах

Размер никуда не девается. Если у вас он пропадает, значит вы что то не так сделали. Хотя я себе не могу этого представить, что бы при изменении размера длины, терялась привязка отверстия.

Ссылка на сообщение
Поделиться на других сайтах

Тогда подскажите, что же я делаю не так

Исходная модель:

post-37351-1351768143_thumb.png

Затем меняю высоту на 1000:

post-37351-1351768173_thumb.png

Межосевое пропадает, отверстия остаются с прежним размером 170 мм, то есть неравномерно. Появляется ошибка уравнения, перестраивание не помогает.

Захожу в редактирование эскиза и вручную проставляю размер:

post-37351-1351767822_thumb.png

Он сразу же автоматически принимает верно рассчитанное значение 188 мм, отверстия распределяются равномерно.

С этим борюсь уже долгое время :dry:

Изменено пользователем Alionex
Ссылка на сообщение
Поделиться на других сайтах

У вас что массив в эскизе? А не массив элемента отверстия? Не увлекайтесь массивами в эскизе, тем более с уравнениями.

Измените на массив одного отверстия.

Ссылка на сообщение
Поделиться на других сайтах

Действительно, при работе с массивом элемента проблемы не возникает. С вашей помощью разобрался, спасибо )

Ну и не подскажете оператор для округления результата к ближайшему целому числу? Когда при расчете количества отверстий получается 2.8, хотелось бы видеть 3 отверстия, а не 2

Ссылка на сообщение
Поделиться на других сайтах

Посмотрите пример уравнения выше.

int (a) целая часть числа возвращает целую часть числа a +1

Есть еще Round - но эта функция в справке не описана, что странно. И она к данной задаче мало применима.

Ссылка на сообщение
Поделиться на других сайтах

Опять-таки, в моем конкретном примере при использовании "int" после деления получаем число 1.8, которое округляется до 1 и в итоге результат уравнения 1+1=2 отверстия с расстоянием 340 мм.

Хотя нашел способ это обойти с такой записью:

"D1@Линейный массив1"=("D2@Базовая кромка1" - "D3@Эскиз5"*2)/180 + 1

"D3@Линейный массив1" = ( "D2@Базовая кромка1" - "D3@Эскиз5" * 2 ) / ( "D1@Линейный массив1" - 1 )

Быть может, это топорно, но результат получается такой, который мне и нужен

Ссылка на сообщение
Поделиться на других сайтах

Ну и не подскажете оператор для округления результата к ближайшему целому числу?

"D1@Extrude1" = FormatCurrency(16,345,2) <noindex>http://fsapr2000.ru/index.php?s=&showt...st&p=155439</noindex>

Справка: <noindex>http://help.solidworks.com/2010/Russian/so...d_constants.htm</noindex>

Есть еще Round - но эта функция в справке не описана, что странно.

Ищите в справке по VBA, на сколько помню там можно использовать практически любые функции из VBA, а не только упомянутую в справке IIF и имеющиеся в окне настройки формул.
Ссылка на сообщение
Поделиться на других сайтах

Хотя нашел способ это обойти с такой записью:

Эти уравнения я привел еще в первом сообщении...

FormatCurrency(16,345,2

Это тоже из VBA, в справке этого нет. Там вообще коротенький список.

п.к. Стандартная математическая функция округления, для данной задачи не применима. Нам фактически нужно округление в большую строну.

Ссылка на сообщение
Поделиться на других сайтах

Это тоже из VBA, в справке этого нет. Там вообще коротенький список.

Думаю на лицо не корректная запись в справке, вероятно должно было быть: "При указании размеров модели можно также использовать функциюи Visual Basic, например IIf."
Ссылка на сообщение
Поделиться на других сайтах

Эти уравнения я привел еще в первом сообщении...

Это тоже из VBA, в справке этого нет. Там вообще коротенький список.

п.к. Стандартная математическая функция округления, для данной задачи не применима. Нам фактически нужно округление в большую строну.

Сделайте поиск по теме: "округление чисел в языках программирования"!

Там каких только вариантов округлений не найдешь - ИМХО, на любой вкус и цвет...

На VBA я бы вообще не стал ориентироваться - надо смотреть методы из нормальных языков прогр-я...

Ссылка на сообщение
Поделиться на других сайтах

вставь таблицу параметров.

считай все в excel`е и не парься с формулами.

хотя это оправдывает только сложные расчеты...

Ссылка на сообщение
Поделиться на других сайтах

Я бы тоже сделал таблицу в Excell

Да собственно так и делаю.

Там можно кучу условий наложить.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...