B&R : Variablenbezug eines zweiten Programms im ersten Programm

B.S.84

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Schönen gutenTag allerseits

Ich habe gerade eine Test-Lizenz vom B&R Automation Studio in der Version4.1 aufgespielt
und versuche gerade auf meine reale Test-PLC X20 1583 ein Test Programm zuschreiben.

Meine 3 Test-programme die ich angelegt habe ( in ST ) sollen untereinanderkommunizieren.
Maschine 3 ( Programm 3 ) darf erst starten wenn Maschine 2 ( Programm 2 ) dieRückmeldung Running ausgibt,
Maschine 2 erst wenn Maschine 1 ( Programm 1 ) die Rückmeldung Running ausgibtund so weiter....

ABER: Ich bekomme einfach nicht raus wie ich es schaffe in einem Programm eineVariable von einem anderen Programm einzulesen,
wie ich das bisher immer im TIA gemacht habe.
Muss ich bei ALLEN Programmen Globale Variablen verwenden?
Wenn ja wie sorge ich dafür das er Globale nimmt und keine lokalen?

Ich wäre für einen Tip oder die Lösung sehr dankbar.
Inzwischen zweifel ich an mir selbst und überlege ob ich nicht alles in TIA umsetze ,
da funktioniert das wenigstens .....
 
Globale Variablen
Unter Logical View hast du oben Global.var. Hier einen Doppelklick.
Im Fenster dann Add Varibale (rechte Maustaste) und Variable einfügeln

Lokale Variablen
Gleiches wie oben nur hier beim Tasknamen unter Taskname.var die lokale Variable einfügen.

Verwendung
Variablennamen angeben. Egal ob Lokal oder Global.
Wenn gleicher Name verwendet wird, wird die Lokale Variable verwendet (Bitte im AS Help nachsehen)

Mit einer CASE anweisung im Step 0 nach der Running Variable abfragen. Wenn Running = 1 auf Step2 springen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Weiss nicht ob die Anzeige jetzt stimmt und die Bilder richig geladen sind
Code:
PROGRAM _INIT

    Running1 := 0;
    SW := 0;
    Count := 0;
    Start := 0;
(* TODO : Add your code here *)


END_PROGRAM
PROGRAM _CYCLIC

    CASE SW OF
        0:
            Count := 0;
            IF Start = 1 THEN
                SW := 1;
            END_IF
        1:
            Start := 0;
            IF     Count < 10 THEN
                Count := Count + 1;
                Running1 := 0;
            ELSE
                Running1 := 1;
                SW := 2;
            END_IF
        2:
        
    END_CASE
    
    gCount1 := Count;
    
    
(* TODO : Add your code here *)


END_PROGRAM


[CODE\]

[ATTACH=CONFIG]27340._xfImport[/ATTACH][ATTACH=CONFIG]27341._xfImport[/ATTACH][ATTACH=CONFIG]27342._xfImport[/ATTACH]
 

Anhänge

  • Trace.JPG
    Trace.JPG
    165,5 KB · Aufrufe: 14
  • GlobalVar.JPG
    GlobalVar.JPG
    75,3 KB · Aufrufe: 13
  • LokalVar.JPG
    LokalVar.JPG
    60,2 KB · Aufrufe: 11
Muss noch Code einfügen üben

Init Program 1
Code:
PROGRAM _INIT


(* TODO : Add your code here *)
    Running1 := 0;
    SW := 0;
    Count := 0;
    Start := 0;

END_PROGRAM

Cyclic Programm 1
Code:
PROGRAM _CYCLIC

    CASE SW OF
        0:
            Count := 0;
            IF Start = 1 THEN
                SW := 1;
            END_IF
        1:
            Start := 0;
            IF     Count < 10 THEN
                Count := Count + 1;
                Running1 := 0;
            ELSE
                Running1 := 1;
                SW := 2;
            END_IF
        2:
        
    END_CASE
    
    gCount1 := Count;
    
    
(* TODO : Add your code here *)


END_PROGRAM

Init Program 2
Code:
PROGRAM _INIT

    Running2 := 0;
    Count := 0;
    SW := 0;
(* TODO : Add your code here *)


END_PROGRAM

Cyclic Program 2
Code:
PROGRAM _CYCLIC
    
(* TODO : Add your code here *)
    CASE SW OF
    0:
        Count := 0;
        IF Running1 = 1 THEN
            SW := 1;
        END_IF
    1:
        IF     Count < 10 THEN
            Count := Count + 1;
            Running2 := 0;
        ELSE
            Running2 := 1;
            SW := 2;
        END_IF
    2:
    END_CASE
    
    gCount2 := Count;


END_PROGRAM
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe inzwischen in einer Hilfe die Definition gefunden

Gültigkeit der Variablen
ist in der AS Hilfe 4.1.5.13 erklärt unter:

Programmierung >> Variablen und Datentypen >> Bezugsrahmen (Scope) von Deklarationen

EDIT :
Nach einem Rückruf bei B&R steht fest das es nur wie von Roger 34 beschrieben gearbeitet werden kann.
Es ist nur möglich mit übergeordneten Variablen einer Projektstruktur zur arbeiten , untergeordnete oder gleichwertige Variablen in der Projektstruktur können nicht aufgerufen und verwendet werden.
Dementsprechend werde ich es so machen wie Roger 34 beschrieben hat , ich werde ALLE Status Running in einer übergeordnete Globale Variable verwenden müßen.
 
Zuletzt bearbeitet:
Als Anmerkung:

Es gibt eine Möglichkeit auf Globale Variablen zu verzichten: PV Mapping.

Dadurch können lokale Variablen zwischen 2 Tasks ausgetauscht werden ( eine lokale Var wird einer anderen Var zugewiesen über das Mappingfile). Man kann damit zwar nicht die gleiche Variable nehmen, aber man hat zum einen keine Globalen Variaben zum anderen hat man gleichzeitig eine Definierte Schnittstelle im Task geschaffen, an die man schnell einen anderen Task anhängen kann.

Eine weitere Möglichkeit wären "Paketglobale Variablen". Diese sind auf der Steuerung trotzdem globale Variablen, aber der Compiler überwacht, dass nur Task innerhalb des Pakets diese Variablen verwenden.
 
Zurück
Oben