スマートHVAC制御:機器選定・導入・実測データ
これは監視型設定値レコメンダーであり、安全認証済みの制御システムではありません。プラント固有のインターロックと安全制御が優先され、省エネ率の数値は示していません。
このソリューションでできること
オフィス、モール、工場の中央 HVAC プラントは通常、フロアが満員でも空いていても同じ設定値を使う 固定スケジュールで動作します。このソリューションはプラントのそばにゲートウェイを置き、HVAC コントローラーと電力量計を単一のポイントモデルに取り込み、建物自身の過去データから設定値を推奨し、 コントローラーへ書き戻します。書き込みは、現場から値を読み戻して送信値と一致した時点で適用済みとなります。
中央プラントのチラー、エアハンドラー、およびそれらの前段にあるコントローラーを対象にします。分離型 エアコン向けではなく、安全ループにも接続しません。
- 選定と導入:参考設計ページ
- ソースリポジトリ:未公開。
github.com/Seeed-Solution/Solution_HVAC_SmartControlは公開されていません。
既存のコントローラーと電力量計をそのまま接続
OPC UA、Modbus TCP、RS-485 上の Modbus RTU、BACnet/IP に対応したコントローラーは交換不要で、SDM630 電力量計には組み込みテンプレートがあります。上限は2,000ポイント、うち最大50ポイントを書き込み可能にできます。
書き込みはすべて読み戻して確認
書き込み前に直近の正常値、品質、タイムスタンプ、優先度を固定します。安定待ちの後にポイントを再読し、許容差内で比較します。品質が good でない読み戻しは合格になりません。
障害時は自動ロールバックとアラーム
読み戻し不一致、ソース停止、予測無効化、オペレーター中断、バッチの部分適用のいずれでもロールバックします。アラームは原因で識別し、同じ障害が繰り返されると未解決のアラームを再利用します。
測定容量:349.99 events/s で2,000ポイント
目標350.0に対し、reComputer R2000シリーズで180秒のループバックを1回実行して測定しました。条件は付録にあります。
コンソールに表示される内容
稼働中のコンソールには、ポイントごとの品質を含むポイント表、各ソースと登録ポイント数を示すアクセスページ、
コマンド受領台帳が表示されます。書き込み経路は台帳で確認できます。各行には要求値、実効値、実行主体、
プロトコル確認応答、安定待ち後の読み戻し結果が記録されます。レジスターが外部で変更された書き込みは、
検出された値とともに mismatched, compensated と表示され、plugin:prediction:rollback が発行した補正コマンドが次の行に表示されます。
アクセスページには各ソースと登録ポイント数が一覧表示され、配線が機能していることを最初に確認できます。

ポイント表にはポイントごとの品質が含まれるため、good 以外のポイントをここで確認できます。

予測ランタイムページには今回の推奨設定値、その根拠となる履歴ウィンドウ、現在の制御モードが表示されます。

書き込み経路はコマンド受領台帳で確認できます。要求値、実効値、実行主体、プロトコル確認応答、読み戻しがそれぞれ列になります。

