BACnet
BACnet/IP のビル自動化機器につなぎます。デバイスインスタンス、オブジェクトの型とインスタンスによるアドレス指定、Who-Is の機器検出、そして presentValue。
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 秒に固定です。いつもの読み出し周期の項目は出ません。