Hallo Peter,
der Server warte auf eine Empfangsbestätigung, die kommt aber nicht. Das kann verschiedene Ursachen haben...
Das deine Anlage Modbus unterstützt (die Existenz einer RS485-Schnittstelle ist keine Gewähr dafür, das Modbus vorhanden ist) hast du ja sicherlich schon abgeklärt.
Ich beschreibe einfach einmal, wie es bei mir funktioniert. Ich benutze zum Testen (Linux) allerdings das Programm Modpoll:
1. Meine Aufsatzplatine ist mit einem einfachen Twistedpair-Kabel mit der Aufsatzplatine der Lüftungsanlage verbunden.
2. Auf der Aufsatzplatine für den Rasbpi ist der optionale Abschlusswiderstand aktiv (dies ist eventuell nur bei größeren Strecken erforderlich ("Leitungsecho"))
3. Ich nutze Openhabian, da habe ich dem von mit genutzten Nutzer die Zugriffsberechtigung für den seriellen Port erteilen müssen, ansonsten geht da nichts.
4. In der Lüftungsanlage habe ich das Netzwerk durch die Wahl einer Slave-Adresse freigeben müssen (Menü 5, Parameter P 90, Voreinstellung = 0 /nicht im Netzwerk). Gewählt habe ich die Adresse "1".
5. Das Programm Modpoll
https://www.modbusdriver.com/modpoll.htmlhabe ich auf dem Rasbpi unter /opt installiert.
6. Für den erfolgreichen Zugriff muss ich Modpoll das zu verwendende Protokoll, die Art des Zugriffs, die Einstellungen der seriellen Schnittstelle, die Einstellungen für die zu benutzenden Register, das Start-Register und die Anzahl der zu nutzenden Register vorgeben.
Aus dem Internet habe ich eine Liste mit den Registern meiner Lüftungsanlage und die benötigen Einstellungen. Ich möchte in diesem Beispiel das Datum der Anlage auslesen, genauer das Jahr. Das entsprechende Register hat in der Anleitung die Nummer "39" (es wird von 0 hochgezählt). Für Modpoll benötige ich eigentlich die "40" (da Register von 1 hochgezählt werden), ich kann das aber in Modpoll durch den Parameter "-0" korrigieren, damit ich die in meinen Unterlagen vorgegebenen Werte ohne Korrektur nutzen kann.
7. Also hier die benötigten Einstellungen für Modpoll, um die Jahreszahl auszulesen (vergleiche die Angaben unter "Usage" unter dem o.a. Link):
Code: Alles auswählen
/dev/ttyS0 (die unter Linux benutzte serielle Schnittstelle)
-m rtu (das Modbusprotokoll rtu)
-a 1 (die (Slave-) Adresse der Lüftungsanlage
-r 39 (Startregister, hier das Register, in dem sich die Jahreszahl versteckt)
-c 1 (Anzahl der abzufragenden Register)
-t 4 (der Datentyp des Registers, hier 16bit Holding)
-0 (Korrektur der Zählweise, "39" wird hier zu "40")
-1 (nur eine einzelne Abfrage (Poll))
-b 9600 (die Baudrate der seriellen Schnittstelle)
-d 8 (die Anzahl der Databits)
-s 1 (Anzahl der Stopbits)
-p none (keine Parität)
8. In der Linux-Konsole gebe ich also folgende Zeile ein (ergänzt um den Pfad zum Programm Modpoll):
Code: Alles auswählen
/opt/modpoll/modpoll /dev/ttyS0 -m rtu -a 1 -r 39 -c 1 -t 4 -0 -1 -b 9600 -d 8 -s 1 -p none
und erhalte, tata:
Code: Alles auswählen
modpoll 3.6 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2018 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.
Protocol configuration: Modbus RTU
Slave configuration...: address = 1, start reference = 39 (PDU), count = 1
Communication.........: /dev/ttyS0, 9600, 8, 1, none, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, output (holding) register table
-- Polling slave...
[39]: 2019
Also habe ich die Jahreszahl "2019" erfolgreich ausgelesen.
Vielleicht lässt sich die Vorgehensweise sinngemäß auf "QModMaster" übertragen.
grüße
ralf