上記のキャプチャは、実物の電力量計やコントローラーではなく、パッケージ同梱のプロトコルシミュレーターに接続したものです。ゲートウェイ側では出荷版のソフトウェアが動いています。
必要な機器
必要なのは、既存のコントローラー、電力量計、Dockerホストの3つです。
① HVACコントローラー — プラントの前段にある既存機器で、OPC UA、Modbus TCP/RTU、BACnet/IP のいずれかに対応していれば使用できます。プラントを接続しない試験用に、パッケージにはポート4841のOPC UAシミュレーターが含まれます。
② 電力量計 — Modbus V2レジスターマップの Eastron SDM630 を、Modbus TCP、Modbus TCPゲートウェイ、またはRS-485経由で接続します。読み取り専用ポイントは10個で、三相電圧・電流、総有効電力 (kW)、総力率、周波数、受電有効電力量 (kWh) を含みます。
③ ゲートウェイホスト — 選定が必要な機器はこれだけです。サービスは x86-64 または arm64 上のDockerワークロードなので、プラントネットワーク上の既存Linuxマシンを利用できます。
| ゲートウェイ | ストレージ | 選択する場面 | |
|---|---|---|---|
![]() | reComputer R1124-10 4 GB RAM、RS-485 / RS-232 / DI / DO搭載 | 16 GB eMMC | 履歴はサーバーに保存し、ゲートウェイには短いローカル期間だけ保持する場合 |
![]() | reComputer R1125-10 同一基板でeMMC容量が大きい | 32 GB eMMC | 数か月分の運転履歴をゲートウェイに保持し、学習データをローカルで再取り込みする場合 |
R1100シリーズにはRS-485が搭載されているため、RS-485接続の電力量計にUSBアダプターは不要です。サービス自体は約1 GBのディスクを必要とします。ストレージ容量で、サーバーなしでローカルに参照できる履歴の長さが決まります。
その他の前提条件は、Docker Engine 20.10以降、ホスト上で8280と4841が空いていること、タイムスタンプ、設定値、測定温度、消費電力の列を持つCSVまたはExcel形式の少なくとも1週間分の運転履歴です。
現場への導入
1. ハードウェアの設置:配線
組み込みのSDM630テンプレートは、メーカー公開のデフォルトに合わせてバイトとワードをビッグエンディアンに 設定しています。既知の物理値を持つレジスターを読み、電力量計の表示と比較してください。 電圧・周波数が近いのに合わない、受電電力量が逆戻りする場合は、多くがワード順の設定ミスです。配線より先にワード順を確認してください。
ゲートウェイをコントローラーおよび電力量計(またはModbus TCPゲートウェイ)と同じネットワークに置きます。
Modbus RTUでは、ボーレート、パリティ、unit idを電力量計の設定に合わせてください。不一致の場合はエラーメッセージが出ず、
タイムアウトになるだけです。シリアルデバイス用導入プロファイルを使ってください。標準Dockerプロファイルはホストの
シリアルデバイスを接続しないため、コンテナ内に /dev/ttyUSB0 は存在しません。
2. ソフトウェア:3ステップ
各ステップのフォームの入力項目とアプリケーションパッケージは参考設計ページにあります。現場に合わせて構成を選び、ダウンロードしてください。
手順の概要:
- サービスを導入 — 導入ツールを実行するマシン上、またはSSH経由でプラントネットワーク内の機器にDockerで導入します。フォームには電力量計のトランスポート、OPC UAエンドポイント、安全上限、制御モード、アラームしきい値を指定します。
- コンソールを開く — 最初の管理者を作成し、両方のソースが想定ポイント数でオンラインになっていることを確認します。アクセスウィザードではプロトコルごとにアドレスとポーリング間隔を入力します。

- 試運転 — 電力量計を登録し、observeモードで予測を実行し、意図的に障害を注入してから書き込みを有効にします。バッチ送信前に、選択ページで対象ポイントを正確に確認します。

