BACnet とコマンド実行例の解説

BACnet の制御対象は個々のデバイス Device-ID と、 デバイス内に存在する Object Identifier と呼ばれるもので、 アナログ信号やバイナリ信号などの情報の種類を表す 10 bit の Object Type と、 同じデバイス内の複数の Object Type を区別するための 22 bit の Instance Number を組み合わせた整数です。

   Object Type | Instance Number
  +<- 10 bit ->+<-- 22 bit -->+
  |b31| .. |b22|b21| ... B1|b0|
  |<--- Object Identifier --->|

Object Type は下記のとおりで、

  0 Analog Input
  1 Analog Output
  2 Analog Value
  3 Binary Input
  4 Binary Output
  5 Binary Value
  6 Calendar
  7 Command
  8 Device
  ..
 13 Multi-state Input
 14 Multi-state Output
  ..
Analog 信号は温度、湿度などの値、Binary 信号は ON/OFF などの状態や操作、 Multi-state は風量の弱/強/急といった区別に使います。 Device は特殊な Object でネットワーク内でそのデバイスを識別するために使い、 Device-ID とも呼ばれ、 他のデバイスと重複しないようにシステム設計段階で割り当てますが、 これが、操作例のコマンドの最初の引数として使われています。

Instance Number はデバイスの設計時点で決めてしまうことが多く、 デバイス依存です。 例えば、今回の事例で操作例に出て来るデバイスでは、 下記のように割り当てられていました。

 Object-Type  Instance-Number  内容  値
  1  1 発停(設定)  0/1
  3  2 発停(状態)  0/1
 14  5 運転モード(設定)  0(暖房)/1(冷房)/2(送風)
 13  6 運転モード(状態)  0(暖房)/1(冷房)/2(送風)
 14  7 風量レベル(設定)  1(弱)/3(強)/5(急)
 13  8 風量レベル(状態)  1(弱)/3(強)/5(急)
  0  9 室内温度測定値  実数値(℃)
  5 10 室内温度測定値  実数値(℃)
  3 11 フィルタ使用限度信号 0/1
  5 12 フィルタ使用限度信号 0/1
  3 28  サーモ状態  0/1
  3 29  圧縮機状態  0/1
  3 30  室内ファン状態  0/1
  bacwi -1
を実行すると、ネットワークの接続されている全デバイスの Device-ID がわかりますので、 次に、見付かった全デバイスについて Device-ID を指定して、 例にあげた 123 なら
  bacepics 123
を実行すると、
  ..
  {
    object-identifier: (analog-input, 9)
    object-name: "RoomTemp_000"
    object-type: analog-input
    present-value: 23.799999
    status-flags: {false,false,false,false}
    event-state: normal
    out-of-service: FALSE
    units: degrees-celsius
  }, 
  ..
といった結果から、object-identifier: (analog-input, 9) が RoomTemp (_000 はエアコンの機械番号) で、 現在値が 23.8 ℃であることがわかります。 object-name はデバイスのメーカーによっていろいろです。

操作例の bacrp, bacwp の 4 番目の引数 85Current Value(現在値)を意味します。 これらの値は bacnet-stack のソースコードの include/bacenum.h で定義されています。

bacwp の 5 番目の引数 16 はコマンド実行時の Priority (優先度) で最低を指定しています。 6 番目の引数 -1 は設定値が Index のない(配列でない)単純変数であることを意味します。

最後の操作例「bacrpm 123 8 123 8」の 2 番目と 4 番目の引数 8Device Object です。 bacrpm は BACnet の Object に含まれる複数の Property を一度に読み出す ReadPropertyMultiple serive を使うコマンドですが、 この起動方法だと BACnet の ALL (全て) を要求するため、 全 Property をその値とともに知ることができます。

各コマンドの使い方は「--help」を引数に起動するとわかりますが、 一部、ソースコードの doc/ にある資料とか、 あちこちにある .txt ファイルを見ないとわからないものもあります。

さらに詳しいことは ANSI/ASHRAE Standard 135-2026 を見たり、 ソースコードを眺めることになると思いますが、 上記の解説を見た後だと、わかりやすくなると思います。 この規格の前の版 ANSI/ASHRAE Standard 135-2012 については、 電気設備学会の和訳もありますが、 完全な和訳ではなくて、部分訳になっています。

平林 浩一, 2019-09