Konstantes Array/Struktur?

Sara
2009-04-20
2009-04-24
  • Sara - 2009-04-20

    Hi ihr,

    ich möchte ein Array und eine Struktur als konstant definieren. Grob sieht's so aus:

    VAR_GLOBAL CONSTANT

    arr_const : ARRAY [1..10] OF BOOL := 10(FALSE);

    struct_reset : selbstdef_Struct; (die Details lass ich hier mal weg)

    END_VAR

    Im Online-Modus kann jedoch auf diese Konstanten schreibend zugegriffen werden, was ich ja vermeiden will.

    Was mach ich falsch? Geht das überhaupt, wie ich das will?

    Danke für eure Hilfe!

    Sara

     
  • Ralph Holz - 2009-04-20

    Hallo Sara,

    der online Modus darf immer alle Variablen überschreiben (Konstanten sind auch Variablen - dein Programm darf es aber nicht so solltest du eigentlich genau das erreicht haben was du willst. Willst du auch im Online-Mode nicht beschreibbare Konstanten, so musst du in Projekt-->Optionen-->Übersetzungsoptionen den Hacken bei Konstanten ersetzen machen.

    Gruß

    Ralph

     
  • Sara - 2009-04-21

    Hallo Ralph,

    "Konstanten ersetzen" war schon aktiviert.

    Ich war nur irritiert, da Konstanten beim Simulieren grün dargestellt werden und man ihren Wert nicht ändern kann. Allerdings war das beim Array und bei der Struktur möglich. Vielleicht sind nur die skalaren Variablen grün?!

    Wenn ich jedoch im Programm vorschreibe, auf dieses Array schreibend zuzugreifen, dann kommt der Fehler 4020 ("Operanden von ST, STN, S, R müssen Variable mit Schreibzugriff sein") - also, wie erwartet.

    Also war es doch richtig.

    Zitat:
    der online Modus darf immer alle Variablen überschreiben

    Was heißt das genau? Laufe ich Gefahr, dass Konstanten mal verändert werden können?

    Ok, danke!

    Grüße

    Sara

     
  • Anonymous - 2009-04-24

    Originally created by: Bernhard Werner

    Sara hat geschrieben:
    Allerdings war das beim Array und bei der Struktur möglich. Vielleicht sind nur die skalaren Variablen grün?!

    Richtig: grün sind die Variablen die es sozusagen auf der Steuerung gar nicht gibt sondern direkt im Code ersetzt werden. Für Strukturen und Arrays funktioniert das nicht. Die gibt es genauso im Speicher wie wenn
    sie nicht konstant wären, der Compiler testet nur, ob auf diese geschrieben wird.

    Sara hat geschrieben:
    Was heißt das genau? Laufe ich Gefahr, dass Konstanten mal verändert werden können?

    Ralph meint, mit Variablen schreiben darf man auch (nichtgrüne) Konstanten zur Laufzeit verändern, aber das ist dann ein bewusster Akt und wir nehmen an, dass derjenige der das tut schon weiss was er macht.

    Über Fehler in der Programmierung (Pointer oder Arrays die ausserhalb ihres Bereichs zugegriffen werden) kann eine solche Konstante auch verändert werden.

    Bernhard

     
  • Sara - 2009-04-24

    Hallo Bernhard!

    Vielen Dank für deine Antwort. Das erklärt mir einiges.

    Zitat:
    Ralph meint, mit Variablen schreiben darf man auch (nichtgrüne) Konstanten zur Laufzeit verändern, aber das ist dann ein bewusster Akt

    Wie genau geht das? Man kann diese Variable ja nicht wie eine normale behandeln, da nicht drauf geschrieben werden kann. Über Pointer auf diese Variable?

    Danke.

    Viele Grüße

    Sara

     

Log in to post a comment.