VB in the Variable Table - Sky's the Limit

by Phenom ‎04-06-2014 08:04 PM - edited ‎04-06-2014 08:13 PM (5,585 Views)

The Variable Table in Solid Edge supports VBScript functions. This presents endless possibilities for users who are not programmers in the strictest sense of the word but have a rudimentary understanding of writing logical expressions. The Variable Table can be used to define and edit functional relationships between the variables and dimensions of a design.
The relationships can be defined using functions and formulas which can be
• Mathematical,
• Trigonometric,
• Logical or
• User-defined fnuctions in a BASIC or .bas file.

BASIC is Beginner's All-purpose Symbolic Instruction Code.
A rudimentary understanding of writing logical expressions in an all easy-to-use syntax using plain notepad is sufficient to start off.

This implies the user need not have any kind of indepth programming knowledge nor be a master of technologies like .Net or C++ to unleash the power of user-defined functions in Solid Edge.

Using an IDE such as Visual Studio can be useful for finding syntax errors and probably debugging little code snippets, though this is not absolutely necessary.

• Mathematical and Trigonometric Functions


It appears that the mathematical and geometric functions that Solid Edge support are directly mapped from the VBScript's Math class.



The only important point to note are the SIN, COS and TAN functions which take the angle in radians and not degrees.

• Logical functions

 

These remain largely un-documented. Use of logical operators like Less than (<),  greater than (>), <= and >= are permitted in the formula for a Variable.

 

For example, a simple implementation of the =Min(V1,V2) function can be written as:
= -1*( V1 < V2 )* V1 +(-1*( V2 <= V1 )* V2)

In the above formula, the logical operator returns a -1 or 0 based on whether the condition evaluates to true or false. So given, V1 = 15 and V2 = 45, the above formula evaluates as follows:
= -1*(-1)* 15 + (-1 * (0) * 45)
= -15 + 0
= 15

 

This way the smaller number is always returned. Such type of formula are difficult to write and interpret hence rarely used.

• VBScript Functions and Sub-routines


Take an example of a shaft as shown below.
The various dimension variables are seen in the Variable Table.
The design of various parameters is as below:
1. Keyway length is always 75 less than the shaft length.
2. Hole diameter is 4.5 if ShaftDia is 20 or above and 2.75 if ShaftDia is less than 20.
3. Shaft diameter has predefined values and a corresponding diameter for the hole.

 

Lets see the three cases in greater details.


Case 1. The keyway length can be set right into the variable table by specifying it as:
= (ShaftLength - 75)

Note: It is always advisable to enclose even the simplest of expressions in parentheses.


This also presents an opportunity to setup a simple VB function to calculate the value for the KeywayLength variable. Start notepad and save the file as Shaft.bas making sure it does not have the .txt in addition. Type in the following:

Function KeywayLength(ByVal ShaftLength As Double) As Double
  KeywayLength = (ShaftLength - 75)
End Function

Notes:
• The keyword Function indicates beginning of function definition.
• The name of the function 'KeywayLength' can be same as the variable name that is  calculated.
• The variable ShaftLength from the variable table is provided to the function in the round brackets or parentheses.
• Double simply means a decimal number. For integer values, the word Integer is used.
• A variable KeywayLength which is same as the function name is then calculated using the ShaftLength provided.
• End Function denotes, the end of function definition.
• Also note the 'As Double' at the end of function declaration on line 1. The 'As Double' indicates that the KeywayLength is also calculated as a decimal number.



How to use in Solid Edge:
• Click in the formula cell for the KeywayLength variable in the variable table.
• Click the Formula (Fx) button in the variable table.
• The Function Wizard dialog appears. Select Visual Basic in the list.
• Select the Shaft.bas file. The function KeywayLength appears in the list on the right side of the Wizard dialog. Select it.
• Click Next.



• Step 2 of the wizard appears asking for the arguments for the function.
• Type ShaftLength as the argument. This ShaftLength from the Variable Table is provided to the ShaftLength variable of the function.
• Click Finish. The formula cell is filled with the path and name of the bas file and the function name with the argument 'ShaftLength' in brackets.
• Change the ShaftLength variable in the variable table and verify the KeywayLength updates accordingly.

