Zum Inhalt springen

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 IDErforderlicher NicknameAndere zulässige FormateDevice ID
1FX_01FX01, FX-010x4601
2FX_02FX02, FX-020x4602
3FX_03FX03, FX-030x4603
  • Groß- und Kleinschreibung wird nicht unterschieden. (fx_01 ist 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-AdresseWire-AdresseRegisternameDatentypR/WBeschreibung
400010DEVICE_IDU16REindeutige Geräte-ID (Beispiel: 0x4601)
400021DEVICE_CONNECTEDU16RVerbindungsstatus der Kamera (1: verbunden, 0: getrennt)
400032YEARU16RAktuelle Zeit (Jahr)
400043MONTHU16RAktuelle Zeit (Monat)
400054DAYU16RAktuelle Zeit (Tag)
400065HOURU16RAktuelle Zeit (Stunde)
400076MINUTEU16RAktuelle Zeit (Minute)
400087SECONDU16RAktuelle Zeit (Sekunde)
400098MAX_DBx10S16RMaximaler Schalldruck (dB-Wert x 10), Beispiel: 45.2dB → 452
400109ALARM_FLAGU16RAlarmstatus (1: Alarm ausgelöst, 0: normal)
4001110THRESH_DBx10S16R/WSchwellenwert (dB-Wert x 10), Beispiel: 42.5dB → 425
4001211THRESH_HOLDx10S16R/WHaltezeit (Sekundenwert x 10), Beispiel: 3.5 Sekunden → 35
40013-1412-13FREQ_LOW_HZU32R/WUntere Frequenzgrenze (Hz)
40015-1614-15FREQ_HIGH_HZU32R/WObere Frequenzgrenze (Hz)

Datentyp-Einstellung auf dem Client

Beispiel eines Einstellungsbildschirms, in dem im PLC-Modbus-Client der Datentyp (INT, WORD, DWORD usw.) je Registeradresse ausgewählt wird

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.

Terminal-Fenster
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) verwenden unit=. 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äuft
FX_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) lesen
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]
# 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) schreiben
new_threshold = 45.5
threshold_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 dB
FX_01 Alarmstatus: normal
Anfrage zum Setzen des FX_02-Schwellenwerts auf 45.5 dB abgeschlossen

6. 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 5020 oder 502 per 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_02 usw. 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_HZ und FREQ_HIGH_HZ, die zwei Register verwenden, müssen als Typ der DWORD-Familie gelesen werden. (siehe Einstellungsbildschirm für den Datentyp in Abschnitt 4)

7. Verwandte Dokumente