Bacnet协议报文格式详解(二)

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

                                                                                                                 -- 必须成对使用

}

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
BACnet(Building Automation and Control Networks)是一种用于建筑自动化和控制系统的通信协议。它是一个开放的、标准化的协议,旨在实现不同设备之间的互操作性和通信。 BACnet协议具有以下特点和功能: 1. 网络结构:BACnet支持多种网络结构,包括局域网(LAN)、广域网(WAN)和互联网(Internet)。它可以在不同的物理介质上运行,如以太网、RS-485等。 2. 设备互操作性:BACnet允许不同厂商的设备进行通信和互操作。它定义了一组标准对象和属性,用于描述和控制建筑自动化系统中的各种设备,如传感器、执行器、控制器等。 3. 数据模型:BACnet使用面向对象的数据模型来表示建筑自动化系统中的设备和功能。它定义了一组标准对象类型,如输入、输出、变量、程序等,并为每个对象类型定义了一组属性,用于描述和控制对象的状态和行为。 4. 通信机制:BACnet使用基于请求-响应的通信机制。设备可以通过发送请求消息来读取或写入其他设备的属性值,接收设备则通过发送响应消息来回复请求。 5. 安全性:BACnet提供了一些安全机制,如访问控制、数据加密和身份验证,以保护通信和数据的安全性。 6. 扩展性:BACnet支持系统的扩展和集成。它允许添加新的设备类型和功能,并支持与其他建筑管理系统(如能源管理系统、安全系统等)的集成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值