BACnet-APDU(5)

前面文章总结了NDPU,
此文章总结APDU

1、BACnet-Confirmed-Request-PDU

注解
PDU Type :无符号(0..15),-- 0 表示此 PDU 类型

SEG:分段信息(segmented-message),如果这是一条分段消息,则为 TRUE,否则为 FALSE。
MOR:more-follows BOOLEAN,如果这是一条分段消息,并且这不是最终分段,则为 TRUE。否则为 FALSE。

SA:分段消息接受(segmented-message-accepted)BOOLEAN,如果请求者接受分段 BACnet-Complex-ACK-PDU 作为响应,则为 TRUE,否则为 FALSE。

Max Segs:接受的最大响应段数。

Max Resp:可接受的最大 ADPU 大小。

Invoke ID :请求者用来将响应与请求关联的消息“序列号”。分段请求的所有段必须具有相同的invokeID。invokeID 应该为每个新的 BACnet-Confirmed-Request-PDU 递增。这便于调试,因为它允许将响应与导致响应的请求相关联。

Sequence Number:包序号,标识分段的 BACnet-Confirmed-Request-PDU 的段。不存在于未分段的请求中,只有当SEG=1,才会有这个值。
Proposed Window Size:指定发送分段 BACnet-Confirmed-Request-PDU 的请求者可接受的最大分段窗口大小。未分段的请求中不存在该值;只有当SEG=1,才会有这个值。

Service Choice:服务选择被定义为 BACnetConfirmedServiceChoice 类型,该类型在第 21 条中被定义为枚举。readProperty 的值为十进制的 12。

Service Request:

ReadProperty-Request ::= SEQUENCE {

objectIdentifier
propertyIdentifier
propertyArrayIndex

[0] BACnetObjectIdentifier,
[1] BACnetPropertyIdentifier,
[2] Unsigned OPTIONAL --used only with array datatype
-- if omitted with an array the entire array is referenced

}
这些项目包括“objectIdentifier”,带有上下文标签 0,类型为
BACnetObjectIdentifier;

“propertyIdentifier”,带有上下文标签 1,类型为 BACnetPropertyIdentifier;“propertyArrayIndex”,一个可选的无符号整数,带有上下文标签 2。由于模拟输入对象的当前值不是数组,因此本例中不会出现“propertyArrayIndex”。

2、BACnet-ComplexACK-PDU

 APDU数据结构

注解
PDU Type :无符号(0..15),-- 0 表示此 PDU 类型

SEG:分段信息(segmented-message),如果这是一条分段消息,则为 TRUE,否则为 FALSE。
MOR:more-follows BOOLEAN,如果这是一条分段消息,并且这不是最终分段,则为 TRUE。否则为 FALSE。

Original Invoke ID:与请求包一致

Sequence Number:包序号,标识分段的 BACnet-Confirmed-Request-PDU 的段。不存在于未分段的请求中,只有当SEG=1,才会有这个值。
Proposed Window Size:指定发送分段 BACnet-Confirmed-Request-PDU 的请求者可接受的最大分段窗口大小。未分段的请求中不存在该值;只有当SEG=1,才会有这个值。

Service ACK Choice:service-ACK-choice 定义为 BACnetConfirmedServiceChoice 类型,该类型在第 350 页定义为枚举。readProperty 的值为十进制 12。

service-ACK
ReadProperty-ACK ::= SEQUENCE {

objectIdentifier
propertyIdentifier
propertyArrayIndex
propertyValue
[0] BACnetObjectIdentifier,
[1] BACnetPropertyIdentifier,
[2] Unsigned OPTIONAL, --used only with array datatype
-- if omitted with an array the entire array is referenced
[3] ABSTRACT-SYNTAX.&Type

}

3、PDU Type

Types of PDU

APDU Type (Code) (First nibble)APDU (Structure)注解
0x0XBACnet-Confirmed-Request-PDU确认请求
0x1XBACnet-Unconfirmed-Request-PDU不确认请求
0x2XBACnet-SimpleACK-PDU简单回复
0x3XBACnet-ComplexACK-PDU复杂回复
0x4XSegment ACK段确认
0x5XError PDU错误
0x6XReject-PDUPDU 由于语法原因被拒绝,包含 BACnet 拒绝原因
0x7XAbort PDU包含 BACnet 中止原因
0x8X~0xfXReserved

