BACNet
# 常用调试工具
BACNet 协议调试
# 视频教程
# 1 BACnetScan 的使用
BACnetScan下载:BACnetScan.zip
# 1.1 获取点表并整理
使用 BACnetScan 工具获取 BA 点表
需要确保网通通讯正常,才能使用工具获取到点表,如果网络通讯不上,需要将本机IP修改成与目标保持在同一网段的IP,确保网络能够ping通。 以管理员的身份运行BACentScan.exe程序。
打开的软件主界面,如下:
软件默认三个个节点:
BACent Etherncet
BAcent IP
BAcent MS/TP
一般常用到的是BACent IP 跟BAcent MS/TP两种。
选择根节点模式,右击搜索设备,工具会将目标服务器里所有BACent的网络引擎ID(Device:多少)读取出来,读取点表的电脑需要和网络设备在同一网段下。
选择一个NAE(device:15),会将这个NAE的信息读取出来,如:
Address:192.168.1.10:47808(网络引擎IP跟端口)
SNET:11(表示11号网络地址)MS/TP方式才会有
SADR:15(15号设备ID)MS/TP方式才会有
再选择Device,右击搜索点位,等下方对话框出现完成扫点,即已经将这个device下所有的BACent点位扫描完成,再选择这个device,右击,选择导出BACent ip.exl;会将已经扫描的点位信息生成excle导出,文件名称最好为:文件名+DvecieID+网络引擎IP+MS/TP(SNER+SADR如果不是ms/tp方式,则不需要记录) 如下:
- IP:点表的IP地址,该IP在BACentScan可查看到
- DeviceID:在BACentScan可查看到
- 使用bacnet/IP方式部署的网络控制器,其SNET(设备网络地址)+SADR(设备ID)都默认为0;当现场设备部署方式为MSTP方式,则需要使用另外的工具读取。
点表内容中关键字段解析(以下截图为第三方工具导出的点表,使用敢为软件自带工具导出有细微区别)
- ID:点位属性排序标识
- Name:点位名称
- RegType:点位类型
- RegAddress:点位地址
- DataType:点位获取到的数据类型
- BACnetType:点位类型所对应的数字(和属性类型相对应)
- BACnetAddress:点位属性在点表中的地址
- Description:点位注释(此属性由厂家配置)
整理成研发要求的数据库模板(华为网关项目才需要使用该项数据库模板解析,4.9往后属性为配合工具使用自主配置)
- ID:点位属性排序标识(默认自增)
- Name:点位名称(在厂家软件上对属性点右击即可查看到)
- RegType:点位类型
- RegAddress:点位地址
- DataType:点位获取到的数据类型
- BACnetType:点位类型所对应的数字(不重要)
- BACnetAddress:点位属性在点表中的地址(不重要)
- Description:点位注释(可能会没有注释)
- 设备名称:需要自己依据点位属性并核对厂家软件整理
- 设备类型:确认设备并划分设备所属类型(如:空调:AHU)该缩写由自己定义
- 标志命名:点位属性所对应的属性缩写
- 上报方式:该点位属性的上报方式(TIMING或CHANGE)
- 上报周期:定义该点位多长时间上报一次数据(单位:秒)
- YCP:是否将该属性添加至此表(0:不添加,1:添加)
- YXP:是否将该属性添加至此表(0:不添加,1:添加)
- Setparm:是否将该属性添加至此表(0:不添加,1:添加)
# 1.2 工具生成数据库方法
# 1.2.1 华为网关项目数据库配置方法
需要在数据库新建表(具体文档见文件:BACnet工具导入Exl版新增数据表.xlsx):GW_HW_EquipConfig,GW_HW_EquipNodeConfigYcx,GW_HW_EquipNodeConfigSet,GW_HW_ObjectType
表中字段解析:
GW_HW_EquipNodeConfigYcx
数据库字段 填入内容(空调为例) 说明 equipType AHU 已梳理好Excel表格中设备的类型缩写 ocEquipType Ahu 华为OC平台所需的设备类型 ocEquipId Ahu01 华为OC平台所需的设备标识 ocTime AhuRealService 属性表(YCP,YXP)所用数据传输的服务名称 setOcTime AhuService 指令表(SetParm)所有数据传输的服务名称 GW_HW_EquipNodeConfigYcx(提供YCP,YXP转换规则)
数据库字段 填入内容(空调为例) 说明 ocTime AhuRealService 属性表(YCP,YXP)所用数据传输的服务名称 valueEx S 设备类型中属性类型缩写,与表中定义保持一致 equipName Status 该属性缩写转换后的名称 GW_HW_EquipNodeConfigSet(提供SetParm转换规则)
数据库字段 填入内容(空调为例) 说明 ocTime AhuService 指令表(SetParm)所用数据传输的服务名称 valueEx SF-C 设备类型中属性类型缩写,与表中定义保持一致 equipName setSupplyFanStartSwitch 该属性缩写转换后的名称 GW_HW_ObjectType
数据库字段 填入内容 说明 ObjectType float/bool 点表中的属性数据类型(DataType) objectTypeSQL float/enum 转换后应存入数据库的属性数据类型 将工具插件(ExlBAC)放入软件:
路径: D:\AlarmCenter\AddIns\AddIns\AlarmCenter\System
软件菜单栏->配置->导入Excel生成数据库版(江森)。
点击导入已整理的点表
导入已整理的点表
操作步骤:
- 选择对应点表
- 点击获取设备属性
- 点击全选
- 点击将所选一键配置
- 跳出弹窗后点击:确定
- 跳出弹窗(是否向已有设备添加)如果是新增,则点击:取消
- 跳出第二个弹窗界面:
- 填入该点表加入数据库时第一设备编号,后续会自增
- 设备区域根据实际情况填写,
- 点击:确定
- 之后会卡住一定时间,最后会弹出成功页面
查看数据库是否已经导入
local_addr字段表示远程BACent设备的UDP通讯地址和端口,格式:192.168.0.100:47808
如果需要使用多线程通讯,可以在格式后增加不同的线程ID如:192.168.0.100:47808:1
Equip_addr字段便是远程BACent设备的ID(device-instance)
Communication_time_param通讯时间参数,格式:1500/50/20第一个表示通讯间隔,第二个表示最大读取段数,第三个表示重试次数
Communication_param字段使用MS/TP模式,格式:11_15,表示11号网络地址,15号设备ID
SNET:网络地址
SADR:设备ID
YCP表和YXP表
main_instruction字段表示设备属性的数据类型跟地址,格式如:OBJECT_ANALOG_VALUE:3002311;OBJECT_ANALOG_VALUE:表示属性为AV类型,3002311表示属性的地址;
RegType:属性的类型
RegAddress:属性的地址
Setpram表
main_instruction字段表示设备属性类型跟地址,格式如:OBJECT_ANALOG_VALUE:3002311;OBJECT_ANALOG_VALUE:表示属性位AV类型,3002311表示属性的地址;
minor_instruction字段表示属性的数据类型,如:Float,enum
RegType:属性的类型
RegAddress:属性的地址
DataType:属性的数据类型
# 1.2.2 普通项目数据库配置方法
equip表配置
数据库字段 | 填入内容 | 说明 |
---|---|---|
equip_no | 1 | 设备编号不能与其他设备重复 |
equip_nm | 空调网关1 | 设备名称 |
acc_cyc | 1 | 数据刷新优先级1为最优 |
communication_drv | GWBACnet.NET.dll | BACnet协议解析驱动文件 |
local_addr | 192.168.1.11:47808 | UDP通讯地址和端口(如果需要使用多线程通讯,可以在格式后增加不同的线程ID如:192.168.1.11:47808:1) |
equip_addr | 519437 | BACent设备的ID |
communication_param | 11_15 | MS/TP模式:11表示网络地址,15表示设备ID;如果是其他模式:该字段为空 |
communication_time_param | 1500/50/20 | 数据采集周期(控制数据刷新间隔,以毫秒为单位;第一个表示通讯间隔,第二个表示最大读取段数,第三个表示重试次数) |
YCP表配置
数据库字段 | 填入内容 | 说明 |
---|---|---|
equip_no | 1 | 设备号(必须与Equip表该设备编号相同) |
yc_no | 1 | 遥测点编号 |
yc_nm | 空调1设定温度 | 遥测点名称 |
main_instruction | OBJECT_ANALOG_VALUE:3002311 | OBJECT_ANALOG_VALUE:表示该点位为AV类型(所有类型定义在后面章节详细介绍);3002311:表示属性的地址 |
minor_instruction | 为空 | 未使用 |
lvl_level | 3 | 报警事件级别(0表示屏蔽报警、1表示显示报警、2以上表示显示并记录报警、最大级别8) |
YXP配置
数据库字段 | 填入内容 | 说明 |
---|---|---|
equip_no | 1 | 设备编号(必须与Equip表该设备编号相同) |
yx_no | 1 | 遥信点编号 |
yx_nm | 空调1开关机状态 | 遥信点名称 |
main_instruction | OBJECT_BINARY_INPUT:40011 | OBJECT_BINARY_INPUT:表示该点位为BI类型(所有类型定义在后面章节详细介绍);40011:表示属性的地址 |
minor_instruction | =1或者=17 | =1 或17是根据不同品牌厂家的协议规范来填写的(有些定义1是开机状态,有些定义17是开机状态) |
level_r | 3 | evt_01事件报警级别(0表示屏蔽报警、1表示显示报警、2以上表示显示并记录报警、最大级别8) |
level_d | 1 | evt_10事件报警级别(0表示屏蔽报警、1表示显示报警、2以上表示显示并记录报警、最大级别8) |
SetParm表配置
配置SetPram表是需要注意,控制属性是有优先级的(0~16),所以需要同时配置一个释放优先级的控制指令。
优先级说明:其中0为无优先级;1-16数字越低优先级越高,大部分软件控制的最高优先级为8。
BA控制优先级原理:当发送的控制指令优先级比原先控制指令高时,会执行发送的控制指令;当发送的控制指令优先级比原先控制指令低时,此条控制指令不取消,会进入等待状态,高优先级指令被释放时,会执行等待中的最高优先级指令;只有同优先级指令才会相互取代。
通过控制指令控制BA设备时,有时候会控制失效,或者控制成功后,过几秒会恢复原来的状态。有可能是由于优先级过低造成的。
数据库字段 | 填入内容 | 说明 |
---|---|---|
equip_no | 1 | 设备编号(必须与Equip表该设备编号相同) |
set_no | 1 | 控制点编号 |
set_nm | 空调1开机命令 | 控制点名称 |
set_type | X | 如果是直接下发的指令,比如空调开机,填写X,需要手动输入命令的指令,比如设置温度,填写V; |
main_instruction | OBJECT_ANALOG_OUTPUT:40013 | 读取的对象类型(object-type)用数字表示,详细定义,可查看下文BACent属性类型说明;RegType:RegAddress |
minor_instruction | Float | 属性的数据类型:只有Float和enum两种类型;Float类型(AO、AV)填写Float; bool类型(BO、BV)和枚举类型(MV)填写enum;如果是释放优先级指令则填写null。 |
value | 1,16 | 发送的指令内容(根据协议规定填写我们的示例1是开机,0是关机)16是控制优先级(我们在项目中一般默认使用16,16以上的有可能会影响厂家软件的控制;1-16数字越低优先级越高);如果set_type为V,则为空。 |
BACent属性类型说明
属性类型 | 属性缩写 | 说明 |
---|---|---|
OBJECT_ANALOG_INPUT | AI | Float模拟量读取 |
OBJECT_ANALOG_OUTPUT | AO | Float模拟量读取和写入 |
OBJECT_ANALOG_VALUE | AV | Float模拟量读取和写入 |
OBJECT_BINARY_INPUT | BI | bool状态量读取 |
OBJECT_BINARY_OUTPUT | BO | bool状态量读取和写入 |
OBJECT_BINARY_VALUE | BV | bool状态量读取和写入 |
OBJECT_MULTI_STATE_VALUE | MV | 枚举值读取和写入 |
在配置数据库过程中需要注意
AI类型点位只有读取配置到YCP表;AO类型点位有读取和写入,需要配置到YCP和SetParm表;AV类型点位,需要根据现场请况分析,如果该点位不是控制点(没有写入),则配置到YCP表,如果是控制点,则配置到YCP和SetParm表;
BI类型点位只有读取配置到YXP表,BI类型点位有读取和写入,需要配置到YXP和SetParm表;BV类型点位,需要根据现场请况分析,如果该点位不是控制点(没有写入),则配置到YXP表,如果是控制点,则配置到YXP和SetParm表;
MV类型点位,需要根据现场请况分析,如果该点位不是控制点(没有写入),则配置到YCP表,如果是控制点,则配置到YCP和SetParm表。
# BACent属性类型说明
OBJECT_ANALOG_INPUT = 0, AI
OBJECT_ANALOG_OUTPUT = 1, AO
OBJECT_ANALOG_VALUE = 2, AV
OBJECT_BINARY_INPUT = 3, BI
OBJECT_BINARY_OUTPUT = 4, BO
OBJECT_BINARY_VALUE = 5, BV
OBJECT_CALENDAR = 6,
OBJECT_COMMAND = 7,
OBJECT_DEVICE = 8,
OBJECT_EVENT_ENROLLMENT = 9,
OBJECT_FILE = 10,
OBJECT_GROUP = 11,
OBJECT_LOOP = 12,
OBJECT_MULTI_STATE_INPUT = 13,
OBJECT_MULTI_STATE_OUTPUT = 14,
OBJECT_NOTIFICATION_CLASS = 15,
OBJECT_PROGRAM = 16,
OBJECT_SCHEDULE = 17,
OBJECT_AVERAGING = 18,
OBJECT_MULTI_STATE_VALUE = 19,
OBJECT_TRENDLOG = 20,
OBJECT_LIFE_SAFETY_POINT = 21,
OBJECT_LIFE_SAFETY_ZONE = 22,
OBJECT_ACCUMULATOR = 23,
OBJECT_PULSE_CONVERTER = 24,
OBJECT_EVENT_LOG = 25,
OBJECT_GLOBAL_GROUP = 26,
OBJECT_TREND_LOG_MULTIPLE = 27,
OBJECT_LOAD_CONTROL = 28,
OBJECT_STRUCTURED_VIEW = 29,
OBJECT_ACCESS_DOOR = 30,
OBJECT_TIMER = 31,
OBJECT_ACCESS_CREDENTIAL = 32,
OBJECT_ACCESS_RIGHTS = 34,
OBJECT_ACCESS_USER = 35,
OBJECT_ACCESS_ZONE = 36,
OBJECT_CREDENTIAL_DATA_INPUT = 37,
OBJECT_NETWORK_SECURITY = 38,
OBJECT_BITSTRING_VALUE = 39,
OBJECT_CHARACTERSTRING_VALUE = 40,
OBJECT_DATE_PATTERN_VALUE = 41,
OBJECT_DATE_VALUE = 42,
OBJECT_DATETIME_PATTERN_VALUE = 43,
OBJECT_DATETIME_VALUE = 44,
OBJECT_INTEGER_VALUE = 45,
OBJECT_LARGE_ANALOG_VALUE = 46,
OBJECT_OCTETSTRING_