天车AAS数据模型完整工程实现:从西门子PLC寄存器到数字孪生数据中台
上篇《天车数字孪生系统技术深度解析》介绍了数字孪生的总体架构,其中反复提到一个词——AAS(Asset Administration Shell,资产管理壳)。这篇就专门把AAS数据模型拆开来讲,从PLC寄存器地址到OPC UA映射、再到AAS JSON结构和时序数据库落地,一步到位。
如果你手头正在做天车数字化项目,这篇文章可以直接当技术参考手册用。

一、AAS标准与天车数据建模
AAS是工业4.0的核心数据规范(IEC 63278),你可以把它理解成每台设备的”数字身份证”。它把设备全生命周期的所有数据——设计参数、运行状态、维保记录、健康评分——组织成标准化的分层结构,任何系统(ERP、MES、SCADA、云平台)都能用统一的方式读写。
1.1 AAS结构层次
Crane_AAS(资产壳)├── Asset Information(资产信息)│ ├── SerialNumber: "KELAND-CR-24001"│ ├── Manufacturer: "克鲁德重工"│ ├── ModelType: "QD-32/5t-22.5m-A7"│ ├── ProductionDate: "2024-06-15"│ └── TechnicalData: {Span:22.5m, SWL:32t, HoistSpeed:6m/min}├── Submodels(子模型组)│ ├── TechnicalData(技术参数——只读,设备出厂即固定)│ ├── OperationalData(运行数据——实时刷新,100ms周期)│ ├── Maintenance(维保数据——事件触发,检修时更新)│ ├── HealthStatus(健康状态——AI计算,定期更新)│ └── EnvironmentalData(环境数据——辅助分析)└── Views(视图层) ├── OperatorView(操作员视图——当前状态+报警) ├── MaintenanceView(维护视图——备件寿命+维保计划) ├── EngineerView(工程师视图——全部原始数据) └── ManagementView(管理视图——OEE+能耗报表)
这个分层设计的好处是:不同角色只看自己需要的数据,底层数据模型是同一套,不存在信息孤岛。
二、PLC到AAS的完整映射
理论说完了,直接上实际工程数据。以下是克鲁德重工一台32t双梁桥式天车的PLC寄存器到AAS的完整映射表:
| AAS子模型·属性 | OPC UA NodeID | PLC DB地址 | Data Types | 周期 |
|---|---|---|---|---|
| TechnicalData.ratedCapacity | Crane.Params.RatedCap | DB100.DBD0 | Real | 启动时 |
| TechnicalData.span | Crane.Params.Span | DB100.DBD4 | Real | 启动时 |
| TechnicalData.workLevel | Crane.Params.WorkLvl | DB100.DBW8 | Int | 启动时 |
| OperationalData.runningState | Crane.Status.State | DB200.DBX0.0 | Word | 100ms |
| OperationalData.currentLoad_pct | Crane.Status.LoadPct | DB200.DBD2 | Real | 100ms |
| OperationalData.hoistMotorCurrent_A | Crane.Status.HoistCurrent | DB200.DBD6 | Real | 100ms |
| OperationalData.motorTemp_Hoist_C | Crane.Status.HoistTemp | DB200.DBD10 | Real | 1s |
| OperationalData.vibration_HoistDrive_mms | Crane.Status.HoistVib | DB200.DBD14 | Real | 1s |
| Maintenance.lastInspectionDate | Crane.Maint.LastInsp | DB300.DBD0 | Date | 事件 |
| Maintenance.remainingBrakePadLife_pct | Crane.Maint.BrakePad | DB300.DBD20 | Real | 事件 |
| Environmental.ambientTemp_C | Crane.Env.AmbTemp | DB400.DBD0 | Real | 10s |
2.1 三种数据采集周期
- 100ms级(实时类):运行状态、电流、载重、位置——这些数据驱动3D引擎的实时姿态同步,延迟高了模型就卡顿
- 1s级(趋势类):温度、振动有效值——用于趋势分析和报警阈值判断,不需要100ms那么快
- 事件触发(记录类):维保记录、故障日志——有变化才更新,不占带宽
三、AAS JSON完整实例
以下是一台32t双梁桥式天车的完整AAS JSON,包含4个子模型:技术参数、运行数据、维保数据、环境数据。可以直接套用到实际项目中修改参数值即可使用。
{ "administration": { "version": "3.0", "revision": "RC02", "id": "https://kurude-crane.com/aas/CR-2024-001", "idShort": "Crane32t_AAS" }, "assetInformation": { "assetKind": "Instance", "globalAssetId": "https://kurude-crane.com/asset/crane-32t-2024-001", "specificAssetId": [ {"name": "serialNumber", "value": "CRN-2024-001"}, {"name": "manufacturer", "value": "克鲁德重工"}, {"name": "manufacturingDate", "value": "2024-03-15"} ] }, "submodels": [ { "id": "https://kurude-crane.com/aas/CR-2024-001/sm/technical-data", "idShort": "TechnicalData", "semanticId": "https://admin-shell.io/IDT/TechnicalData/3/0", "submodelElements": [ {"idShort": "ratedCapacity", "value": "32", "valueType": "xs:int", "unit": "t"}, {"idShort": "span", "value": "22.5", "valueType": "xs:double", "unit": "m"}, {"idShort": "workLevel", "value": "A6", "valueType": "xs:string"}, {"idShort": "hoistingHeight", "value": "16", "valueType": "xs:double", "unit": "m"}, {"idShort": "hoistSpeed", "value": "0.8-8.0", "valueType": "xs:string", "unit": "m/min"}, {"idShort": "totalWeight", "value": 38500, "valueType": "xs:int", "unit": "kg"}, {"idShort": "powerSupply", "value": "AC380V 50Hz 3-phase", "valueType": "xs:string"} ] }, { "id": "https://kurude-crane.com/aas/CR-2024-001/sm/operational-data", "idShort": "OperationalData", "submodelElements": [ {"idShort": "runningState", "value": "running", "valueType": "xs:string"}, {"idShort": "currentLoad_pct", "value": 42.5, "valueType": "xs:double"}, {"idShort": "totalRuntime_h", "value": 28650, "valueType": "xs:double"}, {"idShort": "cycleCount", "value": 12580, "valueType": "xs:int"}, {"idShort": "energyConsumption_kWh", "value": 186500, "valueType": "xs:double"}, {"idShort": "hoistMotorCurrent_A", "value": 45.2, "valueType": "xs:double"}, {"idShort": "motorTemp_Hoist_C", "value": 62.5, "valueType": "xs:double"}, {"idShort": "vibration_HoistDrive_mms", "value": 2.8, "valueType": "xs:double"}, {"idShort": "brakeWear_pct", "value": 35.0, "valueType": "xs:double"} ] }, { "id": "https://kurude-crane.com/aas/CR-2024-001/sm/maintenance", "idShort": "Maintenance", "submodelElements": [ {"idShort": "lastInspectionDate", "value": "2025-03-15", "valueType": "xs:date"}, {"idShort": "remainingBrakePadLife_pct", "value": 65.0, "valueType": "xs:double"}, {"idShort": "remainingWireRopeLife_pct", "value": 72.0, "valueType": "xs:double"}, {"idShort": "remainingWheelLife_pct", "value": 82.0, "valueType": "xs:double"}, {"idShort": "mtbf_h", "value": 9548, "valueType": "xs:double"}, {"idShort": "mttr_h", "value": 2.5, "valueType": "xs:double"} ] }, { "id": "https://kurude-crane.com/aas/CR-2024-001/sm/environmental", "idShort": "EnvironmentalData", "submodelElements": [ {"idShort": "ambientTemp_C", "value": 28.0, "valueType": "xs:double"}, {"idShort": "ambientHumidity_pct", "value": 55.0, "valueType": "xs:double"}, {"idShort": "noiseLevel_dBA", "value": 78.5, "valueType": "xs:double"} ] } ]}
四、时序数据库设计与数据管道
数据进了AAS结构之后,需要有地方存下来。天车数据的特点是写入量大(100ms/条)、查询模式固定(按时间范围聚合)、需要长时间保存(≥3年)。时序数据库(InfluxDB / TimescaleDB)是标准选择。
4.1 分级存储策略
不同数据类型的存储方案和周期设计如下:
| 存储层级 | 保留时间 | 采样粒度 | 存储容量 |
|---|---|---|---|
| 原始数据 | 7天 | 100ms | ≈1.2GB/天 |
| 分钟聚合 | 90天 | 1min | ≈200MB/天 |
| 小时聚合 | 2年 | 1h | ≈35MB/天 |
| 天聚合 | 10年 | 1d | ≈5MB/天 |
4.2 连续查询示例(InfluxQL)
-- 1分钟聚合(起升电流)CREATE CONTINUOUS QUERY "cq_1min_hoist_current" ON "crane_db"RESAMPLE EVERY 1m FOR 1hBEGIN SELECT mean("value") AS "mean_hoist_current", max("value") AS "max_hoist_current", min("value") AS "min_hoist_current" INTO "crane_1min"."autogen"."hoist_current_agg" FROM "crane_realtime"."autogen"."hoist_current" GROUP BY time(1m), "crane_id"END-- 查询:过去24小时峰值电流SELECT max("max_hoist_current") AS "peak_current"FROM "crane_1min"."autogen"."hoist_current_agg"WHERE "crane_id" = CRN-2024-001 AND time >= now() - 24hGROUP BY time(1h)
五、数据质量保障
AAS模型再漂亮,底层数据不准就是垃圾进垃圾出。工业现场的数据质量问题远比你想象的常见——传感器漂移、通信中断、PLC扫描抖动、信号干扰。以下是我们工程实践中总结的5种数据质量问题及处理策略:
| 问题类型 | 检测方法 | 处理策略 |
|---|---|---|
| 数据丢失(间隙>2×周期) | 时序检查 | 线性插值填充,quality=1 |
| 超范围值 | 上下限校验 | 丢弃+告警,quality=2 |
| 固定值(死信号>30s) | 变化率检测 | 标记可疑+监测,quality=3 |
| 突变值(变化率>5σ) | 统计异常检测 | 中值滤波替换,quality=4 |
| 时间戳异常 | 时间戳校验 | 拒绝写入 |
每个数据点都带一个quality字段(0~192),上层应用读取时可以根据quality决定是否信任这个数据点。192=good,0=bad,中间值根据严重程度分级。
六、MES/ERP集成实践
AAS模型建好之后,MES、ERP、WMS等企业系统通过统一REST API接口即可读写天车数据:
所有API返回统一格式:
| API端点 | 方法 | 说明 | 频率限制 |
|---|---|---|---|
| /api/v2/cranes/{id}/status | GET | 实时运行状态 | 300次/min |
| /api/v2/cranes/{id}/telemetry | GET | 遥测历史数据 | 30次/min |
| /api/v2/cranes/{id}/alarms | GET | 报警历史 | 30次/min |
| /api/v2/maintenance/records | POST | 添加维保记录 | 10次/min |
| /api/v2/statistics | GET | 统计报表 | 10次/min |
{ "code": 200, "message": "success", "data": { /* 响应数据 */ }, "timestamp": "2026-06-21T14:00:00.000Z", "requestId": "req-001-abc-xyz"}
Conclusion
AAS数据模型不是什么高深的理论,它就是一套让设备和系统说”同一种语言”的规范。实施起来也不复杂——PLC寄存器地址整理好、OPC UA映射表建好、AAS JSON模板填好,剩下的就是数据管道的事情了。
随后写了《天车仿真模型参数标定方法》,从实测数据反推仿真参数,把运动学/动力学模型的标定流程讲清楚,以及边缘端实时渲染优化方案。敬请关注。
Frequently Asked Questions
问:AAS资产管理壳到底是什么?有什么用?
AAS(Asset Administration Shell,资产管理壳)是工业4.0核心标准(IEC 63278),可以理解为一台设备在数字世界的“身份证+简历”。它把设备的设计参数、实时运行数据、维保记录、健康状态等全生命周期信息统一成标准格式。对天车来说,有了AAS之后,ERP、MES、SCADA、云平台都可以用同一套接口读取和理解天车的所有数据,不需要反复对接不同系统。
问:克鲁德重工的AAS模型能对接哪些系统?
目前支持直接对接西门子S7-1200/1500系列PLC(OPC UA协议)、三菱Q系列(Modbus TCP)、以及标准MQTT/REST API接口。后端可对接InfluxDB时序库、Kafka消息队列和任意SQL数据库。已经在钢铁厂、港口、园区等多个项目落地,对接成功率100%。
问:老设备没有PLC数据接口能做AAS吗?
可以。对没有PLC数据输出的老设备,有两种方案:一是加装传感器采集盒(IO-Link或4-20mA采集模块,约2000元/台),将物理信号转为数字信号后接入AAS;二是人工录入维保记录等静态数据,动态数据部分从加装传感器获取。两种方案都不需要更换整机。