テキスト版を開く

この記事の内容
- 1. まず範囲:BACnet と Modbus は TKE / TKG のみ
- 2. この部分の実際のコスト:業界はポイント単位で価格を決める
- 3. BACnet対Modbus:あなたが提供するのはオブジェクトか、それともアドレスか
- 4。この順序で進めるBACnetの5ステップ
- 5。長い到達範囲を持つ三点テーブル制約
- 6。「オフライン」をBMSが読み取れるポイントにする
- 7。Modbus TCP:4 種類のレジスタと 10 種類のエンコーディング
- 8。書き込み経路:個別に受け入れるべき三つの事項
- 9。ネットワークとポート:47808 は設定しただけでは動作しない
- 10。YABE での検証とポイントリストの提供
- 11. 受け入れチェックリスト
- 12. まとめ
通貨に関する注記。 本記事の金額はすべて人民元(CNY)で表記しています。元の価格が別の通貨で公表されている場合は、2026-10 時点の固定参照レート 1 USD ≈ 6.71 CNYで人民元換算し、元の通貨を併記しています。公開されている価格は出典ごとに範囲が異なり一貫性がないため、桁感を示すものであり、調達の推奨ではありません。
LoRaWAN プロジェクトが完了しました。センサーは設置され、ゲートウェイはオンラインで、プラットフォームにはきれいな曲線が表示されています。そこで顧客から一つの質問が来ます。このデータを、既存のビル管理システムに取り込めるのか、と。
その質問の後に続くのは、誰もが進んでやりたくない作業です。ビル管理は BACnet を話し、生産現場は Modbus を話します。LoRaWAN はどちらも話しません。そこで、別のプロトコルゲートウェイを購入するか、インテグレーターに依頼して MQTT メッセージをポイント値に変換するブリッジサービスを書いてもらうことになります。この作業は新しいデータを生み出しません。すでに持っているデータを、それを読めないシステムが読めるようにするだけです。それでもなお、価格、スケジュール、そしてプロジェクトの全期間にわたって続く変更管理プロセスが付いてきます。
ThinkLink は、TKE(エッジサーバー)および TKG(ゲートウェイ内蔵)の形態で、組み込みの BACnet/IP サービスと組み込みの Modbus TCP サーバーを提供しており、まさにそのために存在します。本記事では、実際に起こる順序に沿って統合を解説します。いつ使えるのか、フィールドがどのようにポイントになるのか、ポイントリストを引き渡す前に何を確認すべきか、そして「ポイントテーブルが正常に保存されました」が「BMS が値を読み取っている」と同じではない理由です。
1. まず範囲:BACnet と Modbus は TKE / TKG のみ
これは設定の問題ではなく厳格な境界であるため、最初に確定すべき事項です。
公式ドキュメントは同じことを三か所で述べています: BACnet サービスは、独立して導入された TKE デバイスおよび TKL(TKG)を実行するゲートウェイでのみサポートされ、クラウド版では提供されません。 Modbus TCP サーバーにも同一の制限があります。
| 導入形態 | BACnet/IP | Modbus TCP サーバー |
|---|---|---|
| クラウド(パブリック SaaS) | 非対応 | 非対応 |
| TKE(ローカルサーバー / 産業用 PC) | 対応 | 対応 |
| TKG(ゲートウェイ内蔵、例:GDO51 / GDI51) | 対応 | 対応 |
これは意図的に省かれた機能ではありません。プロトコルに由来します。BACnet/IP は UDP 47808(0xBAC0) 上でデフォルト動作し、デバイス検出はローカルブロードキャストに依存します。ワークステーションが Who-Is ブロードキャストを送信し、それを受信したすべてのデバイスが I-Am で応答します。これは一つのブロードキャストドメイン内で機能します。IP ルーターはブロードキャストを転送しないため、サブネットを越えるには BBMD(BACnet Broadcast Management Device)が必要です。マルチテナントのパブリッククラウドには、顧客のオンプレミスブロードキャストドメインも、顧客の内部ネットワークへの固定 UDP ポートもありません。これはアーキテクチャであり、バックログではありません。
したがって、提案を出す前に営業とプリセールスでこれをすり合わせてください: 顧客がクラウドを利用している場合、データは MQTT フォワーダーまたは REST API 経由で出て行き、インテグレーターが自社側でポイントに落とし込みます。 「クラウドから直接 BMS に BACnet ポイントを」と約束することは、実装段階で失敗するコミットメントです。
見落としやすい二つ目の運用上の制約があります: 単一のバックエンドプロセスが、一つの組織に対してのみ BACnet サービスを実行します。 別の組織で BACnet を起動すると、前の組織のインスタンスが停止します。一つのプロセス内で異なるポートを使って複数の組織を並行実行することはできません。Modbus TCP サーバーも同じ動作です。一つのインスタンスが一つの組織にサービスを提供し、サービス組織を切り替えると実行中のインスタンスが置き換わります。マルチテナントのエッジ導入(例えば一つの TKE が複数の子会社にサービスを提供する場合)は、明示的に設計する必要があります。並行運用はデフォルトではありません。
2. この部分の実際のコスト:業界はポイント単位で価格を決める
ビルオートメーションと産業統合は共通の勘定単位を共有します。それは ポイントです。一つの温度、一つのバルブ状態、一つのメーター読み取り——それぞれが一つのポイントです。これを理解すれば、組み込みのプロトコルサービスが何を取り除くのかが明確になります。
公開されている二組の数値(2026):
中国 — BA システムソフトウェア価格、ソフトウェアと試運転込み
| 範囲 | 表示価格 | ポイント単価 |
|---|---|---|
| 200 制御ポイント | 約 CNY 18,000 | 約 CNY 90/ポイント |
| 500 制御ポイント | 約 CNY 26,000 | 約 CNY 52/ポイント |
| 1,000 制御ポイント | 約 CNY 38,000 | 約 CNY 38/ポイント |
| 2,000 制御ポイント | 約 CNY 46,000 | 約 CNY 23/ポイント |
中規模プロジェクト(おおよそ 2,000–5,000 ポイント)の業界全体の範囲は約 CNY 80–200/ポイントで、コントローラー、センサー、ソフトウェアライセンス、試運転を含みます。病院のクリーンルームやデータセンターなどの高仕様環境では、1 ポイントあたり CNY 300 を超えます。二組は範囲が異なり——一つ目は主にソフトウェアプラットフォーム、二つ目はハードウェアと設置を含む——ため、どちらも桁感としてのみ扱ってください。
海外のレトロフィット価格(元の通貨、CNY は 1 USD ≈ 6.71)
| レトロフィットの種類 | 表示価格 | 換算額 |
|---|---|---|
| ネイティブ BACnet/Modbus を備え直接接続する機器 | $200–500 / ポイント | 約 CNY 1,342–3,355 / ポイント |
| プロトコルゲートウェイを必要とする機器 | $500–1,500 / ポイント | 約 CNY 3,355–10,065 / ポイント |
| 20 年以上経過した機器、コントローラー交換 | $1,500–4,000 / ポイント | 約 CNY 10,065–26,840 / ポイント |
重要なのは中央の行です: プロトコルゲートウェイを必要とするポイントは、直接接続するポイントの 2.5 から 3 倍のコストがかかります。 2026 英国のBMSコストガイドも同じ結論に至り、接続ポイントあたり£300~600を提示し、ポイント数を主要なコスト要因として挙げている。
これが組み込みプロトコルサービスの価値である。LoRaWANデータを「プロトコルゲートウェイが必要」という区分から「直接接続できる」区分へと移す。節約できるのはセンサーのコストではなく、各ポイントに掛かる2.5倍の乗数、そしてポイントリストが変わるたびに変更プロセスを再実行する再発コストである。
この記事の知識をプロジェクトに活かす
ManThink(門思科技)は、デバイス接続、ネットワーク、データ活用に向けたIoT製品を提供しています。この記事の技術情報とあわせて、以下の製品情報をご覧ください。
3. BACnet対Modbus:あなたが提供するのはオブジェクトか、それともアドレスか
どちらのプロトコルもプラットフォームデータをサードパーティシステムに公開する。しかし引き渡すものはまったく異なり、そこが選定でよく誤る点である。
| 項目 | BACnet/IP | Modbus TCPサーバー |
|---|---|---|
| データモデル | オブジェクトモデル:アナログ/バイナリの入力、出力、値 | レジスタモデル:アドレスとビットまたはワード |
| 自己記述性 | あり — オブジェクト名、説明、単位、データ型 | なし — すべては取り決めであり、スプレッドシートで管理される |
| ディスカバリ | Who-Is/I-Amのブロードキャスト。BMSがデバイスを発見できる | なし。クライアントにアドレスを事前設定する必要がある |
| 変更通知 | COVサブスクリプション(cov_increment しきい値) |
なし。クライアントがポーリングする |
| 書き込み経路 | Output/Valueオブジェクトへの書き込み → バインドされたRPCが発火 | レジスタへの書き込み → バインドされたRPCが発火 |
| 対応先 | ビル管理システム、DDCコントローラ | SCADA、HMI、PLC |
| トランスポート | UDP、デフォルト47808 | TCP、デフォルト502 |
この一行が両者を分けます: ビルオートメーションにはBACnet、産業側にはModbus。 両方を同時に実行できます — 単一のTKEがBACnetオブジェクトをBMSへ、ModbusレジスタをSCADAへ独立して公開できます。サービス権限もポートも別々です。
見分け方は簡単です。相手システムが自らネットワークをスキャンしてポイント名を一覧表示できれば、BACnetの世界です。相手のエンジニアが「ポイントリストを送って、40001が何かを教えてくれ」と切り出せば、Modbusの世界です。
4。この順序で進めるBACnetの5ステップ
ステップ1 — システム管理者がサービス権限を有効化
2.00.077では、System Platform → System Configurationに2つの独立したスイッチがあります。 ModbusTcpServer および BACnet、これらは次に保存されます: system_param.service_enable (のサブフィールドとしてではなく config)。
重要な点が二つあります:
- JSON の真偽値のみが
falseこれを無効にします。 キーの欠落、null、または空のオブジェクトはすべてデフォルトで許可されます。フィールドを空のままにしないでください。 - 無効にするとサービスが停止し、設定およびポイントテーブルの操作がブロックされ、手動起動と自動復旧の両方が防止されます。設定とポイントテーブルは 保持されます。再度有効にするには 手動での再起動 が必要です — 何も自動では起動しません。
ステップ 2 — デバイスモデルで BACnet フィールドを設定する
BACnet サービスを有効にする前に、公開したいフィールドの BACnet 属性をデバイスモデル内で設定する必要があります。デバイスモデルのフィールドの unit は BACnet オブジェクトの unitsにマッピングされます。
これが最もよくある手戻りの原因です: 成果物としてのデバイスモデルには四つの部分があります — パーサースクリプト、表示フィールド、Modbus マッピング、そして BACnet フィールドです。 データを正しく解析する動作するスクリプトは、BACnet フィールドが設定されていることとは異なります。記事 21 ではパーサースクリプトを、記事 22 ではトリガーを扱いました。これは四つ目の独立した設定作業ブロックです。
ステップ 3 — デバイスで BACnet を有効にする
デバイス詳細 → 基本情報、BACnet を有効化(Modbus 側では同等の操作は設定 modbus_tcp を TRUEにすること)。
このスイッチがオンのデバイスのみがマッピングされます。 デバイスモデルでポイントテーブルを生成する場合、対象は すでにそのデバイスモデルにバインドされ、かつ BACnet が有効化済みのデバイス のみです — テナント内のすべてのデバイスに対してオブジェクトを生成するわけではありません。
ステップ 4 — ポイントテーブルを生成
オペレーション → BACnet → 増分生成 → デバイスモデルを選択 → 確認。
オブジェクトを手動で追加することもできます。手動フォームの制約:
| フィールド | 要件 |
|---|---|
| Eui | 必須;マッピングするデバイスを選択 |
| data_from | 2.00.085 から、自由テキスト;デフォルトは telemetry_data |
| thing_model | テレメトリソースのみ必須;属性ソースでは空文字列として保存 |
| field_name | 必須;テレメトリの場合はデバイスモデルのフィールド、属性ソースの場合は属性パス |
| object_type | デフォルトは analogOutputです。実際の読み取り/書き込みの用途に応じて選択してください |
| object_id | 必須。0–4194303 |
| object_name | 必須。インテグレーターが参照する名前 |
| default_value | デフォルトは0、下限は0 |
| units | デフォルトは noUnits。選択時はデバイスモデルのフィールドの unit からマッピングされる |
| cov_increment | 必須。デフォルトは0、下限は0。変更通知のしきい値 |
| description、RPC | 任意。書き込み制御が必要な場合にRPCをバインドする |
2.00.077以降、UIから「ポイントテーブルを適用」ボタンが削除された。オブジェクトの保存、削除、インポート、増分生成、再番号付けは 実行中のサービスを自動的に同期する。逆もまた同様である: ポイントテーブルの保存は停止中のサービスを起動しない 。起動はサービス設定における別の操作である。
ステップ5 — サービスパラメータを設定して再起動する
システム管理 → サーバー設定 → BACnet。ネットワークとデバイスのパラメータを入力し、 送信をクリックし、次に再起動をクリックする。
| パラメータ | 意味 | 参考値 | 編集可能 |
|---|---|---|---|
| IPアドレス | TKLを実行するホストのローカルIP; 0.0.0.0 すべてのインターフェースにバインドする |
0.0.0.0 |
はい |
| ポート | BACnetの待ち受けポート | 47808 (UDP、すなわち0xBAC0) |
はい |
| デバイスID | 一意のBACnetデバイス識別子。システム内で一意である必要がある | 1 |
はい |
| ベンダー識別子 | ベンダー識別番号 | 実際のベンダーに準拠 | はい |
| デバイス名 | BMSに表示される名前 | TKE |
はい |
| Max APDU Length Accepted | 受け入れ可能な最大APDU長 | 1024 |
はい |
| Segmentation Supported | 現在のバージョンではこのフィールドによるセグメンテーションは有効にならない | フォームに表示されるとおり | BMS側との互換性を確認すること |
参考値はフィールド設定用であり、新規入力フォームが事前入力されることを意味しない。既存の設定を読み取り、各項目をBMSインテグレーターと確認すること。待ち受けパラメータの変更には引き続き送信の後に再起動が必要である。
5。長い到達範囲を持つ三点テーブル制約
1。object_idは0~4194303の範囲で動作し、再番号付けはインテグレーターが使用中のものを変更する
一覧には「object idを再番号付け」アクションがある。一見、整理作業のように見える。しかしこれは インテグレーターがすでに使用しているオブジェクト識別子を変更する — BMSはポイントをオブジェクトインスタンス番号でアドレス指定するため、そちら側で一度でも再番号付けを行うと、相手側のすべてのポイントがずれてしまいます。再番号付けの後は、納品済みのポイントリストを再発行し、インテグレータに再設定するよう伝える必要があります。
許可される範囲は0~4194303で、これはBACnetの22ビットのオブジェクトインスタンス番号フィールドを反映している。BACnetデバイスインスタンス番号もBACnetインターネットワーク全体で一意である必要があり、重複すると断続的な障害が発生し、診断が実に厄介になる。症状が「まったく読めない」ではなく「時々読めない」だからである。
2。 data_from は列挙型ではなく自由テキストである
2.00.085以降、BACnetフィールドは data_fromを持つ。その型は 自由文字列(varchar(32))固定の列挙型ではなく、三つの値が推奨されます:
data_from |
意味と設定 |
|---|---|
telemetry_data |
デフォルト; thing_model 必須。フィールドは device.telemetry_data[thing_model] |
server_attrs |
から属性パスを読み取る device.server_attrs。デバイスモデルなし、 "" |
shared_attrs |
として保存 device.shared_attrsから属性パスを読み取る。保存先は "" |
| その他の文字列 | デバイス自身の属性から読み取る。ソースが存在しない場合は default_value にフォールバックする |
フォールバック規則を覚えておくこと: 不明なソース、値の欠落、null、空文字列、空白はすべて default_valueにフォールバックする。ただし数値の 0 と真偽値の false は保持される。
これが重要な結論につながる: デフォルト値はデバイスの実際の状態の証拠ではない。 0へのフォールバックは「値が0である」ことを意味する場合もあれば「ソースが存在しない」ことを意味する場合もあり、BMSはどちらも同じように表示する。
3。一意キーはフィールド名ではなく四つ組です
オブジェクトのビジネスキーは (eui, data_from, thing_model, field_name)である。デバイスモデル内のBACnetフィールドは「ソース+フィールド名」の複合キーを使用する。 異なるソースの同名フィールドは共存できる — そのため、フィールド名だけで重複排除しないでください。誤ったものを削除してしまいます。
関連: 属性オブジェクトを直接追加する場合はデバイスモデルは不要ですが、デバイスモデルによる増分生成は、そのモデルにバインドされBACnetが有効なデバイスのみを対象とし、 すべてのデバイスに対してステータスオブジェクトを自動生成するわけではありません。 「オンライン」ポイントが必要な場合は、手動で追加してください。
6。「オフライン」をBMSが読み取れるポイントにする
BMSはセンサーがまだ稼働しているかどうかを知る必要があります。ThinkLink側では、オンラインステータスを属性ポイントとして公開します。
手順は3つです:
- デバイスの基本情報で、次を設定します
notify_offline = "TRUE"そして実際のハートビート周期を設定します(検出状態のソースを確認してください)。 - BACnetオブジェクトを手動で追加します: 実際のデバイスEUIと競合しないオブジェクトID/名前を選択し、ソースを
server_attrs、フィールドを_online、タイプをbinaryInput、単位をnoUnitsに設定します。 - ポイントテーブルを保存し、実行中のサービスが同期されたことを確認してから、BMSからオンライン、タイムアウトによるオフライン、復旧を確認します。
作成時の主要フィールド(EUI、オブジェクト識別子、その他の必須フィールドも適用されます):
"data_from": "server_attrs", "thing_model": "", "field_name": "_online", "object_type": "binaryInput", "units": "noUnits", "default_value": 0
引き継ぎ文書に記載すべき警告が1つあります: a default_value 0のことは、検出結果がオフラインであることを証明しない — 属性が欠落している場合も 0 を返します。オフライン通知が無効な場合、 _online 最後の状態でフリーズする可能性があります。
オンラインステータスもプラットフォーム上では相互に置き換えできない三つの意味を持ちます(記事 22 で解説):デバイスリストのアクティビティ時刻、 server_attrs.online (検出器が保持する数値 1/0)、およびブール値 data.online MQTT 通知内の。 notify_offline はデバイスまたはテンプレート上の文字列スイッチであり、 "TRUE"/"FALSE"、デフォルトでは無効 — 有効になっていない場合、または欠落している場合、デバイスをオフラインとして扱うことはできません。
7。Modbus TCP:4 種類のレジスタと 10 種類のエンコーディング
三つの設定手順
- システム管理者が組織のサービス権限で ModbusTcpServer を有効にします。
- システム管理 → サーバー設定 → Modbus TCP サーバー:リッスンポートを設定します(通常は 502)、送信してから再起動します。
- デバイス詳細 → 基本情報:
modbus_tcpをTRUEに設定します。
レジスタマッピングエントリ
操作 → Modbus TCP → レジスタリスト。有効なデバイスのマッピングを追加します:
| フィールド | 意味 |
|---|---|
| デバイス EUI | データがマッピングされるデバイス |
| レジスタ種別 | coils (1 ビット、R/W) / discrete_inputs (1 ビット、読み取り専用) / holding_registers (16 ビット、R/W) / input_registers (16 ビット、読み取り専用) |
| レジスタアドレス | 16進数。プラットフォームが競合を検出します。アドレスは種別内で一意である必要があります |
| データソース | telemetry_data / shared_attrs / server_attrs |
フィールドパス (name_path) |
フィールド名。多階層パスに対応、例: temperature、 sensor.value |
| 値の型 | string、 boolean、 Int16LE、 Int16BE、 Int32LE、 Int32BE、 FloatLE、 FloatBE、 DoubleLE、 DoubleBE; 汎用の number オプション |
| RPCバインディング | 任意。クライアントがこのレジスタに書き込むと、バインドされたRPCが発火します |
フォーム入力の3つの落とし穴
アドレスは16進数、レジスタ数は10進数です。 この2つを混在させないでください。
レジスタ数は型から計算されるため、編集できません。 選択すると FloatBE 2のカウントが表示されます。次のアドレスを割り当てる際は、占有される全長を考慮してください。FloatBEは16ビットのレジスタを2つ消費するため、次のポイントは2アドレス後から開始する必要があります。開始アドレスだけを確認すると、それらが重複します。
LE/BEはエンコーディングの選択肢であり、リーダーがバイトを解釈する方法と一致していなければなりません。 選択してください FloatBE プラットフォーム上で、SCADAがリトルエンディアンでデコードしているのに、完全に誤った数値が得られ、エラーも発生しません。
読み取りと書き込みの動作
読み取り: クライアントがレジスタを読み取ると、ThinkLinkはマッピングされたフィールドの現在値を返します。値は各デバイスのアップリンクごとに更新されます — ポーリング設定は不要です。
書き込み:レジスタ にはRPCがバインドされている必要があります。ThinkLinkは、書き込まれた値をパラメータとして、次の形式でバインドされたRPCを呼び出します { _eui, [field_name]: value }。呼び出し元は bacnet_server としてマークされます(同じ仕組みがModbus側にも適用されます)。
典型的な用途:SCADAが holding_registers 値を書き込んでサンプリング間隔を変更すると、ThinkLinkが「サンプリング間隔設定」RPCをデバイスへ送信します。
8。書き込み経路:個別に受け入れるべき三つの事項
ここが統合時の論争の原因です。ドキュメントは意図的に慎重な表現をしています:
BACnetの書き込みが成功したからといって、デバイスがそれを実行したわけではありません。デバイスの応答または後続のアップリンクを確認してください。 書き込みの受け入れ、デバイスでの実行成功、属性の永続化完了は、それぞれ個別に検証する必要があります。
三つの段階:
- 書き込みの受け入れ — プラットフォームがリクエストを受信し、ポイントテーブルのオブジェクト値がすでに更新されている可能性があります。これは数秒で完了します。
- デバイスでの実行成功 — RPCがデバイスに到達し、デバイスが実際にパラメータを変更します。Class AのLoRaWANエンドデバイスの場合、ダウンリンクはアップリンク後の受信ウィンドウ(RX1は約1秒、RX2は約2秒)でのみ送信できます。10分ごとに報告するデバイスは、コマンドを受信するまでに10分かかる場合があります。
- 属性の永続化完了 — デバイスが新しい値を報告し、それが属性に書き込まれ、BMSが次回の読み取りで実際の結果を確認します。
いずれかの段階で失敗すると、「BMSでは書き込みが成功したと表示されるが、デバイスは変化していない」という形で現れます。RPCが失敗した場合、またはデバイスが元の値を報告した場合、後続の属性通知によって真のキャッシュ値が押し戻されることがありますが、そのプッシュは次の属性更新時に到着するものであり、即時ではありません。
したがって、受け入れシートには、制御の書き込みを「書き込み操作が成功を返した」ではなく、「N回のレポートサイクル以内に読み戻して確認する」と指定すべきです。
9。ネットワークとポート:47808 は設定しただけでは動作しない
BACnet/IP のネットワーク要件は、多くの人が想定するよりも具体的です。
UDP 47808、双方向。 ファイアウォールルールは UDP 47808 の受信と送信を許可する必要があります。送信のみのルールでは、ワークステーションは Who-Is を送信できても、返ってくる I-Am を決して見ることはできません。
ブロードキャストは単一のブロードキャストドメイン内でのみ機能します。 ワークステーションは Who-Is ブロードキャストを送信し、同じ Layer-2 セグメント上のデバイスのみが応答します。間に IP ルーターを置くと、ルーターはブロードキャストを転送しないため、ディスカバリは静かに失敗します。ワークステーションは「何も見つからない」と報告し、「ネットワークに到達できない」とは決して報告しません。サブネットをまたぐ場合の標準的な解決策は BBMD です。デバイスを収容するサブネットごとに1台配置し、それぞれがピアを指定する Broadcast Distribution Table を持ちます。ブロードキャストはそれらのピアへユニキャストされ、各ピアがローカルで再ブロードキャストします。
BBMD を設定する際のいくつかの厳格なルール:配布テーブルはすべての BBMD で一致していなければなりません。あるテーブルに記載され、他のテーブルで省略されたサブネットは一方向にしか到達できません。BBMD 自身のアドレスは静的でなければなりません。なぜなら、外部デバイスの登録やピアテーブルのエントリはアドレスによってそれを指すからです。そして 同じサブネット上に2台の BBMD を置くことは冗長化ではなく設定エラーです、重複したトラフィックと重複した I-Am 応答を生じさせます。
NAT は BACnet/IP を壊します。 BACnet/IP は発信元アドレスをメッセージペイロード内に含みます。BBMD が送信する Forwarded-NPDU や、外部デバイス登録においてです。NAT は IP ヘッダーを書き換え、ペイロードには手を加えないため、リクエストは外に出ても応答は決して届きません。実用的な方法は、アドレス変換ではなく、ルーティング接続または VPN 接続です。
サイト間 VPN やワイヤレスブリッジはブロードキャストを頻繁に落とします。 ユニキャストが動作することは、ブロードキャストが動作する証拠にはなりません。そのようなリンクをまたぐ監視には、通常、単純なディスカバリではなく外部デバイス登録が必要です。
デプロイメントレベルの注意事項が1つあります。 TKE Docker デプロイメントガイドには、ホストの受信ポート(80/8080、443、18083、18084、1883、8883、8083、8084、1700 UDP、9000、9001)が記載されており、 47808 や 502 は含まれていません。インストーラーはこれら2つのサービスのマッピングや許可ルールを作成しません。デプロイメントチームがコンテナのポートマッピング、ホストファイアウォール、セキュリティグループのルールを自ら確認する必要があります。これを見落とすと、「プラットフォームはサービスが実行中と表示するが、BMS は何も見つけられない」という症状になります。
最後の項目はオプションではなくセキュリティ要件です: BACnet は分離された制御ネットワーク向けに設計されており、導入済みの基盤の多くは認証がほとんど、あるいはまったくありません。 制御ネットワークがビジネスネットワークから到達可能になると、その前提はもはや成り立ちません。UDP 47808 と TCP 502 の両方は、ビルオートメーションまたは SCADA セグメントからのみ到達可能であるべきで、パブリックインターネットから到達可能にしてはなりません。
10。YABE での検証とポイントリストの提供
YABE を使った5分間のループ
YABE(Yet Another BACnet Explorer)は、BACnet デバイスの閲覧とデバッグに使われる一般的なツールです。設定が完了したら、YABE を ThinkLink に接続して、公開されている BACnet デバイスとそのオブジェクトプロパティを検出し、データが正しく公開されていることを確認します。
次の順序でチェックを進めてください。各チェックは異なる種類の問題を切り分けます。
| チェック | 合格基準 | 失敗時に最初に疑う点 |
|---|---|---|
| デバイス検出 | YABE が Device ID と Device Name を認識する | UDP 47808 がブロックされている/サブネット間で BBMD がない/サービスが再起動されていない |
| オブジェクトリスト | 件数と object_id がポイントテーブルと一致する | デバイスで BACnet が有効になっていない/デバイスモデルの BACnet フィールドが設定されていない |
| 値の読み取り | presentValue がプラットフォームのテレメトリと一致する | フィールド名またはソースが誤っている/値がデフォルトにフォールバックした |
| 単位 | units に期待される単位(例:degreesCelsius)が表示される | unit デバイスモデル フィールドに未入力 |
| COV | 変化がしきい値を超えたときに通知が届く | cov_increment 0 に設定 |
| 書き込み制御 | Output/Value を書き込んだ後にデバイスの読み戻し値が変化する | RPC がバインドされていない / Class A ダウンリンクウィンドウに到達していない |
Modbus には汎用ブラウザに相当するものがなく、通常は Modbus マスターユーティリティ(Modbus Poll など)を使ってポイントリストに対してアドレスを 1 つずつ読み取ります。注目すべきは 2 点です。アドレス表記(16 進数か 10 進数か)とバイトオーダー(LE か BE か)です。
ポイントリストの受け渡し
BACnet と Modbus の両方のポイントリストは Excel にエクスポートでき、一括設定のために再インポートできます。エクスポートにはオブジェクトタイプ、アドレス、名前、説明、データ型、単位、読み書き権限が含まれ、これはインテグレーターがクライアントを設定するために必要なものそのものです。
インポートに関する注意点が 1 つあります: 既存の ID を持つエントリは上書きされます。 これは記事 23 で扱った Excel 移行の落とし穴と同じ種類のリスクです。上書きはロールバックできないため、インポート前にバックアップをエクスポートしてください。
受け渡しに関する 2 つの推奨事項:
- ポイントリストのバージョン管理。 ポイントリストのバージョンを デバイスモデル のバージョンおよびプラットフォームのバージョンと併せて記録します。BACnet のオブジェクト識別子がずれると、BMS 側のすべてのポイントがずれてしまい、事後の調査には記録を残すよりもはるかに高いコストがかかります。
- まず受け渡し、その後で共同でコミッショニング。 ポイントリストをインテグレーターに渡し、クライアントを設定してもらってから、共同でコミッショニングを行います。コミッショニング中にポイントリストを調整するよりもはるかに迅速です。ポイントテーブルの保存は実行中のサービスを自動的に同期しますが、変更のたびに相手側が再設定を強いられます。
11. 受け入れチェックリスト
| # | 項目 | 合格基準 |
|---|---|---|
| 1 | デプロイ形態 | TKE または TKG であることを確認済み。Cloud は BACnet も Modbus も公開しない |
| 2 | サービス権限 | BACnet と ModbusTcpServer の両方が明示的に true システム設定で有効化されている |
| 3 | デバイスモデル | 4 つのブロックすべて完了: パーサースクリプト、表示フィールド、Modbus マッピング、BACnet フィールド |
| 4 | デバイススイッチ | BACnet / modbus_tcp 対象デバイスで有効化されている |
| 5 | サービスパラメータ | Device ID がネットワーク全体で一意。Port が BMS 側と合意済み。送信して再起動済み |
| 6 | ポート到達性 | UDP 47808 が双方向で開放(サブネットをまたぐ場合は BBMD を配置)。TCP 502 は制御セグメントのみに開放 |
| 7 | ポイントリストの完全性 | オブジェクト/アドレス、名前、データ型、単位、読み書き権限がすべて揃っている。書き込みポイントには RPC がバインドされている |
| 8 | 読み取りの正確性 | YABE / Modbus マスターでの読み取り値がプラットフォームのテレメトリと一致し、単位が正しい |
| 9 | ステータスポイント | _online ポイントが存在しオンラインである。タイムアウトによるオフラインと復旧の両方をテスト済み |
| 10 | COV | cov_increment 実際の精度値に設定されている。0 ではない |
| 11 | 書き込み制御 | 書き込み成功だけでなく、報告サイクルをまたいだ読み戻しで確認済み |
| 12 | 実行時監視 | ポイントテーブルの同期エラーやリトライがない。異常終了後にサービスが自動再起動し、手動停止後には復活しない |
| 13 | 成果物 | ポイントリストの Excel をエクスポートしてバージョン管理済み。インポート前にバックアップを取得済み |
12. まとめ
LoRaWAN のデータを BMS や SCADA に取り込むことは、根本的には難しくありません。プロトコルは公開されており、ブリッジは常に書けます。本当のコストは、プロジェクトのライフサイクル全体を通じて、すべてのポイントを誰かが設定し、誰かが確認し、また誰かが変更しなければならないことです。業界はポイント単位で価格を設定しており、プロトコルゲートウェイを必要とするポイントは、直接ポイントの 2.5 倍から 3 倍のコストがかかります。この数字はソフトウェア機能ではなく、統合作業の労力を価格に反映したものです。
TKE と TKG に組み込まれた ThinkLink の BACnet/IP と Modbus TCP は、その部分を不要にします。しかし、不要にできないのは エンジニアリングの規律です。BACnet はセルフホスト形態でのみ利用可能で、1 つのプロセスが 1 つの組織にサービスを提供し、ポイントリストの再採番はインテグレーターの設定を壊し、書き込みの成功は実行の成功ではなく、UDP 47808 は双方向のルールとサブネットをまたぐ場合の BBMD を必要とします。
これらはすべて文書化されています。ただ、異なるページに分散しているだけです。それらを受け入れチェックリストにまとめることが、初回で統合を正しく行うための最も安価な方法です。
関連記事
- 記事 21: ThinkLink デバイスモデル デコーダースクリプトの実践 — 15 バイトを読み取り可能なテーブルに変換する
- 記事 22: ThinkLink トリガーモデルとアラームルールの実践 — 時間通りに、スパムにならず、正しい人へ
- 記事 23: ThinkLink エッジオンプレミスデプロイの実践 — 「データが工場から出ない」ために実際に必要なこと
ThinkLink 公式ドキュメント(バージョン 2.00.077–2.00.085)に基づく。設定パスとパラメータはデプロイされたバージョンに従います。公式マニュアル: https://www.think-link.net/docs/en/Maintenance/BACnet.html https://www.think-link.net/docs/en/Maintenance/ModbusTCP.html https://www.think-link.net/docs/en/QuickStart/SystemManagement/ServerConfiguration.html
ManThink:デバイス接続からデータ活用まで
新規導入や既存システムの更新をご検討中ですか。導入地域、デバイス数、現場のインターフェース、通信・電源環境をManThinkにお知らせください。製品選定やシステム連携の要件についてご相談いただけます。
GD71 屋内用 LoRaWAN ゲートウェイ
GD71 — ThinkLink ネットワークサーバーと IoT プラットフォームを内蔵し、データのバッファリングとローカルアプリに対応。設定と保守は gwTool7 で行います。4 コアプロセッサー、1 GB メモリ、16 GB eMMC。Ubuntu 上で完全な ThinkLink プラットフォームを内蔵。A 型 8 周波数と D 型 16 周波数、および -C・-N・-I の動作温度モデルに対応。デュアルバンド Wi-Fi AP/Client、BLE、複数のバックホール方式に対応。GPS/北斗はオプション。NTP に対応。発注時に測位要件をご指定ください。
具体的な機種、構成、適用条件は、公式製品情報とプロジェクト要件に基づいてご確認ください。