Tip: Make sure the 'Automatic Update' button is checked ON on the Tools tab, Links group.

Case 2. Hole diameter is 4.5 if ShaftDia is above 20 and 2.75 if ShaftDia is less than 20.
For this add a function as below to the .bas file:

Function HoleDia(ByVal ShaftDia As Double) As Double
  If ShaftDia >= 20 Then
    HoleDia = 4.5
  ElseIf ShaftDia < 20 Then
    HoleDia = 2.75
  End If
End Function

and the formula for the HoleDia variable updates as below:
D:\Temp\Shaft.HoleDia( ShaftDia )
Experiment by changing the ShaftDia value to 20, less than 20 and more than 20.


Case 3. Shaft diameter has predefined values and has a corresponding diameter for the hole as below:



The first step is to limit the values of the ShaftDia in the Variable Table to a range of given values. For this

• Right click the ShaftDia variable in the variable table and select Variable Rule Editor from the menu.
• Check ON "Limit Value To:".
• Select the radio button for 'Descrete List:' and specify the range as:
{8.00 mm;10.00 mm;12.00 mm;17.00 mm;22.00 mm}
• The values are separated by a semi-colon and enclosed in curly braces. This automatically creates a drop-down list for the ShaftDia variable. Double click the current value to reveal the list.



To pick the value of HoleDia corresponding to the ShaftDia, write the function as below:

Function HoleDia(ByVal ShaftDia As Double) As Double
  Select Case ShaftDia
    Case 8
        HoleDia = 2.5
    Case 10
        HoleDia = 3.25
    Case 12
        HoleDia = 3.5
    Case 17
        HoleDia = 4
    Case 22
        HoleDia = 4
  End Select
End Function

Here, the Select Case structure helps to set a value for a variable corresponding to another variable passed to the function.

As mentioned earlier, there many more logical constructs in the BASIC language, thus presenting huge possibilites and complexity to user-defined functions. The techniques discussed here should be helpful to make a small beginning.

 

Comments
by PLM World Member Genius PLM World Member Genius
on ‎04-06-2014 09:05 PM

Tushar

 

«...These remain largely un-documented. Use of logical operators like Less than (<),  greater than (>), <= and >= are permitted in the formula for a Variable....»

 

I can recommand to read this wiki article

 

http://www.soliddna.com/SEcommunity/page/articles.html/_/solid-edge-wiki/solid-modeling/conditional-...

 

 

A forum article also exist

http://www.soliddna.com/SEcommunity/forum/44-solid-dna/

 

 

 

by Phenom
on ‎04-07-2014 08:30 AM

Great post SolidDNA - thats a wealth of knowledge.

What a pity I did not come across it earlier.

 

As a matter of personal choice, I would still say writing simple logic using English-like BASIC statements are more readable and an elegant way compared to cramming all symbols and parentheses in the Variable Table - though this certainly has the overhead of maintining an extra bas file.

 

by PLM World Member Genius PLM World Member Genius
on ‎04-07-2014 02:30 PM

I agree that writing formula as close as possible as natural language is better.

 

 

 

by Phenom
on ‎04-16-2014 02:20 PM

So, guys I have to ask the obvious question here. What happens to the part if you reference a .bas file and the .bas file isn't there?

 

by Esteemed Contributor
on ‎04-16-2014 06:26 PM

I believe the file remains in it's "as saved" state and variable table has a broken link...

by Phenom
on ‎04-16-2014 11:57 PM

That's right, the feature that uses a variable retains its last set value from the BAS file.

After the BAS file is gone and changing the dependant variable throws an error mentioning the BAS file was not found, also indicating the folder path.

Another error that comes up is when the BAS file is stored in a path that has spaces. The Variable Table displays an error 'unknown variable name - XYZ' where XYZ is the first folder in the path having spaces.

 

Labels