Подскажите скрипт (округления числа) для Solid Edge

Программирование на Active Server Pages и VBScript.
n@sh
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 16.08.2012 (Чт) 18:58

Подскажите скрипт (округления числа) для Solid Edge

Сообщение n@sh » 16.08.2012 (Чт) 19:38

Здравствуйте.

Прошу Вашей помощи в реализации vbscript(а) для инженерной программы Solid Edge. Возможно поможет рисунок для дополнительной информации см. ниже.
Для программистов это может показаться не сложным программным кодом но для меня написание скрипта вызывает ОГРОМНУЮ СЛОЖНОСТЬ.

Задача скрипта состоит в округлении числа пример:

От 130 до числа 132 идёт округление до целевого числа 130:
- 130 ~ 130;
- 131 ~ 130;
- 132 ~ 130;

От 133 до числа 135 идёт округление до целевого числа 135:
- 133 ~ 135;
- 134 ~ 135;
- 135 ~ 135.

Задачу округления я решил с помощью алгоритма Excel:

=ЕСЛИ(ОКРВВЕРХ(ЕСЛИ(ОСТАТ(ОКРУГЛ(E3;0);5)>0;5*(ЧАСТНОЕ(ОКРУГЛ(E3;0);5)+1);5*(ЧАСТНОЕ(ОКРУГЛ(E3;0);5)+ОСТАТ(ОКРУГЛ(E3;0);5)));5)-ОКРУГЛ(E3;0)<3;ОКРВВЕРХ(ЕСЛИ(ОСТАТ(ОКРУГЛ(E3;0);5)>0;5*(ЧАСТНОЕ(ОКРУГЛ(E3;0);5)+1);5*(ЧАСТНОЕ(ОКРУГЛ(E3;0);5)+ОСТАТ(ОКРУГЛ(E3;0);5)));5);ОКРВВЕРХ(ЕСЛИ(ОСТАТ(ОКРУГЛ(E3;0);5)>0;5*(ЧАСТНОЕ(ОКРУГЛ(E3;0);5)+1);5*(ЧАСТНОЕ(ОКРУГЛ(E3;0);5)+ОСТАТ(ОКРУГЛ(E3;0);5)));5)-5)
, где E3 – это переменная (ячейка) вещественного числа.

Благодарю Вас за внимания.
Вложения
Картинка1.jpg
Картинка1.jpg (337.2 Кб) Просмотров: 2365

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2751
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 16.08.2012 (Чт) 21:58

n@sh писал(а):
Код: Выделить всё
=ЕСЛИ(ОКРВВЕРХ(ЕСЛИ(ОСТАТ(ОКРУГЛ(E3;0);5)>0;5*(ЧАСТНОЕ(ОКРУГЛ(E3;0);5)+1);5*(ЧАСТНОЕ(ОКРУГЛ(E3;0);5)+ОСТАТ(ОКРУГЛ(E3;0);5)));5)-ОКРУГЛ(E3;0)<3;ОКРВВЕРХ(ЕСЛИ(ОСТАТ(ОКРУГЛ(E3;0);5)>0;5*(ЧАСТНОЕ(ОКРУГЛ(E3;0);5)+1);5*(ЧАСТНОЕ(ОКРУГЛ(E3;0);5)+ОСТАТ(ОКРУГЛ(E3;0);5)));5);ОКРВВЕРХ(ЕСЛИ(ОСТАТ(ОКРУГЛ(E3;0);5)>0;5*(ЧАСТНОЕ(ОКРУГЛ(E3;0);5)+1);5*(ЧАСТНОЕ(ОКРУГЛ(E3;0);5)+ОСТАТ(ОКРУГЛ(E3;0);5)));5)-5)

Вот так формула! Даже её читать не хочется. Заменой русских названий на английские и ячейки E3 на A1 получается так:
Код: Выделить всё
=if(roundup(if(mod(round(a1;0);5)>0;5*(quotient(round(a1;0);5)+1);5*(quotient(round(a1;0);5)+mod(round(a1;0);5)));5)-round(a1;0)<3;roundup(if(mod(round(a1;0);5)>0;5*(quotient(round(a1;0);5)+1);5*(quotient(round(a1;0);5)+mod(round(a1;0);5)));5);roundup(if(mod(round(a1;0);5)>0;5*(quotient(round(a1;0);5)+1);5*(quotient(round(a1;0);5)+mod(round(a1;0);5)));5)-5)
А теперь, как это можно записать проще (выбирай на свой вкус):
Код: Выделить всё
=MROUND(A1;5)
=QUOTIENT(ROUND(A1*2;-1);2)
=QUOTIENT(ROUND(A1*20)+50;100) * 5 ' не работает с отрицательными числами
=SIGN(A1) * QUOTIENT(ROUND(ABS(A1)*20)+50;100) * 5
=QUOTIENT(ROUND(A1*20)+IF(A1>=0;50;-50);100) * 5

Кстати, твоя функция неправильно (по моему мнению) работает с отрицательными числами.

VBS не знаю.

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 153
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Подскажите скрипт (округления числа) для Solid Edge

