Praxisbericht: Hausautomation mit Raspberry Pi und CODESYS

Ein Kunde hat uns Einblicke in seine selbst aufgebaute Hausautomation gegeben, die seit mehreren Jahren stabil im Einsatz ist. Die Lösung basiert auf einem Raspberry Pi in Kombination mit I²C-Baugruppen und der CODESYS-Laufzeitumgebung.

Vielen Dank an Alexander für die ausführliche Beschreibung und die Bilder!

Übersicht

Die Steuerung besteht aus:

  • Raspberry Pi 3B+ als zentrale SPS
  • Multiplexer zur Erweiterung des I²C-Busses
  • 16 digitale Eingänge und 16 digitale Ausgänge
  • 2 Analogkarten mit je 4 Ausgängen
  • Dezentralen Ein-/Ausgangsmodulen im Dachgeschoss

Die Außenposten sind aktuell über einen I²C-Extender angebunden. Die Leitungslängen betragen etwa 12 bis 15 Meter. Ein Leitungstreiber für größere Distanzen ist bereits vorhanden, aber noch nicht im Einsatz.

Keller:

  • „RPI_und_i2HSx_ext“: Raspberry Pi (3B+) mit Multiplexer
  • „Ausgaenge_I2HA“ / „Eingaenge_I2HE“: jeweils 16 IO-Karten

Dachgeschoss:

  • „entfernte_I2HE_und_I2HA“: Außenposten mit je zwei Ein- und Ausgängen

Steuerung

Schaltschrank

Im Schaltschrank laufen alle Fäden zusammen: Hier befinden sich Raspberry Pi, I²C-Module und die gesamte Steuerungstechnik der Anlage.
Da die Adressen der Analogkarten nicht mit denen der Digitalkarten überlappen, habe ich sie parallel zum Multiplexer angeschlossen.

Bild vom Schaltschrank

I2C-Master

Als SPS setze ich die Multi-Core-Laufzeitumgebung von Codesys ein, ohne die die Mehrkernfähigkeit bislang zu nutzen.

I2C-Master

Eingänge

Insgesamt sind 16 digitale Eingangskarten über einen Multiplexer angeschlossen.

Eingänge Hausautomation mit Codesys

Ausgänge

Über 16 digitale Ausgangskarten, die ebenfalls über einen Multiplexer angeschlossen sind, werden die Aktoren im Haus geschaltet.

Ausgänge Hausautomation mit Codesys

Architektur und Besonderheiten

Statt der SPS-eigenen Treiber verwende ich ausschließlich Ihre Funktionsbausteine, auch für den Multiplexer. Für die Analogbausteine sind sie meines Erachtens zwingend erforderlich, da diese empfindlich auf zu kurze Ansteuerintervalle reagieren.

Mit den Funktionsbausteinen lassen sich diese Intervalle einfach programmatisch anpassen, wogegen man bei den Treibern zunächst an die -hierfür zu kurzen- Standardzyklen der SPS gebunden ist. Ob sich diese anpassen lassen, habe ich seit der Umstellung auf Funktionsbausteine nicht weiter untersucht.
Im Multiplexbetrieb bieten die FBs auch bei den Digitalkarten, die mit den SPS-Treibern grundsätzlich problemlos laufen, Vorteile, da der der Zugriffszeitpunkt gezielt gesteuert werden kann.

Warum Funktionsbausteine statt Treiber?

Die Steuerung nutzt ein zentrales „Master-Control-Programm“ (MCP), das den gesamten Ablauf organisiert.

Der Ablauf ist wie folgt:

  1. Aktivierung eines Multiplexer-Kanals
  2. Einlesen aller Eingänge
  3. Schreiben aller Ausgänge
  4. Wechsel zum nächsten Kanal
  5. Nach Abschluss aller Kanäle: Ausführung der Steuerlogik

Danach beginnt der Zyklus erneut.

Vorteil:

  • gezielte Steuerung der Zugriffszeitpunkte
  • stabile Kommunikation auch im Multiplexbetrieb

