ModPalbus Emulator Vollständige Tutorial: Modbus-Slaven mit Java und Python-Skripten emulieren

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

ModPalbus Emulator Vollständige Tutorial: Modbus-Slaven mit Java und Python-Skripten emulieren

Was ist ModPalbus?

ModPalbus ist ein Java-basierter Open-Source - Modbus-Slave - Simulator, das bei SourceForge gehostet wird:https://modbuspal.sourceforge.net/。Seine Kernfunktion ist die dynamische Generierung von Registerwerten über die eingebettete Jython (Python für Java) Skript-Engine, anstatt nur vordefinierte statische Daten zurückzugeben. Das bedeutet, dass Sie das Verhalten eines echten industriellen Geräts simulieren können - die saisonalen Schwankungen von Temperatursensoren, die Beschleunigungskurven von Frequenzumrichtern und sogar analoges Signal mit Rauschen.

Bei der Entwicklung von Modbus-Master - Programmen stehen Ingenieure oft vor dem Dilemma "ohne echte Hardware". ModbusPal wurde entwickelt, um dieses Problem zu lösen - es kann Dutzende verschiedener Modbus-Slavenarten auf einem normalen Computer simulieren und unterstützt Modbus RTU (serieles Port) und Modbus TCP (Ethernet).

ModPalbus Kernfunktionen

  • Dynamisches Register erzeugenBerechnen Sie den Wert jedes Registers in Echtzeit über eingebaute mathematische Funktionen (Sinuswelle, Rampen, Zufallszahlen) oder benutzerdefinierte Python-Skripte
  • Multi-Slave - Simulation: Simulation von Modbus RTU / TCP-Geräten mit verschiedenen Slave-IDs
  • Automatisierung: Unterstützung für zeitgerechte Aufgaben zur automatischen Änderung von Registerwerten und Simulation von Gerätestatusänderungen (z.B. Schalterumkehr, Analoggradiente)
  • Jython Scripting Engine: Embedded Jython 2.x, ermöglicht das Schreiben komplexer Geschäftslogik (Zustandmaschinen, Kommunikationssimulation usw.)
  • Plattformübergreifend: Java Swing-basiert, für Windows / Linux / macOS
  • Unterstützung für serielle Ports: Unterstützung für die physische serielle Portskommunikation über die RxTx-Bibliothek, Anschluss an ein echtes RS - 232 / RS - 485 - Netzwerk

Installation von ModbusPal

Voraussetzungen

ModbusPal ist abhängig von der Java-Lautezeitumgebung (JRE 8 oder höher). Um die physikalische serielle Anschlussfunktion zu verwenden, müssen Sie auch die RxTx-Bibliothek für serielle Anschlüsse installieren.

Linux-Installation

# 安装 Java 运行时
sudo apt-get update
sudo apt-get install default-jre

# 下载 ModbusPal(SourceForge 最新版)
wget -O modbuspal.jar "https://sourceforge.net/projects/modbuspal/files/latest/download"

# 启动程序
java -jar modbuspal.jar

# 如果需要串口支持,安装 RxTx
sudo apt-get install librxtx-java

Windows-Installation

