Intégration Modbus
Manuel de la fonction d’intégration Modbus de FX Viewer
1. Présentation de la fonction
Il s’agit d’une fonction de serveur Modbus TCP permettant d’intégrer les données de caméra acoustique en temps réel de FX Viewer (puissance de faisceau, état d’alarme, etc.) à des systèmes externes (PLC, SCADA, HMI, etc.).
Cette fonction permet, depuis un dispositif de contrôle externe tel qu’un PLC, de surveiller les données de caméra de FX Viewer et de contrôler directement certains réglages.
2. Réglages de base et informations de connexion
Démarrage automatique
Lorsque le programme FX Viewer démarre, le serveur Modbus s’exécute automatiquement. Aucun réglage particulier n’est nécessaire.
Informations de connexion
-
Adresse IP : adresse IP du PC sur lequel FX Viewer est en cours d’exécution
-
Port : 5020 (par défaut) ou 502
-
Afin de tenir compte des environnements ne disposant pas des droits nécessaires pour utiliser les ports inférieurs ou égaux à 1024, le serveur se lie en priorité au port 5020. Si la liaison au port 5020 échoue, le serveur tente d’écouter sur le port 502.
-
Côté client, essayez d’abord de vous connecter au port 5020 ; si la connexion n’aboutit pas, tentez la connexion sur le port 502.
-
-
Protocole : Modbus TCP
3. Configuration de la caméra
Pour que la fonction Modbus fonctionne correctement, le surnom de la caméra doit être défini selon le format convenu.
⚠️ Important : les caméras dont le surnom diffère des règles ci-dessous sont exclues de l’intégration Modbus. Comme il s’agit de la cause la plus fréquente lorsque les données ne sont pas récupérées, vérifiez ce point en tout premier lieu avant l’intégration.
| Unit ID | Surnom requis | Autres formats acceptés | Device ID |
|---|---|---|---|
| 1 | FX_01 | FX01, FX-01 | 0x4601 |
| 2 | FX_02 | FX02, FX-02 | 0x4602 |
| 3 | FX_03 | FX03, FX-03 | 0x4603 |
-
La casse n’est pas prise en compte. (
fx_01est accepté) -
La même règle s’applique telle quelle à partir de la quatrième caméra. Les Unit ID sont attribués dans l’ordre, à hauteur du nombre de caméras enregistrées et utilisées dans FX Viewer.
4. Mappage des registres
- Mode d’adressage : côté client (PLC, etc.), il est recommandé d’utiliser les adresses filaires (Offset) commençant à 0. (Exemple : adresse 40009 → requête à l’adresse
8)
| Adresse Modbus | Adresse filaire | Nom du registre | Type de données | R/W | Description |
|---|---|---|---|---|---|
| 40001 | 0 | DEVICE_ID | U16 | R | ID unique de l’appareil (exemple : 0x4601) |
| 40002 | 1 | DEVICE_CONNECTED | U16 | R | État de connexion de la caméra (1 : connectée, 0 : déconnectée) |
| 40003 | 2 | YEAR | U16 | R | Heure actuelle (année) |
| 40004 | 3 | MONTH | U16 | R | Heure actuelle (mois) |
| 40005 | 4 | DAY | U16 | R | Heure actuelle (jour) |
| 40006 | 5 | HOUR | U16 | R | Heure actuelle (heures) |
| 40007 | 6 | MINUTE | U16 | R | Heure actuelle (minutes) |
| 40008 | 7 | SECOND | U16 | R | Heure actuelle (secondes) |
| 40009 | 8 | MAX_DBx10 | S16 | R | Pression acoustique maximale (valeur en dB x 10), exemple : 45.2dB → 452 |
| 40010 | 9 | ALARM_FLAG | U16 | R | État d’alarme (1 : alarme déclenchée, 0 : normal) |
| 40011 | 10 | THRESH_DBx10 | S16 | R/W | Seuil (valeur en dB x 10), exemple : 42.5dB → 425 |
| 40012 | 11 | THRESH_HOLDx10 | S16 | R/W | Temps de maintien (valeur en secondes x 10), exemple : 3.5 s → 35 |
| 40013-14 | 12-13 | FREQ_LOW_HZ | U32 | R/W | Limite inférieure de fréquence (Hz) |
| 40015-16 | 14-15 | FREQ_HIGH_HZ | U32 | R/W | Limite supérieure de fréquence (Hz) |
Configuration du type de données côté client

