BACnet
连接 BACnet/IP 楼宇自动化设备:设备实例号、按对象类型和实例号寻址、Who-Is 设备发现,以及 presentValue。
BACnet 驱动通过 BACnet/IP 和楼宇自动化设备对话。每个点位读的是某一个 BACnet 对象的当前值:一个模拟输入的实时读数、一个二进制输出的状态、一个多状态值的位置。在 Connector 里的 BACnet 驱动下面添加一台设备;面板只显示这个协议用得到的那些字段。
连接
| 字段 | 含义 | 默认值 |
|---|---|---|
| 主机 | BACnet 设备(或者替它应答的那个路由器)的 IP 地址或主机名。 | 空 |
| 端口 | 设备的 UDP 端口。填 0 就用 47808,也就是 BACnet/IP 的标准端口。 | 0 |
| 设备 Id | 这台设备的实例号,也就是它 Device 对象的编号,在整个 BACnet 网络上唯一。 | 0 |
设备标题栏显示拼好的端点,例如 bacnet://192.168.0.30:47808/1234。连接时会发一个请求去问这台设备对象列表的大小,用来确认仪器确实在应答;对象列表本身并不会被走一遍。那个回答就是连接:不回话的设备保持离线,而不是显示成已连接,原因(UDP 端口已被别人占着、一个不是地址的地址)会写进事件页面和当天的日志文件。这个驱动没有轮询间隔字段:它的点位每秒读一次。
寻址
BACnet 的点位靠点位“来源”卡片里的两个定型字段寻址,没有自由文本地址:
| 字段 | 含义 | 接受的取值 | 默认值 |
|---|---|---|---|
| 对象类型 | 要读哪一种 BACnet 对象。 | 下面那九种类型 | AnalogInput |
| 实例号 | 这个对象在它那一类里的实例编号。 | 0 及以上 | 0 |
提供的对象类型和它们标准的 BACnet 类型码:
| 对象类型 | 类型码 | 当前值里装着 |
|---|---|---|
AnalogInput |
0 | 一个测得的数 |
AnalogOutput |
1 | 一个下达的数 |
AnalogValue |
2 | 一个存着的数 |
BinaryInput |
3 | inactive/active |
BinaryOutput |
4 | inactive/active |
BinaryValue |
5 | inactive/active |
MultiStateInput |
13 | 一个从 1 起的状态号 |
MultiStateOutput |
14 | 一个从 1 起的状态号 |
MultiStateValue |
19 | 一个从 1 起的状态号 |
设备 1234 上的 AnalogInput 5,意思就是“那台设备第 5 号模拟输入的当前值”。每一次读取都去要这个对象的 presentValue 属性;别的属性寻不了址。“来源”卡片里那行只读的来源地址(总线)会随着你编辑显示拼好的 type,instance 这一对。
数据类型
数据类型选择器提供四种类型。挑和那个对象对得上的那一种:
| 数据类型 | 适合 | 说明 |
|---|---|---|
| Float | 模拟类对象 | Real 型的当前值;double 会被收窄成 Float |
| Boolean | 二进制类对象 | Boolean 型的当前值,或者二进制对象用来应答的枚举值 0 和 1 |
| Int32 | 多状态类以及别的整数值 | 有符号、无符号和枚举的回答都落在这里 |
| String | 字符串类的值 | 设备发来什么文本就是什么文本 |
挑的类型必须和这个对象装着的东西对上。设备答的是别的东西时,那个点位这一次读取就失败:点位转为质量不可用,原因点名到来的是什么(“设备为一个声明为整数的点答了一个 Single 值。”),而不是让一个换算过的数字进到趋势、历史和报警里去。把模拟对象读成布尔,或者把 Real 读成 Int32,正是这种情形。这台设备其余部分照读不误;也不会为一个类型填错的点位重新连接什么。
写入
访问方式为读写或只写的点位可以被写。一次写入会去设这个对象的 presentValue,类型由点位的数据类型决定:Float 写一个 BACnet Real,Boolean 写一个 BACnet Boolean,Int32 写一个有符号整数,String 写一个字符串。写入时不带任何命令优先级。有些仪器坚持要求当前值用另一种类型(例如某些二进制输出只接受 Enumerated 值),它们可能会驳回这次写入;这时点位报告这次失败,而不是假装成功。新点位一开始是只读。
设备发现
Connector 的“发现设备”按钮会广播一个 BACnet Who-Is,并监听 I-Am 回答 10 秒。每一台回答的设备都成为一个候选项,带着它的地址、端口和设备实例号,连接字段都已经填好,可以直接添加;而且它是一答话就出现在列表里,不是等到十秒结束才出现:中途取消的扫描会保留所有已经答过话的东西。扫描不去浏览对象,所以候选项到来时点位数为零;对象类型和实例号那一对,请你自己填。
通过 BACnet 路由器应答的设备也是同样添加的。它的候选项带着路由器的地址,并在旁边带着这台设备自己所在的网络号和它在那个网络上的地址;你添加它时两者都保留下来,之后每一次读取都发给路由器,并在里面点名那台设备。因此,这样找到的设备读起来和别的没有两样,它的端点读作“device via router”。手工添加的设备没有路由,直接在它的主机上够到。
需要知道的事
- 只支持 BACnet/IP:MS/TP 或 BACnet/SC 的仪器只有通过一个把它们呈现在 BACnet/IP 上的路由器才够得着,而找到它们的正是扫描:设备应答时所走的那条路由会从扫描里保留下来,所以请从发现出来的列表里添加它,而不是手工去打那些字段。
- 驱动在本工作站上从 BACnet 标准 UDP 端口 47808 通信;同一台机器上另一个独占该端口的 BACnet 应用会和它冲突。
- 这个驱动上每一个点位的轮询都固定为一秒;平常那些轮询间隔字段不显示。