什么是 iLogic?
在大多数情况下,只要您使用了任一类型的桌面应用程序,您就会明白自动化的含义。使用过 Microsoft Excel 的人对“宏”应该有所耳闻。宏是专为完成某一特定任务而开发和设计的 Excel 工具。就这一层面而言,Inventor 自动化与宏极为相似:虽然可以通过许多形式来实现自动化,但究其本质,仍然是一款或者一系列用于自动完成某一特定任务、流程或功能的工具。iLogic 就是 Inventor 自动化的一种形式。
iLogic 是 Inventor 提供的一项功能,支持用户和管理员创建 VB.net 形式的逻辑来执行任务。iLogic 使用代码段和其他代码编写语句来制定和组织规则,让规则能够在指定时间运行并始终如一地执行工程师和设计师需要完成的某些工作。
您可以制定一系列 iLogic 规则来执行不同工作,例如根据不同模型标准更新 iProperty,或根据 iLogic 表单中的选择更换部件中的零部件,甚至更新关联工程图中的文字块。iLogic 能够执行的工作不计其数。问题是,您希望 iLogic 帮您做些什么呢?
为什么要选择 iLogic?
弄明白 iLogic 是什么之后,我们来看一看为什么要将 iLogic 整合到您的工程设计流程中。
首先,就我合作过的制造企业而言,无论企业规模大小,无论企业位于哪个国家/地区,也无论企业制造加工的产品如何迥异,有一个事实是不容置疑的:每个环境都存在一定的模式和重复的规律。关键在于找到能够让 iLogic 发挥用武之地的模式或规律。这一任务说来简单,实际上却需要深入了解 Inventor 究竟能在流程中的哪些环节发挥作用。
举个例子,假如您的三维模型采用了特定格式的 iProperty 说明,或者某一 iProperty 是特定格式的,那么,如果我们能够预测格式并使其标准化,iLogic 就可以派上用场了。您可以通过编写逻辑来收集模型信息,转化该信息,然后利用全新格式的正确信息改写 iProperty。这样一来,iProperty 就会始终正确无误、前后一致且永不间断地工作。
相关资源:更上一层楼:使用 Autodesk Inventor 自动生成工程图,作者 Thomas Fitzgerald
配置 Inventor 以使用 iLogic
我需要对 Inventor 执行哪些操作以便有效使用 iLogic?
虽然 iLogic 是 Inventor 附带的功能,您可以随时创建和使用 iLogic,但是,如果您能够提前调整 iLogic 的一些设置,则可以最大限度地发挥 iLogic 的价值。借助“iLogic 配置”按钮,用户可以配置出不同的设置来定义 Inventor 在何处查找支持信息。
用户和管理员可能需要修改这些设置,以便控制 Inventor 在何处查找外部规则目录并确定这些目录的优先顺序。用户还可以定义 Inventor 在哪个目录位置查找 DLL(动态链接库)。DDL 是通过 Microsoft Visual Studio 开发的自定义用户界面成果,其作用是推动和触发 iLogic 规则和其他逻辑。
通过“设置”对话框,用户可以设置外部规则将另存为的文件扩展名,以及可生成调试信息的默认登录级别。用户还可以借助一些安全选项设置来保护计算机和网络系统,以免有人在 Inventor 环境内运行潜在危险代码。本文稍后将对外部规则和调试作进一步介绍。
内部规则与外部规则
我应该在什么时候使用哪种规则?
iLogic 规则分为内部规则和外部规则。对于 Inventor 而言,这两种规则都是以类似的方式在 iLogic 浏览器中创建的。
内部规则是指在文件环境中创建并保存在文件环境中的规则。零件、部件和工程图文件都能够存储、编译和运行规则,以不同方式影响着每个文件。外部规则与内部规则几乎是一模一样的,区别在于,外部规则并不存储在 Inventor 文件中。内部规则存储在文件中,具有相应文件访问权限的用户访问起来较为方便。而外部规则或存储在用户系统的本地目录中,或集中存储在服务器上,不受地理位置的影响。
外部规则与文件并不存储在同一个文件夹中,因此安全等级可能更高。用户确实可以打开并查看规则代码,但系统管理员也可以将文件夹权限限定为“外部规则”文件夹,以此控制用户的访问和编辑权限。因此,在企业环境中首选使用外部规则,许多用户可能希望在整个设计流程中执行代码。如果条件表明无需进行权限控制,或多个用户无需同时使用规则逻辑,那么使用内部规则应该就够了。
用户可以通过 iLogic 浏览器查看这两种规则,如下图所示。
在任何一种规则上单击鼠标右键,即可控制各项功能,例如“抑制”或“解除抑制”规则(控制何时触发这些规则)、删除规则或从列表中移除规则。
参数和特性
如何使用它们?
Autodesk Inventor 是一款“三维参数化设计应用程序”。那么这意味着什么呢?参数是特定类型的命名值占位符。Inventor 中的大多数参数都是数值型参数,其关联尺寸可控制几何体。当参数值发生变化时,这些参数的关联尺寸也会随之变化,从而更新模型的图形。Inventor 包括四种基本参数:
1) 模型参数
2) 用户参数
3) 参考参数
4) 链接参数
模型参数是由 Inventor 常规操作创建的参数。在“参数”对话框中,系统将模型参数自动命名为 d0、d1、d2 等。模型参数由 Inventor 控制,这意味着,系统会根据需要创建和删除模型参数。
用户参数是由用户创建的参数。用户参数可以是数值、文本或字符串,也可以是 True/False 或布尔值。用户参数非常重要,因为它们是由用户创建的,并且许多不同功能甚至 iLogic 代码都会使用用户参数。另外,Inventor 常规操作无法创建或删除用户参数。
注意:要想在 iLogic 规则中使用参数信息,最好通过运用命名约定和类型来创建用户参数。虽然您可以重命名模型参数,但这并不是首选方法。
参考参数是 Inventor 在定义联动尺寸时创建的参数。不知您在使用草图环境时是否看到过这样的对话框:
此时如果选择“接受”,就会创建一个参考参数。“参数”对话框显示了参数名称和参数值,但您无法更改参数值。您可以更改参数名称,方便在 iLogic 代码中轻松使用相应参数值。
链接参数往往是通过 Excel 电子表格链接到 Inventor 的参数。用户更新 Excel 电子表格中的名称和值后,相应更改随之会反映到 Inventor 中,最终驱动尺寸值、控制功能并管理部件等。
特性或 Inventor 术语中的 iProperty 是关于文件的附加描述符或其他实用信息。特性有时也称为元数据。大家对特性应该不陌生,在您需要采集大量有关文件的数据时,特性能够派上大用场。文件名、文件大小、作者、修改日期等都属于特性。大多数时候,在使用 iLogic 和 Inventor 文件数据时,“文件名”和“文件路径”是最常接触到的两个特性。其他常见的特性包括“代号”、“库存编号”、“描述”、“质量”、“成本”和“自定义特性”等。所有特性均可读取,大部分特性已启用写入。
声明变量、类型转换与共享变量
这些代码看起来很繁琐,一定要掌握吗?
iLogic 为代码形式,简单直白,清晰易懂。虽然您不需要精通编程,甚至不会编写代码也无妨,但掌握一些编码最佳实践基础知识将大有裨益。这是因为,所有编程人员都需要了解一些标准,而声明变量和类型转换就是其中一种标准。这为什么很重要?这和使用不同的语言沟通是一个道理。如果制定了相应的标准,编写逻辑时就能减少一些误会。
声明变量和类型转换
声明变量其实非常简单。在 iLogic 中,您只需写下一个名称并为其赋值即可:
Length = 20
创建变量之后,即可对其进行操作。您可以读取变量值,然后在计算中加以处理,或写入变量值以更新其他内容。即使您可以在 iLogic 中键入一对名称和值,但是要想充分运用编码最佳实践,更好的办法是键入名称,为其赋予“类型”,然后再提供一个值:
Dim Length As Double = 20
这样一来,iLogic 会创建一个只接受“Double”值的变量,然后再提供值。这称为类型转换。它可以确保只向变量提供一个特定的值。如果向 Length 变量提供 String 或 Text 值,代码可能会失效。我发现通过提供一种类型,不仅可以在规则中使用更复杂的代码,还可以了解信息流并将其可视化。例如,假设我在规则中写入一条语句,要求进行数学计算,当我收到错误消息后,我了解到“String”类型的变量没有问题。
下面列举了一些不同种类的声明变量和类型转换:
Dim cylinderHeight As Double = Parameter("CylinderHeight")
Dim fileName As String = "This is a string value!"
Dim holeCount As Integer = 2
Dim occurrenceName As String = String.Empty
Dim plateWidth As Double = Nothing
您会注意到,在最后两个示例中,我没有提供值,或者说提供的是空值。有时候,我们可能需要声明变量,但您可能还不知道变量值。在这种情况下,我们可以通过声明变量、进行类型转换并在等号的另一边提供一些内容来保持一致性。这样还有助于调试代码,确定某个值是否以编程的方式提供。
刚才您可能还会注意到,在第一个示例中,我声明了一个变量,转换了类型,并将变量值设置为等于用户参数的值。这种方法有助于构建计算所需逻辑、将值传递给其他构建以及操控其他参数。另外,如果您需要在代码需要时立即获取或设置用户参数的值,这种方法也有一定的帮助。正因如此,iLogic 新用户在运行规则和系统执行特定操作时很容易遇到问题,但 Inventor 似乎会“落后”一步。请看看下面这些示例:
cylinderHeight = CylinderHeight
Dim cylinderHeight As Double = Parameter("CylinderHeight")
这两个语句执行的操作类似,但并不完全相同。第一个示例声明的变量可以是任何类型,其变量值与用户参数相等。由于文本颜色是蓝色,因此 Inventor 可以识别用户参数。Inventor 识别出用户参数之后,所有以这种形式解除抑制的规则都将自动运行。您可能希望以这种方式运行规则,也可能不希望。
这还意味着,该变量将被设置为用户参数最后一次更新后的值。如果从变量需要值到最后一次更新之间,逻辑改变了用户参数值,那么用户参数值就会过期。因此,我们必须进行更新,有时候甚至需要大量更新才能获得所需的结果。
为了解决这一问题,您可以采取两个措施。首先,使用第二个语句。通过声明变量、进行类型转换并使用“Parameter”函数,直接将变量设置为用户参数的值,从而确保变量值始终保持最新。与此同时,您还可以更好地控制规则的运行时间。其次,使用“RuleParametersOutput()”iLogic 代码段。这能够让所有用户参数都保持最新。然后进行更新,确保关联模型同样保持最新。
共享变量
之前,我们探讨了关于变量的代码实践,而共享变量则是 iLogic 的特色功能。在某个 iLogic 规则中声明变量时,只能在此规则的上下文中访问相应变量。如果想要创建一个变量并将其值设置为可在无数规则中使用,则欢迎使用共享变量。
在 iLogic 规则编辑器中,“iLogic 代码段”面板的“变量”索引下方列出了各种共享变量函数。
若要使用共享变量,应按照声明其他变量时的类似流程进行操作。首先声明共享变量,然后为该共享变量命名,最后提供一个值。这个值可以是静态值,也可以是其他变量、参数或特性的值。
SharedVariable("VariableName") = "This is the value" SharedVariable("cylinderHeight") = Parameter("CylinderHeight")
声明某个共享变量并提供变量值之后,即可使用此共享变量并根据需要予以更新。
Dim cylinderHieght As Double = SharedVariable("cylinderHeight")
使用其他共享变量函数来查看是否存在共享变量,或移除内存中的所有共享变量。
条件表达式和循环
我们似乎总在做决定。
但在正常使用 Inventor 时,我们可以放心大胆地查看图形窗口,然后选择几何图形,最后再决定如何处理几何图形。我们可以清晰地了解到部件中的各个零部件之间的关系。最初接触 iLogic 规则时,有时可能需要先了解设计中可能存在的不同条件,然后再确定决策路径。iLogic 用户则可以使用定义不同条件的表达式来完成这些任务。
最常见的条件表达式是“If Then”表达式。其大致如下所示:
If someValue = True Then
'Do Something
Else
'Do Something Else
End If
我们利用这段代码来查看是否存在某个条件,如果存在,则代码将执行某种操作。如果不存在该条件,或者如果存在其他条件,则代码将执行其他操作。我们可以对这一功能加以扩展,从而查找无数的条件,例如:
If someValue = True Then
'Do Something
ElseIf someValue = False Then
'Do Something Else
ElseIf someValue = Nothing Then
'Yet Do Something Else
End If
看起来非常简单,听起来也非常有道理,但这种用法有一定的限制。我们很容易认为,这些条件会无限地继续运行,但是到了一定的时候,我们可能就难以确定目前的实际情况了,尤其是开始添加其他运算符之后。我认为,一旦超过三到四个条件,就可以通过更好的方法来解决问题。
另一个常见的条件表达式是“Select Case”方法。“Select Case”的运行原理类似于“If Then”条件表达式,但对我来说,查看和了解“Select Case”条件表达式要容易得多,并且需要编写的代码也少得多。“Select Case”条件表达式如下所示:
Select Case someValue
Case True
'Do Something
Case False 'Do Something Else
Case Nothing
'Yet Do Something Else End Select
可以看到,这种条件表达式很容易理解,并且可以根据您需要迎合的条件数量轻松加以扩展。
在编写代码时,有一种最基本的方法是利用“循环”概念。以遍历整个部件来获取引用名称为例,循环能够帮助我们遍历所有引用,而无需知晓具体存在多少引用。构建代码和编写逻辑的关键在于了解模式、一致性和可预测性。有时,我们可以利用某些方法来应对不可预测性。循环就是这样的方法。下面是一个“For Next”循环的示例:
Dim counter As Integer = 3
For t As Integer = 1 To counter
MessageBox.Show("Number of Iterations: " & t)
Next
在这个示例中,我们将循环的起点定义为数字“1”,并将循环的终点定义为计数器,此时计数器设置为 3。这意味着,循环将迭代三次以生成一个消息框。如果我们不知道循环的终点,可以清点集合中的项目,然后将其设置为我们的终点。看看下面这个示例:
Dim items As New List(Of String)
items.Add("Pizza")
items.Add("Sandwich")
items.Add("Milk")
items.Add("Eggs")
For i = 0 To (items.Count - 1)
MessageBox.Show(items(i))
Next
在这个示例中,我们创建并填充了一个集合,然后通知循环,只要集合中存在项目,就一直迭代下去。不知您是否注意到,这个示例中的循环起点是 0,而终点则是计数器减 1。这时候我们就需要了解“索引”这个概念了。索引就是确定起点的意思。起点通常为 0 或 1。在这种类型的集合中,列表中的第一个项目实际上是 0 而不是 1。
Thomas Fitzgerald 是一位高级实施顾问,精通 Inventor 自动化和数据管理。Thomas 为许多公司提供顾问服务,接触过形形色色、大大小小的工程部门。Thomas 深耕机械设计与制造行业二十余年,可熟练使用多种 Autodesk 产品。Thomas 是 Autodesk 认证讲师,并持有微软认证系统管理员证书。
希望了解更多信息?请下载完整课程讲义,继续了解更多信息。