创建部件中的规则

在接下来的几节课程中,创建一系列规则来管理部件中的零部件。

从部件向零件传递参数

此模型中包含名为 manifold_block:1 的零件,其中包含 iLogic 规则。我们必须将部件级别的参数传递到零件。

  1. 创建名为 assembly_to_parts_rule 的规则。

    此规则将基于部件中控制参数的对应值设定零件中的参数。我们的参数功能可以指定零部件名称以及参数名称。

    复制代码块

    Parameter("manifold_block:1", "block") = block 
    Parameter("manifold_block:1", "component_type") = component_type
    Parameter("manifold_block:1", "port_a_size") = port_a_size
    Parameter("manifold_block:1", "port_b_size") = port_b_size
    Parameter("manifold_block:1", "port_c_size") = port_c_size
  2. 完成此规则时单击“确定”

编辑部件中的零件级别规则

“集成块零件”教程中,我们向集成块零件添加了控制三通弯头样式的规则。我们还必须在部件级别添加该规则。但我们不是要重写现有规则,而是复制原来的规则。

  1. 从“模型”浏览器中双击 manifold_block:1。其他零部件会变成透明的。
  2. 在功能区,单击 “管理”选项卡 “iLogic”面板 “规则浏览器”
  3. 双击 component_type_rule
  4. 将规则文本复制到剪贴板上。
  5. 单击“编辑规则”对话框上的“取消”关闭对话框。
  6. 在“模型”浏览器中双击 my_manifold_block.iam
  7. 添加名为 component_type_rule 的新规则。
  8. 将从 component_type_rule 复制来的规则文本粘贴到“编辑规则”对话框的规则文本区域。

    复制代码块

    If component_type = "standard" Then
    port_b_size = port_a_size
    port_c_size = port_a_size
    End If
  9. 单击“确定”保存此部件级别的规则。

添加 port_a_rule

更改 Port A 的端口尺寸时,我们必须执行几项任务:

我们将添加规则来实现此目的:

  1. 确保您的集成块部件已激活。
  2. 创建名为 port_a_rule 的规则。

    此规则的第一部分将基于活接头零件的 iPart 表中存储的信息调整螺钉阵列的间隔。

  3. 添加根据 port_a_size 参数查找正在使用的行的代码块。然后为另两列中的两个不同的部件参数指定值。

    复制代码块

    i = iPart.FindRow("port_a_union", "port_size", "=", port_a_size)
    port_a_y_dist_between_screws = iPart.CurrentRowValue("y_dist_betwn_screw")
    port_a_x_dist_between_screws = iPart.CurrentRowValue("x_dist_betwn_screw")
    注: 此处使用的 iPart 相关的语句可在“系统”选项卡的“iPart”节点的“代码段”区域中找到。

    规则的下一部分将基于选定的端口尺寸在螺钉零件内部选择适当的 iPart 行。

  4. 使用一系列 If 语句,根据 port_a_size 参数的当前值设定适当的 iPart 成员。

    复制代码块

    If port_a_size = .50 Then
    iPart.ChangeRow("port_a_union_screw", "Screw-01") 
    ElseIf port_a_size = 0.75 Then 
    iPart.ChangeRow("port_a_union_screw", "Screw-02")
    ElseIf port_a_size = 1.00 Then
    iPart.ChangeRow("port_a_union_screw", "Screw-02")
    ElseIf port_a_size = 1.25 Then
    iPart.ChangeRow("port_a_union_screw", "Screw-03")
    ElseIf port_a_size = 1.50 Then
    iPart.ChangeRow("port_a_union_screw", "Screw-04")
    ElseIf port_a_size = 2.00 Then
    iPart.ChangeRow("port_a_union_screw", "Screw-04")
    ElseIf port_a_size = 2.50 Then
    iPart.ChangeRow("port_a_union_screw", "Screw-05")
    ElseIf port_a_size = 3.00 Then
    iPart.ChangeRow("port_a_union_screw", "Screw-06")
    End If
  5. 对于此规则的最后一部分,添加一个语句,用以获取扩口式法兰的零件代号并将其存储在部件参数中。本教程中稍后介绍的另一规则会使用此参数。

    复制代码块

    port_a_union_part_number = iProperties.Value("port_a_union", "Project", "Part Number")
  6. 单击“确定”保存规则,然后保存部件文件。

添加 port_b_rule

Port B 不同于 Port APort C,因为它不存在于弯头集成块中。如果集成块是弯头样式块,那么我们必须抑制用于此端口的活接阀帽和活接螺钉。我们还必须抑制与活接阀帽关联的配合约束。

因为我们要抑制零部件,因此在撰写规则之前要设定详细等级。如果规则影响到与部件中的详细等级相关的项目,那么需要在撰写规则之前定义并保存自定义详细等级。如果未定义自定义详细等级,则 iLogic 会生成错误消息。

设定详细等级

  1. 在模型浏览器中,先后展开“表达”节点和“详细等级”节点。
  2. “详细等级”节点上单击鼠标右键,然后选择“新建详细等级”

    新的详细等级将添加。

  3. 缓慢双击 LevelofDetail1,然后重命名为 iLogic

撰写规则

