PD Handler Modbus 2
Modbus モデリングファイル
従来の PD Handler Modbus では、 Modbus のファンクションコードと共にデータのタイプとレジスタのアドレスと個数を直接指定することで、データを整数配列として読み書きしていたのに対し、PD Handler Modbus 2 では、 モデリングファイルを用意することで、そのインデックスとなるメーカー/プロダクト/モデル/SKUを指定することにより、 モデルリングファイルの定義に従いデータの読み書きを行います。
PD Handler Modbus 2 を使用するためには、モデリングファイルを用意しなくてはなりませんが、複数のレジスタセットや混在するデータタイプに対するアクセスを一つのインデックスを読み出すことで処理でき、また、JSONキーを自由に割り当てることができ、データの書式も幾つか選択できるようになりました。
インデックスの階層
モデリングファイルのインデックスは、以下の JSON 文字列に示すようにメーカー名、プロダクト名、モデル名、SKU 名の 4 階層で構成され、各階層が JSON オブジェクトの配列となっており、各配列要素を maker オブジェクト、product オブジェクト、model オブジェクト、sku オブジェクトと呼びます。 sku オブジェクトには、レジスタと出力書式を定義する幾つかのオブジェクト配列が含まれています。
なお、PD Handler Modbus 2 には、複数のモデリングファイルをマージするツールが用意されているため、モデリングファイルは SKU やモデル毎に分けて作成することも可能です。
モデリングファイルの例
モデリングファイルの例を示します。
この例では、1 つのファイルに 2 つの SKU が記載されています。
SKU '0001' は、電流と電圧を配列 (ex. "current": [23.1, 45.2], "voltage": [100.2, 100.3]) で出力するのに対し、SKU '0002' は個別 (ex. "current0": 23.1, "current1": 45.2, "voltage0": 100.2 "voltage1": 100.3) に出力します。
PD Handler Modbus 2 が読み込むモデリングファイルのルートオブジェクトは、maker オブジェクトの配列でなければなりませんが、モデリングファイルをマージするツールは以上の例のようにルートオブジェクトに maker オブジェクトを配置したファイルも処理することができます。
Modbusモデリングファイルの書式
構文
PD Handler Modbus 2 のモデリングファイルは次の書式で構成されています。
ルートオブジェクト
キー | データ型 | 説明 |
---|---|---|
JSON配列 | makerオブジェクトの配列. (最大 32 オブジェクト) |
maker オブジェクト
キー | データ型 | 説明 |
---|---|---|
maker | 文字列 | メーカー名. (64byte) |
include | 論理値 | メーカー名を送信するデータに含むか否か. デフォルト値は true. |
products | JSON配列 | product オブジェクトの配列. (最大 32 オブジェクト) |
product オブジェクト
キー | データ型 | 説明 |
---|---|---|
product | 文字列 | プロダクト名. (64byte) |
include | 論理値 | プロダクト名を送信するデータに含むか否か. デフォルト値は true. |
models | JSON配列 | model オブジェクトの配列. (最大 32 オブジェクト) |
model オブジェクト
キー | データ型 | 説明 |
---|---|---|
model | 文字列 | モデル名. (64byte) |
include | 論理値 | モデル名を送信するデータに含むか否か. デフォルト値は true. |
wordOrder | 文字列 | ワードの順列. 'lsb' 又は 'msb'. デフォルト値は 'lsb'. |
byteOrder | 文字列 | バイトの順列. 'lsb' 又は 'msb'. デフォルト値は 'lsb'. |
bitOrder | 文字列 | ビットの順列. 'lsb' 又は 'msb'. デフォルト値は 'lsb'. |
wait | 整数値 | シリアル接続 PLC 機器に対する読み書きコマンド後の待ち時間 (μsec). デフォルト値は 0. |
precision | 整数値 | 送信するデータとして JSON 文字列にダンプされる際のリアル型データの精度(libjanssonに与えるパラメータ) 1〜17. デフォルト値は 17. |
skus | JSON配列 | sku オブジェクトの配列. (最大 32 オブジェクト) |
sku オブジェクト
キー | データ型 | 説明 |
---|---|---|
sku | 文字列 | sku名. (64byte) |
include | 論理値 | sku名を送信するデータに含むか否か. デフォルト値は true. |
outputBits | JSON配列 | 出力ビットのレジスタ情報. bit オブジェクトの配列 (最大 32 オブジェクト) |
inputBits | JSON配列 | 入力ビットのレジスタ情報. bit オブジェクトの配列 (最大 32 オブジェクト) |
outputRegisters | JSON配列 | 出力レジスタのレジスタ情報. register オブジェクトの配列 (最大 32 オブジェクト) |
inputRegisters | JSON配列 | 入力レジスタのレジスタ情報. register オブジェクトの配列 (最大 32 オブジェクト) |
rawRequest | JSON配列 | RAWリクエストのための情報. rawRequestオブジェクトの配列 (最大 32 オブジェクト) |
infos | JSON obj | sku 固有のユーザー定義オブジェクト. |
infos_poll | JSON obj | ポーリング処理による出力に付加される sku 固有のユーザー定義オブジェクト. |
infos_od | JSON obj | オンデマンド処理にいる出力に付加される sku 固有のユーザー定義オブジェクト. |
bit オブジェクト
キー | データ型 | 説明 |
---|---|---|
address | 整数値又は文字列 | レジスタの開始アドレス. 整数値又は '0x' で始まる 16 進数表記の文字列. |
enable | 論理値 | このオブジェクトに基づくポーリングによるデータの読み込みを行うか否か. デフォルト値は true. |
single | 論理値 | 単一レジスタの書き込みに Modbus ファンクション 0x05 を用いる. false の場合は 0x0F を用いる. デフォルト値は true. |
writeOnly | 論理値 | 書き込み専用のレジスタ. デフォルト値は false. |
bitsArray | JSON配列 | bitsArray オブジェクトの配列 (最大 512 オブジェクト) |
register オブジェクト
キー | データ型 | 説明 |
---|---|---|
address | 整数値又は文字列 | レジスタの開始アドレス. 整数値又は '0x' で始まる 16 進数表記の文字列. |
enable | 論理値 | このオブジェクトに基づくポーリングによるデータの読み込みを行うか否か. デフォルト値は true. |
single | 論理値 | 単一レジスタの書き込みに Modbus ファンクション 0x06 を用いる. false の場合は 0x10 を用いる. デフォルト値は true. |
writeOnly | 論理値 | 書き込み専用のレジスタ. デフォルト値は false. |
registersArray | JSON配列 | registersArray オブジェクトの配列 (最大 512 オブジェクト) |
rawRequest オブジェクト
キー | データ型 | 説明 |
---|---|---|
key | 整数値又は文字列 | この RAW リクエストを呼び出すためのキー. (32byte) |
unitId | 整数値又は文字列 | RAW リクエストに設定される Modbus ID. 整数値又は '0x' で始まる 16 進数表記の文字列. デフォルト値は Modbus client に設定さる Modbus ID. |
function | 整数値又は文字列 | RAW リクエストに設定される Modbus ファンクション番号. 整数値又は '0x' で始まる 16進数表記の文字列. |
address | 整数値又は文字列 | RAW リクエストに設定されるレジスタのアドレス. 整数値又は '0x' で始まる 16 進数表記の文字列. |
value | 整数値又は文字列 | RAW リクエストに設定されるレジスタの値. 整数値又は '0x' で始まる 16 進数表記の文字列. |
form | 文字列 | 出力メッセージの書式. 'hex'(16 進表記の文字列)、'HEX'(16 進表記の大文字列). デフォルト値は 'HEX'. |
bitsArray オブジェクト
キー | データ型 | 説明 |
---|---|---|
include | 論理値 | このビット値を送信するデータに含むか否か. デフォルト値は true. |
form | 文字列 | このビット値の書式. 'bit'(1 or 0 の整数値) または 'bool'(true or false)、'BOOL'(TRUE or FALSE)、'hex'(16 進表記の小文字列)、'HEX'(16 進表記の大文字列). デフォルト値は 'bit'. |
key | 文字列 | このビット値に与える JSON キー. (32byte) |
array | 整数値 | 配列表記としたい場合は、array キーにその素数の数を指定する. |
registersArray オブジェクト
キー | データ型 | 説明 |
---|---|---|
include | 論理値 | こののレジスタ値を送信するデータに含むか否か. デフォルト値は true. |
type | 文字列 | 数値の型、'uint16_t','int16_t','uint32_t','int32_t','float_t','int64 t' のいずれか. デフォルト値は 'uint16 t'. |
form | 文字列 | このレジスタ値の書式. 'dec'(数値) または 'hex'(16進表記の文字列)、'HEX'(16進表記の大文字列). デフォルト値は 'dec'. |
base_ratio | 整数値 | 値の係数に用いる冪乗値の底を指定する. デフォルト値は10. |
ratio | 整数値 | 値の係数に用いる冪乗値の冪指数を指定する. デフォルト値は 0. |
key | 文字列 | このレジスタ値に与える JSON キー. (32byte) |
array | 整数値 | 配列表記としたい場合は、array キーにその素数の数を指定する. |
モデリングファイル作成支援ツール
PD Handler Modbus 2 のパッケージには、モデリングファイルの構文を確認するツールと複数のモデリングファイルをマージする 2 つの作成支援ツールが用意されています。
モデリングファイル作成支援ツール
パス名 | 説明 |
---|---|
/usr/sbin/pd_handler_modbus_2_verify | モデリングファイル 構文確認ツール |
/usr/sbin/pd_handler_modbus_2_merge | モデリングファイル マージツール |
構文確認ツール
pd_handler_modbus_2_verify は、作成したモデリングファイルの構文を確認するツールです。
pd_handler_modbus_2_verify コマンドのコマンドオプションを示します。
pd_handler_modbus_2_verify コマンドの実行例を示します。
マージツール
PLC 機器によってはモデリングファイルが数百行に及ぶ場合もあり、 全ての PLC 機器のモデリングを一つのファイルで管理することは現実的でないことから、モデリングファイルについては、プロダクト・モデルもしくは SKU 毎にファイルを分割し、必要に応じて下図のよにディレクトリ階層を細分化して管理することを推奨します。
マージツール pdhandler_modbus_2_merge は、指定されてたディレクトリ下に保存されている .conf のファイルディスクリプタを持つモデリングファイルを再回帰検索し、マージします。
ただし、ASCII 英数字と '-', '', '.' 以外の記号文字を含むパス名には対応できません。
pd_handler_modbus_2_merge コマンドのコマンドオプションを示します。
pd_handler_modbus_2_merge コマンドの実行例を示します。
PD Handler Modbus 2 Client
PD Handler Modbus 2 Clien は、モデリングファイル pd_handler_modbus_2_model.conf と設定ファイル pd_handler_modbus_2_client.conf、CSVファイル pd_handler_modbus_client.csv の設定に基づき定期的に PLC 機器に
Modbus プロトコルで接続しデータを読み取ります。
また、PD Repeater を介しクラウドから送られる JSON 文字列に基づき PLC 機器に Modbus プロトコルで接続しデータを読み書きすることもできます。
デフォルトパス
PD Handler Modbus 2 Clien に関連するファイルのデフォルトパスは次の通りです。
PD Handler Modbus 2 Clien に関連するファイルのデフォルトパス
パス名 | 説明 |
---|---|
/usr/sbin/pd_handler_modbus_2_client | 常駐実行オブジェクト(デーモン) |
/usr/sbin/pd_handler_modbus_2_cli | コマンドラインインタフェース |
/lib/systemd/system/pd_handler_modbus_2_client.service | Systemd Service ファイル |
/etc/init.d/pd_handler_modbus_2_client | RC ファイル |
/var/webui/config/pd_handler_modbus_2_client.conf | 設定ファイル |
/var/webui/config/pd_handler_modbus_2_model.conf | Modbus モデリングファイル |
/var/webui/config/pd_handler_modbus_2_model.conf.default | Modbus モデリングファイル(デフォルト) |
/var/webui/upload_dir/ pd_handler_modbus_2_client.csv | CSV ファイル |
/var/run/pd_handler_modbus_2_client.pid | PID ファイル |
Modbus モデリングファイル(デフォルト)は、Modbus モデリングファイルが存在しない場合に読み込まれます。
設定ファイルの書式
構文
PD Handler Modbu Client 2 の設定ファイルは次の書式で構成されています。
ルートオブジェクト
キー | データ型 | 説明 |
---|---|---|
csv_file | 文字列 | CSVファイルののパス名. デフォルト値は、'/var/webui/upload_dir/pd_handler_modbus_2_client.csv'. (MAXPATHLEN) |
model_file | 文字列 | Modbusモデリングファイルのパス名. デフォルト値は、'/var/webui/config/pd_handler_modbus_2_model.conf'. (MAXPATHLEN) |
clients | JSON配列 | clientsオブジェクトの配列 (最大 64 オブジェクト) |
clients オブジェクト
clients オブジェクトは、PD Handler Modbus 2 Client の動作を規定する設定オブジェクトです。
clients オブジェクトの配列数は、最大256 個です。 Modbus のプロトコル(TCP, RTC) に依存するオブジェクトとプロトコルに依存しない共通のオブジェクトがあります。
キー | データ型 | 説明 |
---|---|---|
enable | 論理値 | デフォルト値は false. |
localname | 文字列 | デバイスのローカル名. (32byte) |
bind | 文字列 | 制御メッセージを受け取るソケット名. 文字列の先頭が '@' の場合は abstract namespace と解釈する. 空の場合は、デフォルト値 '@/pd_handler/<localname>.sock' が設定される. (MAXPATHLEN) |
push_to | 文字列 | データの送り先ソケット名. 文字列の先頭が '@' の場合は abstract namespace と解釈する. 空の場合は、デフォルト値 '@/pd_repeater/<localname>.sock' が設定される. (MAXPATHLEN) |
buffer_size | 整数値 | データのバッファサイズ(byte). デフォルト値は 4096. |
receive | 論理値 | クラウドからメッセージを受け取る(下流方向制御)か否か. デフォルト値は false. |
reply | 論理値 | 下流方向制御に対しステータスメッセージを返すか否か. デフォルト値は false. |
protocol | 文字列 | 接続プロトコル 'tcp' 又は 'rtu' を指定. デフォルト値は 'tcp'. |
timeout | 整数値 | データを取得出来ない場合のタイムアウト(msec). デフォルト値は 5000. |
node | 文字列 | 【TCP接続】PLC 機器の IP アドレス. デフォルト値は'127.0.0.1' |
port | 整数値 | 【TCP接続】PLC 機器のポート番号. デフォルト値は 502. |
device | 文字列 | 【RTU接続】シリアル接続のデバイス名. デフォルト値は '/dev/ttyRS485' |
rtu_speed | 整数値 | 【RTU接続】シリアル接続のビットレート. デフォルト値は 115200. |
rtu_bits | 整数値 | 【RTU接続】シリアル接続のビット数. 8 又は 7. デフォルト値は 8. |
rtu_parity | 文字列 | 【RTU接続】シリアル接続のパリティ. 'none', 'even', 'odd' のいずれか. デフォルト値は 'none'. |
rtu_stop | 整数値 | 【RTU接続】シリアル接続のストップビット. 1 又は 2. デフォルト値は 1. |
rtu_rts_delay | 整数値 | 【RTU接続】シリアル接続の RTS ディレイ値(usec). 0 の場合は自動設定される値. |
rtu_reset | 整数値 | 【RTU接続】設定される値を越えて接続エラーが連続して発生した場合にシリアルポートをリセットする. デフォルト値は 10. |
id_form | 文字列 | Modbus Id の表記フォーマト. 'dec'(数値) または 'hex'(16進表記の文字列)、'HEX'(16進表記の大文字列). デフォルト値は 'dec'. |
timestamp_key | 文字列 | タイムスタンプのキーを設定する. デフォルト値は 'timestamp' (32byte) |
infos | JSON obj | 出力に付加される Modbus クライアント ノード固有のユーザー定義オブジェクト. |
dl_module | 文字列 | カスタマイズに用いる Dynamic Link モジュールのパス名. (MAXPATHLEN) |
acquisitions | JSON配列 | acquisitions オブジェクト. (最大 32 オブジェクト) |
acquisitions オブジェクト
キー | データ型 | 説明 |
---|---|---|
enable | 論理値 | デフォルト値は false. |
maker | 文字列 | モデルファイルに定義されるメーカー名 (64byte) |
product | 文字列 | モデルファイルに定義されるプロダクト名 (64byte) |
model | 文字列 | モデルファイルに定義されるモデル名 (64byte) |
sku | 文字列 | モデルファイルに定義される sku 名 (64byte) |
unitId | 整数値又は文字列 | PLC 機器のModbus ユニットID. 1 ~ 247 又は 255 (TCP プロトコルのみ). '0x' で始まる 16 進数表記の文字列入力も可能. |
include | 論理値 | unitId を送信するデータに含むか否か. デフォルト値は true. |
interval | 整数値 | データを取得する間隔(sec). デフォルト値は 60. |
time_sync | 論理値 | 基準時刻制御モード. デフォルト値は false. |
base_time | 文字列 | 基準時刻制御モードの基準時刻を 'HH:MM' 形式で指定する. デフォルト値は '00:00'. |
infos | JSON obj | 出力に付加されるデータ取得対象 PLC 機器固有のユーザー定義オブジェクト. |
CSVファイル
PD Handler Modbus Client 2 は、CSVファイル /var/webui/upload_dir/pd_handler_modbus_2_client.csv が存在すると同ファイルより acquisitions オブジェクトに相当する設定パラメータを読み込み、設定ファイル /var/webui/config/pd_handler_2_modbus.conf から読み込んだパラメータを上書きします。
CSVファイルに設定される情報は、clients オブジェクトの localname とacquisitions オブジェクトの unitId, include, maker, product, model, sku, infos, interval, time_sync, base_time です。ただし、infos オブジェクトは、2 組の key と値(文字列)に限定され、また不要な場合は空欄とします。
パラメータの並びは次の通りで、パラメータの区切りはコンマ ','、先頭がシャープ '#' 又はスラッシュ '/' の場合はコメント行として扱います。
CSVファイルの書式は、次の通りです。
パラメータのデータ型は acquisitions オブジェクトと同じですが、JSON 文字列とは異なり文字列に空白が含まれない限り、文字列を '"' で括る必要はありません。 なお、localname が設定ファイルに存在しない場合は、無効となります。
記載例
基準時刻制御モード
基準時刻制御は、特定の時刻にデータを取得する機能です。
clients オブジェクトのtime_sysncキーを true に設定し、interval キーとbase_time キーで取得間隔と取得時刻を設定します。
基準時刻制御における「取得時間間隔」は 60, 120, 180, 300, 600, 900, 1800, 3600, 7200, 10800, 14400, 21600, 28800, 43200 と 86400 の倍数に限られます。「取得時間間隔」としてこれら以外の値が設定されるとPD Handler Modbus 2 Client内で次のように扱われます。
基準時刻制御における取得時間間隔の設定と実動作値
取得時間間隔の設定値 | 実動作値 |
---|---|
0 ~ 199 | 60 |
120 ~ 179 | 120 |
180 ~ 299 | 180 |
300 ~ 599 | 300 |
600 ~ 899 | 600 |
900 ~ 1799 | 900 |
1800 ~ 3599 | 1800 |
3600 ~ 7199 | 3600 |
7200 ~ 10799 | 7200 |
10800 ~ 14399 | 10800 |
14400 ~ 21599 | 14400 |
21600 ~ 28799 | 21600 |
28800 ~ 43199 | 28800 |
43200 ~ 86399 | 43200 |
86400 ~ | 86400 の倍数 |
「基準時刻」とは動作の起点となる時刻で、例えば「取得時間間隔」を300とし、「基準時刻」を '00:01' とした場合、データの取得は 00:01, 00:06, 00:11 ... 00:56, 01:01 ... 23:56, 00:01の定刻に行われます。
データの取得開始時刻は「基準時刻」に設定さた時刻そのものではなく、「基準時刻」と「取得時間間隔」から算定される直近の時刻となります。
例えば 08:30に「基準時刻」 '01:05'、取得時間間隔」10800 の設定が行われた場合、最初のデータ取得は10:05に行われ、以降 13:05, 16:05, 19:05, 22:05, 01:05の順におこなわれます。
メッセージオブジェクト
入出力メッセージに用いられる JSON オブジェクトを示します。
PD Handler Modbus 2 Client のメッセージオブジェクト
キー | 内容 | データ型 | 方向 | 備考 |
---|---|---|---|---|
timestamp | データ取得日時 | 文字列 | 出力 | ISO8601拡張書式. キーの名称は 'timestamp_key'. で変更可能. |
unitId | Modbus Unit ID | 整数値又は文字列 | 入出力 | clients オブジェクト の 'include' が true 時のみ出力. |
maker | メーカー名 | 文字列 | 出力 | モデリングファイルの maker オブジェクトの 'include' が true 時のみ. |
product | プロダクト名 | 文字列 | 出力 | モデリングファイルの product オブジェクトの 'include' が true 時のみ. |
model | モデル名 | 文字列 | 出力 | モデリングファイルの model オブジェクトの 'include' が true 時のみ. |
sku | sku 名 | 文字列 | 出力 | モデリングファイルの sku オブジェクトの 'include' が true 時のみ. |
reply_to | リクエストメッセージの MD5 | 文字列 | 出力 | clients オブジェクトの 'reply' が true 時のみ. |
request_from | リクエストメッセージの送付元クラウドID | 文字列 | 出力 | clients オブジェクトの 'reply' が true 時のみ. |
result | 制御ステータス | 論理値 | 出力 | clients オブジェクトの 'reply' が true 時のみ. |
reason | エラーの理由 | 文字列 | 出力 | clients オブジェクトの 'reply' が true 時のみ. |
write | 書き込み制御 | JSON obj | 入力 | モデリングファイルに定義されるキーと値. |
rawRequest | RAWリクエスト | JSON obj | 入力 | モデリングファイルに定義される RAWリクエストキーと値. モデリングファイルに定義される値を持ちいる場合は値を null にする. |
クラウドからの制御
クラウドから PD Repeater を介し制御(JSON)文字列を送ることで、接続されている PLC 機器のレジスタを読み書きすることができます。
制御文字列には、PLC 機器を特定するため acquisitions オブジェクトの unitId を記載します。
例えば、Modbus ID 3 の PLC 機器のレジスタを読み込むのであれば、その制御文字列は次のようになります。
これに対する、応答メッセージは、次のようになります。
ここで、reply_to は、制御文字列の MD5 です。
同 PLC 機器の出力レジスタに値を書き込むのであれば、その制御文字列は次のようになります。
ここで write オブジェクトに与えられるキーと値は、モデリング の outputBits オブジェクト配列内の bit オブジェクト、又は outputRegisters オブジェクト配列内の registers オブジェクトに指定される key, type, array に応じた値でなくてはなりません。但し書き込み処理において base_ratio と ratio を用いた数値の逆変換は行われません。
これに対する、応答メッセージは、次のようになります。
書込み制御は、outputBits オブジェクト配列内のbitオブジェクト、又は outputRegisters オブジェクト配列内の registers オブジェクトの単位で行われます。
書込み処理においては、連続しない複数のレジスタに対する制御を効率良く処理するため、bit オブジェクト又は register オブジェクトに定義されるレジスタの全てを PLC 機器からプログラムに読み込み、write キーに指定されるレジスターのみを書き換えた後、レジスタの全てを PLC 機器へ書き戻します。
CLI (pd_handler_modbus_2_cli)
pd_handler_modbus_2_cli は、クラウドからの制御をローカルに行うためのアプリケーションです。
PLC 機器の初期設定(ディジタル出力もしくは出力レジスタへの書き込み)やモデリングファイルの確認などに用いるものですが、制御対象が RTU 接続の場合は、pd_handler_modbus_2_client とインタフェースが競合するため、pd_handler_modbus_2_client を停止した上で使用することを推奨します。
pd_handler_modbus_2_cli のオプションを示します。
'-a' オプションは、モデリング上 disable ('enable' キーが false) とされているレジスタも読み出します。
例えば、Modbus ID 3 の PLC 機器のレジスタを読み込むのであれば、pd_handler_modbus_2_cli の引数にクラウドからの制御と同じ制御文字列を与えます。
これに対し応答メッセージは、標準出力に返されます。
クラウドから制御した場合と異なり、reply_to と result は出力されません。
同 PLC 機器の出力レジスタに値を書き込むのであれば、pd_handler_modbus_2_cli の引数は次のようになります。
ここで write オブジェクトに与えられるキーと値は、モデリングの outputBits オブジェクト配列内の bit オブジェクト、又は outputRegisters オブジェクト配列内の registers オブジェクトに指定される key, type, array に応じた値でなくてはなりません。但し書き込み処理において base_ratio と ratio を用いた数値の逆変換は行われません。
これに対する応答メッセージは、次のようになります。
PD Handler Modbus 2 Server
PD Handler Modbus Server 2 は、モデリングファイル pd_handler_modbus_2_model.conf と設定ファイル pd_handler_modbus_2_server.conf の設定に基づき共有メモリにレジスタマップを構成し PLC 機器(Modbusクライアント)からの接続を待ち受け、PLC 機器(Modbusクライアント)の書き込み操作によりレジスタの値を更新すると共に、更新されたレジスタとその値を PD Repeater を介してクラウドへ送ります。
また、PD Repeater を介しクラウドから送られる JSON 文字列に基づき、レジスタマップを読み書きすることができます。
レジスタマップは、60 秒毎に更新があれば、共有メモリからレジスタマップファイルに出力(バックアップ)されます。
デフォルトパス
PD Handler Modbus 2 Server に関連するファイルのデフォルトパスは次の通りです。
PD Handler Modbus 2 Server に関連するファイルのデフォルトパス
パス名 | 説明 |
---|---|
/usr/sbin/pd_handler_modbus_2_server | 常駐実行オブジェクト(デーモン) |
/etc/init.d/pd_handler_modbus_2_server | RC ファイル |
/lib/systemd/system/pd_handler_modbus_2_server.service | Systemd Service ファイル |
/var/webui/config/pd_handler_modbus_2_server.conf | 設定ファイル |
/var/webui/config/pd_handler_modbus_2_model.conf | Modbus モデリングファイル |
/var/webui/config/pd_handler_modbus_2_model.conf.default | Modbus モデリングファイル(デフォルト) |
/var/webui/.modbus_2_server/<localname>.map | レジスタマップファイル |
/var/run/pd_handler_modbus_2_server.pid | PID ファイル |
Modbus モデリングファイル(デフォルト)は、Modbus モデリングファイルが存在しない場合に読み込まれます。
設定ファイルの書式
構文
PD Handler Modbu Server 2 の設定ファイルは次の書式で構成されています。
ルートオブジェクト
キー | データ型 | 説明 |
---|---|---|
model_file | 文字列 | Modbusモデリングファイルのパス名. デフォルト値は、'/var/webui/config/pd_handler_modbus_2_model.conf'. (MAXPATHLEN) |
backup_interval | 整数値 | レジスタをファイルにバックアップする周期(sec)を指定する. デフォルト値は 60. |
servers | JSON配列 | serversオブジェクトの配列. (最大 8 オブジェクト) |
servers オブジェクト
server オブジェクトは、PD Handler Modbus 2 Server の動作を規定する設定オブジェクトです。
server オブジェクトの配列数は、最大8 個. Modbus のプロトコル(TCP, RTC) に依存するオブジェクトとプロトコルに依存しない共通のオブジェクトがあります。
キー | データ型 | 説明 |
---|---|---|
enable | 論理値 | デフォルト値は false. |
localname | 文字列 | デバイスのローカル名. (32byte) |
map_file | 文字列 | レジスタマップファイルのパス名. デフォルト値は /var/webui/. |
modbus_2_server/<localname>.map | ||
bind | 文字列 | 制御メッセージを受け取るソケット名. 文字列の先頭が '@' の場合は abstract namespace と解釈する. 空の場合は、デフォルト値 '@/pd_handler/<localname>.sock' が設定される. (MAXPATHLEN) |
push_to | 文字列 | データの送り先ソケット名. 文字列の先頭が '@' の場合は abstract namespace と解釈する. 空の場合は、デフォルト値 '@/pd_repeater/<localname>.sock' が設定される. (MAXPATHLEN) |
buffer_size | 整数値 | データのバッファサイズ(byte). デフォルト値は 4096. |
receive | 論理値 | クラウドからメッセージを受け取る(下流方向制御)か否か. デフォルト値は false. |
reply | 論理値 | 下流方向制御に対しステータスメッセージを返すか否か. デフォルト値は false. |
protocol | 文字列 | 接続プロトコル 'tcp' 又は 'rtu' を指定. デフォルト値は 'tcp'. |
timeout | 整数値 | データを取得出来ない場合のタイムアウト(msec). デフォルト値は 5000. |
node | 文字列 | 【TCP接続】待ち受けIP アドレス. デフォルト値は'127.0.0.1'. |
port | 整数値 | 【TCP接続】待ち受けポート番号. デフォルト値は 502. |
device | 文字列 | 【RTU接続】シリアル接続のデバイス名. デフォルト値は '/dev/ttyRS485'. |
rtu_speed | 整数値 | 【RTU接続】シリアル接続のビットレート. デフォルト値は 115200. |
rtu_bits | 整数値 | 【RTU接続】シリアル接続のビット数. 8 又は 7. デフォルト値は 8. |
rtu_parity | 文字列 | 【RTU接続】シリアル接続のパリティ. 'none','even','odd' のいずれか. デフォルト値は'none'. |
rtu_stop | 整数値 | 【RTU接続】シリアル接続のストップビット. 1 又は 2. デフォルト値は 1. |
rtu_rts_delay | 整数値 | 【RTU接続】シリアル接続の RTS ディレイ値(usec). 0 の場合は自動設定される値. |
maker | 文字列 | モデルファイルに定義されるメーカー名 (64byte) |
product | 文字列 | モデルファイルに定義されるプロダクト名 (64byte) |
model | 文字列 | モデルファイルに定義されるmodel名 (64byte) |
sku | 文字列 | モデルファイルに定義される sku 名 (64byte) |
unitId | 整数値又は文字列 | PLC 機器の Modbus ユニット ID. 1 〜 247 又は 255 (TCPプロトコルのみ). '0x' で始まる 16 進数表記の文字列入力も可能. |
include | 論理値 | unitId を送信するデータに含むか否か. デフォルト値は true. |
id_form | 文字列 | Modbus Id の表記フォーマト. 'dec'(数値) または 'hex'(16進表記の文字列)、'HEX'(16進表記の大文字列). デフォルト値は 'dec' |
timestamp_key | 文字列 | タイムスタンプのキーを設定する. デフォルト値は 'timestamp' (32byte) |
infos | JSON obj | 出力に付加される Modbus クライアントノード固有のユーザー定義オブジェクト |
dl_module | 文字列 | カスタマイズに用いる Dynamic Link モジュールのパス名. (MAXPATHLEN) |
メッセージオブジェクト
入出力メッセージに用いられる JSON オブジェクトを示します。
PD Handler Modbus 2 Server のメッセージオブジェクト
キー | 内容 | データ型 | 方向 | 備考 |
---|---|---|---|---|
timestamp | データ取得日時 | 文字列 | 出力 | ISO8601拡張書式. キーの名称は 'timestamp_key'. で変更可能. |
unitId | Modbus Unit ID | 整数値又は文字列 | 出力 | servers オブジェクト の 'include' が true 時のみ出力. |
maker | メーカー名 | 文字列 | 出力 | モデリングファイルの maker オブジェクトの 'include' が true 時のみ. |
product | プロダクト名 | 文字列 | 出力 | モデリングファイルの product オブジェクトの 'include' が true 時のみ. |
model | モデル名 | 文字列 | 出力 | モデリングファイルの model オブジェクトの 'include' が true 時のみ. |
sku | sku 名 | 文字列 | 出力 | モデリングファイルの sku オブジェクトの 'include' が true 時のみ. |
reply_to | リクエストメッセージの MD5 | 文字列 | 出力 | servers オブジェクトの 'reply' が true 時のみ. |
request_from | リクエストメッセージの送付元クラウドID | 文字列 | 出力 | clients オブジェクトの 'reply' が true 時のみ. |
result | 制御ステータス | 論理値 | 出力 | serverss オブジェクトの 'reply' が true 時のみ. |
reason | エラーの理由 | 文字列 | 出力 | serverss オブジェクトの 'reply' が true 時のみ. |
write | 書き込み制御 | JSON obj | 入力 | モデリングファイルに定義されるキーと値. |
クラウドからの制御
クラウドから PD Repeater を介し制御(JSON)文字列を送ることで、レジスタマップの読み取りと入力レジスタに対する書き込みができます。
レジスタマップを読み取る場合は、空の制御文字を送ります。
これに対する、応答メッセージは、次のようになります。
ここで、reply_to は、制御文字列の MD5 です。
入力レジスタに値を書き込むのであれば、その制御文字列は次のようになります。
ここで write オブジェクトに与えられるキーと値は、モデリングの inputBits オブジェクト配列内の bit オブジェクト、又は inputRegisters オブジェクト配列内の registers オブジェクトに指定される key, type, ratio に応じた値でなくてはなりません。但し書き込み処理において base_ratio と ratio を用いた数値の逆変換は行われません。
これに対する、応答メッセージは、次のようになります