收藏 分销(赏)

BACnet通讯分析.doc

上传人:w****g 文档编号:1590151 上传时间:2024-05-06 格式:DOC 页数:35 大小:190KB 下载积分:12 金币
下载 相关
BACnet通讯分析.doc_第1页
第1页 / 共35页
BACnet通讯分析.doc_第2页
第2页 / 共35页


点击查看更多>>
资源描述
BACnet通讯 1、概述、 系统实现基于BACnet/IP(又称B/IP)网络进行通讯。BACnet虚拟链路层(BVLL)提供了BACnet网络层与某指定得通讯子系统得接口,本文指定了BACnet虚拟链路控制(BVLC)要求支持得定向与广播信息。本实现关于BACnet协议定义主要可分为三层:B/IP网络虚拟层,BACnet网络层与BACnet应用层。B/IP提供了TCP/IP一样得通讯结构,采用UDP得通讯方式。本文接下来将对此三层结构进行详细得讲解。 其文本协议得大致格式如下: BACnet/IP BACnet网络层 BACnet 应用层 BVLC Type BVLC Function Length NPDU APDU NPDU:BACnet网络层数据结构,下文进行详细得讲解 APDU:BACnet应用层数据结构,下文进行详细得讲解 2、BACnet/IP、 ﻩBVLC Type:ﻩ 0x81,代表BACnet/IP网络 BVLC Function:ﻩ指定报文得类型,何种作用;本应用使用得报文类型分为两种: ﻩ 0A:点对点通讯 0B:广播通信 Length:ﻩ 指定报文得长度,包括BVLC Type、BVLC Function以及本身在内ﻩNPDU: ﻩ 根据不同情况,报文长短不同,见下文得解析。 APDU:ﻩﻩﻩ根据NPDU不同以及不同得请求,报文不同,见下文得解析。ﻩ 3、BACnet NPDU结构、 版本信息 1 Byte Version 控制字 1 Byte Control 目标网络号 2 Bytes DNET 目标网络长度 1 Byte DLEN 目标地址 可变长度 DADR 原网络号 2 Bytes SNET 原网络长度 1 Byte SLEN 原地址 可变 SNET 路由数目 1 Byte Hop Count 消息类型 1 Byte Message Type 卖方ID 2 Bytes Vendor ID 应用层信息 可变 APDU 版本信息 :默认0x01 控制字ﻩﻩ:BIT7:1表示Message Type存在,为0时Message Type不存在 ﻩ  BIT6:保留,为0 ﻩ  BIT5:1表示DNET DLEN Hop Count存在,当DLEN为0时表明广播网络 DADR不存在;0表示DNET DLEN DADR Hop Count不存在 ﻩ BIT4:保留,为0 ﻩ   BIT3:1表示SNET SLEN存在,当SLEN为0时表明无效SADR不存在; 0表示SNET SLEN SADR Hop Count不存在 ﻩ BIT2:1表示为一个需确认得请求数据单元,一复杂ACK数据单元或一网络层 信息非reply得;0表示除去上述情形得数据单元 ﻩﻩ   BIT1、0:网络优先级 ﻩﻩ ﻩ11 = Life Safety message 10 = Critical Equipment message 01 = Urgent message 00 = Normal message 目标网络号:FFFF得时候表示广播 目标长度: 表示DADR得长度 目标地址:  目标网络MAC地址 原网络号: 同目标网络号 原网络长度:表示SADR得长度 原地址:   原网络得MAC地址 路由数目: 数据需要经过得路由个数,当不存在DNET得时候,需设置为FF 消息类型: X'00': Who-Is-Router-To-Network X'01': I-Am-Router-To-Network X'02': I-Could-Be-Router-To-Network X'03': Reject-Message-To-Network X'04': Router-Busy-To-Network X'05': Router-Available-To-Network X'06': Initialize-Routing-Table X'07': Initialize-Routing-Table-Ack X'08': Establish-Connection-To-Network X'09': Disconnect-Connection-To-Network X'0A' to X'7F': Reserved for use by ASHRAE X'80' to X'FF': Available for vendor proprietary messages 卖方ID:ﻩ当控制字得BIT7为1并且消息类型为X'80' to X'FF':得时候,才会存在 ﻩﻩﻩ本次开发没有用到,不再解释 本次应用中控制字只用到0x20与0x04两种,前者为广播查询设备,后者微点对对取设备数据或属性。 4、BACnet APDU结构:(应用层协议数据单元) BACnet网络层数据主要分为一下几种: BACnetPDU ::= CHOICE { confirmed-request-PDU [0] BACnet-Confirmed-Request-PDU, unconfirmed-request-PDU ﻩ[1] BACnet-Unconfirmed-Request-PDU, simpleACK-PDU [2] BACnet-SimpleACK-PDU, plexACK-PDU [3] BACnet-plexACK-PDU, segmentAck-PDU [4] BACnet-SegmentACK-PDU, error-PDU [5] BACnet-Error-PDU, reject-PDU [6] BACnet-Reject-PDU, abort-PDU ﻩ [7] BACnet-Abort-PDU } 对于本次应用,主要用到了 BACnet-Confirmed-Request-PDU(需确认得请求协议数据单元) BACnet-Unconfirmed-Request-PDU(无需确认得请求协议数据单元) BACnet-plexACK-PDU(复杂得ACK命令) BACnet-Error-PDU(报错得协议数据单元) 对于上述几种数据得分类主要根据pdu type(下文进行讲解)进行判定。 4、1、 BACnet-Confirmed-Request-PDU得结构: BACnet-Confirmed-Request-PDU ::= SEQUENCE  { pdu-type ﻩ ﻩﻩ [0] Unsigned (0、、15), -- 0 for this PDU type segmented-message ﻩ [1] BOOLEAN, more-follows ﻩ ﻩ[2] BOOLEAN, segmented-response-accepted  [3] BOOLEAN, reserved ﻩ ﻩ [4] Unsigned (0、、3), -- must be set to zero max-segments-accepted [5] Unsigned (0、、7), -- as per 20.1.2、4 max-APDU-length-accepted [6] Unsigned (0、、15), -- as per 20.1.2、5 invokeID  ﻩﻩﻩﻩ[7] Unsigned (0、、255), sequence-number  ﻩ [8] Unsigned (0、、255) OPTIONAL, -- only if segmented msg proposed-window-size [9] Unsigned (1、、127) OPTIONAL, -- only if segmented msg service-choice ﻩ[10] BACnetConfirmedServiceChoice, service-request  ﻩﻩ[11] BACnet-Confirmed-Service-Request OPTIONAL } 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 accepted per 20.1.2、4) Max Resp ﻩﻩ(0、、15) ﻩ (Size of Maximum APDU accepted per 20.1.2、5) 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时指出将收到一个复杂得回应(plex 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 BACnetConfirmedServiceChoice ::= 枚举类型 { -- Alarm and Event Services acknowledgeAlarm ﻩﻩ (0), confirmedCOVNotification (1), confirmedEventNotification ﻩ(2), getAlarmSummary ﻩ(3), getEnrollmentSummary (4), getEventInformation (29), subscribeCOV  ﻩﻩ (5), subscribeCOVProperty (28), lifeSafetyOperation (27), --  Services atomicReadFile ﻩﻩ ﻩ(6), atomicWriteFile ﻩ ﻩ(7), -- Object Access Services addListElement ﻩ ﻩﻩ(8), removeListElement ﻩﻩ (9), createObject  ﻩﻩﻩ(10), deleteObject ﻩ ﻩ(11), readProperty ﻩ (12), readPropertyConditional ﻩﻩ(13), readPropertyMultiple ﻩ (14), readRange  ﻩ (26), writeProperty ﻩ ﻩﻩ(15), writePropertyMultiple (16), 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 } 上述标记为红色得表示本次应用中所用到得,所以只对这些进行讲解。 可以根据BACnetConfirmedServiceChoice找到相对应得Request或者Ack得数据得结构 BACnet-Confirmed-Service-Request ::= CHOICE ﻩ ﻩ//对应上面得Choice { -- Alarm and Event Services acknowledgeAlarm  ﻩ[0] AcknowledgeAlarm-Request, confirmedCOVNotification  ﻩ[1] ConfirmedCOVNotification-Request, confirmedEventNotification ﻩ [2] ConfirmedEventNotification-Request, -- getAlarmSummary conveys no parameters getEnrollmentSummary [4] GetEnrollmentSummary-Request, getEventInformation ﻩ[29] GetEventInformation-Request, subscribeCOV ﻩ ﻩ [5] SubscribeCOV-Request, subscribeCOVProperty [28] SubscribeCOVProperty-Request, lifeSafetyOperation ﻩ[27] LifeSafetyOperation-Request, --  Services atomicReadFile ﻩ ﻩﻩ[6] AtomicRead, atomicWriteFile ﻩﻩﻩ[7] AtomicWrite, -- Object Access Services addListElement ﻩ ﻩﻩ[8] AddListElement-Request, removeListElement ﻩﻩ [9] RemoveListElement-Request, createObject  ﻩ [10] CreateObject-Request, deleteObject ﻩﻩﻩﻩﻩ[11] DeleteObject-Request, readProperty ﻩ ﻩ ﻩ[12] ReadProperty-Request, readPropertyConditional ﻩ[13] ReadPropertyConditional-Request, readPropertyMultiple ﻩﻩﻩ[14] ReadPropertyMultiple-Request, readRange ﻩﻩ [26] ReadRange-Request, writeProperty ﻩ ﻩ [15] WriteProperty-Request, writePropertyMultiple  ﻩﻩ[16] WritePropertyMultiple-Request, 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 } 上述标记为红色得既就是针对BACnetConfirmedServiceChoice所用到得数据结构。 ReadProperty-Request ::= SEQUENCE ﻩ ﻩﻩ//读数据请求与读数据回答 { objectIdentifier ﻩ[0] BACnetObjectIdentifier, propertyIdentifier ﻩ [1] BACnetPropertyIdentifier, propertyArrayIndex [2] Unsigned OPTIONAL --used only with array datatype } ReadPropertyMultiple-Request ::= SEQUENCE  { listOfReadAccessSpecs SEQUENCE OF ReadAccessSpecification } ReadAccessSpecification ::= SEQUENCE { objectIdentifier ﻩ [0] BACnetObjectIdentifier, listOfPropertyReferences [1] SEQUENCE OF BACnetPropertyReference } BACnetPropertyReference ::= SEQUENCE { propertyIdentifier  ﻩ[0] BACnetPropertyIdentifier, propertyArrayIndex [1] Unsigned OPTIONAL --used only with array datatype -- if omitted with an array the entire array is referenced } BACnetPropertyIdentifier ::= ENUMERATED  { accepted-modes ﻩ ﻩﻩ(175), acked-transitions ﻩ (0), ack-required ﻩﻩ ﻩﻩ(1), action ﻩ ﻩﻩ(2), action-text ﻩﻩﻩ ﻩ(3), active-text ﻩﻩﻩﻩ (4), active-vt-sessions  ﻩ(5), active-cov-subscriptions (152), adjust-value ﻩ(176), alarm-value ﻩﻩ (6), alarm-values ﻩ (7), all ﻩ ﻩﻩ(8), all-writes-successful ﻩﻩﻩ(9), apdu-segment-timeout ﻩ (10), apdu-timeout ﻩﻩﻩ ﻩ(11), application-software-version ﻩﻩ(12), firmware-revision  ﻩﻩ (44), archive ﻩ ﻩﻩ(13), attempted-samples ﻩ ﻩ (124), list-of-group-members ﻩﻩ (53), list-of-object-property-references (54), list-of-session-keys  ﻩﻩ(55), local-date ﻩ ﻩﻩﻩ(56), local-time  ﻩ (57), location ﻩﻩﻩﻩﻩ (58), maintenance-required ﻩ ﻩ(158), manipulated-variable-reference ﻩ(60), manual-slave-address-binding  (170), maximum-output ﻩ ﻩ (61), maximum-value ﻩﻩﻩ (135), maximum-value-timestamp ﻩﻩ(149), max-apdu-length-accepted ﻩﻩ(62), max-info-frames ﻩ ﻩ(63), max-master ﻩﻩ ﻩﻩ(64), max-pres-value  ﻩ (65), max-segments-accepted ﻩ (167), member-of ﻩ ﻩﻩ (159), minimum-off-time ﻩﻩ ﻩ(66), minimum-on-time ﻩ ﻩﻩ(67), minimum-output ﻩﻩ (68), event-state ﻩﻩﻩ (36), model-name  ﻩﻩﻩﻩﻩ(70), number-of-APDU-retries ﻩ(73), object-identifier ﻩ ﻩﻩ (75), object-list ﻩﻩ ﻩﻩ(76), object-name ﻩﻩ ﻩﻩ(77), object-property-reference  ﻩ (78), object-type ﻩ ﻩﻩ (79), operation-expected  ﻩﻩﻩ(161), optional ﻩ ﻩ ﻩ (80), out-of-service ﻩﻩﻩﻩﻩ(81), output-units  ﻩ (82), -- see event-parameters ﻩﻩﻩ (83), polarity ﻩﻩ ﻩﻩ (84), prescale ﻩﻩ(185), present-value ﻩ ﻩ(85), priority ﻩﻩ ﻩ (86), pulse-rate ﻩ ﻩ ﻩ(186), priority-array ﻩﻩﻩ ﻩ(87), priority-for-writing  ﻩ ﻩﻩ(88), protocol-object-types-supported (96), protocol-revision ﻩﻩﻩ(139), protocol-services-supported ﻩﻩ(97), protocol-version ﻩ ﻩﻩ(98), reliability ﻩ ﻩ ﻩﻩ(103), relinquish-default ﻩ ﻩ(104), schedule-default ﻩ ﻩ(174), segmentation-supported  ﻩ(107), state-text  ﻩﻩﻩﻩ (110), status-flags ﻩ ﻩﻩ (111), stop-time ﻩ (143), stop-when-full ﻩﻩﻩ ﻩ(144), system-status  ﻩﻩ ﻩﻩ(112), tracking-value ﻩﻩﻩ (164), units ﻩ ﻩ (117), variance-value ﻩ ﻩ(151), vendor-identifier ﻩ ﻩ (120), vendor-name ﻩﻩﻩ (121), -- see database-revision ﻩ ﻩ(155), } 上述标记为红色者既就是本次应用所用到得属性对象 BACnetObjectIdentifier得编码分为两个部分: Object type Instance  Number 占用了10Bits 占用了22Bits Object Type得表格如下: BACnetObjectTypesSupported ::= BIT STRING  { -- accumulator ﻩﻩ(23), analog-input ﻩ (0), analog-output ﻩﻩ(1), analog-value ﻩﻩ(2), -- averaging ﻩ (18), binary-input ﻩﻩ(3), binary-output ﻩﻩ(4), binary-value ﻩ ﻩ(5), calendar  ﻩﻩﻩ(6), mand ﻩﻩ (7), device (8), event-enrollment ﻩ(9), file ﻩﻩ ﻩ(10), group ﻩﻩﻩﻩ(11), loop ﻩﻩﻩ(12), multi-state-input (13), multi-state-output ﻩ(14), -- multi-state-value ﻩ(19), notification-class ﻩ(15), program ﻩﻩ (16), } 设备对象所具备得所有属性及其数据结构如下: DEVICE ::= SEQUENCE  { object-identifier ﻩﻩﻩ [75] BACnetObjectIdentifier, object-name ﻩﻩ [77] CharacterString, object-type ﻩﻩﻩﻩ [79] BACnetObjectType, system-status  ﻩ [112] BACnetDeviceStatus, vendor-name  [121] CharacterString, vendor-identifier ﻩﻩ[120] Unsigned16, model-name ﻩﻩﻩ [70] CharacterString, firmware-revision ﻩ ﻩﻩ[44] CharacterString, application-software-version ﻩ[12] CharacterString, location ﻩﻩ [58] CharacterString OPTIONAL, description  ﻩﻩﻩﻩ[28] CharacterString OPTIONAL, protocol-version ﻩﻩﻩ [98]Unsigned, protocol-revision ﻩ [139]Unsigned, protocol-services-supported ﻩ[97] BACnetServicesSupported, protocol-object-types-supported [96] BACnetObjectTypesSupported, object-list ﻩ [76] SEQUENCE OF BACnetObjectIdentifier, ﻩ -- accessed as a BACnetARRAY max-APDU-length-supported [62] Unsigned, segmentation-supported ﻩﻩ[107] BACnetSegmentation, vt-classes-supported ﻩﻩﻩ[122] SEQUENCE OF BACnetVTClass OPTIONAL, active-vt-sessions ﻩ ﻩ[5] SEQUENCE OF BACnetVTSession OPTIONAL, local-time ﻩﻩﻩ ﻩ[57] Time OPTIONAL, local-date ﻩﻩﻩﻩ[56] Date OPTIONAL, utc-offset ﻩﻩ ﻩ[119] INTEGER OPTIONAL, daylight-savings-status [24] BOOLEAN OPTIONAL, apdu-segment-timeout ﻩ[10] Unsigned, apdu-timeout ﻩ ﻩﻩ [11] Unsigned, number-of-APDU-retries  ﻩ[73] Unsigned, list-of-session-keys ﻩﻩ[55] SEQUENCE OF BACnetSessionKey OPTIONAL, time-synchronization-recipients ﻩ[116] SEQUENCE OF BACnetRecipient OPTIONAL, -- required for time master max-master ﻩ ﻩ [64] Unsigned(1、、127) OPTIONAL, -- required for MS/TP master, see 12、11 max-info-frames ﻩﻩﻩﻩ[63] Unsigned OPTIONAL, -- required for MS/TP master, see 12、11 device-address-binding ﻩ [30] SEQUENCE OF BACnetAddressBinding, database-revision ﻩ [155] Unsigned, configuration-files ﻩﻩ ﻩ[154] SEQUENCE OF BACnetObjectIdentifier, last-restore-time ﻩ [157] BACnetTimeStamp, backup-failure-timeout ﻩ [153] Unsigned16, active-cov-subscriptions ﻩﻩ[152] SEQUENCE OF BACnetCOVSubscription, max-segments-accepted ﻩ [167] Unsigned, slave-proxy-enable ﻩﻩ [172] SEQUENCE OF BOOLEAN OPTIONAL, auto-slave-discovery ﻩ [169] SEQUENCE OF BOOLEAN OPTIONAL, slave-address-binding ﻩﻩ[171]SEQUENCE OF BACnetAddressBinding OPTIONAL, manual-slave-address-binding [170] SEQUENCE OF BACnetAddressBinding OPTIONAL, pro ﻩﻩ ﻩ[168] CharacterString OPTIONAL } 上述标记为红色者既就是本次应用用到得设备属性对象 ANALOG-INPUT ::= SEQUENCE { object-identifier ﻩ [75] BACnetObjectIdentifier, object-name ﻩﻩﻩ [77] CharacterString, object-type ﻩﻩﻩ [79] BACnetObjectType, present-value ﻩﻩﻩ [85] REAL, description ﻩ ﻩ [28] CharacterString OPTIONAL, device-type ﻩ [31] CharacterString OPTIONAL, status-flags ﻩ [111] BACnetStatusFlags, event-state ﻩ ﻩﻩ[36] BACnetEventState, reliability ﻩ ﻩﻩ[103] BACnetReliability OPTIONAL, out-of-service ﻩﻩ [81] BOOLEAN, update-interval  ﻩﻩ[118] Unsigned OPTIONAL, units ﻩ [117] BACnetEngineeringUnits, min-pres-value ﻩﻩ[69] REAL OPTIONAL, max-pres-value ﻩﻩﻩ[65] REAL OPTIONAL, resolution ﻩ [106] REAL OPTIONAL, cov-increment ﻩﻩﻩ[22] REAL OPTIONAL, time-delay ﻩﻩ [113] Unsigned OPTIONAL, notification-class [17] Unsigned OPTIONAL, high-limit ﻩﻩ [45] REAL OPTIONAL, low-limit ﻩﻩ ﻩ[59] REAL OPTIONAL, deadband  ﻩﻩ [25] REAL OPTIONAL, limit-enable ﻩﻩﻩﻩ[52] BACnetLimitEnable OPTIONAL, event-enable ﻩ [35] BACnetEventTransitionBits OPTIONAL, acked-transitions ﻩ ﻩ[0] BACnetEventTransitionBits OPTIONAL, notify-type ﻩﻩﻩﻩ[72] BACnetNotifyType OPTIONAL, event-time-stamps ﻩ ﻩ[130] SEQUENCE OF BACnetTimeStamp OPTIONAL, -- accessed as a BACnetARRAY pro ﻩﻩ[168] CharacterString OPTIONAL } ANALOG-OUTPUT ::= SEQUENCE { object-identifier [75] BACnetObjectIdentifier, object-name  ﻩ [77] CharacterString, object-type [79] BACnetObjectType, present-value  ﻩ[85] REAL, description  ﻩ[28] CharacterString OPTIONAL, device-type  ﻩﻩ[31] CharacterString OPTIONAL, status-flags ﻩﻩ[111] BACnetStatusFlags, event-state [36]
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服