Modbus-Anbindung
Handbuch zur Modbus-Anbindung des FX Viewer
1. Funktionsübersicht
Dies ist eine Modbus-TCP-Serverfunktion, mit der die Echtzeitdaten der akustischen Kamera des FX Viewer (Beam Power, Alarmstatus usw.) an externe Systeme (PLC, SCADA, HMI usw.) angebunden werden.
Über diese Funktion können Sie die Kameradaten des FX Viewer von externen Steuergeräten wie einer PLC aus überwachen und einige Einstellungen direkt steuern.
2. Grundeinstellungen und Verbindungsinformationen
Automatischer Start
Sobald das Programm FX Viewer gestartet wird, wird der Modbus-Server automatisch ausgeführt. Eine gesonderte Konfiguration ist nicht erforderlich.
Verbindungsinformationen
-
IP-Adresse: IP-Adresse des PCs, auf dem der FX Viewer ausgeführt wird
-
Port: 5020 (Standard) oder 502
-
Um Umgebungen zu berücksichtigen, in denen keine Berechtigung zur Nutzung von Ports unter 1024 besteht, bindet sich der Server vorrangig an Port 5020. Schlägt die Bindung an Port 5020 fehl, versucht der Server, auf Port 502 zu lauschen.
-
Versuchen Sie clientseitig zuerst eine Verbindung über Port 5020 und, falls diese nicht zustande kommt, über Port 502.
-
-
Protokoll: Modbus TCP
3. Kameraeinstellungen
Damit die Modbus-Funktion ordnungsgemäß arbeitet, muss der Kamera-Nickname im vereinbarten Format festgelegt werden.
⚠️ Wichtig: Kameras, deren Nickname von der nachstehenden Regel abweicht, werden von der Modbus-Anbindung ausgeschlossen. Dies ist die häufigste Ursache dafür, dass keine Daten abgerufen werden; prüfen Sie dies daher vor der Anbindung als Allererstes.
| Unit ID | Erforderlicher Nickname | Andere zulässige Formate | Device ID |
|---|---|---|---|
| 1 | FX_01 | FX01, FX-01 | 0x4601 |
| 2 | FX_02 | FX02, FX-02 | 0x4602 |
| 3 | FX_03 | FX03, FX-03 | 0x4603 |
-
Groß- und Kleinschreibung wird nicht unterschieden. (
fx_01ist möglich) -
Für die vierte und alle weiteren Kameras gilt dieselbe Regel unverändert fort. Die Unit ID wird der Reihe nach für so viele Kameras vergeben, wie im FX Viewer registriert und verwendet werden.
4. Register-Map
- Adressierung: Auf Clients wie einer PLC wird die Verwendung der bei 0 beginnenden Wire-Adresse (Offset) empfohlen. (Beispiel: Adresse 40009 → Anfrage an Adresse
8)
| Modbus-Adresse | Wire-Adresse | Registername | Datentyp | R/W | Beschreibung |
|---|---|---|---|---|---|
| 40001 | 0 | DEVICE_ID | U16 | R | Eindeutige Geräte-ID (Beispiel: 0x4601) |
| 40002 | 1 | DEVICE_CONNECTED | U16 | R | Verbindungsstatus der Kamera (1: verbunden, 0: getrennt) |
| 40003 | 2 | YEAR | U16 | R | Aktuelle Zeit (Jahr) |
| 40004 | 3 | MONTH | U16 | R | Aktuelle Zeit (Monat) |
| 40005 | 4 | DAY | U16 | R | Aktuelle Zeit (Tag) |
| 40006 | 5 | HOUR | U16 | R | Aktuelle Zeit (Stunde) |
| 40007 | 6 | MINUTE | U16 | R | Aktuelle Zeit (Minute) |
| 40008 | 7 | SECOND | U16 | R | Aktuelle Zeit (Sekunde) |
| 40009 | 8 | MAX_DBx10 | S16 | R | Maximaler Schalldruck (dB-Wert x 10), Beispiel: 45.2dB → 452 |
| 40010 | 9 | ALARM_FLAG | U16 | R | Alarmstatus (1: Alarm ausgelöst, 0: normal) |
| 40011 | 10 | THRESH_DBx10 | S16 | R/W | Schwellenwert (dB-Wert x 10), Beispiel: 42.5dB → 425 |
| 40012 | 11 | THRESH_HOLDx10 | S16 | R/W | Haltezeit (Sekundenwert x 10), Beispiel: 3.5 Sekunden → 35 |
| 40013-14 | 12-13 | FREQ_LOW_HZ | U32 | R/W | Untere Frequenzgrenze (Hz) |
| 40015-16 | 14-15 | FREQ_HIGH_HZ | U32 | R/W | Obere Frequenzgrenze (Hz) |
Datentyp-Einstellung auf dem Client

