StreamTelLogger Plugin

Das StreamTelLogger Plugin empfängt Meldungen von SPSen (oder anderen Fremdsystemen) über Viper-Streams und schreibt sie über dedizierte log4net-Logger in eigene Logdateien — getrennt von der Viper-Logdatei, aber im gewohnten Format und mit der bekannten Rolling-Mechanik.

../../_images/streamtellogger-state-menu.png

Funktionsweise

Das Plugin betreibt einen eigenen ConStreamTelPool (unabhängig vom globalen Stream-Pool der Anlage). Jeder Stream des Pools kann auf einen benannten log4net-Logger gemappt werden („Stream-Tel-Logger“); jedes empfangene Telegramm wird über diesen Logger geschrieben. Die Logger hängen per additivity=false an eigenen Appendern — die Viper-Logdatei bleibt unberührt.

Der Empfang nutzt die vorhandene Stream-Infrastruktur (UDP/TCP/COM): Port, Bind, Reconnect usw. werden wie gewohnt über die Stream-Parameter konfiguriert, es gibt keinen eigenen Socket-Code. Für den SPS-Fall: einen UDP-Stream anlegen und den lokalen Port konfigurieren — der Stream empfängt dann Datagramme beliebiger Absender.

Aktivierung

Das Plugin ist opt-in: Es wird nur geladen, wenn es in der Projekt-Konfiguration aktiviert ist (Plugin „Stream-telegram-logger“, GUID 3CA6902A-5C1B-477E-BB24-C85E809609A4). Bestandsprojekte ohne Aktivierung verhalten sich unverändert.

Dateien & Ablageorte

Alle Konfigurationsdateien liegen unter <ViperData>\StreamTelLoggerPlugin\ und werden beim ersten Start mit Defaults angelegt:

Datei

Inhalt

streamTelLoggerPlugin_conpool.xml

der Plugin-eigene Stream-Pool (Verbindungen)

streamTelLoggerPlugin_log4net.config

Logger/Appender der SPS-Logs (wird gewatcht, Änderungen greifen sofort)

streamTelLoggerPlugin_params.xml

Zuordnungen Stream → Logger → Encoding → PrefixTelId → PrefixLogLevel → SendResponse

Die Default-log4net-Config definiert den Logger „PLC“: einen RollingFileAppender nach D:/log/PLC.log (10 MB, 10 Rollbackups) plus einen GBufferAppender (eigener Tab „PLC“ im Viper-Log-Viewer, Dump nach D:/log/PLC_Dump.log). Weitere Logger und Appender können in der Config ergänzt und in den Zuordnungen verwendet werden.

Die log4net-Config wird additiv zur Haupt-Config der Anlage geladen; der Verweis auf die Haupt-Config bleibt unverändert (Log-Editor und ResetConfiguration der Shell arbeiten weiter auf der Haupt-Config).

Meldungsformat

  • Encoding ist pro Zuordnung konfigurierbar (ASCII, UTF8, Unicode, ISO-8859-x, …); Default WesternEuropean_8_Bit (ISO-8859-1). Mit der SPS abstimmen.

  • Trim: \0, \r, \n, \t, Leerzeichen sowie das Delimiter-Zeichen des Stream-Protokolls werden am Meldungsrand entfernt.

  • PrefixTelId (pro Zuordnung, Default aus): Beginnt die Meldung mit einer Telegramm-ID, gefolgt von | (z. B. 123|D:Meldung), wird die ID vor der weiteren Verarbeitung abgetrennt. Sie wird nicht mitgeloggt, sondern nur dem Antwort-Telegramm vorangestellt (siehe Antwort-Telegramme). Enthält die Meldung kein |, wird sie unverändert verarbeitet.

  • PrefixLogLevel (pro Zuordnung, Default aus): Beginnt die Meldung (nach dem Abtrennen einer Telegramm-ID) mit D: / I: / W: / E: / F:, wird sie mit Debug / Info / Warn / Error / Fatal geloggt und das Präfix entfernt. Ohne bekanntes Präfix (oder bei deaktiviertem Feature) wird die Meldung unverändert mit Level Info geloggt.

Antwort-Telegramme

Mit SendResponse (pro Zuordnung, Default aus) bestätigt das Plugin jedes empfangene Telegramm mit einem Antwort-Telegramm über denselben Stream:

  • ACK — die Meldung wurde geloggt

  • WARNING:<Text> — die Meldung wurde nicht geloggt (kein Logger zugeordnet oder das Log-Level ist in der log4net-Config für diesen Logger deaktiviert)

  • ERROR:<Text> — bei der Verarbeitung ist ein Fehler aufgetreten

Ist PrefixTelId aktiv und die Meldung enthielt eine Telegramm-ID, wird diese der Antwort vorangestellt, z. B. 123|ACK. Die Antwort wird mit dem Encoding der Zuordnung kodiert; bei einem Delimiter-Protokoll wird das Delimiter-Zeichen angehängt.

Bemerkung

Antworten werden nur bei Streams mit Delimiter-Protokoll (ConProtDel) oder ohne Protokoll (ConProtNone) gesendet. Bei anderen Protokollen bleibt SendResponse ohne Wirkung; beim Start des Streams steht dazu eine Warnung im Viper-Log. Schlägt das Senden einer Antwort fehl, wird ein Fehler ins Viper-Log geschrieben.

Bedienung

Der State-Menü-Eintrag zeigt den Verbindungsstatus der Plugin-Streams (sofern am Pool „Add to state menu“ aktiv ist). Ein Klick öffnet — geschützt durch die Operation StreamTelLogger.EditParams — den Parametrier-Dialog mit drei Tabs:

  • Streams — Verwaltung des Plugin-eigenen Stream-Pools

  • Log Config — XML-Editor der log4net-Config mit Default-Button

  • Stream-Tel-Loggers — die Zuordnungsliste (Stream → Logger → Encoding → PrefixTelId → PrefixLogLevel → SendResponse); beim Schließen mit ungespeicherten Änderungen fragt der Dialog nach („Apply changes?“)

../../_images/streamtellogger-dialog-streams.png ../../_images/streamtellogger-dialog-logconfig.png ../../_images/streamtellogger-dialog-loggers.png

Rechtevergabe

Beim Upgrade einer Anlage über Version 8.0.4 wird StreamTelLogger.EditParams automatisch an die Standardrollen Admin und Service vergeben — sofern diese Rollen existieren und das Plugin zu diesem Zeitpunkt bereits aktiviert ist. In allen anderen Fällen (projektspezifisches Rollenmodell, nachträgliche Aktivierung) das Recht manuell im Rollenmodell zuweisen.

Fehlerverhalten

  • Startfehler eines Streams (z. B. Port bereits belegt): Warnung im Viper-Log, Viper läuft normal weiter.

  • Verarbeitungsfehler eines Telegramms (Encoding, unerwarteter Inhalt): Fehlereintrag im SPS-Logfile, bewusst im zeitlichen Kontext der betroffenen Meldungen.

Bemerkung

Einen UDP-Port kann nur ein Prozess binden. Sobald das Plugin den Port öffnet, darf kein anderes Programm (z. B. ein früheres Python-Empfangsskript der SPS-Kollegen) mehr auf demselben Port lauschen — ablösen oder auf einen anderen Port legen.