BACnet通讯分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BACnet通讯
1、概述.
系统实现基于BACnet/IP(又称B/IP)网络进行通讯。BACnet虚拟链路层(BVLL)提供了BACnet网络层和某指定的通讯子系统的接口,本文指定了BACnet虚拟链路控制(BVLC)要求支持的定向和广播信息。本实现关于BACnet协议定义主要可分为三层:B/IP网络虚拟层,BACnet 网络层和BACnet应用层。B/IP提供了TCP/IP一样的通讯结构,采用UDP的通讯方式。本文接下
来将对此三层结构进行详细的讲解。
控制字:BIT7:1表示MessageType存在,为0时MessageType不存在
BIT6:保留,为0
BIT5:1表示DNET DLENHopCount存在,当DLEN为0时表明广播网络
DADR不存在;0表示DNET DLENDADRHopCount不存在
BIT4:保留,为0
BIT3:1表示SNET SLEN存在,当SLEN为0时表明无效SADR不存在;
0表示SNET SLENSADRHopCount不存在
BIT2:1表示为一个需确认的请求数据单元,一复杂ACK数据单元或一网络层
信息非reply的;0表示除去上述情形的数据单元
BIT1、0:网络优先级
11=LifeSafetymessage
10=CriticalEquipmentmessage
01=Urgentmessage
00=Normalmessage
目标网络号:FFFF的时候表示广播
目标长度:表示DADR的长度
目标地址:目标网络MAC地址
原网络号:同目标网络号
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
MaxResp (0..15) (SizeofMaximumAPDUacceptedper20.1.2.5)
InvokeID (0..255)
SequenceNumber (0..255) OnlypresentifSEG=1
ProposedWindowSize (1..127) OnlypresentifSEG=1 ServiceChoice BACnetConfirmedServiceChoice
ServiceRequest VariableEncoding
SEG:指出当前的数据单元是否为完整的还是为一部分分段信息
MOR:指出是否还有更多的分段信息
SA:为1时指出将收到一个复杂的回应(complexack)
MaxSegs:指出设备将要接收到多少分段信息
B'000' Unspecifiednumberofsegmentsaccepted.
B'001' 2segmentsaccepted.
B'010' 4segmentsaccepted.
B'011' 8segmentsaccepted.
B'100' 16segmentsaccepted.
B'101' 32segmentsaccepted.
B'110' 64segmentsaccepted.
B'111' Greaterthan64segmentsaccepted.
MaxResp:指出将收到的(APDU)最大长度
B'0000' UptoMinimumMessageSize(50octets)
B'0001' Upto128octets
B'0010' Upto206octets(fitsinaLonTalkframe)
B'0011' Upto480octets(fitsinanARCNETframe)
createObject (10),
deleteObject (11),
readProperty (12),
readPropertyConditional (13),
readPropertyMultiple (14),
readRange (26),
writeProperty (15),
writePropertyMultiple (16),
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
}
上述标记为红色的表示本次应用中所用到的,所以只对这些进行讲解。
可以根据BACnetConfirmedServiceChoice找到相对应的Request或者Ack的数据的结构