Auf interne PRG Variablen zugreifen

Bensen83

Well-known member
Beiträge
777
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo ich habe mein PLC_PRG und ein PRG Namens Schiebetuer.

In dem PRG Schiebetuer habe ich eine Variable Ventil.

Wie kann ich nun im PLC_PRG auf die Variable Ventil zugreifen? Ich habe es mit Schiebetuer.Ventil versucht, aber ohne Erfolg? die variable wir bei dem "." Operator schon garnicht angezeigt. :-(((


Hat jemand ne Idee, woran das liegt? Ich dachte PRG Variablen kann man über den PRG Namen ansprechen?
 

M_o_t

Well-known member
Beiträge
148
Punkte Reaktionen
22
Hallo,

eigentlich sollte das mit Schiebetuer.Ventil schon funktionieren. Hast du das einfach mal auf die Steuerung geladen? Die Anzeige mit dem "." ist ja nur eine Editierhilfe.

Gruß
M_o_t
 
OP
B

Bensen83

Well-known member
Beiträge
777
Punkte Reaktionen
3
Funtioniert so halb ;-)

also es funktioniert so halb ;-)

Ich gebe Das Schiebetuer. ein ... dann kommt kein weitere Vorschlag in der austovervollständigung, wenn ich dann den namen der variable eingebe (ventil) gefolgt von einem "."
.... dann erscheint wieder die autovervollständigung. warum denn nicht von der variable?????


Weil sie keine in oder OUT ist ????? oder warum?
 

DaHauer

Well-known member
Beiträge
78
Punkte Reaktionen
13
Willst du lesend oder schreibend auf die Variable zugreifen?

Bei schreibenden Zugriff wird so ein Zugriff nicht funktionieren.
Du kannst Dir aber eine Input und eine Output Variable für dein PRG bauen und das Schalten im PRG machen. Ist besonders für den der nach Dir den Code pflegen muss hilfreich ;-)

cheers
 
OP
B

Bensen83

Well-known member
Beiträge
777
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
also sobald ich nach dem "PRG_NAMEN" einen "." eingebe bekomme ich nichts nagezeigt. weder lesend noch schreibend.
@ DaHauer, was meintest du mit "Das Schalten im PRG machn"????
 

DaHauer

Well-known member
Beiträge
78
Punkte Reaktionen
13
Naja statt extern eine Variable zu beschreiben z.B. (MAIN.bVar1 := xxx) könntest du dem PRG eine INPUT Variable spendieren und mit hilfe dieser Input Variable innerhalb des betreffenden PRGs das Schreiben erledigen.

Das unten stehende Beispiel soll nur deutlich machen was ich meine,, bitte nicht an den Namen stören ;-)

Code:
PROGRAM prg_Potlife
VAR_INPUT
    strHeader                    : str_DeviceHeader;
    wNozzleMaskActive    : WORD := 15;    (* nozzles used to dispense *)
    wNozzleMaskMax        : WORD := 15;    (* nozzles configured *)
    bDispenseDone            : BOOL;    (* call me when its done *)
    bRinseDone                : BOOL;    (* when it all began, this flag resets the whole nozzle array to actual time *)
    rDispenseAmount        :    REAL := 0.5;    (* amount to dispense *)
    rTubeAmount                : REAL := 2;    (* max content of mixing tube *)
    tNearExpired            : TIME := t#60s;
    tPotlife                    : TIME := t#10m;
END_VAR
VAR
    rTubeAmountCalc : REAL;
END_VAR

(* hier können ja noch Bedingungen etc. stehen *)
rTubeAmountCalc := rTubeAmount;


Ich finde so sieht auch jemand, der das Projekt nicht kennt, gleich welche Variablen der Aussenwelt zur Verfügung stehen und Du hast kein Theater mit Schreibrechten auf die Variable.

cheers :)
 
OP
B

Bensen83

Well-known member
Beiträge
777
Punkte Reaktionen
3
Ok

OK, so könnte man es machen, aber wenn ich viele Variablen habe, dann habe ich ja auch viele INPUTS, sieht das dann nicht relativ unschön aus?

Ps.
Ist es bei Codesys generell so, das Variablen, welche im Block
VAR
.
.
.
END_VAR

deklariert sind außerhalb des Bausteins nicht sichtbar sind. bzw. nicht in der autovervollständigung sind?
Denn man kann ja trotzdem drauf zugreifen, man bekommt sie eben nur nicht in der autovervollständigung
 
Zuletzt bearbeitet:

DaHauer

Well-known member
Beiträge
78
Punkte Reaktionen
13
Zuviel Werbung?
->Hier kostenlos registrieren
Dann kannst du das auch in ein STRUCT packen und das Übergeben, sieht im Code etwas hübscher aus.
Aber solange klar ist was da als Eingang und Ausgang übergeben wird sparst Du Dir mit Sicherheit die Suche wenn du in nem halben Jahr nochmal in den Code reinschauen musst.
 

Ralle

Supermoderator
Teammitglied
Beiträge
14.627
Punkte Reaktionen
3.482
OK, so könnte man es machen, aber wenn ich viele Variablen habe, dann habe ich ja auch viele INPUTS, sieht das dann nicht relativ unschön aus?

Ps.
Ist es bei Codesys generell so, das Variablen, welche im Block
VAR
.
.
.
END_VAR

deklariert sind außerhalb des Bausteins nicht sichtbar sind. bzw. nicht in der autovervollständigung sind?
Denn man kann ja trotzdem drauf zugreifen, man bekommt sie eben nur nicht in der autovervollständigung

Wenn du nun mal von außen auf Variablen zugreifen möchtest, dann mach es auch über die dafür vorgesehenen INPUT/OUTPUT/IN_OUT.
Die internen variablen sind aus gutem Grund geschützt, das erspart uns bei Codesys die Streitereien, die es wegen der Step7-IDB-Variablen immerzu gibt. :p
Außerdem wirst du so gezwungen, deinen Code ein wenig strukturierter zu schreiben, da du dir Gedanken über die nötigen Schnittstellenvariablen machen mußt. Deine Nachfolger am Code werden es sicher zu schätzen wissen.
 
OP
B

Bensen83

Well-known member
Beiträge
777
Punkte Reaktionen
3
OK. also auf eine VAR_INPUT kann ich ja dann lesend und schreibend innerhalb und außerhalb des Bausteins zugreifen, oder?
 
Oben