Autor Thema: FHEM als Modbus Slave  (Gelesen 5776 mal)

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 835
Antw:FHEM als Modbus Slave
« Antwort #15 am: 27 Mai 2017, 12:01:04 »
Hallo,

@KerniSani: Kein Problem meinerseits.

@Ichirou: Das Modul bietet nur die Möglichkeit auf Registerebene zuzugreifen. Du kannst aber auf binäre Zustande über einzelne Bits in den Registern zugreifen.

Wenn du von einem externen ModbusTCP-Client auf einen Aktor in FHEM zugreifen willst musst du zuerst das Modul wie in Beitrag 3 beschrieben installieren und einbinden. Anschließend kannst du z.B. mit
attr aktor comment MBR:1,1,H,,B0festlegen dass aktor unter der Registeradresse 1, Bit 0 ansprechbar ist.

Welchen ModbusTCP-Client verwendest du ?

Grüße,

ChrisD


Offline Ichirou

  • New Member
  • *
  • Beiträge: 6
Antw:FHEM als Modbus Slave
« Antwort #16 am: 27 Mai 2017, 12:26:23 »
Hi,

ich hab derzeit noch GSI Modbus App aufm tablet, es wird ein Eaton HMI älteren Baujahres werden.

Das mit den Registeradressen funktioniert gut, ich wollte es der Einfachheit wegen aber gerne über Coils regeln, da ich viele Einzelzustände habe und die Register dafür mißbrauchen eigentlich nicht Sinn und Zweck der Sache ist.

Technisch muss ich dann sehen, wie ich das auf dem Panel umsetze. Es soll die werte dann an eine PLC weiter reichen und das Gateway Modbus-MPI spielen.

Ggf. ist es nur eine kleine Anpassung für I und H noch ein C für Coil einzubauen, dann wäre dein Modul unschlagbar :)
Es funktioniert jetzt schon fast perfekt, einzig die Übertragung eines Baro-Sensor ist auf 5 Ziffern begrenzt, das muss ich noch fixen. Multiplikator 10 geht (5 Stellen), bei 100 (6 Stellen) kommt nur noch 0.

Sonst lesen und schreiben top :)

Daniel


Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 835
Antw:FHEM als Modbus Slave
« Antwort #17 am: 27 Mai 2017, 17:04:59 »
Hallo,

Ich habe versucht das Modul so zu erweitern dass auch Coils direkt gelesen und geschrieben werden können, die Syntax ist ähnlich wie bei den Registern:

MBC:<unitId>,<coil>,<type>[,<reading>[,<off>[,<on>]]mit
    <unitId> - Unit Id (0 - 255), * für beliebig
    <coil> - Coilnummer (1 - 65536) (Achtung, dies ist nicht die Adresse)
    <type> - I für Input (nur Lesen), C für Coil (Lesen und Schreiben), * für beide
    <reading> - optional, Name des Readings, wenn nicht angegeben wird 'state' verwendet
    <off> - optional, alternativer Wert für 'off', z.B. 'auf' bei Jalousie
    <on> - optional, alternativer Wert für 'on', z.B. 'zu' bei Jalousie

Damit kann der Aktor z.B. durch setzen von
attr aktor comment MBC:1,10,Cüber Coil 10 ausgelesen und gesteuert werden.

Du kannst das Modul mit
update force https://raw.githubusercontent.com/ChrisD70/FHEM-Modules/master/autoupdate/mbs/controls_mbcc.txtaktualisieren. Danach muss FHEM neu gestartet werden.

Grüße,

ChrisD

Offline Ichirou

  • New Member
  • *
  • Beiträge: 6
Antw:FHEM als Modbus Slave
« Antwort #18 am: 29 Mai 2017, 00:04:55 »
Hallo ChrisD,

nach etwas rumprobieren, einigen Anwenderfehlern (shutdown restart vergessen, MBR nicht auf MBC geändert) und etwas ärger mit der App funktioniert es tadellos :)

Als Hinweis für andere:
Modbus kann mit einem Adressoffset arbeiten, in dem Beispiel von Chris: MBC:1,10,C habe ich Reaktion auf Coil 9.
Je nachdem wo die Anwendung anfängt zu zählen, sind die Coils und Register möglicherweise um -1 verschoben.

Danke ChrisD, vor allem für die superschnelle Umsetzung.  :)

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 835
Antw:FHEM als Modbus Slave
« Antwort #19 am: 29 Mai 2017, 09:02:57 »
Hallo,

