BACnet

BACnet/IP のビル自動化機器につなぎます。デバイスインスタンス、オブジェクトの型とインスタンスによるアドレス指定、Who-Is の機器検出、そして presentValue。

Markdown で表示

BACnet のドライバーは、BACnet/IP でビル自動化の設備と話します。どのタグも、BACnet のオブジェクト 1 つの現在値を読みます。アナログ入力の実時間の読み取り、バイナリ出力の状態、多状態値の位置などです。Connector の BACnet のドライバーの下に機器を追加してください。パネルは、このプロトコルが使う項目だけを見せます。

接続

項目 意味 既定
ホスト BACnet の機器(またはそれに代わって答えるルーター)の IP アドレスかホスト名。名前は機器の接続のときに IPv4 アドレスに解決されます。このコンピューターが解決できない名前では機器は接続されず、理由にそう書かれます。 空
ポート 機器の UDP のポート(1 から 65535)。欄が空のときは BACnet/IP の標準である 47808 が灰色で表示され、機器にはそのポートで届きます。0 で保存された機器も同じように表示されます。 47808
機器 ID その機器のインスタンス番号、つまり Device オブジェクトの番号で、BACnet のネットワークの中で一意です。 0

機器の見出しは、組み立てられた接続先を見せます。たとえば bacnet://192.168.0.30:47808/1234 です。接続では、設備が答えることを確かめるために、機器のオブジェクトの一覧の大きさを尋ねる要求を 1 つ送ります。一覧そのものを巡ることはしません。その答えが接続です。答えない機器は、接続済みに見せかけるのではなくオフラインのままになり、その理由(UDP のポートがすでに取られている、アドレスがアドレスになっていない)が Events のページとその日のログのファイルに書かれます。このドライバーには読み出し周期の項目がありません。そのタグは 1 秒に 1 回読まれます。

アドレス指定

BACnet のタグは、タグの「信号源」のカードの 2 つの型付きの項目でアドレスを取ります。自由記述のアドレスはありません。

項目 意味 受け付ける値 既定
オブジェクトの型 読む BACnet のオブジェクトの種類。 下の 9 つの型 AnalogInput
インスタンス その型の中でのオブジェクトのインスタンス番号。 0 以上 0

出るオブジェクトの型と、その標準の BACnet の型コードは次のとおりです。

オブジェクトの型 コード 現在値が持つもの
AnalogInput 0 測定された数値
AnalogOutput 1 指令された数値
AnalogValue 2 保存された数値
BinaryInput 3 非動作/動作
BinaryOutput 4 非動作/動作
BinaryValue 5 非動作/動作
MultiStateInput 13 1 以上の状態の番号
MultiStateOutput 14 1 以上の状態の番号
MultiStateValue 19 1 以上の状態の番号

機器 1234 の AnalogInput 5 は、「その機器のアナログ入力 5 の現在値」という意味です。読み取りのたびに、そのオブジェクトの presentValue プロパティを尋ねます。ほかのプロパティを指すことはできません。「信号源」のカードの読み取り専用の取得元のアドレス(バス上)の行が、編集しているそばから組み立てられた type,instance の組を見せます。

データ型

データ型の選択肢には 4 つの型が出ます。オブジェクトに合うものを選んでください。

データ型 合う相手 備考
Float アナログのオブジェクト Real の現在値。倍精度は Float に縮められます
Boolean バイナリのオブジェクト Boolean の現在値、またはバイナリのオブジェクトが答える列挙の 0 と 1
Int32 多状態やそのほかの整数の値 符号付き、符号なし、列挙の答えは、どれもここに届きます
String 文字列の値 機器が送ってくるままの文字

選んだ型は、そのオブジェクトが持つものと合っている必要があります。別のもので答える機器は、そのタグの読み取りを失敗させます。タグは品質が悪くなり、理由が何が届いたかを名指しします(「Integer と宣言された点に対して、機器は Single の値で答えました。」)。変換された数値がトレンド、履歴、警報に入っていくことはありません。アナログのオブジェクトをブール値として読む、Real を Int32 として読む、というのがまさにこの場合です。機器の残りは読み取りを続けます。型の合っていないタグのために再接続が起こることもありません。