Beispiel eines Einstellungsbildschirms, in dem im PLC-Modbus-Client der Datentyp je Registeradresse ausgewählt wird. Einträge, die ein einzelnes Register verwenden, werden entsprechend dem Typ in der obigen Tabelle gelesen: vorzeichenbehaftete Ganzzahlen (S16) als INT, vorzeichenlose Ganzzahlen (U16) als WORD. FREQ_LOW_HZ und FREQ_HIGH_HZ, die zwei Register (32 Bit) verwenden, werden als Typ der DWORD-Familie gelesen.
5. Hauptfunktionen und Anwendungsbeispiele (Python)
Aktivierung des automatischen Trigger-Modus
- Wenn Sie von der PLC aus einen Wert in das Register für den Schwellenwert (
40011) oder die Haltezeit (40012) schreiben, wird die Aufnahmeart der betreffenden Kamera automatisch in den Modus „Trigger-Aufnahme“ versetzt.
⚠️ Achtung: Schreibzugriffe auf die Register für Schwellenwert und Haltezeit haben den Nebeneffekt, dass die Aufnahmeart der Kamera geändert wird. Wenn Sie ausschließlich Daten überwachen möchten, verwenden Sie nur Leseanfragen; senden Sie Schreibanfragen nur dann, wenn die Umstellung auf Trigger-Aufnahme beabsichtigt ist.
Python-Beispielcode
Das folgende Beispiel verwendet die Python-Bibliothek pymodbus (Stand 3.x). Installieren Sie zunächst die Bibliothek.
pip install pymodbus💡 Hinweis: Bei pymodbus unterscheidet sich das Schlüsselwort zur Angabe der Unit ID je nach Version. Das
slave=im folgenden Beispiel bezieht sich auf 3.x; ältere Versionen (2.x) verwendenunit=. Verwenden Sie das Schlüsselwort, das zur installierten Version passt.
from pymodbus.client import ModbusTcpClient
# Auf IP und Port des PCs setzen, auf dem der FX Viewer läuftFX_VIEWER_IP = '127.0.0.1'FX_VIEWER_PORT = 5020
client = ModbusTcpClient(FX_VIEWER_IP, port=FX_VIEWER_PORT)client.connect()
# -- Beispiel zum Lesen von Daten ---# Daten der Kamera FX_01 (Unit ID = 1) lesen# Ab Wire-Adresse 8 (MAX_DBx10) zwei Register (Schalldruck, Alarm) lesenresult = client.read_holding_registers(8, count=2, slave=1)
if not result.isError(): max_db_x10 = result.registers[0] alarm_flag = result.registers[1]
# In vorzeichenbehaftete 16 Bit umwandeln, dann durch 10 teilen import struct signed_max_db_x10 = struct.unpack('>h', struct.pack('>H', max_db_x10))[0]
print(f"FX_01 max. Schalldruck: {signed_max_db_x10 / 10.0} dB") print(f"FX_01 Alarmstatus: {'ausgelöst' if alarm_flag == 1 else 'normal'}")
# -- Beispiel zum Schreiben von Daten ---# Schwellenwert der Kamera FX_02 (Unit ID = 2) auf 45.5 dB setzen# Wert an Wire-Adresse 10 (THRESH_DBx10) schreibennew_threshold = 45.5threshold_to_write = int(new_threshold * 10)
client.write_register(10, threshold_to_write, slave=2)print(f"Anfrage zum Setzen des FX_02-Schwellenwerts auf {new_threshold} dB abgeschlossen")
client.close()Beispiel für das Ausführungsergebnis
Ausgabebeispiel für den Fall, dass der maximale Schalldruck der Kamera FX_01 45.2 dB beträgt (Registerwert 452) und sich der Alarm im Normalzustand befindet.
FX_01 max. Schalldruck: 45.2 dBFX_01 Alarmstatus: normalAnfrage zum Setzen des FX_02-Schwellenwerts auf 45.5 dB abgeschlossen6. Fehlerbehebung (Troubleshooting)
-
Wenn keine Verbindung zustande kommt:
-
Prüfen Sie, ob die IP-Adresse und der Port (5020) des FX-Viewer-PCs korrekt sind.
-
Prüfen Sie, ob in der Windows-Firewall der Port
5020oder502per eingehender Regel freigegeben ist.
-
-
Wenn die Daten nur als 0 angezeigt werden:
-
Prüfen Sie, ob die Kamera im FX Viewer aktiviert ist und Echtzeitdaten eingehen.
-
Prüfen Sie noch einmal, ob der Nickname der Kamera korrekt als
FX_01,FX_02usw. festgelegt ist. (häufigste Ursache)
-
-
Wenn einzelne Werte (z. B. die Frequenz) fehlerhaft gelesen werden:
- Prüfen Sie, ob die Datentyp-Einstellung des Clients mit dem Typ in der Register-Map (S16/U16/U32) übereinstimmt. Insbesondere
FREQ_LOW_HZundFREQ_HIGH_HZ, die zwei Register verwenden, müssen als Typ der DWORD-Familie gelesen werden. (siehe Einstellungsbildschirm für den Datentyp in Abschnitt 4)
- Prüfen Sie, ob die Datentyp-Einstellung des Clients mit dem Typ in der Register-Map (S16/U16/U32) übereinstimmt. Insbesondere
7. Verwandte Dokumente
-
Erste Schritte im Developer Center — Übersicht der Entwicklungsdokumentations-Tracks je Produkt
-
Entwicklerressourcen — Sammlung von Repositorys mit Integrationsbeispielen und externen Ressourcen