Anfangs hatte ich mit einer Ablaufsteuerung experimentiert, um die IO-Verarbeitung darüber zu organisieren. Das in Structured Text (ST) implementierte MCP hat sich jedoch als so flexibel und zuverlässig erwiesen, dass ich davon nicht mehr abweichen möchte.

Anwendungen

Die erste Anwendung war die Steuerung der Haus-Zwangsbelüftung. Die Papst-Lüfter werden über eine Gleichspannung von 0 bis 5V angesteuert. Diese Lösung läuft seit Jahren stabil; anfängliche Abstürze der Analogkarten konnten durch die Verwendung der Funktionsbausteine und längere Ansteuerintervalle vollständig behoben werden.

Ich habe gesehen, dass sie bei Ansteuerung der EBM-Papst-Lüfter andere OPs empfehlen, vermutlich wegen der Rail2Rail-Eigenschaften.
Bei „meinen“ Lüftern (ist ein Set der Firma Sevi) ist das anscheinend nicht nötig, vermutlich, weil ich nicht bis auf 0 Volt runtergehen muss.

Die Lüftersteuerung ist teilweise noch in FUP bzw. CFC umgesetzt und aufgrund mangelnder Erfahrung unübersichtlich. Inzwischen nutze ich bevorzugt Structured Text und versuche, neue Automatisierungsaufgaben konsequent damit umzusetzen.

Ein weiterer wichtiger Anwendungsfall ist die Brauchwassererwärmung über Überschussstrom mittels Heizstab. Zwar bietet der Wechselrichter hierfür eine eigene Funktion, die SPS ermöglicht jedoch deutlich flexiblere Lösungen.

Darüber hinaus dient die SPS als Schnittstelle zur Datenerfassung (Gaszähler, Briefkasten, Fensterkontakte, Steckdosen, Beleuchtung etc.) sowie allgemein zur „Smartifizierung“ des Hauses. Praktisch ist beispielsweise die Steuerung von Licht und Rollläden per Smartphone.

Node-RED ist ebenfalls integriert und ersetzt zunehmend die Codesys-Visualisierung. Die Kommunikation erfolgt über Modbus.

Fazit

Die Anlage läuft seit über 4 Jahren stabil im Dauerbetrieb.

Besonders hervorzuheben:

  • robuste I²C-Kommunikation trotz Multiplexing
  • flexible Softwarearchitektur
  • kontinuierliche Erweiterbarkeit

Das Projekt zeigt sehr schön, wie leistungsfähig eine Kombination aus Raspberry Pi, CODESYS und I²C-Modulen im praktischen Einsatz sein kann.

 

Funktionsbausteine für Codesys

Wir haben für alle unsere Module FBs geschrieben. Damit ist es möglich auch neuer Module, für die es keinen Gerätetreiber gibt, über Codesys anzusprechen.
Die FBs haben auch den Vorteil, dass sie über den Ausgang „Slave ok“ ein Signal bekommen, ob das Modul unter der angegebenen Adresse erreichbar ist.

Copyright:
Die Funktionsbausteine können bei uns per Mail angefordert werden.
Die FBs dürfen für eigene Projekte mit unseren Baugruppen kostenlos genutzt werden.
Eine Weitergabe oder Veröffentlichung des Codes ist ausdrücklich untersagt.

Wichtig:
Alle Module, die mit den FBs angesprochen werden sollen dürfen NICHT im Gerätebaum eingebaut sein.
Im Gerätebaum ist nur der I2C-Master vorhanden.

 

Digitale Eingangsmodule I2HE, I2EOK, I2E..

FB für I2C-Digital-IN Module

FB für I2C-Digital-IN Module

Der Baustein liest ein Byte von einem PCF8574 / PCF8574A

 

Digitale Ausgangsmodule I2HA, I2AOK, I2AT, I2AWS, I2A..

FB für I2C-Digital-OUT Module

FB für I2C-Digital-OUT Module

