NEWS
Modbus adapter
-
Hallo
Im Cmi kannst du unter Ethernet den Port einstellen. Bei mir zb. 502. Hast du schon mal Daten zum CMI ueber Modbus gesendet. Bei funktioniert lesen sehr gut, schreiben geht nur wenn ich den Wert im Holding Register mit der Hand eintippe. Sobald ich einen Wert zb mit Blockly aus der Homematic lese und in das Register schreibe ändert sich diese im CMI nicht. Hat hier jemand eine Idee? Vielleicht unterschiedliche Datentypen!?
Nachtrag:
Habe eben mir mal die Datentypen der Homematic angeschaut. Temperatur Sollwert wird als float also als eine 32 Bit Real Zahl definiert. Ab und zu nach der Aenderung überträgt er jetzt. Ergebnis folgt.Gruß
Andreas
-
@Almi bei mir funktioniert mittlerweile die Kommunikation in beide Richtungen ohne Probleme. Man muss auf die Datentypen aufpassen (primäre signed, unsigned). Auch die Faktoren sind teilweise komisch ... bei den holding Register brauche ich Faktor 10 bei den Eingangsregister Faktor 0,1.
Von den Einstellungen funktioniert’s beim Modbus Adapter mit IP 0.0.0.0, Port habe ich auf 5020 gestellt und Slave -
Danke Peter für die Antwort, wann verwende ich das holding und wann das Eingangsregister. Mir ist der Unterschied nicht ganz klar.
Gruss
Andreas
-
@Almi
Holding sind die Werte die aus dem C.M.I. importiert werden, Eingangsregister sind die Werte die ich an das C.M.I. sende -
@peterk34
OK vielen Dank. Wie kann ich ein Eingangsregister hinzufügen? Bei mir ist da kein "+" rechts. Jedes mal wenn ich die Werte eingeben kann ich diese nicht speichern. Wo werden die definiert bzw. wie kann ich was an die Liste anhängen?Gruss
Andreas
-
@Almi
bei mir ist da ein Plus ...Es funktioniert normalerweise auch wenn du einfach oben in die Felder eingibst und enter drückst
-
Mmm bei erscheint das Plus nur wenn ich auf Master für den Iobroker Modbus Adapter umstelle. Komischerweise bleibt dann die Einstellung erhalten wenn ich wieder auf Slave umstelle. Einfach eingeben reicht leider zum speichern nicht. Er bietet dann unten nicht die Speicherung an. Ich bleibe drann. Danke für deine Infos
Gruß Andreas
-
@smartboart
Hast Du das damals hinbekommen? hier: https://forum.iobroker.net/post/149807
Habe einen ABB Zähler da, in der Anleitung steht sowas:
*Dies wird genau so ausgedrückt, wie es auf dem Bus gesendet wird. Das heißt es sollte nicht mit 40 000 subtrahiert oder um 1 vermindert werden, wie das bei Modbus-Produkten üblich ist.
Seite 105 hier https://search.abb.com/library/Download.aspx?DocumentID=2CMC486007M0101&LanguageCode=de&DocumentPartId=&Action=LaunchAllerdings bekomme ich keine Antwort vom Zähler...
@Bluefox wäre es möglich, im Debug oder Silly genau die Kommunikation auszugeben? Ich meine Anfrage-Antwort in hex...
-
@Vod nein leider nicht....habe ich nie zum laufen bekommen. Bin auf andere Zähler umgestiegen.
-
Für alle, die es interessiert: ABB A43 212-100, die Leitungen müssen verdreht werden (RS485 USB Adapter für 2 Eur mit CH341). Also A mit B und B mit A verbunden. Ohne Abschlusswiderstände funzt alles (1m twisted aus einem LAN cat6 Kabel).
-
@Vod Das ist ein beliebtes RS485 Thema. Es gibt eine Spezifikation zu RS485 und eine einheitlich widersprüchliche Auslegung der Halbleiterhersteller. Mehr dazu in https://en.wikipedia.org/wiki/RS-485#Signals . Texas Instruments nimmt dazu verschwurbelt Stellung ttp://e2e.ti.com/cfs-file/__key/telligent-evolution-components-attachments/13-143-00-00-00-26-49-60/RS485-2D00-Polarity-Conventions.pdf
Die in Fragen von Richtlinien, Gesetzen und Normen geplagten und geübten Europäischen Hersteller von Elektroinstallationsmaterial halten sich indes streng an die Norm und stehen damit ganz unpragmatisch quer im Stall.
Die Halbleiterhersteller sind sich wohl dieser Misere bewußt (siehe "Texas Instruments, Polarity Conventions") und neuere Bausteine wie der THVD1505 erkennen und korrigieren eine Vertauschung automatisch - änlich wie bei das bei Ethernet schon lange der Fall ist. Aber diese Bausteine sind noch nicht in den Chinesischen DIY Modulen angekommen. Und gerade diese Bausteine verwenden wir häufig in unseren Wandlern und vertrauen deren Beschriftung.
Fazit: Bei RS485 muß man sich zwar nicht wie bei RS232 die Frage stellen, ob der Entwickler das Gerät als DTE oder DCE eingestuft hat. Allerdings gibt es leider auch da Verwirrung bei der Bezeichnung der Signalleitungen A und B. -
Guten Morgen zusammen. Ich habe eine Nilan Wärmepumpe und werde aus der Doku nicht schlau. Da stehen nur 20tausender Registernummern. Die gibt es doch gar nicht, oder? Kann mir jemand auf die Sprünge helfen?
Hier der Link zur Doku: https://de.nilan.dk/Admin/Public/DWSDownload.aspx?File=%2FFiles%2FFiler%2FDownload%2FDanish%2FDokumentation%2FSoftware+vejledninger%2FModbus%2FCTS700_Modbus_protokol.pdf
Gruß Stephie -
@kleine_kuh Wieso soll es die nicht geben? Meinst du der Hersteller schreibt die zum Spaß in seine Doku oder wie kommst du darauf?
-
@wendy2702 Ich dachte mir schon, dass er es nicht zum Spaß reinschreibt. Deswegen frage ich ja. Aber ich dachte es gibt 0-9999, 10001-19999, 30001-39999 und 40001 bis 49999. Dass einige nur lesen und andere lesen und schreiben können ist mir klar. Nur weíß ich leider nicht, wo ich die eintragen muss im Adapter. Kann mir da jemand auf die Sprünge helfen? (Selbstverständlich will ich auch nicht alle von denen verwenden)
-
@kleine_kuh Konfiguriere mal den Modbus Adapter mit den richtigen Kommunikations Einstellungen.
Suche die ein Register aus das nur lesbar ist.
Trage das dann bei Holding oder Eingangsregister mit der entsprechenden Kodierung z.B. 16bit unsigned ein
Stelle das loggen für die Instanz auf Debug.
Starte den Adapter und poste dann das logfile hier in Code Tags </> und poste Screenshots deiner Einstellungen und der Register Karte.
-
@wendy2702 Ok, danke. Heute und morgen komme ich nicht mehr dazu. Aber ich poste es, sobald ich es schaffe
-
Servus!
Ich habe irgendwie Probleme mehrere Werte parallel auszulesen, wenn diese zu weit auseinander liegen.
Ich verwende einen USB Stick zum seriellen Auslesen.
Unter Windows mit CAD Modbus Scanner kann ich auch alle Werte korrekt auslesen.Nutze aktuell: Modbus 3.3.1
Ich hatte aber auch die Modbus Version von Github installiert zum Testen. Hier konnte ich nicht mehr meinen USB0 auswählen. Es wurde mir nur COM1 angezeigt, was nicht funktionierte. Oder Soll COM hier = den USB Devices sein?
Diese Abfrage funktioniertmodbus.0 2021-06-13 11:04:25.224 debug (16668) Poll holdingRegs DevID(2) address 346 - 6 bytes modbus.0 2021-06-13 11:04:25.223 debug (16668) Poll device 2 modbus.0 2021-06-13 11:04:24.144 debug (16668) Poll holdingRegs DevID(2) address 346 - 6 bytes modbus.0 2021-06-13 11:04:24.143 debug (16668) Poll device 2 modbus.0 2021-06-13 11:04:23.065 debug (16668) Poll holdingRegs DevID(2) address 346 - 6 bytes modbus.0 2021-06-13 11:04:23.064 debug (16668) Poll device 2 modbus.0 2021-06-13 11:04:21.971 debug (16668) Poll holdingRegs DevID(2) address 346 - 6 bytes modbus.0 2021-06-13 11:04:21.971 debug (16668) Initialization of scale factors done! modbus.0 2021-06-13 11:04:21.969 debug (16668) Poll device 2 modbus.0 2021-06-13 11:04:21.968 info (16668) Connected to slave modbus.0 2021-06-13 11:04:21.955 debug (16668) connect to serial /dev/ttyUSB0 with 115200 modbus.0 2021-06-13 11:04:21.586 debug (16668) Add holdingRegisters.40385_Code_Störung: {"_id":"holdingRegisters.40385_Code_Störung","type":"state","common":{"name":"","role":"state","type":"number","read":false,"write":true,"def":0,"unit" modbus.0 2021-06-13 11:04:21.585 debug (16668) Add holdingRegisters.40352_Innenlufttemperatur: {"_id":"holdingRegisters.40352_Innenlufttemperatur","type":"state","common":{"name":"","role":"state","type":"number","read":true,"write":true," modbus.0 2021-06-13 11:04:21.585 debug (16668) Add holdingRegisters.40351_Frischlufttemperatur: {"_id":"holdingRegisters.40351_Frischlufttemperatur","type":"state","common":{"name":"","role":"state","type":"number","read":true,"write":true modbus.0 2021-06-13 11:04:21.584 debug (16668) Add holdingRegisters.40349_Bypass_Status: {"_id":"holdingRegisters.40349_Bypass_Status","type":"state","common":{"name":"","role":"state","type":"number","read":true,"write":true,"def":0,"unit modbus.0 2021-06-13 11:04:21.584 debug (16668) Add holdingRegisters.40348_Filter: {"_id":"holdingRegisters.40348_Filter","type":"state","common":{"name":"","role":"state","type":"number","read":true,"write":true,"def":0,"unit":""},"native" modbus.0 2021-06-13 11:04:21.583 debug (16668) Add holdingRegisters.40347_Filter_Status: {"_id":"holdingRegisters.40347_Filter_Status","type":"state","common":{"name":"","role":"state","type":"number","read":true,"write":true,"def":0,"unit modbus.0 2021-06-13 11:04:21.583 debug (16668) Add holdingRegisters.40260_Bypass_Modus: {"_id":"holdingRegisters.40260_Bypass_Modus","type":"state","common":{"name":"","role":"state","type":"number","read":false,"write":true,"def":0,"unit" modbus.0 2021-06-13 11:04:21.582 debug (16668) Add holdingRegisters.40258_Geschwindigkeit: {"_id":"holdingRegisters.40258_Geschwindigkeit","type":"state","common":{"name":"","role":"state","type":"number","read":false,"write":true,"def":0, modbus.0 2021-06-13 11:04:21.582 debug (16668) Initialize Objects for holdingRegs: [{"_address":40258,"name":"Geschwindigkeit","description":"","unit":"","type":"uint16be","len":1,"factor":"1","offset":"0","formula":"","role":"state","room modbus.0 2021-06-13 11:04:21.581 debug (16668) Initialize Objects for inputRegs: [] modbus.0 2021-06-13 11:04:21.581 debug (16668) Initialize Objects for coils: [] modbus.0 2021-06-13 11:04:21.580 debug (16668) Initialize Objects for disInputs: [] modbus.0 2021-06-13 11:04:21.273 info (16668) starting. Version 3.3.1 in /opt/iobroker/node_modules/iobroker.modbus, node: v12.22.1, js-controller: 3.2.16
Dise Abfrage funktioniert nicht, weil diese Modbus in zwei Abfragen aufteilt?
Der Adapter wechselt danach sofort auf GELBmodbus.0 2021-06-13 11:07:07.885 debug (20689) Cleaning up request fifo. modbus.0 2021-06-13 11:07:07.884 debug (20689) Clearing timeout of the current request. modbus.0 2021-06-13 11:07:07.877 info (20689) Disconnected from slave modbus.0 2021-06-13 11:07:06.877 warn (20689) Poll error count: 1 code: {"err":"timeout","timeout":5000} modbus.0 2021-06-13 11:07:06.876 error (20689) Request timed out. modbus.0 2021-06-13 11:07:06.875 warn (20689) Error: undefined modbus.0 2021-06-13 11:07:01.872 debug (20689) Poll holdingRegs DevID(2) address 346 - 6 bytes modbus.0 2021-06-13 11:07:01.837 debug (20689) Poll holdingRegs DevID(2) address 257 - 1 bytes modbus.0 2021-06-13 11:07:01.837 debug (20689) Initialization of scale factors done! modbus.0 2021-06-13 11:07:01.835 debug (20689) Poll device 2 modbus.0 2021-06-13 11:07:01.834 info (20689) Connected to slave modbus.0 2021-06-13 11:07:01.819 debug (20689) connect to serial /dev/ttyUSB0 with 115200 modbus.0 2021-06-13 11:07:01.479 debug (20689) Add holdingRegisters.40385_Code_Störung: {"_id":"holdingRegisters.40385_Code_Störung","type":"state","common":{"name":"","role":"state","type":"number","read":false,"write":true,"def":0,"unit" modbus.0 2021-06-13 11:07:01.479 debug (20689) Add holdingRegisters.40352_Innenlufttemperatur: {"_id":"holdingRegisters.40352_Innenlufttemperatur","type":"state","common":{"name":"","role":"state","type":"number","read":true,"write":true," modbus.0 2021-06-13 11:07:01.478 debug (20689) Add holdingRegisters.40351_Frischlufttemperatur: {"_id":"holdingRegisters.40351_Frischlufttemperatur","type":"state","common":{"name":"","role":"state","type":"number","read":true,"write":true modbus.0 2021-06-13 11:07:01.478 debug (20689) Add holdingRegisters.40349_Bypass_Status: {"_id":"holdingRegisters.40349_Bypass_Status","type":"state","common":{"name":"","role":"state","type":"number","read":true,"write":true,"def":0,"unit modbus.0 2021-06-13 11:07:01.477 debug (20689) Add holdingRegisters.40348_Filter: {"_id":"holdingRegisters.40348_Filter","type":"state","common":{"name":"","role":"state","type":"number","read":true,"write":true,"def":0,"unit":""},"native" modbus.0 2021-06-13 11:07:01.477 debug (20689) Add holdingRegisters.40347_Filter_Status: {"_id":"holdingRegisters.40347_Filter_Status","type":"state","common":{"name":"","role":"state","type":"number","read":true,"write":true,"def":0,"unit modbus.0 2021-06-13 11:07:01.476 debug (20689) Add holdingRegisters.40260_Bypass_Modus: {"_id":"holdingRegisters.40260_Bypass_Modus","type":"state","common":{"name":"","role":"state","type":"number","read":false,"write":true,"def":0,"unit" modbus.0 2021-06-13 11:07:01.475 debug (20689) Add holdingRegisters.40258_Geschwindigkeit: {"_id":"holdingRegisters.40258_Geschwindigkeit","type":"state","common":{"name":"","role":"state","type":"number","read":true,"write":true,"def":0," modbus.0 2021-06-13 11:07:01.474 debug (20689) Initialize Objects for holdingRegs: [{"_address":40258,"name":"Geschwindigkeit","description":"","unit":"","type":"uint16be","len":1,"factor":1,"offset":0,"formula":"","role":"state","room":"" modbus.0 2021-06-13 11:07:01.474 debug (20689) Initialize Objects for inputRegs: [] modbus.0 2021-06-13 11:07:01.473 debug (20689) Initialize Objects for coils: [] modbus.0 2021-06-13 11:07:01.472 debug (20689) Initialize Objects for disInputs: [] modbus.0 2021-06-13 11:07:01.147 info (20689) starting. Version 3.3.1 in /opt/iobroker/node_modules/iobroker.modbus, node: v12.22.1, js-controller: 3.2.16
Wenn ich 40258 alleine oder auch in Kombination mit 40260 abfrage, dann werden auch diese Werte korrekt ausgelesen.
Hat jemand eine Idee was ich noch probieren könnte?
Danke euch! -
Ich konnte das Problem selbst durch einen quick&dirty 50ms Warteschritt zw. den Abfragen lösen, den ich in den Code eingebaut habe.
Issue und Lösung hierzu hier
Vielleicht kann man das so oder auch gerne sauberer in den Adapter integrieren. -
Hi, ich bin gerade dabei von Admin 4 auf 5 alles manuell umzuziehen.
Dabei habe ich auch den neuen Modbus Adapter 3.4.4 installiert.
Bei einigen Registern meiner Dimplex Wärmepumpe habe ich alles mir erdenkliche ausprobiert, ich bekomme sie nicht zum laufen:
modbus.1 2021-06-20 00:14:33.149 debug (2308) Closing client on purpose.
modbus.1 2021-06-20 00:14:33.097 warn (2308) Poll error count: 6 code: {"errorCode":129,"exceptionCode":3,"message":"ILLEGAL DATA VALUE"}
modbus.1 2021-06-20 00:14:33.097 debug (2308) Received pdu describes an error.
modbus.1 2021-06-20 00:14:33.093 debug (2308) Poll coils DevID(1) address 4 - 0 bits
modbus.1 2021-06-20 00:14:33.092 debug (2308) Poll device 1oder:
modbus.1 2021-06-20 00:21:44.174 debug (2719) Closing client on purpose.
modbus.1 2021-06-20 00:21:44.122 warn (2719) Poll error count: 6 code: {"code":"ERR_OUT_OF_RANGE"}Mit modbus 3.2.6 lief das alles einwandfrei. Ich habe es 1:1 übernommen.
Leider bekomme ich 3.2.6 nicht mehr als mögliche Version angeboten.
Hat mir jemand einen Tipp, woran das liegen kann? -
... wenn die betroffenen Register in einem eigenen Adapter aufsetzt, selbes Problem, ändere ich dann von Unsigned auf Signed gehten 6 von 7, versuche ich das auf den anderen Adpater zu übertragen, wieder bei allen der gleiche Fehler. Da stimmt wohl irgendwas im Adapter nicht oder ist marginal. Ich bin hilflos.