Сообщение Sam777e » 16.08.2012 (Чт) 22:51

Да написать то можно, только не совсем ясно - что требуется.

1. Вероятно, нужна функция вида F(X)
Вот и скажи, какие значения она должна дать тебе на каждом из следующих X :
82.88
132.49
132.51
133

Всегда ли округлять до кратных 5 ?

2. Я склонен полагать, что тебе скорее нужен не VBS-скрипт, а нечто вроде функции на VBA и что ее нужно как-то добавлять в среду инженерной программы. Поищи в Googlе "Solid Edge и VBA", сформулируй точнее и поможем.
Здоровья и удачи

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2751
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 16.08.2012 (Чт) 23:27

Sam777e писал(а):Вот и скажи, какие значения она должна дать тебе на каждом из следующих X :

Есть же формула Excel'я - подставь в неё.

n@sh
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 16.08.2012 (Чт) 18:58

Re: Подскажите скрипт (округления числа) для Solid Edge

Сообщение n@sh » 17.08.2012 (Пт) 19:46

1. Ответ:

Да действительно вышеуказанная функция с отрицательными числами не работает.
Хотя это не особо критично.

2. Ответ:

2.1. На Мой взгляд должна быть функция вида F(x)=f(x)

Цитата из help(a): “…
• Вы можете написать внешние функции и подпрограммы на языке VBScript и использовать их в выражениях для переменных. При написании подпрограмм вы можете использовать как средства VBScript, так и любой текстовый редактор, сохранив программу в файле с расширением .BAS. Мастер функций последовательно проводит вас через этапы процесса выбора модуля Basic, конкретной функции и ее аргументов.
• Если вы забыли аргументы нужной функции, нажмите на клавиатуре CTRL+A после ввода знака равенства, имени функции и открывающейся скобки. При этом активизируется Мастер функций с выбранной вами функцией.
• Выражения, содержащие функции, можно ввести непосредственно с клавиатуры в колонку "Формула". …”

2.2. Следующие значения X :

82.88 ~ 83 ~85
132.49 ~ 132 ~ 130
132.51 ~ 133 ~135
133 ~ 135

2.3. Да округление всегда идет до кратных 5

2.4. Да это функция (подпрограмма) добавляется в инженерную программу в виде отдельного файла *.BAS с последующим применением по виду F(x)=f(x). В самом начале когда я задавал вопрос я выложил картинку с шагами процесса «прикручивание» функции (подпрограммы) в инженерную программу.

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 153
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Подскажите скрипт (округления числа) для Solid Edge

Сообщение Sam777e » 18.08.2012 (Сб) 1:32

Думаю, что просто очень плохой перевод HELP'а.
Обычно скрипты идут в файлах с расширением VBS [ или JS ], а не BAS. Но если у них такие причуды, то сделаем и на VBS, хотя не помню, чтобы мне приходилось оттуда возвращать значения.

Поскольку нет у меня Solid Edge, то сделал тебе вполне рабочий пример для Excel' я. Если что либо неясно - пиши. Советую поработать с примером именно в Excel' е. Начни с нажатия Alt+F11, там в окошке Проекта сделай Import file; а потом возвращайся в Лист Excel' я и делай по Картинкам.

А вот когда придет очередь для Solid Edge, то, наверное, надо будет из файла удалить несколько первых строк - до 1-ой строки функции. Впрочем, не знаю; может там тоже есть возможность добавлять в Проект код. Кроме того, неясно, должны ли быть одинаковыми имена файла и функции [ в твоей среде ].


Код: Выделить всё

Public Function myRoundTo5(V As Variant) As Long
  Dim L As Long, Ostatok As Long
 
  If Not IsNumeric(V) Then
    myRoundTo5 = -111111 ' Special'noe znachenie pri Oshibke
    Exit Function
  End If
 
  On Error Resume Next
 
  L = Round(V)
 
  If Err Then
    myRoundTo5 = -222222 ' Special'noe znachenie pri Oshibke
   
    Err.Clear: On Error GoTo 0
    Exit Function
  End If
 
  On Error GoTo 0
        '      Primery
        '   V        L  Ostatok  Rezul'tat
        '  82.88  ~  83   3       83 + ( 5-3 ) =  85
        ' 132.49  ~ 132   2      132 -2        = 130
        ' 132.51  ~ 133   3      133 + ( 5-3 ) = 135
        ' 133     ~ 133   3      133 + ( 5-3 ) = 135
        ' 134.51  ~ 135   0  Nichego ne delaem = 135
 
  Ostatok = L Mod 5
 
  Select Case Ostatok
    Case 1, 2
      L = L - Ostatok
    Case 3, 4
      L = L + (5 - Ostatok)
    Case 0
      ' Nichego ne delaem
  End Select
 
  myRoundTo5 = L
 
End Function  '  myRoundTo5(V As Variant) As Long


Вложения
TryRound.RAR
(99.48 Кб) Скачиваний: 116
Здоровья и удачи


Вернуться в ASP и VBScript

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList