Uebung_012k_sub: String Input und Speichern INI mit Subapp¶
Einleitung¶
Diese Übung demonstriert die Verwendung einer Subapplikation zur Verarbeitung eines String-Eingangs und dessen Speicherung in einer INI-Struktur. Die Subapp greift auf einen String-Wert (z. B. von einem CAN-Bus) zu, speichert ihn unter einem Schlüssel und einem Abschnitt (SECTION) und gibt den gespeicherten Wert über einen Ausgang sowie über einen Queue-Baustein aus. Die Objekt-ID (u16ObjId) dient der Identifikation des Datenobjekts.
Verwendete Funktionsbausteine (FBs)¶
Die Subapplikation besteht aus drei internen Funktionsbausteinen:
-
StringValue_IS (Typ:
isobus::UT::io::StringValue::StringValue_IS)
Liest einen String-Wert von einem externen Interface (z. B. Isobus). Wird aktiviert, wenn ein neuer String verfügbar ist. -
INI (Typ:
eclipse4diac::storage::INI)
Speichert einen String-Wert in einer INI-artigen Datenstruktur unter einem gegebenen Schlüssel (KEY) in einem Abschnitt (SECTION). Enthält eine Initialisierungslogik und kann Werte setzen und abrufen. -
Q_StringValue (Typ:
isobus::UT::Q::Q_StringValue)
Ein Queue-Baustein für String-Werte. Er nimmt den gespeicherten String und die Objekt-ID entgegen und gibt ihn bei Anforderung weiter (z. B. für die Ausgabe auf den Bus).
| Bausteinname | Typ | Parameter / Bemerkung |
|---|---|---|
| StringValue_IS | isobus::UT::io::StringValue::StringValue_IS |
QI = TRUE |
| INI | eclipse4diac::storage::INI |
QI = TRUE, DEFAULT_VALUE = '' |
| Q_StringValue | isobus::UT::Q::Q_StringValue |
keine zusätzlichen Parameter |
Sub-Bausteine¶
Es sind keine weiteren Sub-Bausteine definiert; die oben genannten Funktionsbausteine sind die einzigen innerhalb der Subapplikation.
Programmablauf und Verbindungen¶
Die Subapplikation hat folgende Schnittstellen:
- Eingänge:
KEY(STRING): Der Schlüssel, unter dem der Wert gespeichert wird.SECTION(STRING): Der Abschnitt (Section) der INI-Struktur.u16ObjId(UINT): Objekt-ID, Standardwert = ID_NULL (aus dem importierten Namespaceisobus::UT::Q::const::IDs).- Ausgänge:
VALUEO(STRING): Der aus der INI gelesene Wert.IND(Event): Signalisiert, dass ein neuer Wert verarbeitet wurde.
Ablauf:
-
Initialisierung: Nach dem Start der Subapplikation wird beim ersten Durchlauf das Ereignis
INITOdes INI-Bausteins ausgelöst. Dieses ist intern mit dem EingangGETverbunden, sodass der INI-Baustein sofort den aktuellen Wert für den gegebenen Schlüssel abruft. -
Eingangsverarbeitung:
- Über den Ereignisausgang
INDdesStringValue_IS-Bausteins wird derSET-Eingang des INI-Bausteins getriggert, sobald ein neuer String eingetroffen ist. - Gleichzeitig wird der String-Wert von
StringValue_IS.INan denVALUE-Eingang des INI-Bausteins übergeben. -
Die Parameter
KEY,SECTIONundu16ObjIdwerden direkt von den SubApp-Eingängen an die entsprechenden Bausteine weitergeleitet (KEY→ INI.KEY,SECTION→ INI.SECTION,u16ObjId→ StringValue_IS.u16ObjId und Q_StringValue.u16ObjId). -
Ausgabe:
- Nach erfolgreichem Speichern (oder Abruf) liefert der INI-Baustein das Ereignis
SETOund/oderGETO. - Das
SETO-Ereignis wird an den SubApp-AusgangINDweitergegeben. - Das
GETO-Ereignis triggert zum einen denREQ-Eingang desQ_StringValue-Bausteins, der den aktuellen String (von INI.VALUEO) und die Objekt-ID an den Queue weitergibt, und zum anderen ebenfalls den SubApp-AusgangIND.
Zusammenfassung der Verbindungen:
- Event-Verbindungen:
StringValue_IS.IND→INI.SETINI.SETO→IND(SubApp-Ausgang)INI.GETO→Q_StringValue.REQund →IND(SubApp-Ausgang)-
INI.INITO→INI.GET(interne Triggerschleife) -
Datenverbindungen:
StringValue_IS.IN→INI.VALUEu16ObjId→Q_StringValue.u16ObjIdKEY→INI.KEYINI.VALUEO→Q_StringValue.pau8Stringund →VALUEO(SubApp-Ausgang)u16ObjId→StringValue_IS.u16ObjIdSECTION→INI.SECTION
Die Subapplikation realisiert somit einen geschlossenen Kreislauf: Jeder neu eintreffende String wird gespeichert, und gleichzeitig wird der gespeicherte Wert (sowohl über Q_StringValue als auch direkt über den Ausgang) verfügbar gemacht.
Zusammenfassung¶
Die Übung Uebung_012k_sub zeigt, wie eine Subapplikation aus mehreren vordefinierten Funktionsbausteinen aufgebaut wird, um einen String-Eingang in einer INI-ähnlichen Struktur zu speichern und auszugeben. Durch die Kombination von Ereignis- und Datenverbindungen wird eine robuste Verarbeitungskette erzeugt, die Initialisierung, Speichern und Abrufen integriert. Dies ist ein typisches Muster für die persistente Datenverwaltung in Automatisierungssystemen auf Basis des IEC 61499 Standards.