本文是“资产管理壳细节 Part1的读书笔记。
<Details_of_the_Asset_Administration_Shell_Part1_V3.pdf>
要真正了解工业4.0 的管理壳,绕不开认真地读这篇文章。老实说, 第一次读这个文本会发现什么都明白,就是不知道有什么用场。其实学习信息模型基本上都是如此的,当手脚架拆除之后,人们难以理解金字塔是如何构造出来的。 标准应该具备完整性。信息模型能够应对所有的场景。特别是I4.0 管理壳模型更加强调语义的规范。增加了许多关于语义定义的单元。
管理壳模型能够使用JSON,AML和OPC UA 来描述。上述文章的内容比较难懂,可以和OPC UA 发布了OPC 30270 OPC UA AA规格文件的文本结合起来一起阅读。
子模型
工业4.0 的概念是希望所有的资产都具有一个管理壳,并且管理壳能够对资产进行全过程,全方位的管理。比如要管理机械特征,控制特征,能源特征,安全特征,要管理设计阶段的文档,图纸,又要管理运行过程中的安装,维护文档。总之,管理壳包罗万象。
那么管理壳是怎么做到的呢?这就是子模型。每个管理壳包含了多个子模型。一个子模型针对资产的一个方面的特征。
可能的子模型如下:
这些子模型尽量符合相关的标准。这些国际标准有些在国外已经使用了许多年。如果之前我们并没有使用这些标准,现在结合管理壳来使用的话,会比较复杂和辛苦。许多的概念,术语,数据规范需要构建相应的字典数据库。这是一项非常巨大的工程。达成共识,被厂商认可更难。笔者的看法是尽可能地简化,实现AAS模型的子集,必要的数据规范可以做出嵌入式数据规范。当AAS技术普及时再制定相关的标准。
分层结构
工业4.0 管理壳(下面简称AAS)信息模型不完全是分层结构的模型。对象之间有交叉的引用,并且还有通过标识符(ID) 引用。但是,我们仍然可以使用分层结构来构建管理壳模型。应为分层结构能够方便地使用图形化设计方式。交叉引用可以使用额外的参数配置。
每个管理壳由多个子管理壳组成,每个子管理壳内部包含了多个子管理壳单元。
5.4 标识(Identifiers)
在智能制造领域中,不同的单元需要有一个唯一的标识(unique identification),正因为如此,标识(Identifiers)是形式化描述管理壳的基本单元。至少下面这些单元需要标识:
- 资产管理壳
- 资产
- 子模型实例和模板
- 在外部仓库中的属性定义和概念描述(ECLASS 或者 IEC CDD)
标识的作用
- 在管理壳中唯一地区分各个子单元
- 让单元与外部定义和模板
例如子模型模板,属性定义。让管理壳的数据和功能单元注入语义。
标识的类型
IRDI - ISO29002-5, ISO IEC 6523 和 ISO IEC 11179-6
IRI – IRI (Rfc 39871 ) 或者遵循 RFC 39862的URI 和 URL
专用 - 内部专用标识 UUIDs/GUIDs
5.7 元模型
在该文中,管理壳信息模型是使用UML图形方式和模板方式描述的。在第8 章才讲述了如何将AAS 的内容打成一个AAS 包(AASX Package) 。在工程设计过程中,人们通过AASX Package 来交换工程文件,AASX 包是一个压缩包。关于UML 模板的介绍在附录C。
例如:UML 图形
模板
公共属性
在AAS 建模过程中,使用一些公共的特征。它们包括:
Extensions (HasExtensions)
可引用属性(Referable)
元模型使用两个属性来区分不同的单元(Referable和identifiable) Referable是通过idshort 来引用,而identifiable通过标识符来区分。
可标识属性(identifiable)
模板或者实例属性(HasKind)
一个枚举类型。
管理信息属性(Administrative Information Attributes)
语义id 属性(HasSemantics)
指向一个语义定义的ID
限定属性(Qualifier Attributes)
限定属性,例如液位值,增加最大最小值
数据规范(HasDataSpecification)
一个元素可以通过数据规范来扩展,所谓数据规范模板就是一组额外的特征,比如单位,符号等等。
管理壳
特征
从何导出(derivedFrom)
包括一个Identable,或者包含一个数据规范
资产信息
子模型
由此可见,子模型主要由子模型单元构成。
子模型单元属性(submodelElement Attribute)
大约有9种子类型单元,数据单元又分为6种。如下图所示:
公共属性
数据单元值,比如字符串。
每一个子模型单元都有一个语义定义((semanticId)它可以是指向一个外部的语义定义(ECLASS 或者IEC CDD 特征定义),也可以引用指向概念描述(ConceptDescription),我看到的例子中,将概念描述放置在一个子模型中。
数据单元(DataElement)
特征(Property)
是一种数据单元,包含了简单数据类型。
多语言特征(MultiLanguageProperty)
value 特征实例的值,这类特征应该是字符串类型的。数据类型LangStringSet。
valueId 指向唯一ID 的引用。
区间值(Range)
指定了一个值的范围,即取值的最小值和最大值。包含了三个属性
文件(AASFileType)
包含了两个属性
Value -为文件的名称和路径
contentType-文件内容类型 可以是扩展名
可以可选的属性:FileType 对象
操作(Operation)
该子模型单元封装了一个OPC UA 的Method。还可以包括一个指向概念描述的引用。
语义定义
相比于其它的信息模型,在AAS 模型中更加重视语义的定义。
管理壳模型的描述方式
在这篇文章中,采用了中性的方法(UML) 来描述AAS 模型。在实际应用中,不同的阶段会将AAS模型转换成为某一种信息模型。例如AutomationML,JSON和OPC UA 。
- 工程设计阶段使用AutomationML
- 系统运营阶段使用OPC UA
- 与IT 系统接口时使用JSON
在AASX Package Explore 软件中,能够Export AML ,JSON 和OPCUA 的文本格式。
OPC 30270 -管理壳OPCUA 模型
OPC UA 于2021 年6月份提出了《OPC 30270: Industry 4.0 Asset Administration Shell》。使用OPC UA 信息模型完全能够描述AAS 元模型。
在AAS 的规范中,使用UAObject ,UAVariable,UAMethod 和Reference 来描述AAS 的元模型。需要注意的是:
1 AAS 中的某些Reference 类型,需要使用OPCUA 的Object 建模
2 AAS 中的某些属性使用OPC UA 中的结构化数据类型来描述。(也就是说,Variable 中可能包含结构数据单元。
AAS 元模型的图形化建模和模板
这是笔者做的一些工作。
按照IDTA 的建议,AASX 模型建模的方法大致是:
使用AASX Package Explore 软件来构建AASX 模型。然后导出AML ,OPC UA 的模型文本。在其它软件中使用该模型。但是事情好像并不简单,比如导出的OPC UA 模型进一步导入到OPC UA 服务器平台上,与其它软件结合时,仍然有很大的编程的工作量。我们正在寻找一种基于图形和组件化的设计方法来构建AAS 的信息模型,并且能够与其它OPC UA 服务结合,比如IEC61499 运行时。
为了实现这个目标,我们做了如下工作:
在IDE 开发工具中,内部直接使用OPC UA 的Node模型 。
为AAS 元模型建立了基于OPCUA 的模板。模板与模型的差别是,模板是基于分层结构的。AAS ,SubModel ,SubModel 和SubModelElement 都是嵌套的。模板中包含了嵌入式子模型的模板。这种模板便于在OPC UA 服务器中实现实例化与部署。
下面是一个例子:
<Model Type="AASPropertyType">
<UAObject BrowseName="AASPropertyType" DisplayName="AASPropertyType" Type="AASPropertyType" Reference="HasComponent">
<UAVariable BrowseName="Value" DisplayName="Value" Type="PropertyType" DataType="BaseDataType" Reference="HasProperty">
<Value>0</Value>
</UAVariable>
<UAVariable BrowseName="ValueType" DisplayName="ValueType" Type="PropertyType" DataType="AASValueTypeDataType" Reference="HasProperty">
<Value>Int32</Value>
</UAVariable>
<UAObject BrowseName="ValueId" DisplayName="ValueId" Type="AASReferenceType" Reference="HasComponenet">
<UAVariable BrowseName="Keys" DisplayName="Keys" Type="PropertyType" DataType="AASKeyDataType[]" Reference="HasComponent">
<UAVariable BrowseName="AASKeyDataType" DisplayName="AASKeyDataType" Type="AASKeyDataType" DataType="Structure" Reference="HasComponent">
<UAVariable BrowseName="Local" DisplayName="Local" Type="Local" DataType="Bool" Reference="HasComponent"></UAVariable>
<UAVariable BrowseName="Value" DisplayName="Value" Type="Value" DataType="String" Reference="HasComponent"></UAVariable>
</UAVariable>
</UAVariable>
<References>
<Reference Type="AASReference"></Reference>
<Reference Type="HasDictionaryEntry"></Reference>
</References>
</UAObject>
</UAObject>
</Model>