ModbusPalエミュレータの完全チュートリアル:JavaおよびPythonスクリプトでModbusスレーブデバイスをエミュレートする

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

ModbusPalエミュレータの完全チュートリアル:JavaおよびPythonスクリプトでModbusスレーブデバイスをエミュレートする

ModbusPalとは?

ModbusPalはJavaベースのオープンソースModbusスレーブ(Slave)エミュレータであり、プロジェクトはSourceForgeでホストされている:https://modbuspal.sourceforge.net/。そのコア機能は、あらかじめ設定された静的データを返すのではなく、組み込みのJythonスクリプトエンジンを介して動的にレジスタ値を生成することです。つまり、temperatureセンサの季節変動、周波数コンバータの加速曲線、さらにはノイズの多いアナログ信号など、実際の産業機器のさまざまな挙動をシミュレートできます。

Modbusマスタープログラムの開発において、エンジニアはしばしば“実際のハードウェアがない”というジレンマに直面します。ModbusPalはこの問題を解決するために設計されており、Modbus RTUとModbus TCPの両方のトランスポートモードをサポートし、通常のコンピュータ上で数十種類のModbusスレーブデバイスを同時にエミュレートできます。

ModbusPalの主な機能

  • ダイナミックレジスタ生成:組み込みの数学関数(正弦波、ランプ、乱数)またはユーザー定義のPythonスクリプトを使用して、各レジスタの値をリアルタイムで計算します。
  • 駅からもっと。複数の異なるSlave IDを持つModbus RTU/TCPデバイスを同時にエミュレートする
  • 自動化メカニズム:タイミングタスクをサポートしてレジスタ値を自動的に変更し、デバイス状態の変化をシミュレートする(スイッチングvalueの反転、アナログvalueのグラデーションなど)。
  • JythonスクリプトエンジンJython 2.xを組み込み、複雑なビジネスロジック(ステートマシン、Communicationシミュレーションなど)を記述できます。
  • クロスプラットフォーム運用Windows / Linux / macOSで動作するJava Swingベース
  • シリアルポートサポート:RxTxライブラリにより物理シリアルポートCommunicationをサポートし、実際のRS-232/RS-485ネットワークに接続できます。

ModbusPalのインストール

前提条件は

ModbusPalはJavaランタイム環境(JRE 8以上)に依存します。物理シリアル機能を使用するには、RxTxシリアルCommunicationライブラリもインストールする必要があります。

Linuxのインストール

#Java Runtimeのインストール
sudo apt-get updateをする
sudo apt-get install default-jre

ModbusPal(SourceForgeの最新バージョン)をダウンロード
wget -O modbuspal."https://sourceforge.net/projects/modbuspal/files/latest/download"

#手続きの開始
java-jar modbuspal.jar

シリアルサポートが必要な場合はRxTxをインストールする
sudo apt-get install librxtx-java

Windowsインストール

