Asset Management Service – Assets 建模
本示例说明了如何在 MindSphere 中对 assets 进行建模和构建。在本示例中,一家在世界范围内拥有多个风电场的全球风力发电公司在 MindSphere 中创建了他们的第一批 assets。有关本示例中所用端点的详细信息,请参见 API 规范。
该公司有一种名为 WindTurbine1000
的风力涡轮机,可从中收集以下电气和机械指标:
- 功率输出(单位 MW)
- 电压
- 每分钟旋转(单位 RPM)
- 转子振动(单位 Hz)
该公司在北海和波罗的海设有多个风电场。对于每个风电场,应创建两个 assets。
北海风电场 | 波罗的海风电场 | |
---|---|---|
GPS 坐标 | 54.008333,6.598333 | 54.834,14.068 |
涡轮机 1 | N-001 | B-001 |
涡轮机 2 | N-002 | B-002 |
先决条件
- 您具有 MindSphere 租户的访问权限
- 您具有
mdsp:core:assetmanagement.admin
角色
准备模板
创建 Aspect 类型
应创建两个 aspect 类型,一个用于电气指标,另一个用于机械指标。为此可使用端点:
PUT /aspecttypes/{id}
对于电气指标的 aspect 类型,{id}
命名为 {tenantId}.ElectricalMetrics
,请求文本为:
{
"name":"ElectricalMetrics",
"category": "dynamic",
"scope": "private",
"description":"Electrical metrics for wind turbines",
"variables": [
{
"name":"PWR_OUT",
"dataType":"DOUBLE",
"unit":"MW",
"qualityCode":true,
"searchable" :true
},
{
"name":"V_OUT",
"dataType":"DOUBLE",
"unit":"Volt",
"qualityCode":true,
"searchable" :true
}
]
}
可以通过检查响应文本来验证结果:
{
"id": "{tenantId}.ElectricalMetrics",
"tenantId": "{tenantId}",
"name":"ElectricalMetrics",
"category": "dynamic",
"scope": "private",
"description":"Electrical metrics for wind turbines",
"variables": [
{
"name":"PWR_OUT",
"unit":"MW",
"searchable":true,
"qualityCode":true,
"defaultValue":null,
"dataType":"DOUBLE",
"length":null
},
{
"name":"V_OUT",
"unit":"Volt",
"searchable":true,
"qualityCode":true,
"defaultValue":null,
"dataType":"DOUBLE",
"length":null
}
],
"etag": {etagvalue},
"_links": {
"self": {
"href": "{link}"
}
}
}
对于机械指标的 aspect 类型,{id}
命名为 {tenantId}.MechanicalMetrics
,请求文本为:
{
"name":"MechanicalMetrics",
"category": "dynamic",
"scope": "private",
"description":"Mechanical metrics for wind turbines",
"variables": [
{
"name":"V",
"dataType":"INT",
"unit":"RPM",
"qualityCode":true,
"searchable" :true
},
{
"name":"VIB",
"dataType":"INT",
"unit":"Hz",
"qualityCode":true,
"searchable" :true
}
]
}
可以通过检查响应文本来验证所创建的 aspect 类型:
{
"id": "{tenantId}.MechanicalMetrics",
"tenantId": "{tenantId}",
"name":"MechanicalMetrics",
"category": "dynamic",
"scope": "private",
"description":"Mechanical metrics for wind turbines",
"variables": [
{
"name":"V",
"unit":"RPM",
"searchable":true,
"qualityCode":true,
"defaultValue":null,
"dataType":"INT",
"length":null
},
{
"name":"VIB",
"unit":"Hz",
"searchable":true,
"qualityCode":true,
"defaultValue":null,
"dataType":"INT",
"length":null
}
],
"etag": {etagValue},
"_links": {
"self": {
"href": "{link}"
}
}
}
创建 Asset Types
创建所需的 aspect 类型后,可使用以下端点创建 WindTurbine1000
的 asset type:
PUT /assettypes/{id}
此处,{id}
命名为 {tenantId}.WT1000
,请求文本为:
{
"name":"WindTurbine 1000",
"description":"WindTurbine 1000 with best reliability.",
"parentTypeId": "core.basicdevice",
"instantiable":true,
"scope": "private",
"variables": [
{
"name":"InstallationDate",
"dataType":"TIMESTAMP",
"searchable":true,
"defaultValue":"1970-01-01T09:00:00+00:00"
}
],
"aspects": [
{
"name":"ElectricalMetrics",
"aspectTypeId": "{tenantId}.ElectricalMetrics"
},
{
"name":"MechanicalMetrics",
"aspectTypeId": "{tenantId}.MechanicalMetrics"
}
]
}
可以通过检查响应文本来验证所创建的 asset type:
{
"parentTypeId": "core.basicdevice",
"instantiable":true,
"tenantId": "{tenantId}",
"name":"WindTurbine 1000",
"description":"WindTurbine 1000 with best reliability.",
"scope": "private",
"variables": [
{
"name":"InstallationDate",
"unit":null,
"searchable":true,
"defaultValue":"1970-01-01T09:00:00+00:00",
"dataType":"TIMESTAMP",
"length":null
}
],
"aspects": [
{
"name":"ElectricalMetrics",
"aspectType": {
"id": "{tenantId}.ElectricalMetrics",
"tenantId": "{tenantId}",
"name":"ElectricalMetrics",
"category": "dynamic",
"scope": "private",
"description":"Electrical metrics for wind turbines",
"variables": [
{
"name":"PWR_OUT",
"unit":"MW",
"searchable":true,
"qualityCode":true,
"defaultValue":null,
"dataType":"DOUBLE",
"length":null
},
{
"name":"V_OUT",
"unit":"Volt",
"searchable":true,
"qualityCode":true,
"defaultValue":null,
"dataType":"DOUBLE",
"length":null
}
],
"etag": {etagValue},
"_links": {
"self": {
"href": "{link}"
}
}
}
},
{
"name":"MechanicalMetrics",
"aspectType": {
"id": "{tenantId}.MechanicalMetrics",
"tenantId": "{tenantId}",
"name":"MechanicalMetrics",
"category": "dynamic",
"scope": "private",
"description":"Mechanical metrics for wind turbines",
"variables": [
{
"name":"V",
"unit":"RPM",
"searchable":true,
"qualityCode":true,
"defaultValue":null,
"dataType":"INT",
"length":null
},
{
"name":"VIB",
"unit":"Hz",
"searchable":true,
"qualityCode":true,
"defaultValue":null,
"dataType":"INT",
"length":null
}
],
"etag": {etagValue},
"_links": {
"self": {
"href": "{link}"
}
}
}
}
],
"fileAssignments": [],
"etag": {etagValue},
"_links": {
"self": {
"href": "{link}"
},
"parent": {
"href": "{link}"
}
},
"id": "{tenantId}.WT1000"
}
Assets 建模
创建 Asset 站点
为降低复杂性,为每个风电场创建 type 为 basic.site
的 asset。为此可使用以下端点:
POST /assets
对于北海的风电场,文本为:
{
"name":"North Sea",
"description":"Wind Farm North Sea",
"location": {
"longitude":54.008333,
"latitude":6.598333
},
"typeId": "core.basicarea",
"parentId": "{parentAssetId}",
"timezone":"Europe/Berlin"
}
调用的响应结果包含新创建的北海站点 asset,因此您可以验证创建是否正确:
{
"assetId": "{assetId}",
"tenantId": "{tenantId}",
"name":"North Sea",
"etag": {etagValue},
"externalId":null,
"t2Tenant":null,
"subTenant":null,
"description":"Wind Farm North Sea",
"timezone":"Europe/Berlin",
"parentId": "{parentAssetId}",
"typeId": "core.basicarea",
"location": {
"country":null,
"region":null,
"locality":null,
"streetAddress":null,
"postalCode":null,
"longitude":54.008333,
"latitude":6.598333
},
"fileAssignments": [],
"variables": [],
"aspects": [],
"locks": [],
"hierarchyPath": [
{
"assetId": "{assetId}",
"name": "{tenantId}"
}
],
"deleted":null,
"_links": {
"self": {
"href": "{link}"
},
"aspects": {
"href": "{link}"
},
"variables": {
"href": "{link}"
},
"location": {
"href": "{link}"
},
"parent": {
"href": "{link}"
}
}
}
{parentAssetId}
是根 asset。可使用以下端点请求其 ID:
GET /assets/root
对于波罗的海的风电场,文本为:
{
"name":"Baltic Sea",
"description":"Wind Farm Baltic Sea",
"location": {
"longitude":54.834,
"latitude":14.068
},
"typeId": "core.basicarea",
"parentId": "{parentAssetId}",
"timezone":"Europe/Berlin"
}
调用的响应结果包含新创建的波罗的海站点 asset,因此您可以验证创建是否正确:
{
"assetId": "{assetId}",
"tenantId": "{tenantId}",
"name":"Baltic Sea",
"etag":0,
"externalId":null,
"t2Tenant":null,
"subTenant":null,
"description":"Wind Farm Baltic Sea",
"timezone":"Europe/Berlin",
"parentId": "{parentAssetId}",
"typeId": "core.basicarea",
"location": {
"country":null,
"region":null,
"locality":null,
"streetAddress":null,
"postalCode":null,
"longitude":54.834,
"latitude":14.068
},
"fileAssignments": [],
"variables": [],
"aspects": [],
"locks": [],
"hierarchyPath": [
{
"assetId": "{parentAssetId}",
"name": "{tenantId}"
}
],
"deleted":null,
"_links": {
"self": {
"href": "{link}"
},
"aspects": {
"href": "{link}"
},
"variables": {
"href": "{link}"
},
"location": {
"href": "{link}"
},
"parent": {
"href": "{link}"
}
}
}
创建 Assets
设置 asset 站点后,可使用以下端点创建实际 assets:
POST /assets/
北海风电场的第一 asset 的文本为:
{
"name":"N-001",
"description":"Wind turbine 001 in North Sea",
"variables": [
{
"name":"InstallationDate",
"value":"2018-08-28T09:00:00+00:00"
}
],
"typeId": "{tenantId}.WT1000",
"parentId": "{AssetIdNorthSea}"
}
{AssetIdNorthSea}
是北海站点 asset 的 asset ID。
调用的响应包含北海风电场新创建的 asset,因此您可以验证正确的创建:
{
"assetId": "{assetId}",
"tenantId": "{tenantId}",
"name":"N-001",
"etag": {etagValue},
"externalId":null,
"t2Tenant":null,
"subTenant":null,
"description":"Wind turbine 001 in North Sea",
"timezone":"Europe/Berlin",
"parentId": "{AssetIdNorthSea}",
"typeId": "{tenantId}.WT1000",
"location": {
"country":null,
"region":null,
"locality":null,
"streetAddress":null,
"postalCode":null,
"longitude":54.008333,
"latitude":6.598333
},
"fileAssignments": [],
"variables": [
{
"name":"InstallationDate",
"value":"2018-08-28T09:00:00+00:00"
}
],
"aspects": [],
"locks": [],
"hierarchyPath": [
{
"assetId": "{rootAssetId}",
"name": "{tenantId}"
},
{
"assetId": "{AssetIdNorthSea}",
"name":"North Sea"
}
],
"deleted":null,
"_links": {
"self": {
"href": "{link}"
},
"aspects": {
"href": "{link}"
},
"variables": {
"href": "{link}"
},
"location": {
"href": "{link}"
},
"parent": {
"href": "{link}"
}
}
}
响应显示 asset 的 type variable InstallationDate
值设置为请求文本中的给定值。Asset type 定义的默认值已覆盖。
该 asset 已从北海站点 asset 继承了其位置。
该 asset 已实例化其 asset type WK1000
定义的 aspects,但 aspect 列表为空。这是因为其所有 aspects 都是动态的,如果 aspect 被定义为静态,则 aspect 列表仅在 asset 级别上填充。
创建其它三个 assets 的文本如下所示:
{
"name":"N-002",
"description":"Wind turbine 002 in North Sea",
"variables": [
{
"name":"InstallationDate",
"value":"2018-08-28T09:00:00+00:00"
}
],
"typeId": "{tenantId}.WT1000",
"parentId": "{AssetIdNorthSea}"
}
{
"name":"B-001",
"description":"Wind turbine 001 in Baltic Sea",
"variables": [
{
"name":"InstallationDate",
"value":"2018-08-28T09:00:00+00:00"
}
],
"typeId": "{tenantId}.WT1000",
"parentId": "{AssetIdNorthSea}"
}
{
"name":"B-002",
"description":"Wind turbine 002 in Baltic Sea",
"variables": [
{
"name":"InstallationDate",
"value":"2018-08-28T09:00:00+00:00"
}
],
"typeId": "{tenantId}.WT1000",
"parentId": "{AssetIdNorthSea}"
}
注意
在此示例中,波罗的海风力涡轮机的 parentId
故意设置错误。下一部分基于此设置。
移动 assets
在上面给出的代码中,风力涡轮机 B-001
和 B-002
是继承自北海 asset 站点,而不是波罗的海 asset 站点。这可以通过使用移动端点移动两个 assets 来更正:
POST /assets/{id}/move
该请求需要以下参数:
If-Match
:必须设置为 asset 的{etagValue}
。{etagValue}
在创建 asset 时设置为零,并在 asset 每次成功修改后递增。id
:必须设置为 asset 的assetId
。创建 asset 时,其会在响应中列出。moveParameters
:
{
"newParentId": "{AssetIdBalticSea}"
}
{AssetIdBalticSea}
是波罗的海站点 asset 的 asset ID。执行移动操作后,B-001
和 B-002
的位置是正确的。
提示
如果您忘记了单个 asset ID,则可通过调用以下端点来获取所有 assets 及其 ID 的列表:
GET /assets
您可以使用 filter
参数 缩小结果:
{"name":"Baltic Sea"}
还有问题?
除非另行声明,该网站内容遵循MindSphere开发许可协议.