Der Baustein schreibt ein Byte zu einem PCF8574 / PCF8574A

 

Analoge Eingangsmodule I2HAE, I2AE8, I2AE18, I2ANU

FB für I2C-Analog-IN-Modul 5-CH 10-Bit

FB für I2C-Analog-IN-Modul 5-CH 10-Bit

Der Baustein liest 5 Analogwerte von der I2HAE-Karte

FB für I2C-Analog-IN-Modul 8-CH 10-Bit

FB_I2HAE8

Der Baustein liest 8 Analogwerte 10-Bit von der I2AE8-Karte

FB für I2C-Analog-IN-Modul 4-CH 18-Bit

FB für I2C-Analog-IN-Modul 4-CH 18-Bit

Der Baustein liest 4 Analogwerte von der I2AE18-Karte
An den Eingängen kann die Sample-Rate für jeden Eingang einzeln vorgegeben werden.
Für die Verstärkung gibt es auch einen Parameter.

FB für I2C-Analog-IN-OUT-Modul

FB für I2C-Analog-IN-OUT-Modul

Der Baustein liest 4 Analogwerte und schreibt einen Analogwert zum PCF8591

 

Analoge Ausgangsmodule I2HAA, I2ANU

FB für I2C-Analog-OUT-Modul 4-CH 10-Bit

FB für I2C-Analog-OUT-Modul 4-CH 10-Bit

Der Baustein schreibt 5 Analogwerte zur I2HAA-Karte

FB für I2C-Analog-IN-OUT-Modul

FB für I2C-Analog-IN-OUT-Modul

Der Baustein liest 4 Analogwerte und schreibt einen Analogwert zum PCF8591

 

I2C-Zählerbaugruppe I2HZ

FB für I2C-Zähler-Modul

FB für I2C-Zähler-Modul

Mit dem Baustein kann der Zählerstand von einem PCF8583 ausgelesen und zurückgesetzt werden.

Auf dem I2HZ-Modul sind zwei PCF8583 verbaut. Der Baustein muss im SPS-Programm zweimal mit unterschiedlichen Adressen aufgerufen werden.

 

I2C-PT100 / PT1000 Modul I2HPT

FB für I2C-PT100 / PT1000 - Modul

FB für I2C-PT100 / PT1000 – Modul

Der Baustein liest die aktuelle Temperatur von zwei PT100 oder PT1000 aus.

 

Multiplexer / Switch I2HSM, I2HSS

FB für I2C-Multiplexer / I2C-Switch

FB für I2C-Multiplexer / I2C-Switch

Mit dem Baustein erkennen Sie, ob ein INT an einem der vier Stränge geschaltet hat.
Über den Eingang Channel kann der Kanal beim Multiplexer PCA9544 bzw.
die Auswahl der Kanäle beim Switch PCA9545 eingestellt werden.

 

RFID Reader / Writer 

FB für I2C-RFID Reader / Writer

FB für I2C-RFID Reader / Writer

Mit dem Baustein kann die UID von einem RFID-Tag ausgelesen werden.
Außerdem können drei Blöcke Daten a 16 Byte auf den RFID-Transponder geschrieben und gelesen werden.

Die Karte ist gerade in der Entwicklung. Ein Prototyp mit unserem I2ARD-Modul ist bereits im Einsatz.

 

MC-Controller für Schrittmotoren

FB zum Ansteuern von Schrittmotor-Controller DM420, DM542 oder TB6600

FB zum Ansteuern von Schrittmotor-Controller DM420, DM542 oder TB6600

Mit dem Baustein und unserem I2ARD-Modul ist es möglich einen Schrittmotor-Controller z.B. den DM420, DM542 oder TB6600 anzusteuern und Positionen anzufahren.

 

Weitere Baugruppen in CODESYS einfügen

In den beiden Beispielprogrammen

  • Horter_Kalb_Raspi_Support_FB_Example.Project
  • Horter_Kalb_Raspi_Support_IO_driver_Example.Project

sind jeweils eine Baugruppe mit der Basisadresse projektiert.

  • I2HE – digitale Eingangskarte mit PCF 8574A =  Adresse 38hex
  • I2HA – digitale Ausgangskarte mit PCF 8574 = Adresse 20 hex
  • I2HAE – analoge Eingangskarte = Adresse 08hex
  • I2HAA – analoge Ausgangskarte = Adresse 58 hex

Sollen weitere Karten mit Codesys angesprochen werden müssen diese im I2C-Master angelegt bzw. kopiert werden.

Ausnahme:
Falls Sie die Module über unsere Funktionsbausteine ansprechen möchten, dürfen diese NICHT im Hardwarebaum eingesetzt sein.
Siehe auch Artikel Funktionsbausteine für Codesys

Baugruppen im I2C-Master kopieren

Weitere I2C-Baugruppen in CODESYS einbauen

Weitere I2C-Baugruppen in CODESYS einbauen

Baugruppen adressieren

Wichtig:

Im Feld „Hardware address“ muss die I2C-Slaveadresse in dezimal als 7-Bit Adresse eingetragen werden.

Auf unseren Baugruppen sind die Adressen im 8-Bit dezimal Format aufgedruckt.

Hier die Adressen der Baugruppen als Tabelle.

Im CODESYS muss die 7-Bit Adresse als Dezimalzahl eingetragen werden.

 

I2HA – digitale Ausgangskarte mit PCF 8574
PCF8574 8-Bit dez 8-Bit hex 7-Bit dez 7-Bit hex
OFF OFF OFF 64 40 32 20
OFF OFF ON 66 42 33 21
OFF ON OFF 68 44 34 22
OFF ON ON 70 46 35 23
ON OFF OFF 72 48 36 24
ON OFF ON 74 4A 37 25
ON ON   OFF 76 4C 38 26
ON   ON   ON 78 4E 39 27

I2HE – digitale Eingangskarte mit PCF 8574A
PCF8574A 8-Bit dez 8-Bit hex 7-Bit dez 7-Bit hex
OFF OFF OFF 112 70 56 38
OFF OFF ON 114 72 57 39
OFF ON OFF 116 74 58 3A
OFF ON ON 118 76 59 3B
ON OFF OFF 120 78 60 3C
ON OFF ON 122 7A 61 3D
ON ON   OFF 124 7C 62 3E
ON   ON   ON 126 7E 63 3F

 

I2HAE – analoge Eingangskarte
Analog IN 8-Bit dez 8-Bit hex 7-Bit dez 7-Bit hex
OFF OFF OFF OFF 16 10 8 08
OFF OFF OFF ON 18 12 9 09
OFF OFF ON OFF 20 14 10 0A
OFF OFF ON ON 22 16 11 0B
OFF ON OFF OFF 24 18 12 0C
OFF ON OFF ON 26 1A 13 0D
OFF ON ON   OFF 28 1C 14 0E
OFF ON   ON   ON 30 1E 15 0F
ON OFF OFF OFF 48 30 24 18
ON OFF OFF ON 50 32 25 19
ON OFF ON OFF 52 34 26 1A
ON OFF ON ON 54 36 27 1B
ON ON OFF OFF 56 38 28 1C
ON ON OFF ON 58 3A 29 1D
ON ON ON   OFF 60 3C 30 1E
ON ON   ON   ON 62 3E 31 1F

 

I2HAA – analoge Ausgangskarte
Analog OUT 8-Bit dez 8-Bit hex 7-Bit dez 7-Bit hex
OFF OFF OFF OFF 176 B0 88 58
OFF OFF OFF ON 178 B2 89 59
OFF OFF ON OFF 180 B4 90 5A
OFF OFF ON ON 182 B6 91 5B
OFF ON OFF OFF 184 B8 92 5C
OFF ON OFF ON 186 BA 93 5D
OFF ON ON   OFF 188 BC 94 5E
OFF ON   ON   ON 190 BE 95 5F
ON OFF OFF OFF 208 D0 104 68
ON OFF OFF ON 210 D2 105 69
ON OFF ON OFF 212 D4 106 6A
ON OFF ON ON 214 D6 107 6B
ON ON OFF OFF 216 D8 108 6C
ON ON OFF ON 218 DA 109 6D
ON ON ON   OFF 220 DC 110 6E
ON ON   ON   ON 222 DE 111 6F

 

