betrifft S7-1200 |
Problembeschreibung:
Bei der S7-1200er Reihe wird ab Firmware-Version 2.1 der Versand von Emails über die integrierte Netzwerkschnittstelle unterstützt. Gerade bei einer Smart-Home-Steuerung bieten sich hier neue und vorallem kostenlose Möglichkeiten, Warnmeldungen, wie z. B. Feueralarm, offenes Garagentor oder Ansprechen eines Bewegungsmelders, zu übermitteln. Leider frist der Emailbaustein satte 8 KB im Arbeitsspeicher. Bei 25KB oder 50KB Arbeitsspeicher kann der Emailbaustein also kaum mehrmals eingesetzt werden, um verschiedene Warnmeldungen zu verschicken.
Funktionierende Lösung
Eine mögliche Lösung ist ein eigener Objektbaustein, der eine Email-Warteschlange zur Verfügung stellt und diese nacheinander abarbeitet. Das hat mehrere Vorteile:
- Der Emailbaustein wird nur einmal benötigt.
- Der Emailversand kann zeitlich gesteuert werden.
- Die Email-Texte brauchen nur im Ladespeicher gehalten werden und erst bei Versand wird nur die aktuelle Email in den Arbeitspeicher geladen
Gerade Punkt 2 ist dahingehend wichtig, weil viele Emailversand-Provider Emails als SPAM einstufen, wenn diese zeitlich zu kurz aufeinander und mit ähnlichen Texten verschickt werden.
Der von mir gewählte Ansatz ist ein Kompromiss zwischen Speicherverbrauch und Verarbeitungsgeschwindigkeit. In meiner Smart-Home-Steuerung muss ich nur 12 verschiedene Nachrichten verschicken können. Somit reicht mir ein 16-Bit-Wert aus, um anstehende Emails in der Warteschlange zu markieren, wobei jedes gesetzte Bit für eine zu verschickende Nachricht steht. Mit diesem Bit-Trick wird gleichzeitig festgelegt, dass und welche Nachricht verschickt werden soll. Stehen keine Emails mehr an, hat die 16-Bit-Variable den Wert 0.
Weiterhin habe ich mich entschieden, dass der Email-Text bei jeder Nachricht gleich ist, nur der Betreff unterscheidet sich und markiert damit die Meldung. Im Email-Text wird aber das Datum und die Uhrzeit gesetzt, wann die Email in die Warteschlange gesetzt wurde.
Der Versandmechanismus besteht aus 4 Bausteinen und einem selbst definierten PLC-Datentyp:
- Operationsbaustein Emailversand: Programmcode zum Abarbeiten der Emailwarteschlange. Emailversand über TM_MAIL[FB349]
- Datenbaustein Emailversand_Daten: Variablen für OB Emailversand sowie die Zeitstempel und Betreff-Zeiger für die 12 Nachrichten
- Datenbaustein Email_Texte: enthält die einzelnen Nachrichtentexte und wird nur im Ladespeicher gehalten
- Datenbaustein Email_DB: Datenbaustein für FB349 TM_MAIL
- PLC-Datentyp Email_PIPE: Struktur, die den speziellen Betrefftext (erster Teil) beziffert und den Zeitstempel aufnimmt
Die komplette Dokumentation zum Ausprobieren kann hier heruntergeladen werden. Die einzelnen Netzwerke und Variablen sind entsprechend kommentiert.
Das Setzen einer Nachricht in die Warteschlange erfolgt durch kopieren der Uhrzeit in die Email_Pipeline und Setzen des entsprechenden Bits im Maskenindex. Das folgende Bild zeigt dies beispielhaft für das Ansprechen eines Rauchmelders: