sxhhhjicbb的笔记 https://bbs.21ic.com/?634384 [收藏] [复制] [RSS]

日志

BACnet-0.7.1协议栈源码文件解析

已有 1608 次阅读2013-3-25 00:35 |系统分类:单片机

1、编解码文件集(必须包含的文件)

    * abort.c - BACnet Abort service encode/decode

    * bacerror.c - BACnet Error service encode/decode

    * reject.c - BACnet Reject service encode/decode

    * arf.c - AtomicReadFile service encode/decode

    * awf.c - AtomicWriteFile service encode/decode

    * rp.c - BACnet ReadProperty service encode/decode

    * rpm.c - ReadPropertyMultiple service encode/decode

    * iam.c - I-Am service encode/decode

    * whois.c - WhoIs service encode/decode

    * wp.c - WriteProperty service encode/decode

    * wpm.c - WritePropertyMultiple service encode/decode

    * dcc.c - DeviceCommunicationControl service encode/decode

    * ihave.c - I-Have service encode/decode

    * rd.c - ReinitializedDevice service encode/decode

    * timesync.c - TimeSynchronization service encode/decode

    * whohas.c - WhoHas service encode/decode

    * event.c - EventNotification service encode/decode

    * get_alarm_sum.c - GetAlarmSummary service encode/decode

    * getevent.c - GetEventInformation service encode/decode

    * lso.c - LifeSafetyOperation service encode/decode

    * ptransfer.c - PrivateTransfer service encode/deco

    * readrange.c - ReadRange service encode/decode

2、各种服务处理(handler)

    * demo/handler/h_alarm_ack.c - Alarm ACK service handler example

    * demo/handler/h_arf.c - AtomicReadFile service handler example

    * demo/handler/h_arf_a.c - AtomicReadFile ACK service handler example

    * demo/handler/h_awf.c - AtomicWriteFile service handler example

    * demo/handler/h_ccov.c - ConfirmedCOVNotification service handler example

    * demo/handler/h_cov.c - SubscribeCOV service handler example

    * demo/handler/h_dcc.c - DeviceCommuncationControl service handler example

    * demo/handler/h_get_alarm_sum.c - GetAlarmSummary service handler example

    * demo/handler/h_get_event.c - GetEventInformation service handler example

    * demo/handler/h_iam.c - I-Am service handler example

    * demo/handler/h_ihave.c - I-Have service handler example

    * demo/handler/h_lso.c - LifeSafetyOperation service handler example

    * demo/handler/h_pt.c - PrivateTransfer service handler example

    * demo/handler/h_pt_a.c - PrivateTransfer ACK service handler example

    * demo/handler/h_rp.c - ReadProperty service handler example

    * demo/handler/h_rp_a.c - ReadProperty ACK service handler example

    * demo/handler/h_rpm.c - ReadPropertyMultiple service handler example

    * demo/handler/h_rpm_a.c - ReadPropertyMultiple ACK service handler example

    * demo/handler/h_rr.c - ReadRange service handler example

    * demo/handler/h_rr_a.c - ReadRange ACK service handler example

    * demo/handler/h_ts.c - TimeSynchronization service handler example

    * demo/handler/h_ucov.c - UnconfirmedCOV service handler example

    * demo/handler/h_upt.c - UnconfirmedPrivateTransfer service handler example

    * demo/handler/h_whohas.c - WhoHas service handler example

    * demo/handler/h_whois.c - Who-Is service handler example

    * demo/handler/h_wp.c - WriteProperty ACK service handler example

    * demo/handler/h_wpm.c - WritePropertyMultiple service handler example

    * demo/handler/h_noserv.c - unrecognized service handler example

2、地址绑定和交换状态机

    * address.c - This module is used to handle the address binding that occurs

in BACnet. A device id is bound to a MAC address. The normal method is using

Who-Is, and binding with the data from I-Am. This is needed for client

ality.

    * tsm.c - Transaction State Machine handles resending messages if a timeout

occurs, and is needed for client ality. The transaction state machine is

used for Confirmed messages and segmentation. For confirmed messages, it

automatically (via tsm_timer_milliseconds) handles the retries and the timeout.

It uses the InvokeID as the unique key (although officially it should be the

combination of InvokeID, DeviceID, and service). So if you tried to send a

confirmed request to a device that was taken offline, you would see the retry go

out after every apdu_timeout until apdu retries had completed. Then the

transaction would self-delete (free). The stack as it is written (and most

stacks are written this way) has a limited amount of transactions, and if you

are sending alot of confirmed data, it can be a bottleneck if they are not freed

in a timely manner.

4、 对象文件

    * demo/object/ai.c - analog input object demo

    * demo/object/ao.c - analog output object demo

    * demo/object/av.c - analog value object demo

    * demo/object/bacfile.c - File object demo

    * demo/object/device.c - device object demo

    * demo/object/bi.c - binary input object demo

    * demo/object/bo.c - binary output object demo

    * demo/object/bv.c - binary value object demo

    * demo/object/lc.c - load control object demo

    * demo/object/lsp.c - life safety point object demo

    * demo/object/mso.c - multi-step output object demo

5、数据链路层的数据包服务:

    * apdu.c - handles dispatching the services to the proper handlers

    * bacdcode.c - primitive BACnet datatype encoding and decoding

    * bacint.c - primitive BACnet integer datatype encoding and decoding

    * bacreal.c - primitive BACnet REAL datatype encoding and decoding

    * bacstr.c - primative BACnet string datatype encoding and decoding

    * bacapp.c - application data encoding and decoding

    * npdu.c - encoding and decoding of the NPDU layer data

    * demo/handler/h_npdu.c - handles dispatching of the network message

            to the apdu dispatcher.

6、数据链路层控制访问物理介质

    * bip.c - BACnet/IP ality - depends on bip_init.c in port/xx

    * dllmstp.c - MS/TP datalink layer, also in port/xx

    * mstp.c - MS/TP master and receive state machine

    * crc.c - computes CRC checksum for MS/TP

    * ringbuf.c - MS/TP ring buffer used for testing

    * arcnet.c - ARCNET datalink layer ality, in port/xx

    * ethernet.c - BACnet Ethernet datalink layer ality, in port/xx

There are a dozen demonstration applications in the demo directory, 

along with many demonstation objects and handlers. All the demos accept 

command line options and have been tested under Win32 and Linux. 

There is a makefile in the respective demo directory for Linux and 

for Borland C++ compilers, and a master makefile at the root level 

(Makefile=Linux, makefile.b32=Borland).

The simplest demonstration is to run demo/server/bacserv on one PC (or 

virtual PC), and run the other client demonstration applications one 

at time on another PC (or virtual PC). Monitor the network communcations 

using Wireshark protocol analyzer, or test the BACnet server using 

BACnet Visual Test Shell VTS3.


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)