BACnet应用层规范(APDU)
一、APDU的定义
1. BACnet协议定义了八种不同的PDU,用以传递原语信息。
BACnetPDU : : = CHOICE {
confirmed-request-PDU [0] BACnet-Confirmed-Request-PDU,
unconfirmed-request-PDU [l] BACnet-Unconfirmed-Request-PDU,
simpleACK-PDU [2] BACnet-SimpleACK-PDU,
complexACK-PDU [3] BACnet-ComPlexACK-PDU,
segmentAck-PDU [4] BACnet-SegmenACK-PDU,
error-PDU [5] BACnet-Error-PDU,
reject-PDU [6] BACnet-Reject-PDU,
abort-PDU [7] BACnet-Abort-PDU
}
2. 接收的最大 APDU 长度(max-APDU-length-accepted) 参数
这个参数说明发送设备能接收的单个 APDU 的最大尺寸。 这个参数包含在有证实请求中以便响应设备可以确定如何传送响应。 这个参数的编码如下:
注: octets 表示 八位位组, 八位字节(=byte)
B‘0000’ Up to MinimumMessageSize (50 octets)
B‘0001’ Up to 128 octets
B‘0010’ Up to 206 octets(fits in a LonTalk frame)
B‘0011’ Up to 480 octets(fits in an ARCNET frame)
B‘0100’ Up to 1024 octets
B‘0101’ Up to 1476 octets(fits in a ISO 8802-3 frame)
B‘0110’ reserved by ASHRAE【保留的】
B‘0111’ reserved by ASHRAE
B‘1000’ reserved by ASHRAE
B‘1001’ reserved by ASHRAE
B‘1010’ reserved by ASHRAE
B‘1011’ reserved by ASHRAE
B‘1100’ reserved by ASHRAE
B‘1101’ reserved by ASHRAE
B‘1110’ reserved by ASHRAE
B‘1111’ reserved by ASHRAE
3.Confirmed-Request-PDU
BACnet-Confirmed-Request-PDU: : = SEQUENCE {
pdu-type [0] Unsigned (0. . 15) , --这个 PDU 类型使用 0
segmented-message [1] BOOLEAN, --指出当前的数据单元是否为完整的还是为一部分分段信息
more-follows [2] BOOLEAN, 是否有更多的分段信息
segmented-response-accepted [3] BOOLEAN,为1时将收到一个复杂回应(complex ack).
reserved [4] Unsigned (0. . 31) , --必须设置为 0
max-segments-accepted [5] Unsigned (0..7),
max-APDU-length-accepted [6] Unsigned (0. . 15) , --如 2.6.1.2 节所分配
invokeID [7] Unsigned (0. . 255) ,
sequence-number [8] Unsigned (0. . 255) OPTIONAL, --只在分段报文中使用
proposed-window-size [9] Unsigned (1. . l27) OPTIONAL, --只在分段报文中使用
service-choice [10] BACnetConfirmedServiceChoice,
service-request [11]BACnet-Confirmed-Service-Request OPTIONAL
-- 在头部编码中不使用上下文特定标记 0. . l0
}
BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
PDU TYPE | SEG | MOR | SA | 0 | |||
0 | Max Segs | Max Resp | |||||
Invoke ID | |||||||
Sequence Number(only present by SEG==1) | |||||||
Proposed Window Size(only present by SEG==1) | |||||||
Service Chioce | |||||||
Service Request…… |
PDU Type 0 (BACnet-Confirmed-Service-Request-PDU)
SEG 0 (Unsegmented Request)
1 (Segmented Request)
MOR 0 (No More Segments Follow)
1 (More Segments Follow)
SA 0 (Segmented Response not accepted)
1 Segmented Response accepted)
Max Segs (0..7) (Number of response segments )
Max Resp (0..15) (Size of Maximum APDU )
Invoke ID (0..255)
Sequence Number (0..255) Only present if SEG = 1
Proposed Window Size (1..127) Only present if SEG = 1
Service Choice BACnetConfirmedServiceChoice
Service Request Variable Encoding
SEG:指出当前的数据单元是否为完整的还是为一部分分段信息
MOR:指出是否还有更多的分段信息
SA: 为1时指出将收到一个复杂的回应(complex ack)
Max Segs :指出设备将要接收到多少分段信息
B'000' Unspecified number of segments accepted.
B'001' 2 segments accepted.
B'010' 4 segments accepted.
B'011' 8 segments accepted.
B'100' 16 segments accepted.
B'101' 32 segments accepted.
B'110' 64 segments accepted.
B'111' Greater than 64 segments accepted.
Max Resp:指出将收到的(APDU)最大长度
B'0000' Up to MinimumMessageSize (50 octets)
B'0001' Up to 128 octets
B'0010' Up to 206 octets (fits in a LonTalk frame)
B'0011' Up to 480 octets (fits in an ARCNET frame)
B'0100' Up to 1024 octets
B'0101' Up to 1476 octets (fits in an ISO 8802-3 frame)
Invoke ID:调用者ID
Service Chioce:此处表明次报文的作用,详见BACnetConfirmedServiceChoice
Service Request:根据BACnetConfirmedServiceChoice不同而结构不同,详见BACnet-Confirmed-Service-Request
4. Unconfirmed-Request-PDU
BACnet-Unconfirmed-Request-PDU : : = SEQUENCE {
pdu-type [0] Unsigned (0. . 15) , --这个 PDU 类型使用 1
reserved [l] Unsigned (0. . l5) , --必须设置为 0
service-choice [2] BACnetUnconfirmedServiceChoice,
service-request [3] BACnet-Unconfirmed-Service-Request
-- 在头部编码中不使用上下文特定标记 0. . 3
}
BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
PDU TYPE | Reserved | ||||||
Service Chioce | |||||||
Service Request |
5.SimpleACKPDU
BACnet-SimpleACKPDU : : = SEQUENCE {
pdu-type [0] Unsigned (0. . 15) , --这个 PDU 类型使用 2
Reserved [l] Unsigned (0. . l5) , --必须设置为 0
invokeID [2] Unsigned (0. . 255) ,
service-ACK-choice [3] BACnetConfirmedServiceChoice
-- 在头部编码中不使用上下文特定标记 0. . 3
}
6. ComplexACK-PDU
BACnet-ComplexACK-PDU : : = SEQUENCE {
pdu-type [0] Unsigned (0. . 15) , --这个 PDU 类型使用 3
segmented-message [1] BOOLEAN,
more-follows [2] BOOLEAN,
reserved [3] Unsigned (0. . 3) , --必须设置为 0
invokeID [4] Unsigned (0. . 255) ,
sequence-number [5] Unsigned (0. . 255) OPTIONAL, --只在分段报文中使用
proposed-window-size [6] Unsigned (1. . l27) OPTIONAL, --只在分段报文中使用
service-ACK-choice [7] BACnetConfirmedServiceChoice,
service-ACKt [8]BACnet-Confirmed-Service-ACK
-- 在头部编码中不使用上下文特定标记 0. . 8
}
BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
PDU TYPE | SEG | MOR | 0 | ||||
Original Invoke ID | |||||||
Sequence Number(only present by SEG==1) | |||||||
Proposed Window Size(only present by SEG==1) | |||||||
Service Ack Chioce | |||||||
Service ACK |
7. SegmentACK-PDU
BACnet-SegmentACK-PDU : : = SEQUENCE {
pdu-type [0] Unsigned (0. . 15) , --这个 PDU 类型使用 4
reserved [1] Unsigned (0. . 3) , --必须设置为 0
negative-ACK [2] BOOLEAN,
server [3] BOOLEAN,
original-invokeID [4] Unsigned (0. . 255) ,
sequence-number [5] Unsigned (0. . 255) ,
actual-window-size [6] Unsigned (1. . 127)
-- 在头部编码中不使用上下文特定标记 0. . 6
}
BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
PDU TYPE | 0 | 0 | NAK | SRV | |||
Original Invoke ID | |||||||
sequence-number | |||||||
actual-window-size |
8. Error-PDU
BACnet-Error-PDU :: = SEQUENCE {
pdu-type [0] Unsigned (0. . 15) , --这个 PDU 类型使用 5
reserved [1] Unsigned (0. . 15) , --必须设置为 0
original-invokeID [2] Unsigned (0. . 255) ,
error-choice [3] BACnetConfirmedServiceChoice,
error [4] BACnet-Error
-- 在头部编码中不使用上下文特定标记 0. . 4
}
BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
PDU TYPE | 0 | ||||||
Original Invoke ID | |||||||
Error Choice | |||||||
Error 。。。。 |
9. Reject-PDU
BACnet-Reject-PDU :: = SEQUENCE {
pdu-type [0] Unsigned (0. . 15) , --这个 PDU 类型使用 6
reserved [1] Unsigned (0. . 15) , --必须设置为 0
original-invokeID [2] Unsigned (0. . 255) ,
reject-reason [3] BACnetRejectReason
-- 在头部编码中不使用上下文特定标记 0. . 4
}
BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
PDU TYPE | 0 | ||||||
Original Invoke ID | |||||||
reject-reaso |
10. Abort-PDU
BACnet-Abort-PDU : : = SEQUENCE {
pdu-type [0] Unsigned (0. . 15) , --这个 PDU 类型使用 7
reserved [1] Unsigned (0. . 7) , --必须设置为 0
Server [2] BOOLEAN,
original-invokeID [3] Unsigned (0. . 255) ,
abort-reason [4] BACnetAbortReason
-- 在头部编码中不使用上下文特定标记 0. . 4
}
BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
PDU TYPE | 0 | 0 | 0 | SRV | |||
Original Invoke ID | |||||||
abort-reason |
二、有证实服务的表述
1. BACnetconfirmedserviceChoice
BACnetconfirmedserviceChoice : : = ENUMERATED {
-- Alarm and Event Services
acknowledgeAlarm (0) ,
confirmedCOVNotification (1) ,
confirmedEventNotification (2) ,
getAlarmSummny (3) ,
getEnrollmentSummary (4) ,
subscribeCOV (5) ,
-- File Access Services
atomicReadFile (6) ,
atomicWriteFile (7) ,
-- Object Access Services
addListElement (8) ,
removeListElement (9) ,
Createobjeet (10) ,
deleteObjeCt (11) ,
readProperty (l2) ,
readPropertyCondtional (l3) ,
readProPertyMultiple (14) ,
writeProperty (l5) ,
writeProPertyMultiPle (l6) ,
-- Remote Device Management Service
deviceCommunicationControl (17) ,
confirmedPrivateTransfer (l8) ,
confirmedTestMessage (l9) ,
reinitializeDevice (20) ,
-- Virtual Terminal Services
vtOpen (21) ,
vtClose (22) ,
vtData (23) ,
-- Security Services
authenticate (24) ,
requestKey (25)
}
--新定义的服务可以增加到上述的枚举类型中。 本表述中的所有枚举值都保留为 ASHRAE 用作定义中。 使用有证实专有转换服务或者无证实专有转换服务进行专有服务扩展。 参见后续。
2.BACnet-confirmed-Service-Request
BACnet-confirmed-Service-Request :: = CHOICE {
-- Alarm and Event Services
acknowledgeAlarm [0]AckowledgeAlarm-Request,
confirmedCOVNotification [1]ConfirmedCOVNotification-Request,
confirmedEventNotification [2]ConfirmedEventNotification-Request,
-- getAlarmSummary conveys no parameters
getEnrollmentSummary [4] GetEnrollmentSummary - Requst,
subscribeCOV [5] SubscribeCOV-Request,
-- File Access Services
atomicReadFile [6] AtomicReadFile- Request,
atomicWriteFile [7] AtomicWrit File-Request,
-- Object Access Services
addListElement [8] AddListElement-Reqest,
removeListElement [9] RemoveListElement-Request,
createObject [10] CreateObect-Request,
deleteObject [1l] DeleteObeCt-Request,
readProperty [12] ReadPrOPrty-Request,
readProPertyConditional [l3] ReadProperty Conditional-Request,
readPropenyMultip1e [l4]ReadProPertyMultiple-Request,
writeProperty [15] WriteProperty-Request,
writeProPertyMultiPle [16] WriteProPertyMultiple - Request,
-- Remote Device Management Services
deviceCommunicationControl [17]DeviceCommunicationControl- Requet,
confirmedPrivateTransfer [18]ConfirmedPrivateTransfer-Request,
confirmedTextMesssage [19] ConfirmedTextMessage-Requet,
reinitializeDevice [20] Reinitialize Device-Request,
-- Virtual Terminal Services
vtOpen [21] VT-Open-Request,
vtClosc [22] VT-Close-Request,
vtData [23] VT-DataRequest,
-- Security services
authenticate [24] Anthenicate-Request,
requestKey [25] RequestKey-Request
}
-- 在编码中没有使用上下文特定标记 0. . 25。 标记编号在 BACnet 有证实请求 PDU 中作为服务选择参数传送。
--新定义的服务可以增加到上述的枚举类型中。 本表述中的所有枚举值都保留为 ASHRAE 用作定义中。
3. BACnet-Confirmed-Service-ACK
BACnet-Confirmed-Service-ACK : : = CHOICE{
-- 这个表述表示为每个有证实服务所定义的‘Result(+) ’ 参数, 这些服务在‘Result(+) ’中返回一个或者多个参数。
-- Alarm and Event Services
getA1armSummary [3] GetAlarmSummary-ACK,
getEnrollmentSummary [4l GetEnrolImentSummary-ACK,
-- File Access Services
atomicReadFile [6] AtomicReadFile-ACK,
atomicWriteFile [7] AtomicWriteFile-ACK,
--Object Access Services
createObject [l0] CreateObject-ACK,
readProperty [12] ReadProperty-ACK,
readPropertyConditional [13] ReadPropertyConditional-ACK,
readProPertyMultiple [l4] ReadPropertyMultiPle-ACK,
-- Remote Device Management Services
confirmedPrivateTransfer [l8] ConfirmedPrivateTransfer-ACK,
-- Virtual Terminal Services
vtOpen [21] VT-Open-ACK,
vtData [23] VT-Data-ACK,
-- Security Services
Authenticate [24] Authenticate-ACK
-- 在编码中没有使用上下文特定标记 3. . 24。 标记编号在 BACnet 复杂确认 PDU 中作为服务确认选择参数传送。
--新定义的服务可以增加到上述的枚举类型中。 本表述中的所有枚举值都保留为 ASHRAE 用作定义中。
}
三、有证实报警和事件服务
1. AcknowledgeAlarmRequest
AcknowledgeAlarmRequest : : = SEQUENCE {
acknowledgingProcessIdentifier [0] Unsigned,
eventObjectIdentifier [1] BACnetObjectIdentifier,
evenStateAcknowledged [2] BACnetEventState,
timeStamp [3] BACnetTimeStamp,
acknowledgmenSource [4] CharacterString,
timeOfAcknowledgment [5] BACnetTimeStamp
}
2. ConfirmedCOVNotification-Request
ConfirmedCOVNotification-Request :: = SEQUENCE {
subscriberProcess Idenifier [0] Unsigned,
initiatingDeviceIdenifier [1] BACnetObjectIdentifier,
monitoredObjectIdenifier [2] BACnetObjectIdentifier,
timeRemaining [3] Unsigned,
listOfValues [4] SEQUENCE OF BACnetProperity Value
}
3. ConfirmedEventNotification-Request
ConfirmedEventNotification-Request :: = SEQUENCE{
processIdentifier [0] Unsigned,
initiatingDeviceIdentifier [l] BACnetObjectIdentifier,
eventObjectIdentifier [2] BACnetObjectIdentifier,
timeStamp [3] BACnetTimeStamp,
notificationClass [4] Unsigned,
priority [5] Unsigned8,
eventType [6] BACnetEventType,
messageText [7] CharacterString OPTIONAL,
notifyType [8] BACnetNotifyType,
ackRequired [9] BOOLEAN OPTIONAL
fromState [l0] BACnetEventState OPTIONAL
toState [11] BACnetEVentState OPTIONAL.
eventValues [l2] BACnetNotificationParametersOPTIONAL
}
4. GotAlarmSummary-ACK
GotAlarmSummary-ACK :: = SEQUENCE OF SEQUENCE {
objectIdentifier BACnetObjectIdentifier,
alarmState BACnetEventState.
acknowledgedTransitions BACnetEventTransitionBits
}
5. GotEnrollmentSummary-Request
GotEnrollmentSummary-Request : : = SEQUENCE {
acknowledgementFilter [0] ENUMERATED {
all (0) ,
acked (1) ,
not-acked (2)
} ,
enrollmentFilter [l] BACnetRecipientProcess OPTIONAL,
eventStateFilter [2] ENUMERATED {
offnormal (0) ,
fault (l) ,
normal (2) ,
all (3) ,
active (4)
} OPTIONAL,
eventTypeFilter [3] BACnetEventType OPTIONAL,
priorityFilter [4] SEQUENCE {
minPriority [0] Unsigned8,
maxPriority [l] Unsigned8
} OPTIONAL,
notificationClassFilter [5] Unsigned OPTIONAL
}
6. GetEnrolImentSummary-ACK
GetEnrolImentSummary-ACK : : = SEQUENCE OF SEQUENCE {
objectIdentifier BACnetObjectIdenifier,
eventType BACnetEvenType,
eventState BACnetEventState
priority Unsigned8,
notificationClass Unsigned OPTIONAL
}
7. SubscribeCOV-Request
SubscribeCOV-Request : : = SEQUENCE {
subscriberProcessIdentifier [0] Unsigned,
monitoredObjectIdentifier [l] BACnetObjectIdentifier,
issueConfirmedNotifications [2] BOOLEAN OPTIONAL,
lifetime [3] Unsigned OPTIONAL
}
四、有证实文件访问服务
1. AtomicReadfile-Request
AtomicReadfile-Request : : = SEQUENCE {
fileIdentifier BACnetObectIdentifier,
accessMethod CHOICE {
streamAccess [0] SEQUENCE {
fileStartPosition INTEGER,
requestedOctetCount Unsigned
} ,
recordAccess [l] SEQUENCE {
fileStartRecord INTEGER,
requestedRecordCount Unsigned
}
}
}
2. AtomicReadfile-ACK
AtomicReadfile-ACK : : = SEQUENCE {
endOfFile BOOLEAN,
accessMethod CHOICE {
streamAccess [0] SEQUENCE {
fileStartPosition INTEGER,
fileData OCTET STRING
} ,
recordAccess [l] SEQUENCE {
fileStartRecord INTEGER,
returnedRecordCount Unsigned,
fileRecordDare SEQUENCE OF OCTET STRING
}
}
}
3. AtomicWriteflle-Request
AtomicWriteflle-Request : := SEQUENCE {
fileIdentifier BACnetObjectIdenifier,
accessMethod CHOICE {
streamAccess [0] SEQUENCE {
fileStartPositinn INTEGER,
fileData OCTET STRING
} ,
recordAccess [l] SEQUENCE {
fileSartRecord INTEGER,
recordCOunt Unsigned,
fileRecordData SEQUENCE OF OCTET STRING
}
}
}
4. AtomicWriteFile-ACK
AtomicWriteFile-ACK :: = CHOICE
fileStartPosition [0] INTEGER,
fileStartRecord [l] INTEGER
}
五、有证实对象访问服务
1. AddListElement-Request
AddListElement-Request : : = SEQUENCE {
objectIdenifier [0] BACnetObjectIndifier,
propertyIdenifier [l] BACnetProPertyIdenifier,
propertyArrayIndex [2] Unsigned OPTIONAL, --只与数组数据类型一起使用
listOffilements [3] ABSTRACT-SYNTAX. &Type
}
2.CreatObject-Request
CreateObect-Request : : = SEQUENCE
objectSpecifier [0] CHOICE {
objectType [0] BACnetObjectType,
objectIdentifier [l]BACnetObjectIdentifier
} ,
listOfInitialValues [1] SEQUENCE OF BACnetPropertyValue OPTIONAL
}
3. CreatObject-ACK
CreatObject-ACK :: = BACnetObjectIdentifier
4. DeleteObjectRequest
DeleteObjectRequest :: = SEQUENCE {
ObjectIdenifier BACnetObjectIdenifier
}
5. ReadProperty-Request
ReadProperty-Request : : = SEQUENCE {
objectIdentifier [0] BACnetObjectIdenifier,
propertyIdentifier [l] BACnetProPertyIdentifier,
propertyArrayIndex [2] Unsigned OPTIONAL --只与数组数据类型一起使用
--如果数组中省略这个参数, 表示引用整个数组
}
6. ReadProperty-ACK
ReadProperty-ACK : : = SEQUENCE {
objectIdentifier [0] BACnetObjectIdentifier.
propertyIdenifier [l] BACnetPropertyIdentifier,
PropertyArrayIndex [2] Unsigned OPTIONAL, --只与数组数据类型一起使用
--如果数组中省略这个参数, 表示引用整个数组
propertyValue [3] ABSTRACT-SYNTAX. & Type
}
7. ReadProPertyConditional-Request
ReadProPertyConditional-Request : : = SEQUENCE{
objectSelectionCriteria [0] SEQUENCE {
selectionLogic [0] ENUMERATED {
and (0) ,
or (l) ,
all (2)
} ,
listOfSelectionCriteria [l] SEQUENCE OF SEQUENCE{
propertyIdenifier [0] BACnetPropertyIdentifier,
propertyArrayIndex [l]Unsigned OPTIONAL,
relationSpecifier [2] ENUMERATED {
equal (0) ,
not-equal (l) ,
ess-than (2) ,
greater-than (3) ,
less-than-or-equal (4) ,
greater-than-or-equal (5)
}
comparisonValue [3] ABSTRACT-SYNTAX. &Type
} OPTIONAL
} ,
listOfPropertyReferences [l] SEQUENCE OF BACnetPropertyReference OPTIONAL
}
8. ReadProPertyConditional-ACK
ReadProPertyConditional-ACK : : = SEQUENCE {
listOfReadAccessResults SEQUENCE OF ReadAccessResult OPTIONAL
}
9. ReadPrpertyMultiple-Request
ReadPrpertyMultiple-Request : : = SEQUENCE {
listOfReadAccessSpecs SEQUENCE OF ReadAccessSpecification
}
10. ReadPropertyMultiple-ACK
ReadPropertyMultiple-ACK :: = SEQUENCE {
listOfReadAccessResults SEQUENCE OF ReadAccessResult
}
11. RemoveListElement-Request
RemoveListElement-Request : : = SEQUENCE {
objectIdenifier [0] BACnetObjectIdenifier,
propertyidenifier [1] BACnetPropertyIdentifier,
propertyArrayIndex [2] Unsigned OPTIONAL, --只与数组数据类型一起使用
listOfElements [3] ABSTRACT-SYNTAX. &Type
}
12. WriteProperty-Request
WriteProperty-Request :: = SEQUENCE {
objectIdenifier [0] BACnetObjectIdentifier,
propertyIdentifier [1] BACnetPropertyIdentifier,
propertyArrayIndex [2] Unsigned OPTIONAL, --只与数组数据类型一起使用
--如果数组中省略这个参数, 表示引用整个数组
propertyValue [3] ABSTRACT-SYNTAX. &Type,
priority [4] Unsigned8 (l. . l6) OPTIONAL --只与命令属性一起使用
}
13. WritePropertyMultiple-Request
WritePropertyMultiple-Request :: = SEQUENCE{
ListOfwriteAccessSpecifications SEQUENCE OF WriteAccessSpecification
}
六、有证实远程设备管理服务
1. DeviceCommunicationControl-Requet
DeviceCommunicationControl-Requet : : = SEQUENCE {
timeDuration [0] Unsigned16 OPTIONAL,
enable-disable [1] ENUMERATED {
enable (0) ,
disable (l)
} ,
password [2] CharacterString (SIZE(1. . 20) ) OPTIONAL
}
2. ConfirmedPrivateTransfer-Request
ConfirmedPrivateTransfer-Request :: = SEQUENCE {
vendorID [0] Unsigned,
serviceNumber [1] Unsigned,
serviceParameters [2] ABSTRACT-SYNTAX. &Type OPTIONAL
}
3. ConfirmedPrivateTransferACK
ConfirmedPrivateTransferACK : : = SEQUENCE {
vendorID [0] Unsigned,
serviceNumber [l] Unsigned,
resultBlock [2] ABSTRACT-SYNTAX. &Type OPTIONAL
}
4. ConfirmedTextmessage-Request
ConfirmedTextmessage-Request : : = SEQUENCE {
textMessageSourceDevice [0] BACnetObectIdentifier,
messageClass [1] CHOICE {
numeric [0] Unsigned,
character [1] CharacterString
} OPTIONAL,
messagePriority [2] ENUMERATED {
normal (0) ,
urgent (1)
} ,
message [3] CharacterString
}
5. ReinitializeDevice-Request
ReinitializeDevice-Request : : = SEQUENCE {
reinitializedStateOfDevice [0] ENUMERATED {
coldstart (0) ,
warmstart (l)
} ,
password [l] CharacterString (SIZE (1. . 20) ) OPTIONAL
}
七、有证实虚拟终端服务
1. VT-Open-Request
VT-Open-Request : : = SEQUENCE {
vtClass BACnetVTClass,
localVTSessionIdentifier Unsigned8
}
2. VT-Open-ACK
VT-Open-ACK : : = SEQUENCE {
RemoteVTSessionIdentifier Unsigned8
}
3. VT-Close-Request
VT-Close-Request : : = SEQUENCE {
listOfRemoteVTSessionIdentifier SEQUENCE OF Unsigned8
}
4. VT-Data-Request
VT-Data-Request : : = SEQUENCE {
vtSessionIdenifier Unsigned8,
vtNewData OCTET STRING,
vtDataFlag Unsigned (0. . 1)
}
5. VT-Data-ACK
VT-Data-ACK : : = SEQUENCE {
allNewDataAccepted [0] BOOLEAN,
ceeptedOctetCount [1] Unsigned OPTIONAL --只在 allNewDataAccepted = FALSE
--条件下存在
}
八、有证实安全服务
1. Authenticate-Request
Authenticate-Request : : = SEQUENCE {
pseudoRandomNumber [0] Unsigned32,
exPectedInvokeID [1] Unsigned8 OPTIONAL,
operatorName [2] CharacterString OPTIONAL,
operatorPassword [3] CharacterString (SIZE (1. . 20) ) OPTIONAL,
startEnciPheredSession [4] BOOLEAN OPTIONAL
}
2. Authenticate-ACK
Authenticate-ACK : : = SEQUENCE {
modifiedRandomNumber Unsigned32
}
3. RequestKey-Request
RequestKey-Request : : = SEQUENCE {
requestingDeviceIdentifier BACnetObjectIdenifier,
requestingDeviceAddress BACnetAddress,
remoteDeviceIdenifier BACnetObectIdentifier,
remoteDeviceAddress BACnetAddress
}
九、无证实请求的表述
1. BACnetUnconfirmedServiceChoice
BACnetUnconfirmedServiceChoice :: = ENUMERATED {
i-Am (0) ,
i-Have (1) ,
nconfirmedCOVNotification (2) ,
unconfirmedEventNotification (3) ,
unconfirmedPrivateTransfer (4) ,
unconfirmedTextMessage (5) ,
timeSynchronizaion (6) ,
Who-Has (7) ,
who-Is (8)
}
--新定义的服务可以增加到上述的枚举类型中。 本表述中的所有枚举值都保留为 ASHRAE 用作定义中。
2. BACnet-Unconfirmed-Service-Request
BACnet-Unconfirmed-Service-Request :: = CHOICE {
i-Am [0] I-Am-Request,
i-Have [1] I-Have-Request,
unconfirmedCOVNotification [2]UnconfirmedCOVNotification-Request,
unconfirmedEventNotification [3] UnconfirmedEventNotification-Reqest,
unconfirmedPrivateTransfer [4] UnconfirmedPrivateTransfer-Request,
unconfirmedTextMessage [5] UnconfirmedTextMessage-Request,
timeSynchronizaion [6] TimeSynchronization-Request,
who-Has [7] Who-Has-Request,
Who-Is [8] Who-Is-Request
}
-- 在编码中没有使用上下文特定标记 0. . 8。 标记编号在 BACnet 无证实请求 PDU 中作为服务选择参数传送。
--新定义的服务可以增加到上述的枚举类型中。 本表述中的所有枚举值都保留为 ASHRAE 用作定义中。
十、无证实报警和事件服务
1. UnconfirmedCOVNotificationHequest
UnconfirmedCOVNotificationHequest : : = SEQUENCE {
subscriberProcessIdentifier [0] Unsigned,
initiatingDeviceIdentifier [l] BACnetObjectIdenifier,
monitoredObjectIdentifier [2] BACnetObjectIdentifier,
timRemaining [3] Unsigned,
listOfValues [4] SEQUENCE OF BACnetPropertyValue
}
2. UnconfirmedEventNotification-Request
UnconfirmedEventNotification-Request : : = SEQUENCE {
processIdentifier [0] Unsigned,
initiatingDeviceIdentifier [l] BACnetObjectIdenifier,
eventObjectIdentifier [2] BACnetObjectIdentifier,
timeStamp [3] BACnetTimeStamp,
notificationClass [4] Unsigned,
priority [5] Unsigned8,
eventType [6] BACnetEventType,
messageText [7] CharacterString OPTIONAL,
notifyType [8] BACnetNotifyType,
ackRequired [9] BOOLEAN OPTIONAL,
fromState [l0] BACnetEventState OPTIONAL,
toState [11] BACnetEventState OPTIONAL,
evenValues [12] BACnetNotificationParameters OPTIONAL
}
十一、无证实远程设备管理服务
1. I-Am-Request
I-Am-Request :: = SEQUENCE {
iAInDeviceIdentifier BACnetObjectIdentifier,
maxAPDULengthAccepted Unsigned,
segmentationSupported BACnetSegmentation,
vendorID Unsigned
}
2. I-have-Request
I-have-Request : : = SEQUENCE {
deviceIdentifier BACnetObjectIdentifier,
objectIdenifier BACnetObjectIdentifier,
objectName CharacterString
}
3. UnconfirmedPrivateTransfer-Request
UnconfirmedPrivateTransfer-Request :: = SEQUENCE {
vendorID [0] Unsigned,
serviceNumber [l] Unsigned,
serviceParameters [2] ABSTRACT-SYNTAX. &Type OPTIONAL
}
4. UnconfirmedTextMessage-Request
UnconfirmedTextMessage-Request :: = SEQU ENCE {
textMessageSourceDevice [0] BACnetObjectIdentifier,
messageClass [1] CHOICE {
numeric [0] Unsigned,
characer [l] CharacterString
} OPTIONAL,
messagePriority [2] ENUMERATED {
normal (0) ,
urgent (l)
} ,
message [3] CharacterString
}
5. TimeSynchroniation-Request
TimeSynchroniation-Request : : = SEQUENCE {
time BACnetDateTime
}
6. Who-Has-Request
Who-Has-Request : : = SEQUENCE {
limits SEQUENCE {
deviceInstanceRangeLowLimit [0] Unsigned (0. . 4l94303) ,
deviceInstanceRangeHighLimit [1] Unsigned (0. . 4l94303)
} OPTIONAL,
object CHOICE {
objectIdentifier [2] BACnetObjectIdenifier,
objectName [3] CharacerString
}
}
7. Who-Is-Request
Who-Is-Request : : == SEQUENCE {
DeviceInstanceRangeLowLimit [0] Unsigned (0. . 4l94303) OPTIONAL,
-- 必须成对使用
deviceInstanceRangeHighLimit [l] Unsigned (0. . 4l94303) OPTIONAL
-- 必须成对使用
}