Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Variablennamen "zusammenbauen"

2007-06-18
2007-06-20
  • MarcelGünther - 2007-06-18

    Hallo,

    ich möchte eine PLC Funktion schreiben, die eine bestimmte globale Variable anspricht. Der Name der Variable soll aus den Parametern der Funktion zusammengebaut werden.

    Beispiel wie ich es mir vorstelle:

    A: String;
    B: String;
    C: String;
    A := "Ausgang_";
    B := "1";
    C := A+B;
    VariableVonString(C) := TRUE;
    

    Der Name wird aus Konstanten zur Progammierzeit zusammengesetzt, nicht dynamisch im Programm.

    Der Compiler müsste also prüfen, ob es "Ausgang_1" auch gibt.

    Vielleicht hat jemand eine Idee.

    Vielen Dank

    Marcel

     
  • Erik Böhm - 2007-06-18

    Hallo

    Also mal ganz kurz gesagt würde ich sagen: Das geht nicht.

    Dazu müsste ein Preprocessor das Programm erst ausführen und dann das Ergebnis an den Compiler weitergeben.

    Gruss Erik

     
  • MarcelGünther - 2007-06-18

    Hallo Erik,

    vielen Dank für Deine schnelle Antwort, auch wenn die Antwort mich nicht gerade glücklich macht.

    das Problem ist nämlich, dass die Variablen im RuntimeSystem nicht aktuallisert werden wenn sie nicht wenigstens einmal namentlich im Programm erwähnt wurden sind - also in der Symboldatei stehen -, ein Zugriff mittels Pointer wird somit sinnlos.

    Gruss

    Marcel

     
  • Erik Böhm - 2007-06-18

    Hallo

    Wie wärs denn wenn du ein Array machst ?

    Also z.B.

    Ausgang: array[1..64] of bool;

    Dann könntest du das so machen:

    for i := 1 to 64 do

    Ausgang[i] := TRUE;

    end_for

    Gruss

    Erik

     
  • MarcelGünther - 2007-06-18

    Hallo,

    Danke für die Idee.

    Aber ich glaube das würde mich nicht weiterbringen.

    Denn die Globalen Variablen lassen sich mit dem RuntimeSystem nicht als Array definieren. Somit müsste ich irgendwo an zentraler Stelle etwas schreiben wie

    AUSGANG_1 := Ausgang[1];

    AUSGANG_2 := Ausgang[2];

    und somit wieder alle möglichen Variablen dem System Bekanntmachen.

    Der Hintergrundgedanke meiner Idee war aber gerade das Bekanntmachen aller globalen Variablen zu Vermeiden, denn jede Variable die im Programm genutzt wird, wird von der Runtime über eine Hookroutine nach aussen gegeben und Belastet somit das angeschlossene System.

    Gruss Marcel

     

    Related

    Talk.ru: 1
    Talk.ru: 2

  • Erik Böhm - 2007-06-18

    Tja, dann wirds langsam schwierig...

    Also Tatsache ist, dass zur Laufzeit keine neuen Variablen definiert werden können und einen Preprocessor der sowas kann kenne ich auch nicht.

    Sorry

     
  • Martin Wunsch - 2007-06-19

    Die digitalen Ein- und Ausgänge werden steuerungsintern doch von Eingangs- / Augangs-Bytes bzw. -Words gelesen bzw. geschrieben. Kann man nicht direkt z.B. ein Eingangsbyte einlesen, um so auf einen Schlag 8 Eingänge zu haben?

    Natürlich muß man auf die Namen der jeweiligen Steuerung Bezug nehmen, da durchaus die Möglichkeit besteht, daß verschiedene Hersteller ihre Ein- und Ausgänge unterschiedlich benennen bzw. intern platzieren.

    Gruß

    Martin

     
  • debug - 2007-06-20

    Wie ist es mit:

    In_01 at %IB1 : Byte;
    
     

Log in to post a comment.