Modbus 連携
FX Viewer Modbus 連携機能マニュアル
1. 機能紹介
FX Viewer のリアルタイム音響カメラデータ(ビームパワー、アラーム状態など)を外部システム(PLC、SCADA、HMI など)と連携するための Modbus TCP サーバー機能です。
この機能により、PLC のような外部制御装置から FX Viewer のカメラデータを監視し、一部の設定を直接制御できます。
2. 基本設定および接続情報
自動起動
FX Viewer プログラムが起動すると、Modbus サーバーは自動的に実行されます。別途の設定は必要ありません。
接続情報
-
IP アドレス: FX Viewer が実行中の PC の IP アドレス
-
ポート: 5020(既定)または 502
-
1024 以下のポートを使用する権限がない環境を考慮し、サーバーは5020 ポートに優先的にバインドします。5020 ポートのバインドに失敗した場合、サーバーは 502 ポートでリッスンを試みます。
-
クライアントではまず 5020 ポートに接続してみて、接続できない場合は 502 ポートへの接続を試みてください。
-
-
プロトコル: Modbus TCP
3. カメラ設定
Modbus 機能が正常に動作するためには、カメラのニックネームを規定の形式で設定する必要があります。
⚠️ 重要: ニックネームが以下の規則と異なるカメラは Modbus 連携から除外されます。データが取得できない場合の最も多い原因ですので、連携の前に最初に確認してください。
| Unit ID | 必須ニックネーム | 許容される他の形式 | Device ID |
|---|---|---|---|
| 1 | FX_01 | FX01, FX-01 | 0x4601 |
| 2 | FX_02 | FX02, FX-02 | 0x4602 |
| 3 | FX_03 | FX03, FX-03 | 0x4603 |
-
大文字と小文字は区別しません。(
fx_01も可能) -
4 台目以降のカメラにも同じ規則がそのまま適用されます。Unit ID は FX Viewer に登録して使用するカメラの台数だけ順番に付与されます。
4. レジスタマップ
- アドレス方式: PLC などのクライアントでは0 から始まるワイヤアドレス(Offset)の使用を推奨します。(例: 40009 番アドレス →
8番アドレスで要求)
| Modbus アドレス | ワイヤアドレス | レジスタ名 | データ型 | R/W | 説明 |
|---|---|---|---|---|---|
| 40001 | 0 | DEVICE_ID | U16 | R | 装置固有 ID(例: 0x4601) |
| 40002 | 1 | DEVICE_CONNECTED | U16 | R | カメラ接続状態(1: 接続、0: 切断) |
| 40003 | 2 | YEAR | U16 | R | 現在時刻(年) |
| 40004 | 3 | MONTH | U16 | R | 現在時刻(月) |
| 40005 | 4 | DAY | U16 | R | 現在時刻(日) |
| 40006 | 5 | HOUR | U16 | R | 現在時刻(時) |
| 40007 | 6 | MINUTE | U16 | R | 現在時刻(分) |
| 40008 | 7 | SECOND | U16 | R | 現在時刻(秒) |
| 40009 | 8 | MAX_DBx10 | S16 | R | 最大音圧(dB 値 x 10)、例: 45.2dB → 452 |
| 40010 | 9 | ALARM_FLAG | U16 | R | アラーム状態(1: アラーム発生、0: 正常) |
| 40011 | 10 | THRESH_DBx10 | S16 | R/W | しきい値(dB 値 x 10)、例: 42.5dB → 425 |
| 40012 | 11 | THRESH_HOLDx10 | S16 | R/W | 保持時間(秒値 x 10)、例: 3.5 秒 → 35 |
| 40013-14 | 12-13 | FREQ_LOW_HZ | U32 | R/W | 周波数下限(Hz) |
| 40015-16 | 14-15 | FREQ_HIGH_HZ | U32 | R/W | 周波数上限(Hz) |
クライアントでのデータ型設定

