ネットワーク・コーポレーション社のiNBIS ST-150をBACnetクライアントとして使用する方法

ネットワーク・コーポレーション社の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 オブジェクトタイプ
0Analog Input (アナログ入力)
1Analog Output (アナログ出力)
2Analog Value (アナログ値)
3Binary Input (バイナリ入力)
4Binary Output (バイナリ出力)
5Binary Value (バイナリ値)
6Calendar (カレンダー)
7Command (コマンド)
8Device (デバイス)
9Event Enrollment (イベント登録)
10File (ファイル)
11Group (グループ)
12Loop (ループ)
13Multi-state Input (マルチステート入力)
14Multi-state Output (マルチステート出力)
15Notification Class (通知クラス)
16Program (プログラム)
17Schedule (スケジュール)
18Averaging (平均)
19Multi-state Value (マルチステート値)
20Trend Log (トレンドログ)
21Life Safety Point (ライフセーフティポイント)
22Life Safety Zone (ライフセーフティゾーン)
23Accumulator (アキュムレータ)
24Pulse Converter (パルスコンバータ)
25Event Log (イベントログ)
26Global Group (グローバルグループ)
27Trend Log Multiple (マルチトレンドログ)
28Load Control (負荷制御)
29Structured View (構造化ビュー)
30Access Door (アクセスドア)
31Access Credential (アクセスクレデンシャル)
32Access Point (アクセスポイント)
33Access Rights (アクセス権)
34Access User (アクセスユーザー)
35Access Zone (アクセスゾーン)
36Credential Data Input (クレデンシャルデータ入力)
37Network Security (ネットワークセキュリティ)
38BitString Value (ビットストリング値)
39CharacterString Value (キャラクターストリング値)
40Date Value (日付値)
41DateTime Value (日時値)
42Integer Value (整数値)
43Large Analog Value (大アナログ値)
44OctetString Value (オクテットストリング値)
45Positive Integer Value (正の整数値)
46Time Value (時刻値)
47Notification Forwarder (通知転送)
48Alert Enrollment (アラート登録)
49Channel (チャンネル)
50Lighting 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>

この例では、IndoorTemperatureOBJECT_ANALOG_INPUTとして定義されています。その横にInstance=0と表記されているので、InstanceNoは0です。


Indoor Temperature
PropertyId(プロパティ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に表示させる方法について検証します。