Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: OUT - Variable in FC lesen

  1. #11
    Registriert seit
    11.03.2009
    Beiträge
    32
    Danke
    4
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @LL:

    Hm - wie gesagt, bei mir nimmt Var1 den Wert von Var2 an.
    Was hast Du denn beim Aufruf übergeben?

  2. Folgender Benutzer sagt Danke zu yy1 für den nützlichen Beitrag:

    scrolllkock (25.03.2009)

  3. #12
    Registriert seit
    05.06.2006
    Ort
    PLZ 97xxx
    Beiträge
    274
    Danke
    31
    Erhielt 44 Danke für 36 Beiträge

    Standard

    Zitat Zitat von yy1 Beitrag anzeigen
    Hallo zusammen,

    IHMO werden bei einem FC-Aufruf Referenzen auf die Parameter übergeben. Damit wird innerhalb des FC direkt aus dem übergeben Parameter gelesen.

    Es wird also schon funktionieren, schön ist's aber nicht.

    Du hast fast Recht, Referenzen werden bei einfachen Parameter übergeben: z.B. Merker, bei komplexen z.b. ein Datenbit wirds über den Umweg L-Stack gemacht.

    Beispiel:
    aus AWL-Code
    Code:
          CALL  FC  1000
           IN :=M10.0
           OUT:=M100.0
    wird auf der CPU folgender Code ausgeführt (es wird im FC direkt auf Merker gelesen und geschrieben)

    Code:
          BLD   1
          =     L     20.0
          UC    FC  1000
     
                P#M 10.0
                P#M 100.0
          BLD   2
    Beispiel für AWL DB-Zugriff:

    Code:
          CALL  FC  1000
           IN :="DB".bool_1
           OUT:="DB".bool_2
    wird: (Umschichtung über Lokaldaten => Inhalt des OUT-Parameters ist dann vor Zuweisung zufällig)

    Code:
          BLD   1
          =     L     20.0
          AUF   "DB"
     
          U     DBX    0.0
          =     L     20.1
          UC    FC  1000
                P#L 20.1
                P#L 20.2
          U     L     20.2
          AUF   "DB"
          =     DBX    0.1
          BLD   2

  4. Folgende 2 Benutzer sagen Danke zu Sarek für den nützlichen Beitrag:

    scrolllkock (25.03.2009),yy1 (25.03.2009)

  5. #13
    Registriert seit
    06.10.2003
    Beiträge
    3.414
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ..Bei einem FB wäre das so OK (der kann es sich merken ...
    Wobei man beachten sollte dass bei einem Lesezugriff auf einen OUT immer der "alte" Wert aus den Instanzdaten gelesen wird, auch wenn man den Ausgangsparameter vorher beschreibt.

    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  6. #14
    scrolllkock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.10.2005
    Beiträge
    107
    Danke
    9
    Erhielt 9 Danke für 7 Beiträge

    Lächeln

    Zitat Zitat von Sarek Beitrag anzeigen
    Du hast fast Recht, Referenzen werden bei einfachen Parameter übergeben: z.B. Merker, bei komplexen z.b. ein Datenbit wirds über den Umweg L-Stack gemacht.

    Beispiel:
    aus AWL-Code
    Code:
          CALL  FC  1000
           IN :=M10.0
           OUT:=M100.0
    wird auf der CPU folgender Code ausgeführt (es wird im FC direkt auf Merker gelesen und geschrieben)

    Code:
          BLD   1
          =     L     20.0
          UC    FC  1000
     
                P#M 10.0
                P#M 100.0
          BLD   2
    Beispiel für AWL DB-Zugriff:

    Code:
          CALL  FC  1000
           IN :="DB".bool_1
           OUT:="DB".bool_2
    wird: (Umschichtung über Lokaldaten => Inhalt des OUT-Parameters ist dann vor Zuweisung zufällig)

    Code:
          BLD   1
          =     L     20.0
          AUF   "DB"
     
          U     DBX    0.0
          =     L     20.1
          UC    FC  1000
                P#L 20.1
                P#L 20.2
          U     L     20.2
          AUF   "DB"
          =     DBX    0.1
          BLD   2
    Hallo,

    jetzt verstehe ich auch warum wir (ich) manchmal Probleme haben bei Out-Variablen und manchmal nicht. Wir nutzen Merker und in Programmübergaben Datenbausteine. Wenn ich das richtig verstanden habe, gehen Merker wegen übergabe einer Referenz, aber Datenbausteine gehen nicht da die Zuweisung wirklich erst am Ende des FC erfolgt. Richtig?!? Ich glaube ich muss ein paar Bausteine umschreiben

    Woher kann man eigentlich so was wissen? Steht das irgendwo zum nachlesen (und Kollegen/Chefs zeigen)?

  7. #15
    Registriert seit
    05.06.2006
    Ort
    PLZ 97xxx
    Beiträge
    274
    Danke
    31
    Erhielt 44 Danke für 36 Beiträge

    Standard

    Zitat Zitat von scrolllkock Beitrag anzeigen
    Hallo,

    jetzt verstehe ich auch warum wir (ich) manchmal Probleme haben bei Out-Variablen und manchmal nicht. Wir nutzen Merker und in Programmübergaben Datenbausteine. Wenn ich das richtig verstanden habe, gehen Merker wegen übergabe einer Referenz, aber Datenbausteine gehen nicht da die Zuweisung wirklich erst am Ende des FC erfolgt. Richtig?!? Ich glaube ich muss ein paar Bausteine umschreiben

    Woher kann man eigentlich so was wissen? Steht das irgendwo zum nachlesen (und Kollegen/Chefs zeigen)?
    Du hast es genau richtig verstanden!

    Deinen Chef/Kollegen kannst Du dies mit SCL demonstrieren
    Übersetze folgende SCL-Quelle:

    Code:
     
    DATA_BLOCK DB1000
        STRUCT
            BOOL1: BOOL;
            BOOL2: BOOL;               
        END_STRUCT
    BEGIN
    END_DATA_BLOCK
     
     
     
    FUNCTION FC1000 : VOID
    VAR_INPUT
        IN: BOOL;
    END_VAR
    VAR_OUTPUT
        OUT:BOOL;
    END_VAR
    BEGIN
       OUT:=IN AND NOT OUT ; 
    END_FUNCTION
     
     
     
    FUNCTION FC2000 : VOID
    BEGIN
       FC1000(IN := M20.0 ,OUT := M20.1); 
       FC1000(IN := DB1000.BOOL1 ,OUT := DB1000.BOOL2);   
    END_FUNCTION
    Dann öffne den AWL-Editor und öffne den FC2000

    Code:
          SET   
          SAVE  
          =     L      0.1
          UC    FC  1000
                P#M 20.0
                P#M 20.1
          U     DB1000.DBX    0.0
          =     L      0.2
          UC    FC  1000
                P#L 0.2
                P#L 0.3
          U     L      0.3
          =     DBX    0.1
          U     L      0.1
          SAVE  
          BE

  8. #16
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von scrolllkock Beitrag anzeigen
    jetzt verstehe ich auch warum wir (ich) manchmal Probleme haben bei Out-Variablen und manchmal nicht. Wir nutzen Merker und in Programmübergaben Datenbausteine. Wenn ich das richtig verstanden habe, gehen Merker wegen übergabe einer Referenz, aber Datenbausteine gehen nicht da die Zuweisung wirklich erst am Ende des FC erfolgt. Richtig?!? Ich glaube ich muss ein paar Bausteine umschreiben

    Woher kann man eigentlich so was wissen? Steht das irgendwo zum nachlesen (und Kollegen/Chefs zeigen)?
    Siehe dazu die folgende Siemens-FAQ:

    2. Versorgung der elementaren Ein- und Ausgangsparameter

    Bei der Versorgung von elementaren Formalparametern (z.B. die Datentypen BOOL, BYTE, WORD oder DWORD) der Schnittstelle einer Funktion sind zwei Fälle zu unterscheiden.
    1. Der elementare Formalparameter wird mit einem Merker, einem Ein- oder Ausgang aus dem Prozessabbild oder aus dem Lokaldatenstack (L-Stack) des aufrufenden Bausteines versorgt.
      In diesem Fall arbeitet der Code der Funktion mit einem bereichsübergreifenden Zeiger direkt(!) auf diesen elementaren Aktualparametern (z.B. P#E0.0, P#M0.0).
    2. Der elementare Formalparameter wird mit einer Konstanten oder einem Datenbausteinelement versorgt.
      In diesem Fall wird der Wert des Aktualparameters vor dem Aufruf der Funktion in den L-Stack des aufrufenden Bausteines kopiert. Der Code der Funktion arbeitet dann mit einem bereichsübergreifenden Zeiger auf diesen Lokaldatenbereich des aufrufenden Bausteines.
      Beachten Sie bitte, dass bei Ausgangsparametern keine Initialisierung erfolgt und die Eingangsparameter nicht gelöscht werden. Deshalb ist in diesem Fall darauf zu achten, dass Eingänge nur gelesen und Ausgänge in jedem Zyklus geschrieben werden. Bei Befehlen wie "S" oder "R" wird das Signal nur abhängig vom VKE geschrieben. Deshalb sollten Sie diese Befehle durch die Zuweisung "=" ersetzen oder die Werte vor der Abfrage initialisieren.
      Wenn Sie das Beschreiben der Werte nicht in jedem Zyklus sicherstellen können, sollten Sie einen IN/OUT- Parameter verwenden.
    ID189227: Warum liefert eine Funktion bei den OUT-Parametern sporadisch falsche Rückgabewerte und was ist bei der Parametrierung der Ein- und Ausgangsparameter zu beachten?

    Gruß Kai

  9. #17
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Sarek Beitrag anzeigen
    Deinen Chef/Kollegen kannst Du dies mit SCL demonstrieren
    zum glück geht das auch anders ... es ist kein hexenwerk den "eigentlichen code" anzuzeigen ... auch ohne SCL

    @LL: hast du meine pdf noch? kannst du die mir nochmal zurückschicken? das letzte vista-update ist fehlgeschlagen und alle meine lokalen dokumente sind hopps gegangen... danke!
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. #18
    scrolllkock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.10.2005
    Beiträge
    107
    Danke
    9
    Erhielt 9 Danke für 7 Beiträge

    Standard

    zum glück geht das auch anders ... es ist kein hexenwerk den "eigentlichen code" anzuzeigen ... auch ohne SCL

    Wie geht es ohne SCL? Hab ich leider nicht.

  11. #19
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von scrolllkock Beitrag anzeigen
    zum glück geht das auch anders ... es ist kein hexenwerk den "eigentlichen code" anzuzeigen ... auch ohne SCL

    Wie geht es ohne SCL? Hab ich leider nicht.
    Das wird dir 4L nicht verraten, irgendwie sitzt er da drauf. Hab schon mehrere Male versucht, daß er mal die Anleitung dazu rausrückt, entweder er weiß es selbst nicht mehr oder er will es nicht rausrücken.

    Versuchs mal damit, den betreffenden Baustein von Online in ein leeres Projekt zu kopieren, vielleicht dann.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. AWL lesen
    Von nowis im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 09.05.2011, 13:09
  2. S7 Variable in Java Variable umwandeln
    Von maxi81 im Forum HMI
    Antworten: 0
    Letzter Beitrag: 26.11.2010, 17:55
  3. "variable" Varbiable lesen??
    Von Deyn im Forum HMI
    Antworten: 2
    Letzter Beitrag: 08.05.2009, 11:44
  4. Antworten: 7
    Letzter Beitrag: 05.03.2008, 07:38
  5. S5 Dateien nur lesen
    Von Anonymous im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 04.01.2005, 08:21

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •