

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 自定义复合模型（组件）
<a name="custom-composite-models"></a>

 当您对特别复杂的工业资产（例如包含许多零件的复杂机器）进行建模时，保持资产模型的有序性和可维护性可能会成为一项挑战。

在这种情况下，您可以将自定义复合模型或组件（如果您使用的是控制台）添加到现有资产模型和组件模型中。它们会对相关属性进行分组，并会重复使用子组件定义，以此帮助您保持井然有序。

自定义复合模型分为两类：
+ **内联**自定义复合模型定义了一组已分组属性，这些属性适用于自定义复合模型所属的资产模型或组件模型。您可以使用它们对相关属性进行分组。它们由名称、描述和一组资产模型属性组成，不可重复使用。
+ **C omponent-model-based** 自定义复合模型引用要包含在资产模型或组件模型中的组件模型。您可以使用它们在模型中包含标准子装配件。它们由名称、描述及其引用的组件模型的 ID 组成，没有自己的属性；引用的组件模型会将其关联属性提供给任何创建的资产。

以下各节介绍了如何在您的设计中使用自定义复合模型。

**Topics**
+ [内联自定义复合模型](#inline-composite-models)
+ [Component-model-based 自定义复合模型](#component-based-custom-composite-models)
+ [使用路径来引用自定义复合模型属性](#property-paths)

## 内联自定义复合模型
<a name="inline-composite-models"></a>

内联自定义复合模型提供了一种通过对相关属性进行分组来组织资产模型的方法。

例如，假设您需要对机器人资产进行建模。该机器人包括伺服马达、电源和电池。这些组成部分都有其自己的属性，需要包含在模型中。您可以定义一个名为 `robot_model` 的资产模型，其属性如下所示。


****  

|  | 
| --- |
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/iot-sitewise/latest/userguide/custom-composite-models.html)  | 

但是，在某些情况下，可能有许多子装配件，或者子装配件本身可能具有许多属性。在这些情况下，可能有太多属性，以至于在模型根目录的单个平面列表中引用和维护它们变得很麻烦，就像前面的示例一样。

要处理此类情况，您可以使用内联自定义复合模型对属性进行分组。内联自定义复合模型是定义其自身属性的自定义复合模型。例如，您可以通过以下方式为您的机器人建模。


****  

|  | 
| --- |
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/iot-sitewise/latest/userguide/custom-composite-models.html)  | 

在前面的示例中，`servo`、`powersupply` 和 `battery` 是在 `robot_model` 资产模型中定义的内联自定义复合模型的名称。然后，这些复合模型都定义了自己的属性。

**注意**  
在本例中，每个自定义复合模型都定义了自己的属性，因此，所有属性都是资产模型（在本例中为 `robot_model`）本身的一部分。这些属性不会与任何其他资产模型或组件模型共享。例如，如果您创建了其他资产模型，其中也有一个名为 `servo` 的内联自定义复合模型，那么，在 `robot_model` 中对 `servo` 进行更改不会影响其他资产模型的 `servo` 定义。  
 如果要实现这样的共享（例如，只有一个伺服系统的定义，所有资产模型都可以共享），则可以改为为其创建一个组件模型，然后创建引用它的**component-model-based**复合模型。有关详细信息，请参阅下一节。

有关创建内联自定义复合模型的信息，请参阅[创建自定义复合模型（组件）](create-custom-composite-models.md)。

## Component-model-based 自定义复合模型
<a name="component-based-custom-composite-models"></a>

可以在中创建元件模型 AWS IoT SiteWise 来定义标准的、可重复使用的子组件。创建组件模型后，您可以在其他资产模型和组件模型中添加对该组件模型的引用。为此，您可以将**component-model-based 自定义复合模型**添加到要引用该组件的任何模型中。您可以从多个模型添加对组件的引用，也可以在同一个模型中多次添加引用。

通过这种方式，您可以避免在模型之间重复相同的定义。它还可以简化模型的维护工作，因为您对组件模型所做的任何更改都将反映在使用该模型的所有资产模型中。

例如，假设您的工业设施中有许多类型的设备，这些设备都使用相同类型的伺服电机。其中某些设备在单台设备中就有多个伺服电机。您为每种设备类型创建了一个资产模型，但不想每次都重复使用 `servo` 的定义。您只想建模一次，然后将其用于各种资产模型。如果您后续更改 `servo` 的定义，则它将在所有模型和资源中同步更新。

要以这种方式对前一个示例中的机器人进行建模，可以将伺服电机、电源和电池定义为组件模型，如下所示。


****  

|  | 
| --- |
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/iot-sitewise/latest/userguide/custom-composite-models.html)  | 


****  

|  | 
| --- |
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/iot-sitewise/latest/userguide/custom-composite-models.html)  | 


****  

|  | 
| --- |
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/iot-sitewise/latest/userguide/custom-composite-models.html)  | 

然后，您可以定义引用这些组件的资产模型，例如 `robot_model`。多个资产模型可以引用同一个组件模型。您还可以在一个资产模型中多次引用同一个组件模型，例如，如果您的机器人中有多个伺服电机。


****  

|  | 
| --- |
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/iot-sitewise/latest/userguide/custom-composite-models.html)  | 

有关如何创建组件模型的信息，请参阅[创建组件模型](create-component-models.md)。

有关如何在其他模型中引用您的组件模型的信息，请参阅[创建自定义复合模型（组件）](create-custom-composite-models.md)。

## 使用路径来引用自定义复合模型属性
<a name="property-paths"></a>

在资产模型、组件模型或自定义复合模型上创建属性时，您可以从使用其值的其他属性（例如[转换](transforms.md)和[指标](metrics.md)）中引用该属性。

AWS IoT SiteWise 为您提供了不同的方式来引用您的房产。最简单的方法通常是使用其属性 ID。但是，如果您要引用的属性位于自定义复合模型上，则您可能会发现，按*路径*引用该属性会更有用。

路径是*路径段*的有序序列，指定了属性在资产模型和复合模型中的嵌套复合模型间的位置。

### 获取属性路径
<a name="obtaining-property-paths"></a>

你可以从属性的`path`字段中获取属性的路径[AssetModelProperty](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_AssetModelProperty.html)。

例如，假设您的资产模型 `robot_model` 包含一个具有 `position` 属性的自定义复合模型 `servo`。如果您调用 [DescribeAssetModelCompositeModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModelCompositeModel.html)`servo`，则该`position`属性将列出一个如下所示的`path`字段：

```
"path": [
    {
       "id": "asset model ID",
       "name": "robot_model"
    },
    {
       "id": "composite model ID",
       "name": "servo"
    },
    {
       "id": "property ID",
       "name": "position"
    }
]
```

### 使用属性路径
<a name="using-property-paths"></a>

在定义引用其他属性（例如转换或指标）的属性时，您可以使用属性路径。

一个属性使用一个*变量*来引用另一个属性。有关使用变量的更多信息，请参阅[在公式表达式中使用变量](expression-variables.md)。

在定义变量来引用属性时，您可以使用该属性的 ID 或路径。

要定义使用被引用属性路径的变量，请指定其值的 `propertyPath` 字段。

例如，要定义具有通过路径引用属性的指标的资产模型，可以将这样的负载传递给 [CreateAssetModel](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_CreateAssetModel.html)：

```
{
    ...
    "assetModelProperties": [
        {
            ...
            "type": {
                "metric": {
                    ...
                    "variables": [
                        {
                            "name": "variable name",
                            "value": {
                                "propertyPath": [
                                    path segments
                                ]
                            }
                        }
                    ],
                    ...
                }
            },
            ...
        },
        ...
    ],
    ...
}
```