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, konsistent, diagnostizierbar – bereits für jede Maschinenhierarchie.
Vorteile
Sicherstellung der Datenkonsistenz
Die RsbPrgCom solution library stellt durch die Zwischenspeicherung der Variablenwerte die Konsistenz von nicht atomaren bis hin zu komplexen Datentypen wie Strukturen oder Arrays sicher.
So sind nicht nur einzelne Variablen in sich konsistent, sondern die Daten der gesamten Schnittstelle zweier Programme als ganzes.
Beispiel - AS Variablen-Watch
Frei konfigurierbar
Jedes Programm mit Slaves besitzt ein eigenes Konfigurationsfile, in welchem die Kommunikationsbeziehung konfiguriert werden kann.
Die Kommunikation wird zur Laufzeit aufgrund dieser Einstellungen aufgebaut.
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.
