ネットワーク・コーポレーション社のiNBIS ST-150はBACnetクライアントとして使用することができます。
ただし、YABEやComfortClickの様にネットワークにサーチをかけてBACnetデバイスのインスタンスを見つけることはできず、決められたCSV形式のフォーマットでデータポイントをインポートする必要があります。
この記事ではBACnet Room Controller Simulatorの室内温度を ST-150から読み取る方法について紹介します。
BACnet Room Controller Simulator
YABEからはBACnet Room Controller Simulatorは上の様に表示されます。
BACnet DEVICE IDは 2064520 となります。
こちらがBACnet Room Controller SimulatorのProperiesです。
こちらが今回、ST-150をBACnet Clientとして読み込みたいIndoorTemperatureのPropertiesです。
Advantech EdgeLink Studioの操作
前回の記事 ネットワーク・コーポレーション社のiNBIS ST-150の検証 の続きとしてAdvantech EdgeLink Studioの操作を行います。
まずは「プロジェクトコンフィグ」モードでデータセンターのIOタグの下にある「TCP」を開き、GeneralInformationにある「有効化」にチェックをいれます。
TCPを右クリックして「デバイスを追加」
名称を入力(TEST001)し、デバイスタイプとして「BACnet IP」を選択
TCP/IPにBACnet Room Controller Simulatorが動いているPCのIPアドレスとPortを47808で入力
Extention PropertiesにはBACnet Room Controller Simulatorのインスタンス番号(2064520)を入力し、一番上にある「適用する」をクリック。
すると、TCPの下に今追加した「TEST001」とその下に「IOタグ」が表示されますのでクリックしてから「追加」をクリック。
名称はIndoorTemperature、DataTypeはAnalog。(Discreteには1bitのデータ)
アドレスは
【TypeNo】.【InstanceNo】.【PropertyId】 という形式で入力します。
これについてはちょっとややこしいため、次で詳しく説明します。
Indoor TemperatureのTypeNo/InstanceNo/PropertyIdの調べ方
まずは、IndoorTemperatureですが、これはAnalogInputなのでTypeNoは0になります。
その他のTypeNoは下記の様に決められています。
TypeNo | オブジェクトタイプ |
---|---|
0 | Analog Input (アナログ入力) |
1 | Analog Output (アナログ出力) |
2 | Analog Value (アナログ値) |
3 | Binary Input (バイナリ入力) |
4 | Binary Output (バイナリ出力) |
5 | Binary Value (バイナリ値) |
6 | Calendar (カレンダー) |
7 | Command (コマンド) |
8 | Device (デバイス) |
9 | Event Enrollment (イベント登録) |
10 | File (ファイル) |
11 | Group (グループ) |
12 | Loop (ループ) |
13 | Multi-state Input (マルチステート入力) |
14 | Multi-state Output (マルチステート出力) |
15 | Notification Class (通知クラス) |
16 | Program (プログラム) |
17 | Schedule (スケジュール) |
18 | Averaging (平均) |
19 | Multi-state Value (マルチステート値) |
20 | Trend Log (トレンドログ) |
21 | Life Safety Point (ライフセーフティポイント) |
22 | Life Safety Zone (ライフセーフティゾーン) |
23 | Accumulator (アキュムレータ) |
24 | Pulse Converter (パルスコンバータ) |
25 | Event Log (イベントログ) |
26 | Global Group (グローバルグループ) |
27 | Trend Log Multiple (マルチトレンドログ) |
28 | Load Control (負荷制御) |
29 | Structured View (構造化ビュー) |
30 | Access Door (アクセスドア) |
31 | Access Credential (アクセスクレデンシャル) |
32 | Access Point (アクセスポイント) |
33 | Access Rights (アクセス権) |
34 | Access User (アクセスユーザー) |
35 | Access Zone (アクセスゾーン) |
36 | Credential Data Input (クレデンシャルデータ入力) |
37 | Network Security (ネットワークセキュリティ) |
38 | BitString Value (ビットストリング値) |
39 | CharacterString Value (キャラクターストリング値) |
40 | Date Value (日付値) |
41 | DateTime Value (日時値) |
42 | Integer Value (整数値) |
43 | Large Analog Value (大アナログ値) |
44 | OctetString Value (オクテットストリング値) |
45 | Positive Integer Value (正の整数値) |
46 | Time Value (時刻値) |
47 | Notification Forwarder (通知転送) |
48 | Alert Enrollment (アラート登録) |
49 | Channel (チャンネル) |
50 | Lighting Output (照明出力) |
InstanceNoとPropertyIdはRoomControllerSimulatorのデータから確認します。
YABEのDevicesでRoomControllerSimulatorを右クリック、「Export device DB」を選択するとこのデバイスのデータベースがymlファイルで出力できます。
IndoorTemperature
のインスタンス番号(instanceNo)は、XMLデータから特定できます。上記データによると、IndoorTemperature
は以下のように定義されています:
<Object Type="OBJECT_ANALOG_INPUT" Instance="0">
<Properties>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Indoor Temperature</Value>
</Property>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_ANALOG_INPUT:0</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Temperature.Indoor</Value>
</Property>
<!-- 他のプロパティ -->
</Properties>
</Object>
この例では、IndoorTemperature
はOBJECT_ANALOG_INPUT
として定義されています。その横にInstance=0と表記されているので、InstanceNoは0です。
の
Indoor TemperaturePropertyId
(プロパティID)は、オブジェクトのプロパティを一意に識別するために使用されます。以前のXMLデータから、以下のプロパティがIndoor Temperature
に関連していることがわかります。
<Object Type="OBJECT_ANALOG_INPUT" Instance="0">
<Properties>
<Property Id="PROP_DESCRIPTION" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Indoor Temperature</Value>
</Property>
<Property Id="PROP_EVENT_STATE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OBJECT_IDENTIFIER" Tag="BACNET_APPLICATION_TAG_OBJECT_ID">
<Value>OBJECT_ANALOG_INPUT:0</Value>
</Property>
<Property Id="PROP_OBJECT_NAME" Tag="BACNET_APPLICATION_TAG_CHARACTER_STRING">
<Value>Temperature.Indoor</Value>
</Property>
<Property Id="PROP_OBJECT_TYPE" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_OUT_OF_SERVICE" Tag="BACNET_APPLICATION_TAG_BOOLEAN">
<Value>False</Value>
</Property>
<Property Id="PROP_PRESENT_VALUE" Tag="BACNET_APPLICATION_TAG_REAL">
<Value>20.9</Value>
</Property>
<Property Id="PROP_RELIABILITY" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>0</Value>
</Property>
<Property Id="PROP_STATUS_FLAGS" Tag="BACNET_APPLICATION_TAG_BIT_STRING">
<Value>0000</Value>
</Property>
<Property Id="PROP_UNITS" Tag="BACNET_APPLICATION_TAG_ENUMERATED">
<Value>62</Value>
</Property>
</Properties>
</Object>
このXMLデータから、以下のプロパティIDがIndoor Temperature
に関連しています。
今回はIndoorTemperatureのPRESENT_VALUEを見たいので、PropertyId
は85になります。
よって、【TypeNo】.【InstanceNo】.【PropertyId】は 0.0.85になります。
Advantech EdgeLink Studioの操作の続き
アドレスに0.0.85を入力してOK.
デバイスを選択して、保存してから、プロジェクトダウンロード。
実はダウンロードをしようとしたら、何度も”認証エラー”が起こりうまくいきませんでした。よく調べたところ、DHCPでST-150を使用していたため、いつの間にかIPアドレスが変更になり、それが原因でした。
認証エラーなど表示された場合は、IPアドレスが変更になっていることがあるので注意しましょう。
Online Monitorで動作確認
Advantech EdgeLink StudioのOnlineMonitorでも確認はできるのですが、いまいち反応が良くないので、私はChromeブラウザから確認しています。
左側のTagからIO Tagをクリック
実は先ほどまでちゃんと温度が表示されていたのですが、同じように試したところErrorとなりました。
エラー解析
EdgeLinkStudioでは、DeviceErrorが発生しています。
YABEを見るとこのようにエラーがでていました。
ConfirmedServiceRequest
Sending ErrorResponse ...
Confirmed service not handled: SERVICE_CONFIRMED_READ_PROP_MULTIPLE
SERVICE_CONFIRMED_READ_PROP_MULTIPLEとでているので、もしやと思い、YABEの方を終了させてみたところ、
無事に表示されました。
原因は、YABEとST-150の両方からIndoorTemperatureの値を読みにいっていたため、RoomControllerSimulatorが複数のClientから読まれることに対応していないことが原因でエラーが発生していたようです。
まとめ
以上、ネットワーク・コーポレーション社のiNBIS ST-150をBACnetクライアントとして使用する方法をご紹介しました。
次はST-150でRoomControllerSimulatorからデータを読み取り、視覚化サーバーComfortClickに表示させる方法について検証します。