Bei Modbus wird (leider) zwischen Coils/Registern und ihren Adressen unterschieden. Die Adressen liegen dabei immer 1 unter der Coil/Registernummer. Oft ist aber nicht klar ob ein Hersteller unter dem Begriff Register/Coil eigentlich die Adresse meint. Deshalb habe ich in der Dokumentation geschrieben
Zitat
<coil> - Coilnummer (1 - 65536) (Achtung, dies ist nicht die Adresse)

Zum Teil findet man auch in der Dokumentation Register wie 40108 die unter der Adresse 107 anzusprechen sind. Hierbei wird der FC (4 für Eingangsregister lesen) vor die Registernummer gesetzt.

Grüße,

ChrisD
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline rammelsberg

  • New Member
  • *
  • Beiträge: 17
Antw:FHEM als Modbus Slave
« Antwort #20 am: 14 Januar 2018, 02:15:14 »
Moin!

Ich habe das Ganze mit einem Codesys V3 auf einem Raspberry als Master getestet, lesen von der SPS aus mit FC 4 funktioniert, schreiben mit FC 6 leider nicht, ist ähnlich dem was franzlimholz weiter oben geschrieben hatte: im Event Monitor taucht das zyklische Schreiben (1x pro sekunde) auf, allerdings immer mit dem Wert 0, ich schreibe aber 255 rein, es sollten 25,5 ankommen.
"2018-01-14 02:11:58 MAX MAX_0682e1 desiredTemperature 0"
Definition am Aktor: MBR:1,1,I,temperature,N,10:1,21,*,desiredTemperature,N,10

Fällt Euch da direkt was auf?
Danke und viele Grüße...


Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 835
Antw:FHEM als Modbus Slave
« Antwort #21 am: 14 Januar 2018, 11:23:51 »
Hallo,

Ich habe das Modul geändert, so dass das Schreiben in deinem Fall auch funktionieren sollte. In der Version 0007 werden unbekannte Format-Bezeichner (in deinem Fall 'N') ignoriert.

Grüße,

ChrisD

Offline rammelsberg

  • New Member
  • *
  • Beiträge: 17
Antw:FHEM als Modbus Slave
« Antwort #22 am: 16 Januar 2018, 10:25:19 »
Hallo ChrisD,

Das hat auf Anhieb geklappt, vielen Dank!  :D
Grüße...

Offline lechez

  • New Member
  • *
  • Beiträge: 33
Antw:FHEM als Modbus Slave
« Antwort #23 am: 22 Februar 2018, 09:29:19 »
Hallo Chris,

ich möchte gerne dass fhem als Modbus Slave über rs485 läuft, kann man kein Modul Slave auf von TCP auf RS485 rtu irgendwie umbauen?

Gruß

lechez

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 835
Antw:FHEM als Modbus Slave
« Antwort #24 am: 23 Februar 2018, 00:32:11 »
Hallo,

Die Anpassungen für den Betrieb als Modbus Slave sind nicht all zu groß. Ich sehe mir das am Wochenende an.

Grüße,

ChrisD

Offline ChrisD

  • Sr. Member
  • ****
  • Beiträge: 835
Antw:FHEM als Modbus Slave
« Antwort #25 am: 24 Februar 2018, 17:25:34 »
Hallo,

Anbei eine erste Version für Modbus RTU. Das Gerät kann z.B. mit
define mbslave ModbusSlave /dev/ttyS0angelegt werden. Die Schnittstelle wird dann mit 9600,8,E,1 geöffnet.

Optional können auch die Parameter für die Schnittstelle mit übergeben werden, z.B.:
define mbslave ModbusSlave /dev/ttyS0@19200,8,N,1
Bei Problemen mit der Datenübertragung kann verbose auf 5 gesetzt werden damit die ein- und ausgehenden Pakete aufgezeichnet werden.

Die Zuordnung von Coils/Registern erfolgt wie beim Modul ModbusTCP_CC über die Kommentarfelder.

Grüße,

ChrisD

Offline lechez

  • New Member
  • *
  • Beiträge: 33
Antw:FHEM als Modbus Slave
« Antwort #26 am: 26 Februar 2018, 10:57:43 »
Cool vielen Dank!
Werde hoffe ich heute noch ausprobieren können.

 

decade-submarginal