IROHA2デバイス制御サーバー¶
目次:
セットアップ¶
サーバー設定¶
デバイス制御サーバーの設定は iroha-settings/device/irhdevsrv.xml
に記述されている。
<?xml version='1.0' encoding='UTF-8'?>
<IrhDevSrv>
<name>Device Server</name>
<accessControl>
<allowedHost>localhost</allowedHost>
<allowedHost>192.168.13.1/24</allowedHost>
<allowedHost>192.168.1.0/24</allowedHost>
<allowedHost>10.105.39.145</allowedHost>
</accessControl>
<logOperPath>/tmp</logOperPath>
<retryMax>6</retryMax>
<webUpdateInterval>5</webUpdateInterval>
<logSuppress>100</logSuppress>
<enableMessaging>False</enableMessaging>
<redisSrv>localhost:6379</redisSrv>
</IrhDevSrv>
これらの項目を編集することでサーバー設定を変更する。
要素 |
機能 |
---|---|
name |
デバイス制御サーバーの名称を指定する(Web UIに表示される名前) |
accessControl/allowedHost |
管理モードへのアクセスを許可するIPアドレス(ホスト名)を指定する。複数のアドレスを指定するには要素を追加する。 |
logOperPath |
デバイス制御サーバーの操作ログの出力先ディレクトリを指定する |
retryMax |
デバイスのConnect処理で使用される最大リトライ回数を指定する |
webUpdateInterval |
自動更新対応ページのWeb UIの更新間隔を指定する(単位:秒) |
logSuppress |
同じ内容のログが連続して複数回出力される場合、当該ログの出力を抑制する回数を指定する |
enableMessaging |
メッセージ通信の有効/無効を指定する |
redisSrv |
メッセージ通信を有効にしたときに接続するRedisサーバーの接続先を IPアドレス:ポート番号 の形式で指定する |
抽象デバイス(デバイスモジュール)の追加¶
iroha-device-server/devices
以下に抽象デバイスのディレクトリをコピー
(またはシンボリックリンクを貼る)ことでデバイスクラスとしてサーバーに認識され、
サーバー管理画面においてデバイスを追加することが可能になる。
現在、Python3対応版IROHA2デバイス制御サーバーにデフォルトで用意されている抽象デバイスを Table 53 に示す。
抽象デバイス名 |
説明 |
---|---|
DECProface_SignalLight |
Proface制御表示灯 |
KSLChop_FastDouble |
高速ダブルディスクチョッパー |
KSLChop_FastDouble_DNA |
高速ダブルディスクチョッパー(DNA専用) |
KSLChop_FastSingle |
高速シングルディスクチョッパー |
KSLChop_FastSingle_DNA |
高速シングルディスクチョッパー(DNA専用) |
KSLChop_FastTandem |
高速タンデムディスクチョッパー |
KSLChop_LowDouble |
低速ダブルディスクチョッパー |
KSLChop_LowDouble_DNA |
低速ダブルディスクチョッパー(DNA専用) |
KSLChop_LowSingle |
低速シングルディスクチョッパー |
KSLChop_LowSingle_DNA |
低速シングルディスクチョッパー(DNA専用) |
KSLChop_T0 |
T0チョッパー |
LSTempContEachHeater_350 |
温度コントローラーLS350 |
LSTempContEachHeater_350_DNA |
温度コントローラーLS350(DNA専用) |
LSTempCont_340 |
温度コントローラーLS340 |
LSTempCont_350 |
温度コントローラーLS350 |
SRSPg_DG645 |
パルスジェネレーター |
Sample |
サンプルデバイス(開発用) |
TJCPmc04_1AxisGonio_SIK |
1軸ゴニオメーター(四季専用) |
TJCPmc04_2AxesCradle_ENG |
2軸オイラークレイドル(匠専用) |
TJCPmc04_4AxesSlit |
4象限スリット |
TJCPmc04_4AxesStand_ENG |
4軸スリットスタンド(匠専用) |
TJCPmc04_5AxesGonio_ENG |
5軸ゴニオメーター(匠専用) |
TJCPmc04_5AxesRadico_ENG |
5軸ラジアルコリメーター(匠専用) |
起動¶
手動起動¶
デバイス制御サーバーがインストールされたディレクトリにおいて以下のコマンドを実行する。
$ cd /opt/mlfsoft/iroha2/iroha-device-server
$ ./run.sh
サービスとしての起動¶
デバイス制御サーバーをサービスとして登録している場合、systemctlコマンドによるサーバーの起動・停止の管理が可能である。
# 起動
$ sudo systemctl start irhdevsrv
# 状態確認
$ sudo systemctl status irhdevsrv
# 再起動
$ sudo systemctl restart irhdevsrv
# 停止
$ sudo systemctl stop irhdevsrv
Web UIへのアクセス¶
サーバーを起動しているマシンからアクセスする場合、Webブラウザで以下のURLにアクセスする。
http://localhost:8085/home
サーバー外のマシンからアクセスする場合、localhostをサーバーのIPアドレスに変更する。
Web UI¶
デバイス制御サーバーの画面構成を Fig. 118 に示す。
画面は上部のメインメニューとメニュー依存コンテンツに分類される。
メニュー依存コンテンツには、画面左にサブメニューが表示される。
メインメニュー¶
画面上部のメインメニューは左から Table 54 に示す順番で表示される。
項番 |
項目名 |
説明 |
---|---|---|
1 |
サーバー名 |
サーバー名(デフォルト:IROHA Devicde Server)が表示され、クリックするとデバイスサーバー本体のホーム画面となる。 |
2 |
デバイス名 |
登録されている抽象デバイスのインスタンス名がデバイスの数だけ表示される。インスタンス名をクリックするとメニュー依存コンテンツがそのデバイスの監視画面および管理画面になる。 |
3 |
Admin |
トグル動作で監視モードと管理モードを切り替える。 |
4 |
ヘルプ |
サーバーまたは抽象デバイスのヘルプを表示する。 |
管理画面および監視画面¶
監視画面は青色ベースの配色で情報の閲覧のみを行うことができる。管理画面は緑色ベースの配色で設定を行うことができる。 サーバー、抽象デバイスそれぞれに監視、管理画面があり、メインメニューの各項目で切り替えることができる。 管理画面へのアクセスは サーバー管理画面:Server Setting で「Allowed Hosts(アクセス可能なクライアントIPアドレス)」を設定することで制限される。
サーバー監視画面¶
サーバー監視画面は以下のサブメニューから構成される。
項番 |
項目名 |
説明 |
---|---|---|
1 |
Home |
登録されたデバイスのサマリと疑似スレッドの状態を表示する |
2 |
Operation Log |
サーバーの操作ログを表示する |
サーバー監視画面:Home¶
サーバー監視画面には、登録デバイスの状態リストと擬似スレッド統計が表示される。 擬似スレッドとは、デバイス制御サーバーのサーバースレッドにより管理される「登録デバイスの周期的な処理を行う実行単位」である。 Table 56 に示す擬似スレッド統計により動作状況を知ることができる。
項目名 |
説明 |
---|---|
Device |
デバイス・インスタンス名 |
Start |
擬似スレッドの開始日付時刻 |
status |
擬似スレッドの有効状態 |
interval |
現在の動作周期 |
Count |
現在の周期になってからの動作回数 |
MinProc |
擬似スレッドの最小処理時間(秒) |
AvgProc |
擬似スレッドの平均処理時間(秒) |
MaxProc |
擬似スレッドの最大処理時間(秒) |
TotalProc |
擬似スレッドの処理時間の合計(秒) |
MinInt |
擬似スレッドの処理が行われるまでの最小間隔(秒) |
AvgInt |
擬似スレッドの処理が行われるまでの平均間隔(秒) |
MaxInt |
擬似スレッドの処理が行われるまでの最大間隔(秒) |
TotalInt |
擬似スレッドの処理が行われるまでの間隔合計(秒) |
Lock |
擬似スレッドとHTTPメッセージ処理の競合回数 |
Note
擬似スレッドの統計情報はIntervalの変更時にリセットされる。
サーバー監視画面:Operation Log¶
サーバー操作ログの最新500件を表示する。 Filter で表示するログの種類を絞ることができる。
サーバー管理画面¶
サーバー管理画面は以下のサブメニューから構成される。
項番 |
項目名 |
説明 |
---|---|---|
1 |
Edit Device |
|
2 |
Thread Control |
サーバースレッドの開始/停止、リセットおよびデバイス擬似スレッドの有効/無効を制御する |
3 |
Server Setting |
サーバー名、アクセス制御クライアント等の設定を行う画面 |
4 |
Development |
開発サポート情報(サーバーモデルのデータベース)を表示する |
5 |
Server Control |
サーバーの制御を行う(バージョン2.7.0以降) |
6 |
Operation Log |
サーバーの操作ログを表示する(バージョン2.9.0以降) |
サーバー管理画面:Edit Device¶
デバイス制御サーバー上のデバイス・インスタンスを登録、削除、編集する画面である。
- 新規のデバイスを追加するには、追加するデバイスのClassをドロップダウンリストで選択し、 newName のテキストボックスに追加する新しいデバイス名称を入力して Add ボタンを押下する。
すでに登録されているデバイス名は追加できない。
このデバイス名はXML制御インタフェースで利用されるため、URLとして使用できない文字列は指定できない。
既存のデバイスを削除するには、削除するデバイスの右にある Delete ボタンを押下する。
名称を変更する場合は新しいデバイス名を入力して Update ボタンを押下する。
サーバー管理画面:Thread Control¶
Thread Control画面ではサーバースレッドおよび擬似スレッドの制御を行うことができる。 擬似スレッドとは、デバイス制御サーバーのサーバースレッドが、 ラウンドロビンに実行する登録デバイスの周期的な処理を行う実行単位である。
- デバイス制御部の Begin / End ボタンは該当デバイスに対してXML制御メッセージのPost:Begin/Post:Endを送信する。
測定中の場合には End ボタンが、未測定の場合には Begin ボタンが表示される。
- Reset ボタンはDisconnect状態のデバイスをConnect状態とするために使用する(POST:Resetメッセージの送信)。
Reset の発行はどの状態にあってもConnecting 状態へ遷移させる。
Stop Params ボタンはParameterSetting/InProgress状態のデバイスをReadyに復帰させるために使用する(POST:StopParams メッセージの送信)。
スレッド制御部では、サーバースレッドの開始停止( Run Thread / Stop Thread ボタン)や擬似スレッドの有効、無効( Enable / Disable 、 Enable All 、 Disable All ボタン)が制御できる。
- Run Thread 、 Stop Thread はサーバースレッドを開始、停止する。
サーバースレッドが停止中は Run Thread ボタン、実行中は Stop Thread ボタンが表示される。
サーバースレッドが停止すると全デバイスが処理を停止する。
Enable All Thread 、 Disable All Thread はすべての擬似スレッドを有効、または無効にする。
各デバイスの右にある Enable 、 Disable ボタンは個々のデバイス擬似スレッドを有効、無効状態にする。
- デバイススレッドが制御されると、デバイスはリセットされた場合と同様にConnectingに遷移する。
スレッド統計情報については Table 56 を参照のこと。
サーバー管理画面:Server Setting¶
Server Setting 画面では、以下の編集ができる。
デバイス制御サーバー名(Server Name)
デバイス接続に失敗したときのリトライ数(Maximum Retry Count for Device Conneting)
Web UI の更新間隔(Web UI Update Interval (sec))
ログ抑制回数(Measurement Logging Suppression)
メッセージ通信の有効/無効(Enable Sending to Message Server)
Redis サーバーの接続先(Redis Server Address:Port)
アクセス許可ホスト(Allowed Hosts)
Save ボタンを押下すると内部の設定を変更し、サーバー設定ファイル( irhdevsrv.xml
)の内容を書き換える。
Note
Python redisがインストールされていない場合、メッセージ通信の有効/無効およびRedisサーバーの接続先の入力は非活性となり変更できない。
サーバー管理画面:Development¶
Development 画面にはサーバーの開発用にサーバーモデル( irhdevsm.py
)のデータベース内容を表示している。
サーバー管理画面:Server Control(バージョン2.7.0以降)¶
Server Control 画面では、Web UIからのデバイス制御サーバー停止を実行することができる。 この画面の Stop Server ボタンを押下することでサーバーが停止する。
サーバー管理画面:Operation Log(バージョン2.9.0以降)¶
サーバー監視画面のOperation Logと同様の画面を表示する。
デバイス監視画面¶
デバイス監視画面は以下のサブメニューから構成される。
項番 |
項目名 |
説明 |
---|---|---|
1 |
<デバイス名> |
デフォルトではInformation と同じ内容を表示する。 |
2 |
Information |
|
3 |
Status |
|
4 |
Params |
|
5 |
Measurement Log |
測定ログを表示する。 |
6 |
Measurement Graph |
測定ログをグラフ化して表示する。 |
7 |
Surveillance Log |
監視ログを表示する。 |
8 |
Operation Log |
操作ログを表示する。 |
デバイス監視画面:<デバイス名>¶
デバイス監視画面メニューのデバイス名表示部分は、デバイス毎にカスタマイズされるべきHome画面で、 デフォルトではInformationと同一の内容を表示している。
デバイス監視画面:Information¶
デバイス監視画面:Informationには該当デバイスで定義されている devinfo.tpl
から生成された構成情報が表示される。
Name が要素名、 Update は該当要素の更新時刻、 Value は値を表示している。
デバイス監視画面:Status¶
デバイス監視画面:Statusには該当デバイスで定義されている devstatus.tpl
から生成されたデバイスの状態情報が表示される。
この状態情報はデバイスが定周期に収集したデバイスの情報を元に更新される。
Name が要素名、 Update は該当要素の更新時刻、 Value は値を表示している。
デバイス監視画面:Params¶
デバイス監視画面:Paramsには該当デバイスで定義されている params.tpl
から生成されたデバイスの設定情報が表示される。
この設定情報はユーザがブラウザの更新ボタンで更新しない限り更新されない。
Name が要素名、 Update は該当要素の値(text)の更新時刻、 Value は値を示す。
デバイス監視画面:Measurement Log¶
デバイス監視画面:Measurement Logには該当デバイスの測定ログの最新500件が時刻逆順でリスト表示される。 この情報はユーザがブラウザの更新ボタンで更新しない限り更新されない。 測定ログに記録される項目は、 デバイス管理画面:Edit Logging で編集する事ができる。
デバイス監視画面:Measurement Graph¶
この画面では該当デバイスの測定ログが時系列グラフとして可視化される。
測定ログに記録される項目は、 デバイス管理画面:Edit Logging で編集する事ができる。
Step、MaxPlots、Filterの設定が保存されるようになり、更新ボタンを押下すると devsetting/saveデバイス名.measgraph.xml
という名前のファイルに保存される。
デバイス監視画面:Surveillance Log¶
この画面には該当デバイスの監視ログの最新500件が時刻逆順でリスト表示される。
この情報はユーザがブラウザの更新ボタンで更新しない限り更新されない。
監視ログに記録される項目は、デバイスの devstatus.tpl
でlogging=”on”の属性を持つものである。
デバイス監視画面:Operation Log¶
この画面にはデバイス操作ログの最新500件が時刻逆順でリスト表示される。
デバイス管理画面¶
デバイス管理画面は以下のサブメニューから構成される。
項番 |
項目名 |
説明 |
---|---|---|
1 |
Edit Params |
|
2 |
Edit DevInfo |
|
3 |
Edit Logging |
ログファイルパス、監視ログ取得項目などログに関わる設定を行う。 |
4 |
Development |
開発サポート情報で、抽象デバイスモデルのデータ等を表示する。 |
5 |
Operation Log |
操作ログを表示する(バージョン2.9.0以降)。 |
デバイス管理画面:Edit Params¶
デバイスの params.tpl
で定義した値を設定することができる。
変更した値は Save ボタンで保存する。
値を変更できるのは、状態がReadyの場合のみである。
デバイス状態がParameter Setting、InProgress中には更新前の値が表示される。
ここでの編集結果は devsetting/saveデバイス名.reqparams.xml
ファイルに保存される。
入力無効状態(デバイスがReady状態でない場合)はReadyになるまで表示が自動更新される。
また、本画面にデバイスの状態情報が表示される。
Note
Paramsは通常デバイスから読みだして初期化されるが、フィードバックのようにデバイスの実体がない抽象デバイスや、 デバイスから読み出せないパラメータがあるために保存されている。 サーバー起動時に初期化データとして読み込まれる。
デバイス管理画面:Edit DevInfo¶
デバイスの devinfo.tpl
で定義された情報を編集することができる。
編集結果は devinfolist.xml
内の該当デバイスタグ内に保存される。
本情報を編集した場合はサーバー本体の再起動が必要となる場合がある。
デバイス管理画面:Edit Logging¶
この画面ではログパスの編集と測定ログの取得項目を編集することができる。
操作、監視、測定の各ログのパスを変更して Save ボタンを押下することでログのパスを変更することができる。 ログパスが変更されると新たなログファイルが生成され、変更時点からのログが記録される。
Note
Measurement Logのパスは装置管理サーバーでの設定が反映され、測定ごとに自動的に更新される。
測定ログの編集は devstatus.tpl
で定義された監視ログの対象項目から測定ログに記録する項目を選択する機能である。
この編集結果は devsetting
ディレクトリの saveデバイス名.devstatus.xml
ファイルに保存される。
項目名 |
説明 |
---|---|
Status Element |
|
Name |
測定ログの表示名 |
Meas |
チェックすると測定ログ項目となる |
type |
int、float、string のいずれかを選択する |
unit |
値の単位を指定する。単位は表示 |
range |
文字列の場合は、取りうる文字列を:で区切る。
|
Note
デバイスインスタンス作成時に測定ログに記録する状態(Measがチェックされている状態)をデフォルトとしたい場合、
抽象デバイスの devstatus.tpl
の対象要素にlogging=”on”およびmeasLog=”on”の属性を追加する必要がある。
デバイス管理画面:Development¶
この画面にはサーバーの開発用にサーバーモデル( irhdevsm.py
)のデータベース内容を表示している。
この内容についてはサーバーモデルのソースコードを参照のこと。
デバイス管理画面:Operation Log(バージョン2.9.0以降)¶
デバイス監視画面のOperation Logと同様の画面を表示する。
メッセージ通信¶
RedisのPublisher/Subscriber方式を利用してリアルタイムデータ送信をおこなう機能である。 デバイス制御サーバーは送信側(Publisher)であり、受信側(Subscriber)のプログラムを用意することで、 ファイルを介さずにデータを受信することができる。
メッセージ通信の有効化とRedisサーバー接続先の設定¶
サーバー管理画面:Server Setting で、メッセージ通信の有効化とRedisサーバー接続先を設定することができる。 なお、python redisがインストールされていない環境では、メッセージ通信の有効化とRedisサーバー接続先の設定ができない。 python redisは以下のコマンドでインストールする。
$ pip install redis
チャンネル名の変更¶
メッセージ通信が有効になっている場合、各デバイス・インスタンスのデバイス構成情報には、「redisChannelName」要素が追加されている。 デフォルトの値は、「irhdevsrv_<デバイス・インスタンス名>」である。 この要素に設定されている値をRedis Publisher/Subscriber のチャンネル名として利用する。 チャンネル名を変更する場合、デバイス管理画面:Edit DevInfo で「redisChannelName」要素の値を変更する。 なお、測定中に変更した場合は、次の測定からチャンネル名が反映される。
データの送信¶
測定を開始すると、Redis サーバーにMeasurement Logと同じフォーマットのデータを送信する。 Subscriber 側のプログラムでは、既存のXML制御インタフェース「GET:Status」を利用することで、 デバイス測定ログのログ項目を確認することができる( GET:Status )。 送信間隔も、デバイス測定ログの記録間隔と同様である。
XML制御インターフェース¶
概要¶
デバイス制御サーバーはXML制御インタフェースをもち、リモート機器から監視、制御することができる。 XMLメソッドリストを Table 61 に示す (:の前のGET、POSTはHTTPメソッド名、:の後ろはデバイス制御サーバーメソッド名を示す)。
項番 |
メソッド名 |
機能 |
---|---|---|
1 |
GET:/ |
デバイス制御サーバーのデバイスリストを取得する |
2 |
GET:Status |
デバイス状態を取得する |
3 |
GET:Params |
デバイス設定を取得する |
4 |
POST:Params |
デバイス設定を行う |
5 |
POST:StopParams |
デバイス設定を中止する |
6 |
POST:Reset |
デバイスをリセットする |
7 |
GET:Config |
デバイスの構成情報を取得する |
8 |
POST:Begin |
デバイスを測定開始にする |
9 |
POST:End |
デバイスを測定停止にする |
要求メッセージ¶
デバイス制御サーバーへの要求はHTTPのGETまたはPOSTのメソッドを以下のURLに対して発行することで行うことができる。 ただし、GET:/はデバイス制御サーバーへの要求なので、deviceNameは必要ない。
http:/serverHost:serverPort/deviceName/deviceMethod
項番 |
パラメータ |
機能 |
---|---|---|
1 |
serverHost |
デバイス制御サーバーのホスト名またはIPアドレス |
2 |
serverPost |
デバイス制御サーバーのポート番号(デフォルトは8085) |
3 |
deviceName |
登録されたデバイス・インスタンス名 |
4 |
deviceMethod |
デバイス制御サーバーメソッド名。Status、Params、StopParamsなど |
要求メッセージでBODYが必要なメッセージはPOST:Params、POST:Begin の2つである。 以下にXML制御インタフェースの要求BODY書式を示す。
<?xml version="1.0" encoding="UTF-8" ?>
<request>
{{messageBody}}
</request>
応答メッセージ¶
要求を発行するとデバイス制御サーバーから応答メッセージが返される。 応答メッセージにはかならずBODY(文字列)が付与されている。 BODYは以下に示す書式の形式となっている。
<?xml version="1.0" encoding="UTF-8" ?>
<response>
<methodName>{{ method }}</methodName>
<returnValue>
<result>
<status>{{ status }}</status>
<code> {{ code }}</code>
<methodName />
<message />
</result>
{{ messageBody }}
</returnValue>
</response>
{{ }} で囲まれた部分の内容はメソッドに依存する。
フィールド名 |
内容 |
---|---|
method |
メソッド名のGET:/POST:を除いた部分が入る。GET:Statusの場合はStatusとなる。 |
status |
成功した場合はOK、失敗した場合にはNGが入る。 |
code |
デバイス制御サーバー状態とXML制御メソッドおよび処理結果により定義された値( Fig. 150 ) |
messageBody |
XML 制御メソッド毎に異なる値が入る。不要な場合は省略される。 |
各メソッドの機能¶
GET:/¶
デバイス名のリストを取得する。要求側にBODYは必要ない。 応答のmessageBodyには<names>要素内に定義された抽象デバイス・インスタンス名のリストが<name>要素として入る。 以下に応答の例を示す。
<names>
<name>testLs340</name>
<name>testSample</name>
</names>
GET:Status¶
デバイス状態を取得する。要求メッセージにBODYは必要ない。
応答messageBodyには抽象デバイス毎に devStatus.tpl
テンプレートとして定義されるXML要素と取得年月日を示す<date>要素が入る。
定周期動作により制御対象デバイスから読み出された値が反映され、書き換えはできない。
本メソッドが呼び出された場合、デバイス操作ログに呼び出された旨とその結果を出力するが、
バージョン1.8 以降では、正常に処理した場合に限り出力しない。
GET:Params¶
デバイス設定を取得する。要求メッセージにBODYは必要ない。
messageBodyには抽象デバイス毎に params.tpl
テンプレートとして定義されるXML要素が入る。
POST:Paramsにより設定された値について、制御対象デバイスへの設定が終了してReady状態になるまで元の値が表示される。
本メソッドが呼び出された場合、デバイス操作ログに呼び出された旨とその結果を出力するが、
バージョン1.8 以降では、正常に処理した場合に限り出力しない。
POST:Params¶
デバイス設定を行う。要求側のBODYには設定するparams要素を指定する。
paramsの内容は抽象デバイスの params.tpl
で定義されている。
messageBodyにも params.tpl
テンプレートとして定義されるXML要素が入る。
params.tpl
には値検査の属性が定義されている。
デバイス制御サーバーではPOST:Params等の設定時にこれらの属性を元に値の正常性が検査される。
送信メッセージ内にはこの属性は必要はない。またこれらの属性を設定することはできない。
POST:StopParams¶
デバイス設定を中止する。要求メッセージにBODYは必要ない。 POST:ParamsによりParameterSetting/InProgress状態にあるデバイスをReadyに戻す。 応答メッセージにmessageBodyはない。
POST:Reset¶
デバイスをリセットしてConnecting状態とする。要求メッセージにBODYは必要ない。 このメッセージの受信により、抽象デバイスは制御対象デバイスと再接続し、内部情報を初期化する。 Disconnect状態のデバイスを再接続させるためにはPOST:Resetする必要がある。
GET:Config¶
デバイスの構成情報を取得する。要求メッセージにBODYは必要ない。
応答のmessageBodyには抽象デバイス毎に devinfo.tpl
として定義される構成情報が入る。
この情報はXML制御インタフェースで書き換えることはできない。
本メソッドが呼び出された場合、デバイス操作ログに呼び出された旨とその結果を出力するが、
バージョン1.8 以降では、正常に処理した場合に限り出力しない。
POST:Begin¶
デバイスを測定開始にする。要求メッセージにBODYは必要ないが、
logMeasPath要素を指定することで、測定ログのパスを変更することができる。
測定状態では、 devinfo.tpl
で定義されたデバイス構成情報intervalMeasurementまたは
intervalInProgressの間隔でデバイスデータの収集を行い、測定ログを記録する。
messageBodyがない場合は、デフォルトまたはそれ以前に設定されていた測定ログファイルに続けてログを取得する。
bodyにlogMeasPath要素が指定されている場合は新たにログファイルを作成して測定ログの記録を開始する。
パスはファイル名を含む形式となる。
以下に要求メッセージmessageBodyの例を示す。
<params>
<logMeasPath>/DATA/Logs/RunXXXLog</logMeasPath>
</params>
Note
デバイス構成情報にintervalMeasurementが定義されていれば、InProgress状態でない限りintervalMeasurementの間隔となる。 InProgress状態である場合またはintervalMeasurementが定義されていない場合は、intervalInProgressの間隔となる。
POST:End¶
デバイスを測定停止して未測定状態とする。要求メッセージにBODYは必要ない。
未測定状態では、 devinfo.tpl
で定義されたintervalReady(秒)の間隔でデバイスデータの収集を行う。
測定ログの記録は停止される。
メッセージコード¶
応答メッセージ内のcode内の値定義を Fig. 150 に示す(色付きセルは0以外のコード定義部分)。 通常動作でOKの場合はコード0を返す。コード0の場合にはメッセージはない。 その他の場合はデバイス状態、受信XMLメッセージ種別に応じて以下の3桁のコードを返す。 なお状態値=0ではじまる3桁のコード数字はサーバーで検出したエラーとなる。
<状態値0-6><メッセージ種別><状態メッセージに対応したコード>
Note
現在のフレームワークでは<状態メッセージに対応したコード>は0で成功、1で失敗のみが使用されている
code |
メッセージ |
---|---|
001 |
device <デバイス名> not found |
121 |
State Error Connecting / GET : Params |
131 |
State Error Connecting / POST: Params |
141 |
State Error Connecting / POST : StopParams |
171 |
State Error Connecting / POST: Begin |
181 |
State Error Connecting / POST : End |
231 |
Parameter Error ( 詳細情報 ) |
271 |
Parameter Error ( 詳細情報) |
280 |
Already End |
331 |
Parameter Error ( 詳細情報 ) |
370 |
Already Begun |
371 |
Parameter Error ( Log Path Error ) |
420/520 |
Note: Parameter Currently Updating |
431/531 |
State Error (ParameterSetting | InProgress) / POST: Params |
471/571 |
State Error (ParameterSetting | InProgress) / POST: Begin |
481/581 |
State Error (ParameterSetting | InProgress) / POST: End |
621 |
State Error Disconnected / GET: Params |
631 |
State Error Disconnected / POST : Params |
641 |
State Error Disconnected / POST : StopParams |
671 |
State Error Disconnected / POST : Begin |
681 |
State Error Disconnected / POST : End |
ログファイル¶
ログファイルには、サーバーログ(デバイス制御サーバー本体のログ)とデバイスログがある。 サーバーログはサーバーの実行プロセスごとに操作ログが1つ作成される。 デバイスログは登録されている抽象デバイスのインスタンス毎に操作、監視、測定ログが1つずつ作成される (ファイルの数はログを取得する時間に依存して増える)。 操作、監視、測定ログは日付を跨ぐと、ファイル名に .YYYY-mm-dd が追加されてローテイトする。
サーバーアクセスログ¶
サーバーアクセスログは、サービスとして起動した場合には以下のパスに作成される(8085 は起動ポート番号)。
パス設定はサービススクリプトに定義されている。
取得しない場合は /dev/null
などに指定しなおす必要がある。
/tmp/irhdevsrv.8085.log
バージョン2.6までは起動するたびにこのファイルは上書きされるが、 バージョン2.7以降は起動時の日時をファイル名に付与して起動ごとにファイルを残すようにしている。 その場合のファイル名は以下のようなフォーマットとなる。
/tmp/irhdevsrv.ポート番号.YYYYmmdd-HHMMSS.log
Note
コンソールから起動した場合は起動コンソールに出力される。
サーバー操作ログ¶
サーバー操作ログは サーバー設定 で設定されたファイルパスに作成される。 サーバー本体に対する操作やエラー情報などが記録される。 通常デバイス制御サーバーに対する操作の多くは、各デバイスのデバイス操作ログに記録される。 デフォルトでは以下のパスに記録される。
/tmp/logoper<デバイス制御サーバー名>
デバイス操作ログ¶
デバイスに対する操作や状態遷移などが記録される。 デフォルトでは以下のパスに作成される。
/tmp/logoper<デバイス・インスタンス名>
デバイス監視ログ¶
devstatus.tpl
でlogging指定された項目が記録される。
未測定中は devinfo.tpl
で定義されているintervalReadyで、測定中はintervalMeasurementで収集される。
ただし、測定中でも、InProgress状態になった場合や、intervalMeasurementが定義されていない場合は、
intervalInProgressで収集される。
デフォルトでは以下のパス名で作成される。
/tmp/logsurv<デバイス・インスタンス名>
デバイス測定ログ¶
測定ログは、測定中のみ(デバイスのBegin後からEndまで)記録される。
記録間隔は devinfo.tpl
で定義されているIntervalMeasurementで収集される。
ただし、InProgress状態になった場合や、intervalMeasurementが定義されていない場合は、
intervalInProgressで収集される。
デフォルトでは以下のパスに生成される。
/tmp/logmeas<デバイス・インスタンス名>
ログ機能のオプション¶
ログ機能は上記のデフォルト動作のほかに、 devinfo.tpl
にXML 要素を追加することで次のような動作に変更することが出来る。
測定ロググラフを常に動作させてグラフを閲覧する場合(監視ログの無効化、起動オプションのbeginと併用)、
ログファイルをEXCELなどで処理する場合(ログヘッダの付与)に有効である。
このオプション設定を devinfo.xml
に追加した場合は、デバイス・インスタンスを一度削除し、
デバイス制御サーバーを再起動する必要がある。
デバイス・インスタンスは devinfolist.xml
に元の仕様のまま保存されるため、XML要素の追加は有効にならない。
devinfolist.xml
の値を変更するとログファイル名称変更及びデバイス制御サーバーの再起動で設定済みインスタンスの動作を変更できる。
ログファイルは以前のファイルが残っていた場合は追記されるため、ヘッダは次のログローテーション(日付の変わるタイミング)まで付与されない。
監視ログの無効化
監視ログヘッダの付与
測定ログヘッダの付与
要素名 |
説明 |
追加書式 |
---|---|---|
intervalMeasurement |
測定中のログ記録間隔をこの要素で指定した値の秒数に設定する。この要素がない場合、ログ記録間隔はintervalInProgressの値となる。 |
<intervalMeasurement> 5 </intervalMeasurement> |
logSurvDisable |
監視ログを取得しない。監視ログはデバイスが有効な状態で常に取得される。このログが不要の場合にyesに設定するとこの機能が停止する。この要素がない場合、監視ログはEnableとなる。 |
<logSurvDisable> yes </logSurvDisable> |
logMeasHeader |
測定ログの先頭にログヘッダを追加する。値をon 以外にするとヘッダは記録されない。 |
<logMeasHeader> on </logMeasHeader> |
logSurvHeader |
監視ログの先頭行にログヘッダを追加する。値をon 以外にするとヘッダは記録されない。 |
<logSurvHeader> on </logSurvHeader> |
ログフィルターの設定(バージョン2.7.0以降)¶
サーバー監視画面:Operation Logとデバイス操作ログ画面では Filter でログの種類を絞って表示することができるが、
加えて特定の文字列を含むメッセージを非表示にすることができる。
iroha-settings/device/log_msg_filter.json
にフィルターする文字列を定義する。
Operation Logの設定¶
oper_log キーのリストに文字列を追加する。文字列は正規表現に対応している。 複数の文字列を登録する場合にはカンマ(,)区切りで追加していく。
{
"oper_log": [
"message a",
"message b"
],
...
}
デバイス操作ログ画面¶
dev_oper_log キーの辞書のキーにデバイス名を追加し、デバイス名のキーのリストに文字列を追加する。 文字列は正規表現に対応している。複数の文字列を登録する場合にはカンマ(,)区切りで追加していく。
{
...
"dev_oper_log": {
"Sample": [
"message a",
"message b"
],
"Chopper": [
"message c"
],
"TempCont": [
"message d"
]
}
}