Control Modeは observe のままにし、Safety Baseline Approved Byは空欄にします。 承認者が空欄の間、基準値は未承認と表示されます。名前を入力すると、その技術者が安全上限を承認したことになります。
ポイントを読み取る稼働中コンソールまでの目安は約60分です。試運転には、プラント運用者が確認するobserveモード予測の完全な稼働サイクルが含まれるため、さらに時間がかかります。
公開済みの missionpack-knn:v1.6.5 にはSDM630テンプレート、ロールバックコーディネーター、アラームエンベロープが含まれていません。v1.6.5ではobserveモードの手順だけが適用でき、電力量計、ロールバック、アラームの手順は完了できません。
利用できるインターフェース
導入で公開されるすべての機能は、ゲートウェイホスト上の1つのHTTPポートの背後にあります。北向き公開を有効にしない限り、プラントネットワークの外へデータは出ません。
- 運用者 —
8280のブラウザーコンソール:ポイントごとの品質を含むポイント表、電力量計登録、予測実行、コマンド受領、アラームバナー。 - 監視 —
GET /system/runtime-metrics。北向き公開を有効にするとnorthbound.spool.queuedとnorthbound.spool.droppedが含まれます。droppedを変えずにqueuedが0へ戻ることを試運転で確認します。 - 自社システム —
8280の同じコンソールAPIに加え、起動時に導入が待機するヘルスエンドポイント。
エンドポイント一覧
| ポート / エンドポイント | 提供内容 | インターネット |
|---|---|---|
8280 / | ブラウザーコンソール | 不要 |
8280 /system/runtime-metrics | ランタイムカウンター、北向きスプールカウンター | 不要 |
8280 /api/v1/health | ヘルスチェック。起動時は30秒を許容 | 不要 |
4841 | 試験用の組み込みOPC UAシミュレーター | 不要 |
コマンド受領では読み戻し列を見てください:protocol_acknowledged はコントローラーがフレームを受理したことを示すだけです。読み戻し列(matched、または検出値付きの mismatched, compensated)が現場に実際に保持されている値です。ロールバックコーディネーターが発行した補正は、取り消した書き込みの直後に独自の受領として現れるため、2つの表を結合せず監査履歴を順に読めます。
コンテナログは10 MBでローテーションし、4世代を保持します(docker logs missionpack_knn)。古いログが失われる前に、コマンド監査履歴、ロールバックジャーナル、アラーム履歴をエクスポートしてください。
南向きプロトコルの対応範囲
すべてのポイントは1つのレジストリに保持されます。上限は2,000ポイントで、そのうち最大50ポイントを書き込み可能にできます。SDM630の10ポイントは読み取り専用で、50ポイント枠ではなく2,000ポイント枠に算入します。
| トランスポート | 役割 | 制約 |
|---|---|---|
| OPC UA | HVACコントローラーの読み書き | 導入ごとにエンドポイントを設定。組み込みシミュレーターは4841 |
| Modbus TCP | 電力量計とコントローラー | ソースごとにunit idとポート。直接接続またはTCPゲートウェイ経由 |
| Modbus RTU (RS-485) | 電力量計 | シリアルデバイス用導入プロファイルが必要。標準プロファイルはホストのシリアルデバイスを接続しない |
| BACnet/IP | エアハンドラーの読み書き | 書き込みは優先度を使用し、Null で解放。COV購読、BBMD登録、MS-TPは未実装 |
性能と実測データ
ここにある値はすべてプロトコルシミュレーターに対してループバックで測定したもので、建物のデータはありません。明記しない限り各値は1回の実行によるものです。
容量
| 指標 | 値 | 条件 |
|---|---|---|
| サンプリングスループット | 349.99 events/s(350.0目標の99.99%) | 2,000ポイント、4プロトコルソース |
| 予測レート | 0.939 cycle/s | 同じ実行 |
| プロセスグループRSSピーク | 217.3 MiB | 同じ実行 |
3行すべての条件:4プロトコルソースにまたがる2,000ポイント、OPC UAとModbusは5秒、BACnetは10秒間隔でサンプリング、ループバックのみ、reComputer R2000シリーズ(arm64)で180秒実行。
再現:upstream b5fe4cc、キャプチャ capacity-smoke r14
遅延
| 指標 | 値 | 条件 |
|---|---|---|
| 予測サイクル遅延 | 最大46.27 ms | n = 4サイクル、負荷なし |
| 制御受付遅延 | 最大1.41 ms | n = 2サイクル、負荷なし |
どちらもコードパス自体の処理時間を示すだけです。
再現:upstream f831bae、northbound-smoke のランタイムベースライン
ランタイムと主要パラメーター
予測モデルはKNNで、建物自身の過去運転データ(タイムスタンプ、設定値、測定温度、消費電力の列を持つCSVまたはExcel)で学習します。サービスはx86-64またはarm64上のDockerワークロードです。各予測はコントローラーへ送る前にコンソールで確認できます。
- 制御モードと安全限界値:制御モードの出荷時設定は
observeで、オペレーターが変更するまでどのポイントにも書き込みません。設定値の下限 / 上限 18 / 30 °C、最大変化量 1.0 °C / 300 s、モードのホワイトリスト off / fan / cool / heat / auto はすべてプレースホルダーです。プラントに合わせて入力してください。 - 書き戻し検証は既定で無効です:コンソールで作成する予測実行設定に
"rollback": { "enabled": true, "settle_seconds": 2.5 }を明示してください。rollbackセクションがない場合はenabled: falseとして扱われます。 settle_seconds(0–30、デフォルト1.0)はソースの収集間隔より長くする必要があります。短いと、読み戻しが書き込み前の値を見て、存在しない不一致を報告します。
既知の劣化
- 予測レートには構造上の上限があります(未修正):予測ループは各サイクル後に固定間隔でスリープするため、レートは
1/(1.0 + t_cycle)です。2,000ポイントではt_cycleが約0.119 sとなり、上限は0.894 cycle/s付近で、長時間テストが要求する0.90ゲートを下回ります。 - 読み戻しで検証されるのはModbusの書き込みだけです:BACnet出力は使える書き込み優先度がないためスキップされます。
- バイト順:電力量計の表示と照合するまで、電力量計ポイントはメーカー既定(ビッグエンディアン)のワード順で解釈され、値が誤っている可能性があります。
次のステップ
- reComputer R10 シリーズまたは reTerminal DM に実機を接続し、OPC UA、Modbus TCP、Modbus RTU(USB-RS-485)、BACnet/IP の読み書きと独立した読み戻しを行います。
- 同じ対象ホストで 72 時間の無人運転を行い、その間にネットワーク、ブローカー、プロセス、デバイスの復旧演習を実施します。
データと素材の出典
- SDM630レジスターマップ — Eastron公開のModbusプロトコル文書(Modbus V2レジスターマップ、IEEE-754 float32入力レジスター)。アドレスは同文書に従い、ビッグエンディアンのバイト順・ワード順はメーカーのデフォルトです。
- 過去運転データ — 導入サイトが提供します。パッケージには含まれず、公開データセットも使用・要求しません。
- コンソールキャプチャ — パッケージ同梱のプロトコルシミュレーターに接続してパッケージソフトを実行した際のオリジナル画面です。シミュレーター設定、キャプチャホスト、チェックサムはパッケージの
gallery/ATTRIBUTION.mdに記録されています。第三者素材、ブランドマーク、ストック画像は含まれません。 - アーキテクチャ図 — 構造化アーキテクチャIRから作成したオリジナルで、第三者アートは使用していません。

