1. 前言:
BACnet协议是在楼宇自控领域的一个国际标准协议,现在国内有不少厂家在自已的产品中要增加对此协议的支持,无非两种情况,一种让自已的产品提供软件接口能将数据通过BACnet协议接入至楼宇系统(如尼亚加拉,西门子等),另一种将协议栈嵌入自已产品中,在硬件上支持此协议;
因为市场竞争原因,厂家往往不想花太多精力,为此事从头开发编代码(目前网上BACnet开源项目只对C++语言支持,且是有限支持,很多对象及相关属性和服务都没有实现,代码中存在不少bug),希望能有一种工具能快速让自已的产品全面支持此协议,但目前在国内BACnet解决方案少之又少,所以本文推荐一个第三方开发包,以解决快速开发BACnet产品的问题;
2. BACnetLib开发包:
BACnetLib是最近在网上出现的一个专门用于快速开发BACnet产品的第三方开发包(www.bacnetlib.com),支持 C , C++ ,Java , C# 四种语言,核心代码是由C语言实现,通过增加外壳方式,支持C , C++ , Java , C#语,平台支持windows , linux , android , ios平台,并支持单片机程序运行,但需要厂家定制;
具体支持功能如下:
l 支持浏览远程设备,保存本地对象,添加虚拟设备,应用包分段传输的功能;
l 支持COV报告,内部报告,算法改变报告;
l 在链路层支持PTP,MSTP,BIP,Ethernet,四种不同链路的连接;
l 应用层全面支持BACnet2004版的24种对象,35种服务;
l 不限对象点数;
3. BACnet基础知识:
在作BACnet开发之前,要先了解一些基本概念,如下:
网络号:在BACnet世界中网络号是个重要概念,每个设备都有一个地址,地址是由mac地址和网络号构成,不同网络号之间如有数据交换,必须采用BACnet路由器实现数据包的路由;
本地设备:地址为本机物理地址的设备;
虚拟设备:用户在同一物理设备上采用虚拟的设备;具体请参看BACnet协议;
远程设备;非本地网络设备;
分段传输:应用层数据包可实现多个分段传输至目标设备的功能。具体请参看协议;
COV报告:值改变幅度报告;
内部报告:值改变后通过通告类来发送报告的方式;
算法改变报告:通过事件登记类来自定义算法的报告;
PTP: 一种点对点传输的协议;
MSTP: 令牌/主从传输协议;
BIP: BACnet IP传输协议,是一种基于UDP的协议;
Ethernet: 以太网传输协议,是一种将数据直接基于Ethernet接口发送的协议;
对象 : 每个BACnet设备包含N个对象,每个对象都有多个属性,每个属性都有自已的独特用途;
服务:设备之间的数据互访问,采用服务的方式进行,一个设备允许读写另一个设备的对象,但协议规定一些对象属性只能读不能写,一些对象属性可写,这要看具体对象待定;
启动过程:协议规定当设备启动成功后,要在本地网络内,广播Whois服务,以获取本网络内其他设备的信息,其他设备将回复Iam服务,以告知对方“我”的存在;
4. 开发环境搭建:
为方便演示,以下是在Windows7 操作系统32位机器上的搭建过程;
为测试方便,链路层采用BIP方式通讯,数据包分析工具使用Wireshark抓包工具;
1. 安装Visual Studio开发工具,推荐安装VS2010或VC6.0
2. 在运行时有很多网友电脑提示缺少某DLL,其实是缺少npptools.dll,这个文件是windows的一个核心文件,但有时杀毒软件也会将其当病毒干掉,上网下一个也行,不过之后笔者的演示代码中已有提供;
3. 下载并安装Wireshark工具;
https://1.eu.dl.wireshark.org/win32/Wireshark-win32-1.12.6.exe
4. 安装winpcap软件,这是个网络开发包,BACnetLib正是基于此开发包来实现的BIP,Ethernet通讯,用户在安装wireshark软件的同时,会自动安装winpcap软件,所以不必单独安装;
5. 在完成以上操作后,网友们可以下载演示代码;
http://www.bacnetlib.com/down/CPP_Case/readallobject.rar
1. 下载并安装Eclipse For Java 开发工具;
Eclipse IDE for Java Developers
http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/mars/R/eclipse-java-mars-R-win32.zip
配置Java环境变量;(这些教程在网上都能找到,这里就不细说)
总之能作到让eclipse能正常运行java代码就可以了;
2. 下载并安装Wireshark工具;
https://1.eu.dl.wireshark.org/win32/Wireshark-win32-1.12.6.exe
3. 在完成以上操作后,网友们可以下载演示代码;
http://www.bacnetlib.com/down/Java_Case/JBACnet.rar
1. 安装Visual Studio开发工具,推荐安装VS2010,安装时添加对C#的支持;
2. 安装.Net Frame 3.5以上版本;
3. 在完成以上操作后,网友们可以下载演示代码;
http://www.bacnetlib.com/down/CSharp_Case/CSharp_Example.rar
5. 代码编写:
1. 打开工程:
如果网友安装的是vs2010或更高版本,请选择.sln文件打开;
如果网友安装的是VC6版本,请选择.dsw文件打开;
2. 更改初始化IP地址及网络号;
注1:请将IP地址改为本机IP地址;
注2:网络号不用更改;
3. 运行;
注:这是一个客户端例子,所以会将远程设备的对象包括AI,AO,AV,Bi,BO,BV对象当前值打印出来;
1. 运行Eclipse,并导入JBACnet工程;
2. 更改引用路径;
注:请将JBACnet\jni路径下,BACLib.dll,BACnetJNILib.dll 这两个文件拷贝至
C:\Program Files\Java\jdkX.X.X_X\bin目录下,这样可保证jni库的路径能正确被java虚拟机引用;
3. 更改本地IP地址;
注:请将以上IP地址改为本机IP地址;
4. 运行演示代码;
1. 运行vs2010,并打开工程;
2. 更改本地IP地址;
3. 运行演示代码;
2. 结束语:
以上内容简单介绍了BACnetLib的运行开发环境搭建及相关BACnet基本概念,关于BACnetLib的使用,以后会陆续提出专题博文,希望大家多给建议,谢谢。
对BACnet有兴趣的网友可以直接联系我;
QQ: 2979430184
Email: [email protected]