Nachdem Sie modbuspal.jar heruntergeladen haben, können Sie mit einem Doppelklick ausführen, wenn Java bereits auf Ihrem System installiert ist. Für die Serienanschlussfunktion herunterladen Sie die Windows DLL-Datei RxTx (rxtxSerial.dll(Kopieren)C:Program FilesJavajrebinKatalog.

Erstellung der ersten Modbus TCP Slave Station

Nach dem Starten von ModbusPal ist die Hauptoberfläche von oben nach unten in Menüleiste, Baum, Konfigurationspanel und Log-Ausgabebereich unterteilt. Erstellen Sie eine Basis-Slavenstation in nur 5 Schritten:

  1. Klicken Sie aufAdd → Modbus Slave
  2. In einem Popup-Dialogfeld wählen Sie den Protokolltyp fürTCP
  3. Wählen Sie den Listen-Port (Standard 502), wenn Sie mehrere Slaven benötigen, können Sie verschiedene Ports zuweisen (z. B. 502, 503, 504)
  4. Setzen Sie die Slave-Adresse (Slave-ID), z. B. 1
  5. Klicken Sie mit der rechten Maustaste auf die neu erstellte Slave-Station, wählen SieAdd → Holding Registers, setzen Sie die Startadresse und Anzahl

Klicken Sie auf die SchaltflächeRunin der Symbolleiste, um die Slave-Station zu starten. Die Slave-Station hat bereits am TCP 502 - Port abgehört und kann mit dem Master-Tool wie Modbus Poll oder Modpoll verbunden werden und den Registerwert gelesen werden.

Dynamische Daten mit Python-Skripten generieren

Dies ist die Killerfunktion von ModbusPal. Das folgende Beispiel simuliert einen Temperatursensor, bei dem der Registerwert in Sinusoidalform zwischen 20 ° C und 30 ° C schwankt:

# temperature_simulator.py
# 模拟温度传感器,值在 20.0 - 30.0°C 间以正弦波周期变化

import time
import math

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
    return int(temperature * 10)

def setValue(register, value):
    """可选:处理主站写入的命令"""
    print("Register %d written with value %d" % (register, value))

Binden Sie ein Skript in ModbusPal: Klicken Sie mit der rechten Maustaste auf das Zielregister →Bindings → Add Python Binding→ Wählen Sie die Skriptdatei → Angeben Sie den Adressbereich des gebundenen Registers. Nach dem Starten der Slave-Station wird die Registeradresse mit dem Master-Tool fortgesetzt, um die sinusoide Änderung des Temperaturwerts im Laufe der Zeit zu beobachten.

Erweiterte Szenarien: Simulierung eines kompletten Multi-Device - Industrienetzwerks

In einem realen industriellen Szenario werden in der Regel mehrere Slave-Geräte auf einem RS - 485 - Bus montiert. Mit ModbusPal können wir folgende typische Konfigurationen simulieren:

Slave Station-IDGerätetypRegister-Mapping
1Temperatur-Feuchtigkeit - SensorR0: Temperatur (x10), R1: Feuchtigkeit (x10)
2Dreiphasen-StromzählerR0: A-Phase - Spannung, R1: A-Phase - Strom, R2 - 3: Aktive Leistung (32 - Bit)
3FrequenzumrichterR0: Betriebsfrequenz (x100), R1: Ausgangsstrom (x10), R2: Betriebszustand (Bit-Codierung)
4FlüssigkeitspiegelmesserR0-1: Flüssigkeitspiegelhöhe (mm, 32 - bit), R2: Temperatur (x10)

Fügen Sie vier Slaves in ModbusPal hinzu, erstellen Sie für jede Slave eine entsprechende Registergruppe und binden Sie Python-Skripte für die Register, die dynamische Werte benötigen. Der Vorteil ist, dass die Multi-Gerät - Kommunikation und die Protokolllogik verifiziert werden können, ohne echte Hardware zu kaufen und zu verbinden.

Konstruktion komplexer Simulationsverhaltensweisen

Simulation von Start-Stopp - und Drehzahländerungen

# vfd_simulator.py
# 模拟变频器:接收启停命令,转速按斜坡函数变化

import time

# 全局状态变量
target_freq = 0.0     # 目标频率 (Hz)
current_freq = 0.0    # 当前频率 (Hz)
running = False       # 运行状态

RAMP_RATE = 2.0       # 斜坡速率:2 Hz/秒
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 abs(current_freq - target_freq) > 0.01:
            if current_freq = 0:
            status |= 0x02
        return status
    
    return 0

def setValue(register, value):
    global target_freq, running
    if register == 0:
        # 主站写入控制命令
        # value bit0: 启动/停止, bit1: 方向
        running = bool(value & 0x01)
        if not running:
            target_freq = 0.0
    elif register == 1:
        # 主站写入目标频率(乘以 100)
        target_freq = value / 100.0

Simulation von Analog-Sensoren mit Rauschen

# noisy_sensor.py
# 模拟带噪声的 4-20mA 压力变送器

import time
import math
import random

def getValue(register):
    t = time.time()
    # 基准压力:0.5 MPa,叠加小幅正弦波动
    base_pressure = 500.0  # kPa
    ripple = 10.0 * math.sin(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)
        frac = pressure - int(pressure)
        return int(frac * 1000)
    return 0

in Verbindung mit automatisierten Tests

ModbusPal kann als Projektdatei (Format. mbp) konfiguriert werden, die über die Befehlszeile geladen werden:

# 加载预配置的工程文件并启动
java -jar modbuspal.jar --load my_project.mbp &

Dadurch kann es in den automatisierten Testprozess integriert werden. Typischer Prozess für Testscript:

  1. Starten Sie ModbusPal und laden Sie das Testprojekt (Hintergrund)
  2. Warten auf die Bereitstellung des Slaves
  3. Ausführen von Modbus-Master - Testfällen (z. B. Lesen und Schreiben von Modpoll-Registern)
  4. Verifizieren, dass der Rückgabewert den Erwartungen entspricht
  5. Erstellen von Testberichten
  6. Stoppen von ModbusPal

Einschränkungen von ModbusPal

Bei der Verwendung von ModbusPal sollten folgende Punkte beachtet werden:

  • ProjektaktivitätModbusPal: ModbusPal ist ein früheres Open-Source - Projekt, das in den letzten Jahren weniger häufig aktualisiert wurde. Für einige neuere Modbus-Funktionen (z. B. FC43 / 14 für das Lesen von Geräte-Identifikationen) kann die Unterstützung unvollständig sein.
  • Jython-Version: Die eingebaute Jython-Engine basiert auf der Python 2.x-Syntax und unterstützt keine Python 3 - Features wie f-string und type hints.
  • Hochauflösende Anzeige: Die Java Swing-basierte GUI kann auf 4K-Bildschirmen mit hohem DPI nicht gut angezeigt werden und erfordert eine Anpassung der Java-DPI - Skalierungseinstellungen.
  • ObergrenzeBei der Simulation einer Vielzahl von Slaven (mehr als 20) kann die Verarbeitung der seriellen Ports in Java zu einem Engpass werden.

Alternativen im Vergleich

  • pymodbus(Python): Höchste Flexibilität, TCP / RTU / TLS-Unterstützung, geeignet zum Erstellen von benutzerdefinierten Simulatoren, aber vollständiger Code erforderlich
  • ModRSim2: Kostenloser Modbus-Slave - Emulator für Windows-Plattformen, mit GUI, aber ohne Python-Skripting
  • Modbus Slave(Commercial Software): Das umfassendste kommerzielle Modbus-Simulationswerkzeug, aber nicht kostenlos
  • Unslave Modbus Simulator: Neue kostenlose Optionen mit moderner Schnittstelle

Zusammenfassung

ModbusPal ist mit seiner Python-Skript - basierten dynamischen Registergeneration einzigartig in der Welt der Open-Source - Modbus-Emulatoren. Es eignet sich insbesondere für folgende Anwendungsszenarien: Protokoll-Modulation und - Validierung in der Entwicklungsphase des Modbus-Masterprogramms ohne Zielhardware; komplexe Systemintegrationstests, in denen mehrere verschiedene Arten von Slave-Stationen (Messengeräte, SPS, Frequenzumrichter) simuliert werden müssen; und Szenarien, in denen das reale industrielle Verhalten durch dynamische Wellenformen, zufälliges Rauschen, Steigungsfunktionen usw. nachgebildet werden muss. Wenn Sie Modbus-Hostcomputer - Software, SCADA-Systeme oder IoT-Datenerfassungsgateways entwickeln, ist ModbusPal das richtige Werkzeug, um die Kommunikationslogik zu überprüfen.

Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.