modbuspal.jarをダウンロードした後、システムにJavaがインストールされている場合は、ダブルクリックして実行します。シリアル機能が必要な場合は、RxTx用のWindows DLLファイルをダウンロード(rxtxSerial.dll(コピーする)C:Program FilesJavajrebinカタログです。

最初のModbus TCPスレーブの作成

ModbusPalを起動すると、メインインターフェイスは上から下へ、メニューバー、エンジニアリングツリー、構成パネル、ログ出力領域にminかれます。わずか5ステップで基地を作成:

  1. Menu BarクリックAdd → Modbus Slave
  2. ポップアップしたダイアログボックスで、プロトコルタイプを次のように選択します。TCP
  3. リスニングポート(デフォルト502)を設定し、必要に応じて異なるポート(502、503、504など)を割り当てることができます。
  4. スレーブアドレスSlave IDを設定します。たとえば、1
  5. 新しく作成されたスレーブを右クリックし、Add → Holding Registers開始アドレスとQuantityを設定する

ツールバーをクリック。Run駅からボタンを押す。この時点でスレーブはTCPポート502でリッスンしており、Modbus PollやModpollなどのマスターツールを使用してレジスタ値を読み取ることができます。

Pythonスクリプトによる動的データの生成

これはModbusPalのキラー機能です。次の例では、レジスタ値が20°C ~ 30°Cの間で正弦波として変動するtemperatureセンサをシミュレートします。

#temperature_simulator.py
20.0 ~ 30.0°Cの間で正弦波周期で変化するアナログtemperatureセンサ

輸入時間の延長
数学のインポート。

def getValue register
    """
    ModbusPalはレジスタを読み取るたびにこの関数を呼び出す
    registerレジスタアドレスint
    戻り値レジスタ値int、0-65535
    """
    t = time.time
    # 中心温度 25°C、振幅 5°C、周期 60秒間
    temperature = 25.0 + 5.0 * math.sin 2.0 * math.pi * t / 60.0
    #10を掛けると、25.3°C → 253のように1桁の精度が保たれる。
    return int temperature * 10

def setValue register value
    ≪オプション| Options | emdw ≫ ≪プライマリ·ステーションの書き込みを処理するコマンド| Processing Main Station Write | emdw ≫
    print "Register %d written with value %d" % register value

ModbusPalでスクリプトをバインドする:ターゲットレジスタを右クリック→Bindings → Add Python Binding→スクリプトファイルを選択→バインドするレジスタアドレス範囲を指定します。スレーブステーションを起動した後、マスターステーションツールでレジスタアドレスを読み取り続けると、温度値の経時変化が観察されます。

高度なシナリオ:完全なマルチデバイス産業ネットワークのシミュレーション

実際の産業シナリオでは、通常、複数のスレーブデバイスがRS-485バスにマウントされます。ModbusPalを使って以下のような典型的な構成をシミュレートできます。

ステーションIDから。機器の種類レジスタマップ
1temperatureと湿度センサーR0温度x10、R1湿度x10
2三相電気メーターR0 A相电圧、R1 A相、R2-3有効32-bit
3周波数変換器R0動作周波数x100、R1出力電流x10、R2動作状態ビット符号化
4レベル計R0-1液面高さmm、32-bit、R2温度x 10

ModbusPalに4つのスレーブを追加し、各スレーブに対応するレジスタグループを作成し、動的値を必要とするレジスタ用のPythonスクリプトをバインドします。これにより、実際のハードウェアを購入して接続する必要がなく、開発機上でマルチデバイス通信調和プロトコルの論理検証が可能になります。

複雑なシミュレーション動作の設計

アナログ周波数コンバータの起動と停止速度の変化

#vfd_simulator.py
#アナログ周波数コンバータ:スタートストップコマンドを受信し、ランプ関数による速度変化

輸入時間の延長

#グローバルステータス変数
target_freq = 0。     #ターゲット周波数Hz
_freq = 0.0    #現在の周波数Hz
running = False       #運用状況について

RAMP_RATE = 2.0       #ランプレート2 Hz/s
last_time = time.time

def getValue register
    global current_freq last_time
    now = time.time
    dt = now -last_time
    last_time = now
    
    if register === 0
        #周波数レジスタ:ランプレートで目標値を近似する
        if_freq -_freq 0.01
            if current_freq = 0
            ステータスステータスは|= 0 x 0 2
        Return Statusシングル
    
    return 0より

def setValue register value
    global target_freq running
    if register === 0
        #マスター書き込み制御コマンド
        # valueビット0起動/Stop、ビット1方向
        running = bool value 0x01
        しないif
            target_freq = 0。
    elif register === 1
        #プライマリ局書き込みターゲット周波数(100倍)
        target_freq = value / 100.0

アナログノイズ付きアナログvalueセンサ

#noisy_sensor.py
ノイズ付き4-20mA圧力トランスミッタのアナログ

輸入時間の延長
数学のインポート。
randomのインポート

def getValue register
    t = time.time
    #基準圧力:0.5 MPa、小さな正弦波変動を重ね合わせる
    base_ure = 500.0 #
    ripple = 10.0 * math. 2 * math.pi * t / 30.0
    #ランダムノイズを追加±2 kPa
    noise = random.uniform-2.0,2.0
    pressure = base_pressure + ripple + noise
    
    if register === 0
        圧力値(kPa、整数)
        return int pressure
    elif register === 1
        #圧力値の小数部(Pa)
        f = ure- int ure
        return int frac * 1000
    return 0より

自動テストとの連携

ModbusPalはプロジェクトファイル(.mbp形式)として設定でき、コマンドラインからロードされます。

#事前設定されたエンジニアリングファイルをロードして起動
java -modbuspal. --load my_project.mbp&

これにより、自動テストプロセスに統合できます。スクリプトをテストするための一般的なプロセス

  1. ModbusPalを起動し、テスト·プロジェクトをロードバックグラウンドで実行
  2. 駅から待機。
  3. Modbusマスターテストケースの実行(Modpollによるレジスタの読み書きなど)
  4. 戻り値が期待通りであることを確認する
  5. テストレポートの生成
  6. ModbusPalのStop

ModbusPalの制限

ModbusPalを使用する際の注意点は以下の通りです。

  • プロジェクト活動の程度ModbusPalは初期のオープンソースプロジェクトであり、近年は更新頻度が低下している。一部の新しいModbus機能(FC43/14読み取りデバイスIDなど)では、サポートが不完全である場合があります。
  • Jythonバージョン組み込みのJythonエンジンはPython 2.x構文に基づいており、f-stringや型ヒントなどのPython 3機能をサポートしていません。
  • 高解像度ディスプレイJava SwingベースのGUIは、4 K高 DPI画面ではうまく表示されない場合があり、JavaのDPIスケーリング設定を調整する必要があります。
  • パフォーマンスの上限多数のスレーブ(20以上)をエミュレートする場合、Javaのシリアル処理がボトルネックになる可能性があります。

代替案の比較

  • pymodbus(Python):TCP/RTU/TLSをサポートし、カスタムエミュレータの構築に適しているが、完全なコードを記述する必要がある。
  • ModRSsim2:GUI付きだがPythonスクリプトをサポートしないWindowsプラットフォーム用の無料Modbusスレーブエミュレータ
  • Modbus Slave(商用ソフトウェア):最もフル機能の商用Modbusシミュレーションツールですが、無料ではありません。
  • Unslave Modbus Simulator:よりモダンなインターフェイスを備えた新しい無料オプション

概要まとめ

ModbusPalは、Pythonスクリプト駆動の動的レジスタ生成機能により、オープンソースのModbusエミュレータの分野ではユニークである。特に、Modbusマスタープログラムの開発段階でターゲットハードウェアがない場合のプロトコルチューニングと検証、複数の異なるタイプのスレーブデバイス(計装、PLC、インバータ)をシミュレートする必要がある複雑なシステム統合テスト、動的波形、ランダムノイズ、ランプ関数などによって実際の産業現場の挙動を再現する必要があるシナリオに適しています。Modbusホストソフトウェア、SCADAシステム、IoTデータ収集ゲートウェイを開発している場合、ModbusPalはCommunicationロジックを検証するのに最適なツールです。

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.