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

Results 1 to 2 of 2

Thread: Anwendungsfälle für Referenzen

  1. #1
    Join Date
    05.07.2019
    Posts
    5
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,


    ich habe mich soeben gefragt, welche Anwendungsfälle für Referenzen existieren. So wie ich es Verstanden habe, ersetzen Referenzen die indirekte Adressierung (Pointer) bei optimierten Bausteinen. Wieso geht man den Umweg über eine Referenz, wenn die Variable direkt symbolisch angesprochen werden kann? Gibt es hierbei vielleicht irgendwelche Vorteile bezüglich der Speicherbelegung zur Laufzeit?
    Hier ein kleiner SCL-Auszug, welcher die gleiche Aufgabe mit und ohne den Einsatz einer Referenz ausführt.


    #Result := #a + #b; //Ergebnis = 15
    "Referenz_Ergebnis"."Ergebnis 1" := #Result; //Ergebnis in DB schreiben
    #MyRefInt:= REF(#a);
    #MyRefInt^ := 3;
    #Result := #a + #b; //Ergebnis = 13
    "Referenz_Ergebnis"."Ergebnis 2" := #Result; //Ergebnis in DB Schreiben
    #a := 5; //Variable a rücksetzen




    #Result := #a + #b; //Ergebnis = 15
    "Referenz_Ergebnis"."Ergebnis 3" := #Result;
    #a := 3; //entspricht obiger Referenzoperation
    #Result := #a + #b; // Ergebnis = 13
    "Referenz_Ergebnis"."Ergebnis 4" := #Result;
    #a := 5;


    Für eure Erfahrungen und Meinungen wäre ich sehr dankbar.


    Gruß
    PLC1
    Reply With Quote Reply With Quote Anwendungsfälle für Referenzen  

  2. #2
    Join Date
    27.06.2015
    Location
    Hamburg
    Posts
    1,026
    Danke
    224
    Erhielt 314 Danke für 247 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin,
    also dein Beispiel ist so natürlich sinnfrei, das hast du richtig erkannt. Nützlich sind die Referenzen, wenn du Funktionen schreibst die möglichst Variabel eingesetzt werden sollen. Also einen Variant als InOut bekommen der bspw. unterschiedliche UDTs handeln soll. Um diese unterschiedlichen UDTs zu handhaben musst du als erstes eine Typprüfung machen "TypeOf(meinInOutVariant)" und dann je nach Typ-Ergebnis deinen Code bearbeiten.
    Und hier war es dann ohne Referenzen ein wenig bucklig - denn du musstest via VariantGet(meinInOutVariant) dir den InOut erstmal in eine lokale laden, konntest dann symbolisch mit dieser lokalen arbeiten und musstest abschließend diese lokale wieder mit VariantPut(meinInOutVariant) auf die InOut zurückkopieren.
    Dieses hin- und herkopieren wird durch die Referenzen vereinfacht. Die Referenz ist in meinen Augen jetzt wie früher eine AT-Sicht nur dass die Verknüpfung zwischen Sicht und Variable nicht in der Bausteindeklaration erfolgt, sondern durch den ?= -Zuweisungsoperator. Nach dieser Zuweisung kannst du die Referenz symbolisch (mit dem Dereferenzierer ^) manipulieren und diese Manipulationen wirken direkt auf deine InOut.

    Man kann aber auch einfach wie früher n verschiedene Bausteine schreiben, die je eine UDT verarbeiten können.

  3. Folgender Benutzer sagt Danke zu Howard für den nützlichen Beitrag:

    PLC1 (05.07.2019)

Similar Threads

  1. Twincat3 FB_Init() und Referenzen. Bleibenn Referenzen stabil?
    By drfunfrock in forum CODESYS und IEC61131
    Replies: 9
    Last Post: 09.12.2019, 13:38
  2. TIA Highlights von TIA Portal V15 - Referenzen
    By Dumpfbacke in forum Simatic
    Replies: 1
    Last Post: 22.02.2018, 21:35
  3. CoCeSys 3.5 Referenzen Belegungsplan
    By Bergmann in forum CODESYS und IEC61131
    Replies: 1
    Last Post: 28.08.2017, 15:26
  4. Online Change - Interfaces/Referenzen/Zeiger
    By Not-Aus in forum CODESYS und IEC61131
    Replies: 0
    Last Post: 28.07.2017, 11:56
  5. Referenzen eines grossen Projekts
    By superbug in forum Simatic
    Replies: 3
    Last Post: 09.03.2009, 11:35

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •