B&R Bibliothekserstellung

Jicin1980

Level-1
Beiträge
11
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

gerade tue ich mir ein bisschen schwer bei der Erstellung einer Bibliothek im / für das Automation Studio von B&R.

Ist es tatsächlich wahr, dass man keine globalen Variablen in Bibliotheken anlegen und benutzen kann?
Im Prinzip würde mir auch der Geltungsbereich der Bibliothek reichen, aber anscheinend gehen nur Konstanten.

Zum Hintergrund: Ich habe vorher mit CoDeSys gearbeitet und da ist das kein Problem.

Danke und verwirrte Grüße
Jicin
 
Es werden keine globalen Variablen unterstützt, damit Deine Bibliothek auch in einem anderen Softwareprojekt funktioniert.
Dort wirst Du die gleichen globalen Variablen vermutlich nicht vorfinden. Abgesehen davon folgt das B&R Konzept der Datenkapselung, dass sich in allen Programmiersprachen wiederfindet. Benötigst Du also Daten, die global vorhanden sind, muß Dein Interface entsprechende Parameter bereitstellen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Prinzipiell ist das ja ein guter Ansatz, aber ich bräuchte eine bibliotheksweit gültige Variable für baustein-interne Verwaltungsaufgaben.
Das ist eigentlich nichts, was ich dem Benutzer zeigen und zumuten möchte.

Ich wollte eigentlich, dass sich jede Baustein-Instanz eine eindeutige ID holen kann und das wäre mit einer globalen Variable eben am
einfachsten gegangen. In andern Hochsprachen gibt es dazu wenigstens sowas wie "static", aber bei B&R hab ich echt keine Ahnung wie
das zu realisieren ist.
 
Hallo,

wenns nur um eine eindeutige ID geht (also nicht fortlaufend, nicht bei 1 beginnend usw.) könntest du mal überlegen ob du nicht die Adresse einer internen Variable verwenden könntest. Die müsste eigentlich bei jedem FUB und bei jeder Instanz unterschiedlich sein....

bg
bb
 
ja, das ist jetzt der Workaround den ich jetzt implementiere.. aber so richtig schön finde ich das eben nicht..
ich hätte schon lieber eine fortlaufende nummer gehabt, aber nun...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich verwende folgendes Konstrukt in Bibliothek-Funktionen:


// ##################################################
// Variablenreferenzen holen, Funktion initialisieren
// ##################################################
machineConfigRef ACCESS machineConfigAddr;
usw, usw

Wobei 'machineConfigRef' eine interne Variable ist, welche eine Referenz auf die durch 'machineConfigAddr' (eine VAR_IN) adressierte globale Variable darstellt.



Des weiteren habe ich mir, um die jeweilige Funktionsschnittstelle schlank zu halten, eine Hilfsfunktion 'getVarAddr' gebaut, welche ich anstelle der VAR_IN-Adressvariablen verwende:

status := PV_xgetadr(ADR(varName), ADR(tmpVarAddr), ADR(varLen));
getVarAddr := tmpVarAddr;

Obiger Funktionskopf sieht dann so aus:

// ##################################################
// Variablenreferenzen holen, Funktion initialisieren
// ##################################################
machineConfigRef ACCESS getVarAddr('machineConfig');
usw, usw



Dies zusammen erlaubt mir die Nutzung von Globalvariablen in Bibliotheks-Funktionen.


Gruß, Fred
 
Zuletzt bearbeitet:
Zurück
Oben