NEWS
Modbus RS485 Konfiguration
-
@homoran
Der Arduino hat in dem Sinne des Modbus keine Register. Ich möchte mir nur Integer Werte aus dem IOB zum weiterverarbeiten zum Arduino senden. diese sollte ich aus den Protokollen mit Funktion 6 aus den Bytes 3 und 4 (Adresse 0 .. 3) und den Bytes 5 und 6 (Dateninhalt) auslesen können. -
@jg sagte in Modbus RS485 Konfiguration:
Der Arduino hat in dem Sinne des Modbus keine Register
dann befürchte ich, dass der Modbus Adapter dann nicht der richtige ist.
Wie gesagt@homoran sagte in Modbus RS485 Konfiguration:
RS485 ist nicht Modbus!
über RS485 können verschiedene Protokolle laufen.
-
@homoran
gibt es denn andere RS485 Adapter für den IO-Broker?Daten zum IOB senden geht ja einwandfrei mit dem Modbus Adapter, siehe die Antwort des Arduino auf die Anfrage des IOB, Protokolle 3 und 4.
Anfrage IOB: 007 003 000 000 000 004 0F1 0AF bedeutet 4 Eingangsregister ab Adresse 0 anfragen
Antwort MC: 001 003 008 000 07B ... bedeutet 8 Byte Werte als 4 Integerwerte zurück.Deshalb war meine ursprüngliche Frage nach der Konfiguration des Modbus Adapters um die Protokolle 6 (bzw. 16) mit Dateninhalt aus dem IOB zu senden. Auswerten kann ich die dann im Arduino nach meinen Vorstellungen, aber der IOB muß die Daten erst mal senden.
Die Definition Funktionscode 6 ist:BYTE ANFRAGE BYTE ANTWORT (Hex) Feldname (Hex) Feldname 11 Geräteadresse 11 Geräteadresse 06 Funktionaler Code 06 Funktionaler Code 00 Adresse des ersten Registers Hi Bytes 00 Adresse des ersten Registers Hi Bytes 01 Adresse des ersten Registers Lo Bytes 01 Adresse des ersten Registers Lo Bytes 00 Wert der Hi Bytes 00 Wert der Hi Bytes 03 Wert der Lo Bytes 03 Wert der Lo Bytes 9A Prüfsumme CRC 9A Prüfsumme CRC 9B Prüfsumme CRC 9B Prüfsumme CRC
leider kommen keine Werte an, nur Nullen, obwohl in den Registern Werte im IOB vorhanden sind:
-
@jg sagte in Modbus RS485 Konfiguration:
Deshalb war meine ursprüngliche Frage nach der Konfiguration des Modbus Adapters um die Protokolle 6 (bzw. 16) mit Dateninhalt aus dem IOB zu senden.
da kann ich dir nicht helfen.
-
Danke erst mal, evtl. meldet sich noch mal jemand, der Modbus seriell vielleicht schon in eigenen Projekten verwendet hat.
-
@jg Ist das Arduino Programm von Dir erstellt? Kennst Du Dich damit aus? Dann würde es sich anbieten die Kommunikation mit dem ioBroker auf TCP (Ethernet) umzustellen.
Dazu gibt es den simpleApi Adapter -
@klassisch
mit dem Arduino kann ich umgehen, das Testprogramm für den Modbusadapter habe ich selbst geschrieben, außer die Prüfsummenberechnung.
Eine Kommunikation per Ethernet mit dem IOB habe ich laufen, diese ist aber recht instabil, daher möchte ich die Kommunikation zum IOB lieber seriell aufbauen. Über den Ethernetadapter mit W5500 habe ich gleichzeitig einen Webserver, NTP per UDP, Datenkommunikation mit einem anderen Arduino per UDP und MQTT zum IOB laufen. Leider hängt sich die MQTT Übertragung bei Zugriff auf den Webserver unregelmäßig auf, was sogar zum Absturz des IOB führt. Beide fangen sich zwar wieder per watchdog, aber so ist das ganze leider nicht brauchbar. Deshalb möchte ich eine serielle Verbindung zum IOB aufbauen, den 2. Arduino habe ich auch schon seriell angebunden und NTP könnte ich auch einsparen, wenn ich mir die NTP Zeit vom IOB seriell abholen könnte. Ebenfalls habe ich schon mit Wlan mit einem ESP32 und einem Raspberry Pico getestet. Das läuft leider noch instabiler als die Version mit dem Ethernet Chip W5500.
Daher wäre mein Ausweg aus dem Dilemma eine serielle Verbindung zum IOB in beide Richtungen. Möglich wären ja theoretisch bis reichlich 120 Integerwerte in einem Telegramm (Funktionscode 16). Kennst du dich mit der Konfiguration des Modbus Adapters aus? -
@jg Ich kann gerade mal Modbus Geräte mehr oder weniger per trial & Error in den Modbus Adapter einlesen. Ich mache das dann auch nicht über USB sondern über einen RS485 <->TCP Server.
Ich kann aber kein Modbus Protokoll aufbauen, wie es hier erforderlich wäre. Bzw. ich habe das noch nie gemacht und habe auch keine Notwendigkeit dazu.
Ich habe eine kleine Herde von ESP8266, die recht stabil über simpleApi oder MQTT Daten an den ioBroker liefern. Ist hat WLAN und beim Update der Fritte oder sonstigen Wifi Störungen macht das ein oder andere schlecht mit WLAN versorgte Teil mal einen Neustart. Aber ich hatte auch schon jahrelange update Zeiten, bis ein Bagger alles stromlos machte.
Wenn aber Deine ESP32 in Deiner Umgebung kein stabiles WLAN und Deine Arduinios kein stabile LAN aufbauen können, dann ist das auch nichts.
Was Du eventuell testen könntest:- Anfrage, ob der simpleApi Adapter um eine serielle Schnittstelle erweiterbar wäre. Ich denke, die Realisierungsschancen sind eher gering, denn der Entwickler ist sehr beschäftigt und serielle Schnittstellen bei nodejs scheinen etwas aufwendiger zu sein.
- Testen, ob Du mit einem serial <-> TCP Konverter weiter kommst und so auf den simpleApi Adapter zugreifen kannst. Ich denke hierbei speziell an den USR-WIFI232-A2 (WLAN), da dieser laut Manual https://www.pusr.com/download/WIFI/USR-WIFI232-A2_User_Manual-V6.0.pdf über einen "transparent Mode" verfügt (Kap. 4.2.1, S.20). Damit könnte es nach meinem Verständnis möglich sein eine Art serial via TCP aufzubauen.
Entweder die serielle Verbindung zwischen dem Arduino und dem USRIOT direkt über "TTL"-Digitalleitungen schaffen oder eben über die kostengünstigen RS484 Konverter auf beiden Seiten.
Habe aber diesen transparenten Modus bei dem USRIOT nicht getetet. Ich verwende ihn im Modbus RTU mode, um einen modbusfähigen Stromzähler mithilfe des Modbus Adapters auszulesen.
-
@klassisch
danke für deine Vorschläge, werde mich mal mit dem Thema simpleAPI befassen -
@jg https://github.com/ioBroker/ioBroker.simple-api
setbulk um mehrere Werte an ioBroker zu übertragenKannst Du vom Browser aus testen. SimpleApi Adapter installieren und vom Office PC Browser den Befehl abschießen.