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

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

Thema: UDT Array Input an einem FC

  1. #11
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von TagebauCoder Beitrag anzeigen
    "Bei Zugrffen auf Parameter in FC's wird das AR1 und das DB-Register überschrieben, wenn die Parameter vom zusammengesetzten Datentyp sind."
    FETT MARKIERT IN DEN UNTERLAGEN

    Und das ist verdammt bedeutend. Jetzt weiß ich warum sich ein Wert in einem völlig anderem DB änderte, der mit der Sache so gut wie nix zu Tun hatte, aber an einem Input Parameter verwendet wurde.
    Hallo TC,
    also ich hatte da noch nie Probleme wenn man immer darauf achtet das AR1 und AR2 zu sichern und an der richtigen Stelle wieder zurück schreibt.
    Es geht ja da um den Zugriff auf lokale Parameter zwischen dem Laden des Adressregisters und dem registerindirekten Zugriff.
    (In den Unterlagen die Du erwähnst ganz oben).

    Ralle:
    Das AR2 enthält bei Multiinstanzen tatsächlich den Offset zu den Daten der Instanz. Wenn du mit ind. Adressierung arbeitest und einen Multiinstanzfähigen Baustein programmieren willst, brauchst du das zwingend!
    Und was Ralle mit dem Problem bei Multiinstanzen meinte, hat ja erst mal nichts mit TAR und L DINO zu tun sondern mit dem Offset. Aber ich denke das ist Dir auch bekannt. Mich hat nur Deine Antwort überrascht.
    @Ralle Das AR2 Prob in FB's kenne ich genauestens. (TAR2 , L DINO blablabla). Danke für den Hinweis.
    Ansonsten kann ich nur sagen:
    "Gut getippt"
    Sonst hätte ich es eingescannt da meine Unterlagen nicht gebunden sind.
    Steht aber das gleich drin.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  2. #12
    Registriert seit
    18.06.2007
    Ort
    im Loch
    Beiträge
    56
    Danke
    6
    Erhielt 6 Danke für 6 Beiträge

    Standard

    @Paule

    Du meinst das AR2 zum AR1 zu addieren?
    Ich hatte da noch keine Probs. Aber heisst ja nix. Hast du vielleicht nen Link auf einen vernünftigen Betrag dazu?
    Vielleicht kann ich ja was dazu lernen.

    Ps: War ge-omnipaged, nix getippt. Eine Seite geht ja noch.

    mfg TC
    Die dümmsten Programmierer haben die dicksten Programme.

  3. #13
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von TagebauCoder Beitrag anzeigen
    Innerhalb von Funktionen werden bei allen symbolischen Zugriffen auf alle Bausteinparameter vom Typ ARRAY oder STRUCT die Register AR1 und DB überschrieben.
    Und es geht doch!

    Im Falle eines Ein-, Aus- oder Durchgangsparameter vom zusammengesetzten Datentyp wird für die Parameterübergabe ein bereichsübergreifender Zeiger auf eine Pointer-Variable an die aufgerufene Funktion übergeben. Der Inhalt der Pointer-Variable zeigt auf den eigentlichen Aktualoperanden. Für den indirekten Zugriff wird zunächst ein bereichsübergreifender Zeiger auf diesen Pointer gebildet.
    Im nächsten Schritt wird der Inhalt der Pointer-Variable ausgelesen und über diese Information auf den Aktualoperanden zugegriffen.

    Code:
    FUNCTION FC1: VOID
     
    VAR_INPUT
    IN_DT : DATE_AND_TIME;
    END_VAR
     
    VAR_OUTPUT
    SEK : Byte;
    MIN : Byte;
    STD : Byte;
    END_VAR
     
    VAR_TEMP
    DB_Num : Word;
    END_VAR
     
    BEGIN
    L    P##IN_DT;        //Lade bereichsübergreifenden Zeiger auf Pointer in Akku 1
    LAR1 ;                   //Lade Zeiger in AR1, AR1 zeigt jetzt auf den Pointer
    L   W[AR1,P#0.0];   //Lade DB-Nummer aus Pointer in Akku 1
    T   #DB_Num;         //DB-Nummer auf Temp Variable
    AUF DB[#DB_Num];  //DB öffnen
    L   D[AR1,P#2.0];    //Lade bereichsübergreifenden Zeiger auf DT-Variable aus Pointer
    LAR1 ;                   // Lade Zeiger in AR1, AR1 zeigt auf DT-Variable
    L   B[AR1,P#3.0];    //Lade Stundenanteil aus DT-Variable
    T   #STD;
    L   B[AR1,P#4.0];    //Minuten
    T   #MIN;
    L   B[AR1,P#5.0];
    T   #SEK;
    END_FUNKTION
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <
    Zitieren Zitieren Zugriff auf übergebene DT-Parameter in einer FC  

  4. #14
    Registriert seit
    28.01.2009
    Ort
    Hamburg
    Beiträge
    199
    Danke
    52
    Erhielt 54 Danke für 34 Beiträge

    Standard

    Das angehängte PDF-File beschreibt die Parameterbeschaltung in Step-7.
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Parameterübergabe in Step-7 allgemein  

  5. #15
    Registriert seit
    28.01.2009
    Ort
    Hamburg
    Beiträge
    199
    Danke
    52
    Erhielt 54 Danke für 34 Beiträge

    Standard

    Das PDF-File Beschreibt die algemeine Parameterüber in Step-7
    Angehängte Dateien Angehängte Dateien

  6. #16
    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

    Zitat Zitat von Paule Beitrag anzeigen
    Und es geht doch!

    Im Falle eines Ein-, Aus- oder Durchgangsparameter vom zusammengesetzten Datentyp wird für die Parameterübergabe ein bereichsübergreifender Zeiger auf eine Pointer-Variable an die aufgerufene Funktion übergeben. Der Inhalt der Pointer-Variable zeigt auf den eigentlichen Aktualoperanden. Für den indirekten Zugriff wird zunächst ein bereichsübergreifender Zeiger auf diesen Pointer gebildet.
    Im nächsten Schritt wird der Inhalt der Pointer-Variable ausgelesen und über diese Information auf den Aktualoperanden zugegriffen.

    Code:
    FUNCTION FC1: VOID
     
    VAR_INPUT
    IN_DT : DATE_AND_TIME;
    END_VAR
     
    VAR_OUTPUT
    SEK : Byte;
    MIN : Byte;
    STD : Byte;
    END_VAR
     
    VAR_TEMP
    DB_Num : Word;
    END_VAR
     
    BEGIN
    L    P##IN_DT;        //Lade bereichsübergreifenden Zeiger auf Pointer in Akku 1
    LAR1 ;                   //Lade Zeiger in AR1, AR1 zeigt jetzt auf den Pointer
    L   W[AR1,P#0.0];   //Lade DB-Nummer aus Pointer in Akku 1
    T   #DB_Num;         //DB-Nummer auf Temp Variable
    AUF DB[#DB_Num];  //DB öffnen
    L   D[AR1,P#2.0];    //Lade bereichsübergreifenden Zeiger auf DT-Variable aus Pointer
    LAR1 ;                   // Lade Zeiger in AR1, AR1 zeigt auf DT-Variable
    L   B[AR1,P#3.0];    //Lade Stundenanteil aus DT-Variable
    T   #STD;
    L   B[AR1,P#4.0];    //Minuten
    T   #MIN;
    L   B[AR1,P#5.0];
    T   #SEK;
    END_FUNKTION
    Was genau meinst du mit "Und es geht doch"?
    Das was du da zeigst ist ja klar, es ging aber eigentlich um den direkten symbolischen Zugriff mit Arrayindex.
    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

  7. #17
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Ja Ralle,

    Du hast schon Recht, mit dem ursprünglichen Thema hat es nicht mehr viel zu tun.
    Doch wir sind im laufe der Beiträge auf das Problem der Übergabe von zusammengesetzten Datentypen bei einer FC gestoßen, wenn in dieser FC dann das AR1 benutzt wird.

    Wenn Du aber meinst das passt nicht hier her oder verwirrt bloß, dann kannst den Beitrag auch löschen, ist auch OK.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  8. #18
    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 Paule Beitrag anzeigen
    Ja Ralle,

    Du hast schon Recht, mit dem ursprünglichen Thema hat es nicht mehr viel zu tun.
    Doch wir sind im laufe der Beiträge auf das Problem der Übergabe von zusammengesetzten Datentypen bei einer FC gestoßen, wenn in dieser FC dann das AR1 benutzt wird.

    Wenn Du aber meinst das passt nicht hier her oder verwirrt bloß, dann kannst den Beitrag auch löschen, ist auch OK.
    Nö, ist ja nun erklärt.
    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. Antworten: 18
    Letzter Beitrag: 21.12.2016, 17:03
  2. Einem INPUT in SCL etwas zuweisen
    Von Bensen83 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 06.03.2011, 09:34
  3. Probleme mit einem Array
    Von Hitschkock im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 30.03.2009, 11:42
  4. Antworten: 4
    Letzter Beitrag: 18.03.2009, 16:12
  5. LOGO! CPU Analog Input / Digital Input
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 24.11.2005, 05:55

Stichworte

Lesezeichen

Berechtigungen

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