BACnet通讯分析Word格式文档下载.docx
《BACnet通讯分析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《BACnet通讯分析Word格式文档下载.docx(48页珍藏版)》请在冰豆网上搜索。
BIT6:
保留,为0
BIT5:
1表示DNETDLENHopCount存在,当DLEN为0时表明广播网络
DADR不存在;
0表示DNETDLENDADRHopCount不存在
BIT4:
BIT3:
1表示SNETSLEN存在,当SLEN为0时表明无效SADR不存在;
0表示SNETSLENSADRHopCount不存在
BIT2:
1表示为一个需确认的请求数据单元,一复杂ACK数据单元或一网络层
信息非reply的;
0表示除去上述情形的数据单元
BIT1、0:
网络优先级
11=LifeSafetymessage
10=CriticalEquipmentmessage
01=Urgentmessage
00=Normalmessage
目标网络号:
FFFF的时候表示广播
目标长度:
表示DADR的长度
目标地址:
目标网络MAC地址
原网络号:
同目标网络号
原网络长度:
表示SADR的长度
原地址:
原网络的MAC地址
路由数目:
数据需要经过的路由个数,当不存在DNET的时候,需设置为FF
消息类型:
X'
00'
:
Who-Is-Router-To-Network
X'
01'
I-Am-Router-To-Network
02'
I-Could-Be-Router-To-Network
03'
Reject-Message-To-Network
04'
Router-Busy-To-Network
05'
Router-Available-To-Network
06'
Initialize-Routing-Table
07'
Initialize-Routing-Table-Ack
08'
Establish-Connection-To-Network
09'
Disconnect-Connection-To-Network
0A'
toX'
7F'
ReservedforusebyASHRAE
80'
FF'
Availableforvendorproprietarymessages
卖方ID:
当控制字的BIT7为1并且消息类型为X'
的时候,才会存在
本次开发没有用到,不再解释
本次应用中控制字只用到0x20和0x04两种,前者为广播查询设备,后者微点对对取设备数据或属性。
4、BACnetAPDU结构:
(应用层协议数据单元)
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,
complexACK-PDU[3]BACnet-ComplexACK-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-ComplexACK-PDU(复杂的ACK命令)
BACnet-Error-PDU(报错的协议数据单元)
对于上述几种数据的分类主要根据pdutype(下文进行讲解)进行判定。
4.1.BACnet-Confirmed-Request-PDU的结构:
BACnet-Confirmed-Request-PDU:
=SEQUENCE
pdu-type[0]Unsigned(0..15),--0forthisPDUtype
segmented-message[1]BOOLEAN,
more-follows[2]BOOLEAN,
segmented-response-accepted[3]BOOLEAN,
reserved[4]Unsigned(0..3),--mustbesettozero
max-segments-accepted[5]Unsigned(0..7),--asper20.1.2.4
max-APDU-length-accepted[6]Unsigned(0..15),--asper20.1.2.5
invokeID[7]Unsigned(0..255),
sequence-number[8]Unsigned(0..255)OPTIONAL,--onlyifsegmentedmsg
proposed-window-size[9]Unsigned(1..127)OPTIONAL,--onlyifsegmentedmsg
service-choice[10]BACnetConfirmedServiceChoice,
service-request[11]BACnet-Confirmed-Service-RequestOPTIONAL
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0
PDUTYPE
SEG
MOR
SA
MaxSegs
MaxResp
InvokeID
SequenceNumber(onlypresentbySEG==1)
ProposedWindowSize(onlypresentbySEG==1)
ServiceChioce
ServiceRequest……
PDUType0(BACnet-Confirmed-Service-Request-PDU)
SEG0(UnsegmentedRequest)
1(SegmentedRequest)
MOR0(NoMoreSegmentsFollow)
1(MoreSegmentsFollow)
SA0(SegmentedResponsenotaccepted)
1(SegmentedResponseaccepted)
MaxSegs(0..7)(Numberofresponsesegmentsacceptedper20.1.2.4)
MaxResp(0..15)(SizeofMaximumAPDUacceptedper20.1.2.5)
InvokeID(0..255)
SequenceNumber(0..255)OnlypresentifSEG=1
ProposedWindowSize(1..127)OnlypresentifSEG=1
ServiceChoiceBACnetConfirmedServiceChoice
ServiceRequestVariableEncoding
SEG:
指出当前的数据单元是否为完整的还是为一部分分段信息
MOR:
指出是否还有更多的分段信息
SA:
为1时指出将收到一个复杂的回应(complexack)
MaxSegs:
指出设备将要接收到多少分段信息
B'
000'
Unspecifiednumberofsegmentsaccepted.
B'
001'
2segmentsaccepted.
010'
4segmentsaccepted.
011'
8segmentsaccepted.
100'
16segmentsaccepted.
101'
32segmentsaccepted.
110'
64segmentsaccepted.
111'
Greaterthan64segmentsaccepted.
MaxResp:
指出将收到的(APDU)最大长度
0000'
UptoMinimumMessageSize(50octets)
0001'
Upto128octets
0010'
Upto206octets(fitsinaLonTalkframe)
0011'
Upto480octets(fitsinanARCNETframe)
0100'
Upto1024octets
0101'
Upto1476octets(fitsinanISO8802-3frame)
InvokeID:
调用者ID
ServiceChioce:
此处表明次报文的作用,详见BACnetConfirmedServiceChoice
ServiceRequest:
根据BACnetConfirmedServiceChoice不同而结构不同,详见
BACnet-Confirmed-Service-Request
BACnetConfirmedServiceChoice:
=枚举类型
--AlarmandEventServices
acknowledgeAlarm(0),
confirmedCOVNotification
(1),
confirmedEventNotification
(2),
getAlarmSummary(3),
getEnrollmentSummary(4),
getEventInformation(29),
subscribeCOV(5),
subscribeCOVProperty(28),
lifeSafetyOperation(27),
--FileAccessServices
atomicReadFile(6),
atomicWriteFile(7),
--ObjectAccessServices
addListElement(8),
removeListElement(9),
createObject(10),
delet