PLC Modbus クライアントでレジスタアドレスごとにデータ型を選択する設定画面の例です。レジスタを 1 個使用する項目は上の表の型に合わせて、符号付き整数(S16)は INT、符号なし整数(U16)は WORD として読み取り、レジスタを 2 個(32 ビット)使用する FREQ_LOW_HZ・FREQ_HIGH_HZ は DWORD 系の型として読み取ります。
5. 主な機能と使用例(Python)
自動トリガーモードの有効化
- PLC からしきい値(
40011)や保持時間(40012)のレジスタに値を書き込むと、該当カメラの録画方式が「トリガー録画」モードに自動的に有効化されます。
⚠️ 注意: しきい値・保持時間レジスタへの書き込みには、カメラの録画方式を変更する副作用があります。データ監視のみが必要な場合は読み取り要求のみを使用し、書き込み要求はトリガー録画への切り替えを意図した場合にのみ送信してください。
Python サンプルコード
以下の例では Python の pymodbus ライブラリ(3.x 基準)を使用します。まずライブラリをインストールします。
pip install pymodbus💡 参考: pymodbus はバージョンによって Unit ID を指定するキーワードが異なります。以下の例の
slave=は 3.x 基準であり、旧バージョン(2.x)ではunit=を使用します。インストールされているバージョンに合ったキーワードを使用してください。
from pymodbus.client import ModbusTcpClient
# FX Viewer が実行中の PC の IP とポートに設定FX_VIEWER_IP = '127.0.0.1'FX_VIEWER_PORT = 5020
client = ModbusTcpClient(FX_VIEWER_IP, port=FX_VIEWER_PORT)client.connect()
# -- データ読み取り例 ---# FX_01 カメラ (Unit ID = 1) のデータを読み取り# ワイヤアドレス 8 番(MAX_DBx10)から 2 個のレジスタ(音圧、アラーム)を読み取りresult = client.read_holding_registers(8, count=2, slave=1)
if not result.isError(): max_db_x10 = result.registers[0] alarm_flag = result.registers[1]
# 符号付き 16 ビットに変換してから 10 で割る import struct signed_max_db_x10 = struct.unpack('>h', struct.pack('>H', max_db_x10))[0]
print(f"FX_01 最大音圧: {signed_max_db_x10 / 10.0} dB") print(f"FX_01 アラーム状態: {'発生' if alarm_flag == 1 else '正常'}")
# -- データ書き込み例 ---# FX_02 カメラ (Unit ID = 2) のしきい値を 45.5 dB に設定# ワイヤアドレス 10 番(THRESH_DBx10)に値を書き込みnew_threshold = 45.5threshold_to_write = int(new_threshold * 10)
client.write_register(10, threshold_to_write, slave=2)print(f"FX_02 しきい値を {new_threshold} dB に設定要求完了")
client.close()実行結果の例
FX_01 カメラの最大音圧が 45.2 dB(レジスタ値 452)、アラームが正常状態のときの出力例です。
FX_01 最大音圧: 45.2 dBFX_01 アラーム状態: 正常FX_02 しきい値を 45.5 dB に設定要求完了6. 問題解決 (Troubleshooting)
-
接続できない場合:
-
FX Viewer PC の IP アドレスとポート(5020)が正しいか確認します。
-
Windows ファイアウォールのインバウンド規則でポート
5020または502を許可しているか確認します。
-
-
データが 0 としか表示されない場合:
-
FX Viewer でカメラが有効になっており、リアルタイムデータが入ってきているか確認します。
-
カメラのニックネームが
FX_01、FX_02などに正しく設定されているか、もう一度確認します。(最も多い原因)
-
-
一部の値(周波数など)が異常に読み取られる場合:
- クライアントのデータ型設定がレジスタマップの型(S16/U16/U32)と一致しているか確認します。特にレジスタを 2 個使用する
FREQ_LOW_HZ・FREQ_HIGH_HZは DWORD 系の型として読み取る必要があります。(セクション 4 のデータ型設定画面を参照)
- クライアントのデータ型設定がレジスタマップの型(S16/U16/U32)と一致しているか確認します。特にレジスタを 2 個使用する
7. 関連文書
-
開発者センターを始める — 製品別の開発ドキュメントトラック案内
-
開発者リソース — 連携サンプルリポジトリおよび外部リソース集