この記事ではBeckhoff TF8020を利用しBACnet/Ip Severを立ち上げ、Node-Redからアクセスするまでを紹介するだけではなく、BACnetに関する知識も少しすつ説明し展開して行こうと思います。
さ、はじめよう!
BACnet?
BACnetというのはいま世界中のBuilding Automationにたくさん採用されているProtocolの一つで、Building Automation and Control Networksの略です。BACnetは暖房・換気・空調(HVAC)システム、照明、入退室管理、その他のビル管理システムなどのビル自動化・制御システム(BACS)向けに特別に開発された標準化通信プロトコルです。
BACnetには様々なネットワーキング・ニーズに対応するための複数のパートまたはプロファイルが用意されています。例えば、
- BACnet/IP(通信にインターネット・プロトコルを使用)
- BACnet MS/TP(ツイストペア・ネットワーク上のマスター・スレーブ/トークン・パッシング用)
このような特徴は標準化により、BACnetはビルディング・オートメーションおよび制御業界で広く採用されているプロトコルとなり、より効率的で相互運用性の高いスマート・ビルの実現になります。
Main Components
BACnet(Building Automation and Control Networks)は、ビルディング・オートメーション・システムで使用される複雑なプロトコルですが、今回の記事ではその中にあるMainの部品を紹介します。
Objects
Objectsはビルディング・オートメーション・システム内のさまざまな要素やコンポーネントを指す。これらのオブジェクトは、センサー、アクチュエーター、コントローラー、データポイントなど、実世界のエンティティや機能を表している。
ではこのエアコンを例にします。エアコンは温度センサーを持ち、セットポイントをローカルまたはリモートで変更できます。なおかつ、ローカル・リモートを切り替えることができ、ステータスを正常/異常として報告することで内部故障があるかどうかを報告するシンプルなデバイスである。
すべてではありませんが、温度の調整ボタン・エアコンON/OFFであるBinary Inputがあります。また現在エアコンの状態を示すBinary Valueがあり、なおかつ現在の室温を示すAnalog Value。Buzzerの出力Binary Outputなどがあります。それらはすべてObjectsです。
そしてBACnetでは一般的なオブジェクトが以下になります。
- Analog Input
- Analog Output
- Binary Input
- Binary Output
- Binary Value
- Analog Value
Instance
各ObjectにはInstance番号があり、同じ型の他のオブジェクトに対して重複しないようにするためです。この考え方は少しEthernet/IPと似ています。
下図のように、各Objectにも実は自分だけのInstance番号があります。
properties and services
BACnetの各オブジェクトタイプには、それに関連するPropertiesとServicesの特定のセットがあります。例えば、”Binary Input “オブジェクトは、現在値、Status、アラームリミットのようなPropertiesがあり、なおかつRead PropertyとWrite PropertyのようなServicesを持つことができる。
このように、BACnetは標準化されたオブジェクト・タイプとそのプロパティのセットを定義しており、これらのオブジェクトを理解し、相互作用させることで、さまざまな機器やシステムが効率的に通信できるようになります。
Services
BACnet Servicesとは、DevicesがObjectに対して実行できるアクションや操作のことです。これらのServicesにより、デバイスはネットワーク上の他のデバイスのデータおよび制御機能を要求または操作することができます。下図は一般的なBACnet Servcesです。
Read Property
Remote DeviceのObjectから特定のプロパティの値を取得するために使用されるサービスになります。
Write Property
Remote DeviceのObjectから特定のプロパティの値を設定または変更するために使用されるサービスになります。
Who-Is
ネットワーク上のデバイスを検索するためのサービスになります。
I-Am
デバイスがネットワーク上の存在を知らせるために使用するサービスになります。
Subscribe-COV (Change of Value)
プロパティの値が変更されたときに通知をもらうために使用されるサービスになります。
LAN (Local Area Network) And Inter-Networking
BACnetはさまざまな種類のネットワークで使用でき、これらのネットワークはローカル・エリア・ネットワーク(LAN)LAN(Local Area Network)となります。例えば、
- Ethernet
- ZigBee
- RS485
- RS232
- LonTalk
BACnet LAN (Local Area Network)
Physical Layer
BACnetは、イーサネット、RS-485、ARCNETなど、さまざまな物理メディア上で動作させることができます。イーサネットは、その速度と汎用性からBACnet LANの最も一般的な選択肢の1つです。
BACnet/IP
BACnet/IPは、Pをトランスポートとして使用するBACnetのプロファイルである。イーサネットやWi-Fiを含む標準的なIPネットワーク上でBACnetメッセージを伝送することができます。
Subnetting
BACnetネットワークは、サブネットワークに分割して、大規模な設置を管理およびセグメント化できます。各サブネットには、サブネット間のBACnetメッセージのルーティングをSupportする独自のBACnet Broadcast Management Device (BBMD)があります。サブネット化の目的は、複数の物理的な場所や大規模な建物にまたがる複雑なビルディング・システムを扱う場合に使用する場合があります。
BACnet Inter-Networking
BACnet Routers
BACnetルーターは、異なるBACnetネットワークまたはサブネットを接続するデバイスです。ルーターは、別々のネットワーク上にあるBACnetデバイス間の通信を容易にし、それらのデバイス間でデータがシームレスに流れるようにします。ルーターは、あるネットワークで発信されたメッセージが、別のネットワークの意図した宛先に確実に到達するようにします。
Foreign Device Registration
あるネットワーク上のBACnetデバイスが別のネットワーク上のデバイスと相互作用したい場合、ターゲット・ネットワークのBBMDに”Foreign Device”として登録する必要があります。この登録プロセスにより、異なるネットワークのデバイスがデータやサービスを交換できるようになります。
BACnet Broadcast Management Device (BBMD)
BBMDはインターネットワークに不可欠です。BBMDは、異なるネットワーク上のデバイスに関する情報を格納し、ブロードキャストおよびユニキャスト・メッセージを適切な宛先に配信するための管理を行います。BBMDは、リモート・ネットワークにあるデバイス向けのBACnetメッセージが、それらのネットワークに正しくルーティングされることを保証します。
Global Services
Inter-Networkingはまた、「Who-Is」や「I-Am」のようなグローバル・サービスが異なるネットワーク間で動作することを可能にします。Who-Isサービスは、BACnetインターネットネットワーク全体のデバイスを検出するために使用され、「I-Am」サービスは、デバイスが複数のネットワークにまたがって自分の存在を知らせるために使用されます。
Wide Area Networks (WAN)
BACnetは、複数の地理的な場所にまたがる、より大規模な設備で使用することができます。BACnet/IPは、インターネットまたはプライベート・ワイド・エリア・ネットワークを介して伝送され、異なる拠点のビルディング・オートメーション・システムを接続することができます。これにより、長距離のビルディング・システムの集中監視と制御が可能になります。
Summary
BACnetでは、ObjectがBulding Automation Systemの要素を表し、Servicesがデバイスがこれらのオブジェクトに対して実行できるActionを定義し、LANとインターネットワークがネットワーク内およびネットワーク間でのBACnetメッセージの通信をサポートするという構造化されたアプローチを採用しています。この標準化されたフレームワークにより、BACnetに準拠したさまざまな機器やシステムが協調して動作し、効率的なBulding Automation Systemと制御を実現できます。
BACnet And Beckhoff?
Beckhoffの新しく開発されたTwinCATライブラリTc3_BACnetRev14は、オブジェクト指向のエンジニアリングとコンフィグレーションプロセスを実装し、Beckhoff BACnet Controllerの便利な機能を提供します。
TwinCATライブラリTc3_BACnetRev14を使うのにOOPのスキルは必要ないが、把握できていただければアーキテクチャは柔軟な拡張ができます。
そしてTwinCATでは古いライブラリTc2_BACnetRev12を使用する場合、PLC変数とBACnetサプリメント間の接続はオートマッピングプロセスを使用して確立します。この機能は、将来のTwinCATバージョンではサポートされなくなる可能性がありますので使用するのはやめたほうがいいと思います。
なおかつ1つのプロジェクト内でライブラリTc3_BACnetRev14とTc2_BACnetRev12の両方を使用することはできません。
Libraries
こちらはBeckhoffのBACnetライブラリの基本構造になります。Beckhoffでは2つ大きなライブラリをEnd-Userに提供しています。
Tc3_BACnetRev14
こちらのライブラリは、BACnetオブジェクトのエンジニアリングに必要なFunction Block・Function・Data Type・Parametersを提供します。Tc3_BACnetRev14ライブラリは、コンパイル済みライブラリ(ソースコードなし)として、TwinCAT 4024.11以降に付属しています。もしコンパイルされていないソースコードが必要であれば、ローカルのBeckhoff Officeにご相談してください。(あとコンパイルされていないソースコードをTwinCAT プロジェクトにImportするには時間かかります)
Tc3_BA2_Common
このライブラリには、BACnetおよびTwinCAT3ビルディングオートメーションで一般的に使用されるすべてのFunction Block・Function・Data Type・Parametersが含まれています。
例えば、エンジニアリングユニットやPIDコントローラはこのライブラリで利用できます。
これらのオプションを使用する場合は、Tc3_BACnet_Rev14に加えてこのライブラリを追加してください。
System Requirment
Target System: TwinCAT XAR 4024.17 or higher
Engineering-PC: TwinCAT XAE 4024.17 or higher.
Implementation
これから実際Beckhoff TwinCAT側とNode-Red側をStep By Stepで説明していきます。
Beckhoff Side
Add BACnet Driver
BACnet Driveを追加するため、I/O>Devices>Add New Itemします。
BACnet>BACnet IP Deviceを選び>Okします。
BACnetとして使用するネットワークインターフェースを設定します。
Done!BACnet IPが追加されました。
AdapterのTabを開いていただくと、Network Interfaceの変更も可能です。
Add BACNet Server
今度はBACnet Serverを追加するため、Device1>右クリック>Add New Itemします。
BACnet Modules>BACnet Serverを選び>Okします。
Done!BACnet Serverが追加されました。
BACnet Serverの設定を行うことができます。
Add PLC
次はPLCを追加するため、PLC右クリック>Add New Itemします。
Standard PLC Projectを選び>AddでPLCプロジェクトを追加します。
Add Library
BACnet専用のライブラリを追加するため、References>Add libraryします。
Rev14を検索し、Tc3_BACnetRev14を追加しましょう。
Add Program
MAINプログラムにFB_BACnet_AVを1つ定義します。
このBACnetの変数はBACnetのAnalog Value Objectを定義することになります。
そしてプログラムで先程のBACnetを実行しましょう。
PROGRAM MAIN VAR BACnet:FB_BACnet_AV; END_VAR BACnet(); |
Build Solution
Build>Build Solutionでプロジェクトをコンパイルします。
Active Configuration
Activate Configurationを使ってプロジェクトをDownloadします。
もしライセンスが足りない場合、TwinCATからTrialライセンスを生成してくださいとの通知が表示され、Yesで進みます。
魔法のコードを入力しOkで進みましょう。
TwinCATをRun Modeに再起動します。
Login
LoginでUserプログラムをDownloadします。
Yesで進みます。
Run
最後はRunボタンでRuntimeを起動します。
But?
でもよくError Listをみたら、”AMS net-ID ”がLinkされませんのエラーが表示されます。
このエラーを解消するため、先程プロジェクトでコンパイルしたとき、実はTwinCATが該当するPLCプロジェクトのInstanceが作成されました。その中にPlc Task InputsでBACnet_AmsNedIdがあります。
そのProcess Inputを右クリック>Change Linkします。
先程定義したBACnet Objectと紐つけましょう。
Test with System Manager
最初はSystem ManagerからBACnet/IP Serverの接続性を確認しましょう。
Dynamic Object ManagementのところにScanボタンをクリックします。
Done!MAIN.BACnet(BACnet Analog Value Object)がBACnet Serverに追加されました。
このObjectをクリックするとObjectのProperty値を確認できます。
MAINプログラムのBACnet変数を開いたらbReady=TrueでつまりこのObjectが正常であることを示しています。
Analog ValueのPresent Valueを変更するためにbEnPgmをTrueにし、fValPgmにてて起動な値を入力しましょう。
Present Valueが同じく3.14に変わりました!
Node red Side
Install Node
下記のコマンドでBACnetのNodeをインストールしてください。
npm install node-red-contrib-bacnet |
Node Red EditorからBACnet関連のNodeが表示されます。
Configure BACnet Read Node
BACnet- Read NodeをFlow Editorに追加します。
Propertiesをダブルクリックし接続情報などを設定します。
Name
こちらはNodeの名前になります。
Type
次はTypeを設定します。こちらはAnalog INPUTなどのアクセスしたいObjectを設定するため赤枠のICONをクリックします。
Drop Listが表示され ANALOG_VALUE・BINARY_INPUTなどのアクセスObjectを設定できます。
Instance
次は先程設定したObjectにアクセスしたいInstanceを設定を行います。
Instanceを設定するため鉛筆のICONをクリックしてください。
InstanceのPropertoes画面が表示されます。
Nameは空きでもよいので、Instanceは10000を設定してください。
この10000は先程Beckhoff側で設定したAnalogValue ObjectのInstance番号に合わせてください。
Property Id
次はProperty IDを設定します。
Drop Listが表示されます。
PRESENT_VALUEを選択します。
Done!Property Idは自動的に85に変わりました。
NodeのProperty Idは85になりました。その85はTwinCAT側のPresent IDと一致しています。
Device
DeviceはNode-Redが接続するBACnet/IP Serverになります。
AddressのFieldで接続するBACnet/IP ServerのIPアドレスに設定します。
IPアドレスはBACnet/IP Serverとして立ち上げたNetwork AdapterをIPアドレスに合わせましょう。
Client
次はClient Fieldを設定します。
InterfaceはNode-RedがインストールされたPCのIPアドレスに設定してください。
最後はDoneボタンで設定を保存します。
これでOKです。
Deploy
DeployボタンをクリックしFlowをDownloadしましょう。
Result
Timestampボタンをクリックすると、BeckhoffのBACnet/IP Serverからデータが帰ってきました。
Write Node
BeckhoffのBACnet/IP ServerのObject Property ID85を変更するには、BACnet Write Nodeを追加しましょう。
Type
TYPE=2、つまりANALOG_VALUEに設定します。
Instance
Instanceは先程と同じInstance番号にアクセスするので、InstanceのDrop-Listから前回追加したInstanceを選択します。
App-Tag
該当するNodeに書き込む値のデータ・タイプを設定します。4=Realです。
Value
Valueは書き込みの値になります。
Property
今回書き込みするPropertyはPresent Value(85)です。
Device
Deviceは先程と同じBACnet/IP Serverにアクセスするので、DeviceのDrop-Listから前回で追加したInstanceを選択します。
Client
こちらも同じClient(Node-Red)なので、先ほど追加したClientを選択します。
Deploy
DeloyボタンをクリックしFlowを更新しましょう。
Done!Node‐RedからBeckhoffのBACnet/IpのObjectの現在値を変更できました。