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

Variable im Wertebereich begrenzen

Knodelpa
2007-05-14
2007-05-14
  • Knodelpa - 2007-05-14

    Hallo zusammen,

    wie kann ich eine CoDeSys Variable im Wertebereich begrenzen ???

    Test: INT (20..80);

    Diese Deklaration wird klaglos akzeptiert, funktioniert aber leider nicht !!??

    Wer weiss Rat ??

    Viele Grüße

    Paul

     
  • debug - 2007-05-14

    Was soll die Wertebereichbegrenzung bewirken?

    Oder wie und wo soll sie eingreifen?

     
  • Knodelpa - 2007-05-14

    Hallo Debug,

    diese soll den Wert in den Min- und Maxgrenzen (Klammer) halten.

    Bei einer Moeller PS4 funktioniert dies !!!

    Die CoDeSys akzeptiert die Syntax, begrenzt aber nicht !!!???

    Gruß

    Paul

     
  • DieterB - 2007-05-14

    Hallo Paul,

    schau Dir mal in der CoDeSys-Hilfe das Thema "Bereichseingrenzung von Datentypen" an. Da steht wie's geht.

    Gruß

    Dieter

     
  • mwatermann - 2007-05-14

    weil's mich auch interessiert hat, hier direkt ein auszug:

    Ein Unterbereichstyp ist ein Datentyp, dessen Wertebereich nur eine Untermenge eines Basistypen umfaßt. Die Deklaration kann im Registerblatt   Datentypen erfolgen, eine Variablen kann aber auch direkt mit einem Unterbereichstypen deklariert werden:
    Syntax für die Deklaration im Register 'Datentypen':
     TYPE <Name> : <Inttype> (<ug>..<og>) END_TYPE;
    <Name> 
     muss ein gültiger IEC-Bezeichner sein,
     
    <Inttype> 
     ist einer der Datentypen SINT, USINT, INT, UINT, DINT, UDINT, BYTE, WORD, DWORD (LINT, ULINT, LWORD).
     
    <ug> 
     ist eine Konstante, die kompatibel sein muss zum Basistypen, und die die Untergrenze des Bereichstypen festlegt. Die Untergrenze selbst gehört zu diesem Bereich.
     
    <og> 
     ist eine Konstante, die kompatibel sein muss zum Basistypen, und die die Obergrenze des Bereichstypen festlegt. Die Obergrenze selbst gehört zu diesem Basistypen.
     
    Beispiel:
    TYPE
     SubInt : INT (-4095..4095);
    END_TYPE
     
    Direkte Deklaration einer Variablen mit einem Unterbereichstypen 
    Beachten Sie die korrekte Angabe eines Initialwerts, wenn der Unterbereich nicht die '0' enthält:
    VAR
     i1 : INT (-4095..4095);
     i2: INT (5..10):=5;
     ui : UINT (0..10000);
    END_VAR
    Wird einem Unterbereichstypen eine Konstante zugewiesen (in der Deklaration oder in der Implementation), die nicht in diesen Bereich fällt (z.B. i:=5000), wird eine Fehlermeldung ausgegeben.
    
     
  • mwatermann - 2007-05-14

    sorry...

    ganz wichtig dabei ist für dich folgendes (prinzipiell hast du es ja schon richtig gemacht und deshalb auch keine fehlermeldung bekommen):

    [b]Beachten Sie die korrekte Angabe eines Initialwerts, wenn der Unterbereich nicht die '0' enthält[/b]:
    VAR
     i1 : INT (-4095..4095);
     i2: INT (5..10):=5;
     ui : UINT (0..10000);
    END_VAR 
    
     
  • Ralph Holz - 2007-05-14

    Hi,

    sollen die Werte auch zur Laufzeit in den Grenzen begrenzt werden fehlt im projekt noch die Funktion CheckRangeSigned bzw. CheckRangeUnsigned die im Projekt stehen kann oder auch aus der CheckLib kommen. Einfach mal CheckRange als Stichwort in die Hilfe eingeben.

    Das das bei Möller geht liegt warscheinlich daran, dass die CheckLib automatisch eingebunden wird (ist nur eine Vermutung von mir)

    Gruß

    Ralph

     

Log in to post a comment.