Variablenname erkennen

2008-09-01
2008-09-03
  • Andreas Stampa - 2008-09-01

    Hallo liebe Forum-Gemeinde,

    wer kann mir helfen?

    Ich habe einen Baustein (PRG) programmiert. Dieser hat einen Eingangsparameter xIn1 (VAR_INPUT). Diesen Baustein benutze ich mehrmals in meinem Programm mit verschiedenen Eingangsparametern.

    Nun möchte ich innerhalb des Bausteins wissen, welche Variable an den Eingang xIn1 verknüpft ist. Dazu müsste ich also den Namen der Variablen als String vorliegen haben.

    Wie geht das?

     
  • debug - 2008-09-01

    Wofür brauchst Du den Namen der Variablen?

     
  • Andreas Stampa - 2008-09-01

    In dem Namen der Variablen steckt eine Kennung, die an ein Alarmierungssystem übermittelt werden soll.

    Da es sich um eine große Anzahl von Bausteinen handelt (ca. 2000), will ich nicht an jeden Baustein die Kennung extra als zusätzliche Variable anknüpfen.

    Es wäre praktisch, wenn der Baustein aus dem Namen der Variablen die Kennung extrahiert und diese dann sendet.

     
  • Andreas Stampa - 2008-09-01

    Grundsätzlich müsste das möglich sein:

    Es gibt einen Baustein der Bibliothek AnalyzationNew.lib, der etwas ähnliches kann (AnalyzeExpression).

    Dieser FB gibt einen String aus, der die Namen der verwendeten Variablen an seinem Eingang InputExp enthält.

    Hat jemand vielleicht den Quellcode dieser Bibliothek?

     
  • hugo - 2008-09-01

    du könntest den bausstein mit einem pointer input versehen,

    der liefert dir die adresse der variable.

    den wert kannst du ansprechen über X := input_var^

    die adresse der variable ist dein pointer input selbst.

    damit kann deine funktion beliebig oft mit verschiedenen pointern aufgerufen werden und trotzdem die variable als adresse erkennen.

    wenn du die variaben als strukturiertes array definierst kannst du auch gleich den namen per string auslesen

     
  • Andreas Stampa - 2008-09-03

    Hallo hugo

    "wenn du die variaben als strukturiertes array definierst kannst du auch gleich den namen per string auslesen"

    Das ist der Punkt: Wie geht das?

    Wie kann ich aus dem Pointer den Namen der "gepointerten" Variablen auslesen?

    Der Pointer zeigt ja nur auf eine Speicherzelle.

     
  • hugo - 2008-09-03

    unter datentypen definiest du folgendes:

    TYPE beispiel :

    STRUCT

    re : REAL;
    
    name : STRING(10);
    

    END_STRUCT

    END_TYPE

    im programm definierst du folgendes:

    VAR CONSTANT

        amax : INT := 7;
    

    END_VAR

    VAR

        varx : array[0..amax] of beispiel;
    

    end_var

    dann bekommt deine funktion den eingang IN vom typ beispiel

    in der funktion benutzt du

    datax := IN.re;

    dataname := IN.name;

    pointer sind nicht nötig wäre nur umständlich und gefährlich

     
  • hugo - 2008-09-03

    falls du programmierbeispiele suchst schau dir mal unsere open source library oscat.lib an dort findest du hunderte von funktionen die du benutzen kannst aber auch deren souirce anschauen kannst.

    um den source zu sehen öffne die lib wie ein projekt mit file open und du kannst alles sehen und auch bearbeiten

    download unter w www.oscat.de w

     
  • Andreas Stampa - 2008-09-03

    zu hugos Beispiel:

    Nee, das ist nicht die Lösung.

    Dann habe ich ja 8 Variablen vom Typ Beispiel und jeder muss ich den Namen im Element .name extra vergeben.

    Das will ich ja gerade vermeiden, bei 2000 Variablen/Strukturen jeweils den Namen als String übergeben?! Das wäre ja Wahnsinn.

    Ich habe mir mal ein Speicherabbild der Wago-SPS erzeugt. Dort kann man sehen, das die Namen der Variablen im Speicher zur Laufzeit vorhanden sind (wahrscheinlich für Debug-Zwecke). Also muss es auch möglich sein, aus dem Speicherort einer Variablen (mit ADR rausfinden) den Namen abzuleiten.

    Nur wie???

    Der Support teilt mir nur mit, dass es sich um "interne" Funktionen handelt.

     
  • hugo - 2008-09-03

    eine bessere möglichkeit kenne ich auch nicht

     

Log in to post a comment.