I2HSM – I2C-Multiplexer mit PCA9544A
Nur mit unserem Funktionsbaustein ansprechbar
PCF8574 8-Bit dez 8-Bit hex 7-Bit dez 7-Bit hex
OFF OFF OFF 224 E0 112 20
OFF OFF ON 226 E2 113 71
OFF ON OFF 228 E4 114 72
OFF ON ON 230 E6 115 73
ON OFF OFF 232 E8 116 74
ON OFF ON 234 EA 117 75
ON ON   OFF 236 EC 118 76
ON   ON   ON 238 EE 119 77

I2HSS – I2C-Switch mit PCA9545A
Nur mit unserem Funktionsbaustein ansprechbar
PCF8574 8-Bit dez 8-Bit hex 7-Bit dez 7-Bit hex
OFF OFF 224 E0 112 20
OFF ON 226 E2 113 71
ON OFF 228 E4 114 72
ON ON 230 E6 115 73

 

SPS-Simulationsbaugruppen

Für Ausbildung, Schulen oder für Ihr Selbststudium haben wir Baugruppen entwickelt, die als Sollwertsteller an die SPS-Baugruppen angeschlossen werden können. Damit können Sie oder Ihre Schüler die entwickelten SPS-Programme testen.

Simulationsbaugruppe für die digitale Eingangskarte

  SPS-Simulator_Digitalsteller 
Bausatz ab 15,90 €
im Onlineshop unter
www.horter-shop.de

Sollwertsteller für acht Digitalsignale zum Anschluss an die digitale SPS-Eingabekarte

Mit den 8 Kippschaltern können Sie die Signale an die SPS-Eingangskarte vorgeben. Je eine Low Current LED (2 mA) zeigt den aktuellen Status des Eingangs an.

Technische Daten:

Versorgung

12V

Datenblatt, Schaltplan SIM-DI_Digital-Simulatior_db.pdf
   

Simulationsbaugruppe für die analoge Eingangskarte

SPS-Simulator_Analogsteller

Bausatz ab 9,90 €
im Onlineshop unter
www.horter-shop.de

Sollwertsteller für fünf Analogsignale zum Anschluss an die analoge  SPS-Eingabekarte 

Mit den 5 Potentiometern können Sie einen Analogwert 0-10V an die Analog-Eingabekarte vorgeben. An je einer Low Current LED (2 mA) wird der Sollwert über die Helligkeit der LED angezeigt.

Technische Daten:

Versorgung

12V

 Datenblatt, Schaltplan

 SIM-AI_Sollwertgeber_db.pdf

   

 

 Digitalanzeige für die analoge Ausgangskarte

SPS-Simulator_Messgerät

Bausatz ab 19,90 €
im Onlineshop unter
www.horter-shop.de

Digitalanzeige für sechs Analogwerte 0-30V zum Anschluss an die analoge SPS-Ausgabekarte.

Mit dem Drehschalter können Sie zwischen 6 Messwerten  auswählen. Die Spannung wird Ihnen dann an der Digitalanzeige mit zwei Nachkommastellen angezeigt.

Die Kanäle 1-5 sind auf die untere Klemmleiste angeschlossen. Der Kanal 6 liegt oben auf der 2,6mm Bananenbuchse. Hier kann ein Analogwert von einer anderen Karte gemessen werden.

Technische Daten:

Versorgung

12V

 Datenblatt, Schaltplan

 SIM-VM_Analoganzeige_db.pdf

   

 Falls Sie schon vorab Interesse an den Baugruppen haben melden Sie sich einfach über den Blog bei uns.