Конструирование модульной структуры изделия
Многие изделия имеют несколько подсистем с собственными наборами необязательных элементов. В некоторых случаях опции для каждой подсистемы обрабатываются независимо системой в логической прогрессии. Однако в других случаях может потребоваться, чтобы на доступные опции в одной подсистеме влияли опции, выбранные в других подсистемах.
Например, рассмотрим металлическую витрину: доступно несколько различных моделей с разнообразными опциями показа, отделки и освещения. В зависимости от выбранной модели витрины, доступные опции показа, отделки и элементов освещения могут различаться.
В случае простой структуры изделия, содержащей только несколько модулей и ограниченный набор опций, можно относительно легко создать и проверить подходящую конфигурируемую структуру изделия. Однако если структура изделия содержит пять модулей, каждый из которых имеет шесть возможных опций для выбора, общее число перестановок (в данном случае 5 x 6, или 30) может быть слишком большим.
Предлагаемый подход состоит в упорядочении структуры изделия узла в конфигурируемые узлы, как показано на следующем рисунке.
В этом примере предполагается, что доступно пять моделей витрины: с Модель_01 по Модель_05, а некоторые из опций применимы только для определенных моделей, как показано в следующей таблице.
Модель Display Case | Trim Options | Lighting Options | Опции показа |
Model_01 | Twin Standard | Single Double | Shelf, Ventilated Shelf, Solid |
Model_02 | Standard Deluxe | Double, Triple | Shelf, Ventilated Shelf, Solid |
Model_03 | Twin Standard Deluxe | Single Double Triple | Shelf, Ventilated Rack |
Model_04 | Twin Standard Deluxe | Single Double Triple | Shelf, Ventilated Shelf, Solid Rack |
Model_05 | Twin Standard Deluxe | Single Double Triple | Shelf, Ventilated Shelf, Solid Rack |
Следующий шаг: установить подходящие логические элементы в модульной манере так, чтобы каждый модуль опций можно было независимо протестировать, а затем интегрировать в полную структуру изделия. Например, рассмотрим логику для узла Trim Options. Для этого узла требуются следующие четыре параметра:
askModel
• String, Input Parameter
• Prompt = “(TRIM OPTIONS) Select the desired display case model”
• Constraint:“Model_01”, “Model_02”, “Model_03”, “Model_04”, “Model_05”
• “hide when driven” = true
useStandard
• Boolean, non-input parameter
• Добавляется в опцию включения на вкладке Использует конфигурируемого узла Display Case для детали Bumper, Standard
useTwin
• Boolean, non-input parameter
• Добавляется в опцию включения на вкладке Использует конфигурируемого отображаемого узла для детали Bumper, Twin
useDeluxe
• Boolean, non-input parameter
• Добавляется в опцию включения на вкладке Использует конфигурируемого отображаемого узла для детали Bumper, Deluxe
Далее требуется таблица вариантов, например pickTrim, чтобы управлять применимостью опций отделки для каждой модели отображаемого варианта, как показано в следующей таблице.
Модель Display Case | Trim Options | Lighting Options | Опции показа |
Model_03 | TwinStandardDeluxe | SingleDoubleTriple | Shelf, Ventilated Rack |
Model_04 | TwinStandardDeluxe | SingleDoubleTriple | Shelf, Ventilated Shelf, Solid Rack |
Model_05 | TwinStandardDeluxe | SingleDoubleTriple | Shelf, Ventilated Shelf, Solid Rack |
Следующий шаг: установить подходящие логические элементы в модульной манере так, чтобы каждый модуль опций можно было независимо протестировать, а затем интегрировать в полную структуру изделия. Например, рассмотрим логику для узла Trim Options. Для этого узла требуются следующие четыре параметра:
askModel
• String, Input Parameter
• Prompt = “(TRIM OPTIONS) Select the desired display case model”
• Constraint:“Model_01”, “Model_02”, “Model_03”, “Model_04”, “Model_05”
• “hide when driven” = true
useStandard
• Boolean, non-input parameter
• Добавляется в опцию включения на вкладке "Использует" конфигурируемого узла Display Case для детали Bumper, Standard
useTwin
• Boolean, non-input parameter
• Добавляется в опцию включения на вкладке Использует конфигурируемого отображаемого узла для детали Bumper, Twin
useDeluxe
• Boolean, non-input parameter
• Добавляется в опцию включения на вкладке Использует конфигурируемого отображаемого узла для детали Bumper, Deluxe
Далее требуется таблица вариантов, например pickTrim, чтобы управлять применимостью опций отделки для каждой модели отображаемого варианта, как показано в следующей таблице.
askModel | useStandard | useTwin | useDeluxe |
Model_01 | да | да | нет |
Model_02 | да | нет | да |
Model_03 | да | да | да |
Model_04 | да | да | да |
Model_05 | да | да | да |
Эти логические выражения позволяют тестировать модуль опций отделки независимо, чтобы гарантировать, что все работает правильно.
| Если один и тот же подход используется для каждого из модулей, то пользователь будет запрашивать повторно, какая модель витрины требуется, что нежелательно. Поэтому после создания каждого из модулей и проверки правильности их работы необходимо их интегрировать. |
Чтобы интегрировать модули, выполните следующие действия.
1. Создайте подходящий параметр для определения модели в конфигурируемом узле "Витрина" следующим образом:
◦ askModel - строка, обязательный входной параметр
◦ Prompt = “Select the desired display case model”
◦ Constraint:“Model_01”, “Model_02”, “Model_03”, “Model_04”, “Model_05”
2. Установите эквивалентность между параметром askModel в конфигурируемом узле "Витрина" и всеми его потомками.
3. Удалите ограничения для каждого параметра askModel в каждом из модулей опций.
| Удаление этих ограничений необходимо во избежание конфликтов между конфигурируемым узлом верхнего уровня "Витрина" и конфигурируемыми узлами, входящими в каждый модуль. |
4. Протестируйте завершенную конфигурируемую структуру изделия. Поскольку вы уже тестировали каждый из узлов, нужно только проверить, что значение askModel, введенное пользователем в конфигурируемом узле верхнего уровня "Витрина", будет правильно скопировано в каждый из узлов.
| При отображении дерева ведомости материалов на странице "Задать параметры" окна Настройка и нажатии кнопки Применить можно быстро увидеть, скопировано ли текущее значение askModel из конфигурируемого узла "Витрина" в каждый из узлов. |