4、常用的APDU

(1)BACnet-Confirmed-Request-PDU
(2)BACnet-Unconfirmed-Request-PDU
(3)BACnet-Simple-ACK-PDU
(4)BACnet-ComplexACK-PDU

5、APDU 中的重要数据结构

基本数据结构如下:

class区分BACnet 标签

标签有两种类型,每种类型的标签号用法各有不同。

  • 应用程序标签(class = 0)
    • 这些有固定的类型 - 布尔值、整数、日期等等。
  • 上下文特定标签(class = 1)
    • 这些标签的类型取决于它们在 APDU 变量部分中的位置。仅通过检查无法确定它们的类型。
    • 它们具有相关的上下文编号,用于指定数据的含义。
    • 上下文标签还允许创建构造标签(列表)。

应用程序标签(class = 0)下的Tag Number对应的数据类型

Tag NumberDescription
0NULL(空)
1Boolean(布尔值)
2Unsigned Integer*(无符号值)
3Signed Integer(有符号值)
4Real(32位浮点数float)
5Double(64位浮点数double)
6Octet String(表示字节字符串,通常用于存储原始二进制数据)
7Character String(表示文本字符串,通常用于字符数据)
8Bit String(表示位字符串,通常用于存储位集合)
9Enumerated(表示枚举类型,具有预定义的离散值。)
10Date(表示日期数据,通常格式为年-月-日。)
11Time(表示时间数据,通常格式为时:分:秒。)
12BACnetObjectIdentifier(表示BACnet对象的唯一标识符)
13Reserved(保留)
14Reserved(保留)
15Reserved - Indicates that the following Octect contains an 8-bit Tag Number(保留,表示后续的字节包含一个8位标签编号。)
(1)对象标识符

对象可以通过其对象标识符与设备的对象标识符相结合来唯一标识。此唯一性仅限于给定设备,不适用于整个网络。需要注意的是,不允许使用 4194303 作为对象标识符,这表明包含的对象尚未初始化。

设备的对象标识符在整个网络范围内必须是唯一的。这实际上意味着设备实例在任何给定的 BACnet 互联网网络中都是唯一的。

对象标识符的应用标签号为12。

.... 1... = Tag Class: Context Specific Tag

0000 .... = Context Tag Number: 0

Length Value Type: 4

0000 0010 00.. .... .... .... .... .... = Object Type: device (8)

.... .... ..11 0101 0000 0000 0001 1011 = Instance Number: 3473435

31~2221~0
对象类型(10 位)对象实例(22 位)
(2)属性标识符

属性标识符

这些是协议中的枚举值。另外,一定要了解标记值。

总共有 192 多个属性。以下是其中一些:

ValueHexDescriptionEncoded As
120x0CApplication Software VersionCharacter String
770x4EObject NameCharacter String
850x55Present Value

(3)读取属性

Read Property Request

EncodingArgumentRequired
Context 0Object IdentifierMandatory
Context 1Property IdentifierMandatory
Context 2Property Array IndexUser

Confirmed Service ACK Read Property

EncodingArgumentRequiredComment
Context 0Object IdentifierMandatory Equal
Context 1Property IdentifierMandatory Equal
Context 2Property Array IndexUser Equal (Must match request)Note that if this value is 0, then the following item will be the an array length
Context 3Property Value(s)Mandatory EqualThis could be a single field, or multiple fields, depending on Encoding choices. There will be an Opening Tag (Value 0x3f, for context 3, opening tag), one or more values, and a Closing Tag. Variable Encoding per Section 20.3 of the specification.

(4)写属性

Write Property

EncodingArgumentRequired
Context 0Object IdentifierMandatory
Context 1Property IdentifierMandatory
Context 2Property Array IndexUser
Context 3Property ValueMandatory
Context 4PriorityCommandable

参考文章
BACnet Protocol: Basic Concepts, Structure, and Object Model Explained | EMQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值