機器が持っていないオブジェクトを指すタグは、機器自身の答えとともに読み取りに失敗します。理由は、そのアドレスに機器のオブジェクトがないことを伝え、機器が送ってきたエラー(ERROR_CODE_UNKNOWN_OBJECT)を名指しします。そのため、アドレスの誤りは、答えなくなった機器とは別のものとして読めます。機器は接続されたままです。

書き込み

アクセスが読み書きか書き込みのみのタグは書き込めます。書き込みは、そのオブジェクトの presentValue を、タグのデータ型にかかわらず、BACnet の規格がその種類のオブジェクトに定める型で設定します。

オブジェクト 書き込む型 受け付けるもの
バイナリの入力、出力、値 Enumerated 非動作 (0) か動作 (1)。Boolean のタグ、または 0 か 1 の Int32 から
多状態の入力、出力、値 Unsigned 1 以上の状態の番号
アナログの入力、出力、値 Real Float か Int32 のタグからの数値
そのほかの型のオブジェクト タグのデータ型 Float は Real、Boolean は Boolean、Int32 は符号付きの整数、String は文字列

書き込みに指令の優先度は付けません。オブジェクトが持てない値、たとえば多状態のオブジェクトへの 0 やバイナリのオブジェクトへの 2 は、何も送る前に拒否され、その拒否が理由を伝えます。機器が書き込みにエラーで答えたときは、タグは成功を装うのではなく、機器が送ってきたエラーのクラスとコードを報告し、機器は接続されたままです。新しいタグは読み取りのみから始まります。

機器検出

Connector の機器検出のボタンは、BACnet の Who-Is を同報し、I-Am の答えを 10 秒間聞きます。答えたすべての機器が、そのアドレス、ポート、デバイスインスタンスを運ぶ候補になり、接続の項目が埋まった状態ですぐ追加できます。しかも 10 秒の終わりではなく答えた瞬間に一覧に現れるので、途中で取りやめたスキャンでも、すでに答えていたものはすべて残ります。スキャンはオブジェクトを巡らないので、候補はタグ 0 件で届きます。オブジェクトの型とインスタンスの組は自分で追加してください。

Who-Is は、スキャンの範囲 カードが指すネットワークへ出ます。その入力欄には、そのネットワーク上の IPv4 アドレス(機器のアドレスか、そのネットワークでのこのコンピューター自身のアドレス、例:192.168.1.20)を書きます。するとスキャンはそのネットワークだけに同報します。空欄なら Who-Is はこのコンピューターのすべてのネットワークへ出るので、ネットワークカードが 2 枚ある、VPN がある、Docker があるコンピューターでも、それぞれのネットワークの機器が見つかります。最後まで書き切った IPv4 アドレスでないものは入力欄の下で拒否され、直すまで機器検出のボタンは灰色のままです。

BACnet のルーター越しに答える機器も、同じように追加されます。その候補はルーターのアドレスと、それに添えてその機器自身のネットワークと、そのネットワーク上でのアドレスを運びます。追加するときはどちらも保たれ、読み取りはすべて、中の機器を名指ししてルーターへ送られます。こうして見つかった機器は、ほかと同じように読まれ、その接続先は「ルーター経由の機器」と読めます。手で追加した機器は経路を持たず、そのホストへ直接届きます。

知っておくとよいこと

  • BACnet/IP だけです。MS/TP や BACnet/SC の設備には、それを BACnet/IP で見せるルーター越しにしか届きません。そしてそれを見つけるのがスキャンです。機器が答えた経路はスキャンから保たれるので、項目を手で入力するのではなく、検出された一覧から追加してください。
  • ネットワークインターフェースが複数あるコンピューター(ネットワークカードが 2 枚、VPN、Docker)では、各機器には、このコンピューターがそのアドレスへの経路に使うインターフェースから届きます。ここでほかのプログラムが使うのと同じものなので、選ぶものはありません。
  • このステーションの標準の BACnet の UDP ポート 47808 を使うのは、機器からのメッセージを待ち受けるソケットだけです。そのため、同じコンピューターで別の BACnet のアプリケーションがそのポートを占有していると、ぶつかることがあります。機器への要求は、クライアントごとにシステムが選ぶポートから出ます。
  • このドライバーでは、読み出しはどのタグも 1 秒に固定です。いつもの読み出し周期の項目は出ません。