现在,我们可以撰写规则了。

  1. 创建名为 port_b_rule 的规则。
  2. 对于规则的第一部分,确定我们是否在制作 tee 样式块,然后将其存储在单独的变量 isTee 中。isTee 变量中存储的值为 TrueFalse

    复制代码块

    If block = "elbow" Then
    isTee = False
    ElseisTee = True
    End If

    我们稍后使用此变量设定其他参数。

  3. 向此规则添加代码行,以便在集成块为弯头样式时关闭用以定位活接头和活接螺钉的约束,并在集成块为三通样式时打开约束。

    复制代码块

    Constraint.IsActive("port_b_cap_center") = isTee
    Constraint.IsActive("port_b_cap_hole") = isTee
    Constraint.IsActive("port_b_cap_face") = isTee
    Constraint.IsActive("port_b_cap_screw") = isTee

    请注意,我们可以根据 block 参数的值使用 isTee 变量打开或关闭这些约束。

    注: 这些约束所使用的命名约定使您可以在此规则中更容易地引用它们。记住,您还可以使用“编辑规则”对话框中的模型树信息来帮助完成约束的命名。
  4. 添加有条件地包含 port_b_union 零件和对应螺钉阵列的两行代码:

    复制代码块

    Component.IsActive("port_b_union") = isTee
    Component.IsActive("port_b_screw_pattern") = isTee

    这些代码行使用 isTee 变量。当螺钉阵列受抑制时,螺钉零部件也会受到抑制。

  5. 对于使用 Port B 的引用,添加用于设定端口尺寸、螺钉阵列参数值以及 port_b_union 零件代号的一段代码。

    复制代码块

    if isTee Then
    i = iPart.FindRow("port_b_union", "port_size", "=", port_b_size)
    port_b_y_dist_between_screws = iPart.CurrentRowValue("y_dist_betwn_screw")
    port_b_x_dist_between_screws = iPart.CurrentRowValue("x_dist_betwn_screw")
    port_b_union_part_number = iProperties.Value("port_b_union", "Project", "Part Number")
    End If

    我们已经将整个代码块包含在 If isTee 语句中,这样系统仅会针对三通样式集成块处理这些代码行。If isTee Then 语句与 If isTee = True Then 语句功能相同,但前者提供了更为简洁的表达式格式。

    我们首先在活接头零件的 iPart 表中选择对应于 port_b_size 参数值的相应行,然后提取用于 x 和 y 阵列偏移的值。然后,从活接头零件提取零件代号,并将值存储在另一参数中,以备稍后参考。

  6. 对于此规则的最后一部分,我们选择螺钉零件 iPart 表中的成员以用于 Port B。它是以 port_b_size 参数值为基础的。使用一系列 If/Then/Else 语句进行控制。

    复制代码块

    If port_b_size = .50 then
    iPart.ChangeRow("port_b_union_screw", "Screw-01")
    elseif port_b_size = .75 then
    iPart.ChangeRow("port_b_union_screw", "Screw-02")
    elseif port_b_size = 1.00 then
    iPart.ChangeRow("port_b_union_screw", "Screw-02")
    elseif port_b_size = 1.25 then
    iPart.ChangeRow("port_b_union_screw", "Screw-03")
    elseif port_b_size = 1.50 then
    iPart.ChangeRow("port_b_union_screw", "Screw-04")
    elseif port_b_size = 2.00 then
    iPart.ChangeRow("port_b_union_screw", "Screw-04")
    elseif port_b_size = 2.50 then
    iPart.ChangeRow("port_b_union_screw", "Screw-05")
    elseif port_b_size = 3.00 then
    iPart.ChangeRow("port_b_union_screw", "Screw-06")
    End If
  7. 单击“确定”以关闭对话框,然后保存该规则。
  8. 保存部件文件。

添加 port_c_rule

Port C 的规则与 Port A 的几乎相同,只不过参考 Port A 的所有对象都必须参考 Port C

  1. 打开“规则浏览器”。
  2. 双击 port_a_rule
  3. 使用鼠标亮显整个规则。
  4. Ctrl+C 复制规则文本。
  5. 单击“编辑规则”对话框上的“确定”关闭对话框。
  6. 添加名为 port_c_rule 的新规则。
  7. 在“编辑规则”对话框的规则文本区域中单击,然后按 Ctrl+V 粘贴规则。
  8. 单击对话框顶部的“搜索和替换”选项卡。
  9. “查找内容”中输入 port_a
  10. “替换为”中输入 port_c
  11. 请在“区分大小写”旁边勾选复选标记。
  12. 单击“在该规则中全部替换”

    复制代码块

    i = iPart.FindRow("port_c_union", "port_size", "=", port_c_size)
    port_c_y_dist_between_screws = iPart.CurrentRowValue("y_dist_betwn_screw")
    port_c_x_dist_between_screws = iPart.CurrentRowValue("x_dist_betwn_screw")
    
    If port_c_size = .50 then
    iPart.ChangeRow("port_c_union_screw", "Screw-01")
    elseif port_c_size = .75 then
    iPart.ChangeRow("port_c_union_screw", "Screw-02")
    elseif port_c_size = 1.00 then
    iPart.ChangeRow("port_c_union_screw", "Screw-02")
    elseif port_c_size = 1.25 then
    iPart.ChangeRow("port_c_union_screw", "Screw-03")
    elseif port_c_size = 1.50 then
    iPart.ChangeRow("port_c_union_screw", "Screw-04")
    elseif port_c_size = 2.00 then
    iPart.ChangeRow("port_c_union_screw" "Screw-04")
    elseif port_c_size = 2.50 then
    iPart.ChangeRow("port_c_union_screw", "Screw-05")
    elseif port_c_size = 3.00 then
    iPart.ChangeRow("port_c_union_screw", "Screw-06")
    End If
    
    port_c_union_part_number = iProperties.Value("port_c_union", "Project", "Part Number")
  13. 单击“确定”以关闭对话框。
  14. 保存部件文件。

上一页 | 下一页