建立組合中的規則

在接下來的數個課程中,您將建立一系列規則來管理組合的內容。

將參數從組合傳遞至零件

此模型包括一個名為 manifold_block:1 的零件,其中包含 iLogic 規則。我們必須將組合層級參數傳遞至零件。

  1. 建立名為 assembly_to_parts_rule 的規則。

    此規則會根據組合中對應的控制參數值,設定零件中的參數。Parameter 函數會指定元件名稱,也會指定參數名稱。

    複製程式碼塊

    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. 完成此規則後,按一下「確定」

編輯組合中的零件層級規則

在〈歧管擋塊零件〉自學課程中,我們對控制 T 形彎頭型式的歧管擋塊零件加入了規則。我們也必須在元件層級加入此規則。我們要複製原始規則,而不是重新編寫現有規則。

  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 BPort APort C 不同,因為它不存在於彎頭歧管擋塊中。如果歧管擋塊屬於彎頭型式檔塊,則我們必須抑制活接閥帽以及用於此孔的活接閥螺釘。我們也必須抑制與活接閥帽相關的貼合約束。

由於我們正抑制元件,在編寫規則前,我們要設定詳細等級。如果規則影響的項目與組合中的詳細等級相關,則在編寫規則前,您需要定義一個自訂詳細等級並進行儲存。如果未定義自訂詳細等級,iLogic 會產生錯誤訊息。

設定詳細等級

  1. 在「模型」瀏覽器中,展開「表現法」節點,然後展開「詳細等級」節點。
  2. 「詳細等級」節點上按一下右鍵,然後選取「新詳細等級」

    會加入一個新詳細等級。

  3. 緩慢按兩下「LevelofDetail1」,然後將其更名為 iLogic

編寫規則

現在我們可以編寫規則。

  1. 建立名為 port_b_rule 的規則。
  2. 規則的第一個部分可確定我們是否要建立 T 形檔塊,並將其儲存在單獨的變數 isTee 中。isTee 變數的值為 TrueFalse

    複製程式碼塊

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

    我們稍後會使用此變數來設定其他參數。

  3. 加入數行規則,以在歧管擋塊為彎頭型式時,關閉定位活接閥和活接閥螺釘的約束;歧管擋塊為 T 形時,則打開約束。

    複製程式碼塊

    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

    請注意,我們可以使用 isTee 變數,根據 block 參數的值來打開或關閉這些約束。

    註: 對這些約束所使用的命名規則,使您可以更輕鬆地在此規則中查閱這些約束。請記得您也可以使用「編輯規則」對話方塊中的「模型」樹資訊,來幫助您完成約束的名稱。
  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 陳述式來封閉整個程式碼塊,因此僅在 T 形歧管擋塊的情形下才會處理這幾行規則。陳述式 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. 儲存組合檔。

上一頁 | 下一頁