RsbPrgCom - Programm Kommunikations Bibliothek
Eine modulare Software bedingt klar definierte, konsistente und diagnostizierbare Schnittstellen zwischen Modulen mit einer klaren Hierarchie.
Durch die zur Laufzeit eingerichtete Kommunikation zwischen den Programmen bietet die RsbPrgCom solution library alles um diesen Ansprüchen gerecht zu werden.
Flexibel konfigurierbar, konsistent, diagnostizierbar – bereits für jede Maschinenhierarchie.
Vorteile
Sicherstellung der Datenkonsistenz
Die Solution RsbPrgCom stellt die Konsistenz des gesamten Interfaces sicher – von atomaren bis hin zu komplexen Datentypen wie Strukturen oder Arrays.
So sind in der Multi-Tasking Umgebung die Up- und Downstream-Daten des Interfaces zweier Programme jederzeit konsistent.
Dies unabhängig davon in welchem Layer sich das Objekt befindet, egal in welcher Taskklasse die Programm-Instanz getrieben wird.
Beispiel - AS Variablen-Watch
Frei konfigurierbar
Jedes Master-Programm mit unterlagerten Slaves besitzt ein eigenes Konfigurationsfile, in welchem die Kommunikationsbeziehung konfiguriert werden kann.
Die Kommunikation wird zur Laufzeit aufgrund dieser Einstellungen aufgebaut und zyklisch diagnostiziert.
Beispiel-Konfiguration
Definierter Datenfluss
Die Interfaces zwischen den Programmen sind frei, über das ganze Projekt hinweg, konfigurierbar.
Jeder Kanal hat dabei mehrere konfigurierbare Eigenschaften:
- Name Die Variable ist über einen fix definierten Namen identifiziert
- Richtung – Downstream / Upstream
- Optional Kanal kann als Optional markiert werden und muss nicht vorhanden sein
Code sample
// configure channels
// command - downstream - mandatory
strcpy((char*)&stCfg.stChannels.astChannel[0].szPvName, "stCmd.eCmd");
stCfg.stChannels.astChannel[0].eDir = enPRGCOM_CHNL_DIR_DOWNSTREAM;
// actual command - upstream - mandatory
strcpy((char*)&stCfg.stChannels.astChannel[1].szPvName, "stCmd.eCmdActive");
stCfg.stChannels.astChannel[1].eDir = enPRGCOM_CHNL_DIR_UPSTREAM;
// last command - upstream - mandatory
strcpy((char*)&stCfg.stChannels.astChannel[2].szPvName, "stCmd.eCmdLast");
stCfg.stChannels.astChannel[2].eDir = enPRGCOM_CHNL_DIR_UPSTREAM;
// command state - upstream - mandatory
strcpy((char*)&stCfg.stChannels.astChannel[3].szPvName, "stCmd.eSts");
stCfg.stChannels.astChannel[3].eDir = enPRGCOM_CHNL_DIR_UPSTREAM;
// parameter structure - downstream - optional
strcpy((char*)&stCfg.stChannels.astChannel[4].szPvName, "stPar");
stCfg.stChannels.astChannel[3].bOptional = true;
stCfg.stChannels.astChannel[4].eDir = enPRGCOM_CHNL_DIR_DOWNSTREAM;
// info structure - upstream - optional
strcpy((char*)&stCfg.stChannels.astChannel[5].szPvName, "stInfo");
stCfg.stChannels.astChannel[5].eDir = enPRGCOM_CHNL_DIR_UPSTREAM;
stCfg.stChannels.astChannel[5].bOptional = true;
Definierte Layer
Die Programme können in beliebig viele Layer mit klar definiertem Abstraktionsgrad unterteilt werden.
So lassen sich beliebige Hierarchien bilden, welche die Kommunikation synchronisiert starten sobald der komplette Hierarchie-Baum bereit ist.
Zudem ist es möglich, mehrere parallele getrennte Hierarchien zu erstellen.
Layer-Konfiguration
// config layers
// layer 1 - top layer - machine
strcpy((char*)&stCfg.stLayer.aszPrefix[0], "ma");
// layer 2 - lowest layer - module
strcpy((char*)&stCfg.stLayer.aszPrefix[1], "mo");
Revision-History
Die Versions-Übersicht mit allen Änderungen der Library können in der Revision-History eingesehen werden.