Exemple d’écran de configuration permettant de sélectionner le type de données pour chaque adresse de registre dans un client Modbus PLC. Les éléments utilisant un seul registre se lisent conformément aux types du tableau ci-dessus : les entiers signés (S16) en INT et les entiers non signés (U16) en WORD ; FREQ_LOW_HZ et FREQ_HIGH_HZ, qui utilisent deux registres (32 bits), se lisent avec un type de la famille DWORD.
5. Fonctions principales et exemples d’utilisation (Python)
Activation du mode de déclenchement automatique
- Lorsqu’une valeur est écrite depuis le PLC dans le registre de seuil (
40011) ou de temps de maintien (40012), le mode d’enregistrement de la caméra concernée passe automatiquement en mode « enregistrement déclenché ».
⚠️ Attention : l’écriture dans les registres de seuil et de temps de maintien a pour effet secondaire de modifier le mode d’enregistrement de la caméra. Si vous n’avez besoin que de surveiller les données, utilisez uniquement des requêtes de lecture et n’envoyez des requêtes d’écriture que si le passage à l’enregistrement déclenché est intentionnel.
Exemple de code Python
L’exemple ci-dessous utilise la bibliothèque Python pymodbus (sur la base de la version 3.x). Installez d’abord la bibliothèque.
pip install pymodbus💡 Remarque : selon la version, pymodbus utilise un mot-clé différent pour spécifier l’Unit ID. Le
slave=de l’exemple ci-dessous correspond à la version 3.x, tandis que les versions antérieures (2.x) utilisentunit=. Utilisez le mot-clé correspondant à la version installée.
from pymodbus.client import ModbusTcpClient
# Renseigner l'adresse IP et le port du PC sur lequel FX Viewer est en cours d'exécutionFX_VIEWER_IP = '127.0.0.1'FX_VIEWER_PORT = 5020
client = ModbusTcpClient(FX_VIEWER_IP, port=FX_VIEWER_PORT)client.connect()
# -- Exemple de lecture de données ---# Lecture des données de la caméra FX_01 (Unit ID = 1)# Lit 2 registres (pression acoustique, alarme) à partir de l'adresse filaire 8 (MAX_DBx10)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]
# Conversion en entier signé 16 bits puis division par 10 import struct signed_max_db_x10 = struct.unpack('>h', struct.pack('>H', max_db_x10))[0]
print(f"FX_01 pression acoustique max : {signed_max_db_x10 / 10.0} dB") print(f"FX_01 état d'alarme : {'Déclenchée' if alarm_flag == 1 else 'Normal'}")
# -- Exemple d'écriture de données ---# Définit le seuil de la caméra FX_02 (Unit ID = 2) à 45.5 dB# Écrit la valeur à l'adresse filaire 10 (THRESH_DBx10)new_threshold = 45.5threshold_to_write = int(new_threshold * 10)
client.write_register(10, threshold_to_write, slave=2)print(f"FX_02 : demande de réglage du seuil à {new_threshold} dB terminée")
client.close()Exemple de résultat d’exécution
Exemple de sortie lorsque la pression acoustique maximale de la caméra FX_01 est de 45.2 dB (valeur de registre 452) et que l’alarme est à l’état normal.
FX_01 pression acoustique max : 45.2 dBFX_01 état d'alarme : NormalFX_02 : demande de réglage du seuil à 45.5 dB terminée6. Résolution des problèmes (Troubleshooting)
-
Si la connexion n’aboutit pas :
-
Vérifiez que l’adresse IP et le port (5020) du PC FX Viewer sont corrects.
-
Vérifiez que le port
5020ou502est autorisé par une règle de trafic entrant dans le pare-feu Windows.
-
-
Si les données n’affichent que la valeur 0 :
-
Vérifiez que la caméra est activée dans FX Viewer et que des données en temps réel sont bien reçues.
-
Vérifiez une nouvelle fois que le surnom de la caméra est correctement défini sur
FX_01,FX_02, etc. (cause la plus fréquente)
-
-
Si certaines valeurs (fréquence, etc.) sont lues de manière anormale :
- Vérifiez que la configuration du type de données du client correspond aux types du mappage des registres (S16/U16/U32). En particulier,
FREQ_LOW_HZetFREQ_HIGH_HZ, qui utilisent deux registres, doivent être lus avec un type de la famille DWORD. (Voir l’écran de configuration du type de données de la section 4)
- Vérifiez que la configuration du type de données du client correspond aux types du mappage des registres (S16/U16/U32). En particulier,
7. Documents associés
-
Démarrer avec le centre développeur — présentation des parcours de documentation de développement par produit
-
Ressources pour développeurs — dépôts d’exemples d’intégration et ensemble de ressources externes