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

無料無料技术资料

这篇内容可直接阅读,适合用于基础学习和検索引流。

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

ModbusPalとは?

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

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

ModbusPalの主な機能

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

ModbusPalのインストール

前提条件は

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

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

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

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

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

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

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

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

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から。機器の種類レジスタマップ
1温度と湿度センサー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起動/停止、ビット1方向
        running = bool value 0x01
        しないif
            target_freq = 0。
    elif register === 1
        #プライマリ局書き込みターゲット周波数(100倍)
        target_freq = value / 100.0

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

#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の停止

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は通信ロジックを検証するのに最適なツールです。

この資料を実際のプロジェクトに活用しませんか?

ツールセンターで電文解析、CRCチェック、デバイスデバッグを行うか、要件を送信して選定と接続のアドバイスを受けましょう。

エンジニア会員

この記事を実行可能なデバッグ資料に

登録すると、高度な電文解析、資料パックのダウンロード、コード例、エンジニアリングケース、優先技術サポートが利用可能に。実際のプロジェクト納品に最適です。

高度なツール無制限
資料パックとコードパック
完全なエンジニアリングケースライブラリ
優先技術サポート窓口

发表回复

あなたのメールアドレスアドレス不会被公开。 必須項目已用 * 标注