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

Analogwertausgabe in der Visualisierung

fludwig
2022-06-16
2022-11-18
  • fludwig - 2022-06-16

    Servus,

    im folgenden bitte ich Sie um einen kurzen Denkanstoß.
    Problemstellung:

    Ein Analogwert (rAnalogInput) wird durch eine Real-Eingabe in der Visualisierung simuliert. (Kein Problem)
    
    Im Programm soll nun ausgewertet werden ob dieser Analogwert in einer bestimmten Messbereichsspanne liegt (z. B. 0°C bist 150°C)
    Hierzu wurden Hilfsvariablen iRangeMin:=0 und iRangeMax:=150 erstellt.
    
    Liegt der Wert im eingestellten Bereich soll dieser mit zwei Nachkommastellen ebenfalls in der Visualisierung ausgegeben werden.
    Hierzu wurde die Variable rConvertedValue erstellt welche beschrieben wird wenn der IF-Clause ausgeführt wird.
    
    IF (ranalogValue > iRangeMin AND ranalogValue < iRangeMax) THEN
    rConvertedAnalogValue:=ranalogValue;
    
    rConvertedAnalogValue wird in der Visualisierung wie folgt ausgegeben. ConvertedValue: %.2f
    
    
    Liegt der rAnalogInput jedoch nicht in der Spanne soll in der Visualisierung ein (overrange) ">>>>>" oder (underrange) "<<<<<" ausgegeben
    werden. Dies soll ebenfalls im selben Rechteck erfolgen in der sonst der ConvertedValue ausgegeben wird.
    
    Problem erklärt sich von selbst. String kann nicht bei Platzhalter %.2f ausgegeben werden.
    
    Erstelle ich jedoch einen String und gebe diesen aus, kann ich die Nachkommastellen nicht angeben, oder gibt es etwa doch eine Möglichkeit?!
    Beispiel:
    
            rTestString: STRING(5);
    
            rTestString:=real_to_string(rAnalogValue);
    
    In diesem Beispiel würde er bei Real-Wert 20.34455 ja 20.34 ausgeben.
    Bei einem Realwert von 102.254422 jedoch 102.3 (Keine gültigen Nachkommastellen mehr)
    

    Ich hoffe das Problem wird in irgendeiner Weise ersichtlich und es gibt eine ausgefuchsten Spezialisten der mir weiterhelfen kann.

    Vielen Dank.

     
  • ludecus

    ludecus - 2022-06-27

    Hallo fludwig,

    Hierfür gibt es 2 Lösungen:

    1. Du arbeitest, wie du bereits angefangen hast, im CodeBehind. Den rTestString musst du lediglich über die DELETE beschneiden.
    nPosSeperator := FIND('.',rTestString);
    rTestString := DELETE(rTestString,LEN(rTestString)-nPosSeperator,nPosSeperator);
    

    So oder so ähnlich müsste es aussehen. Ich hab es nicht getestet.

    1. Du arbeitest im FrondEnd. Verwende einfach 2 Text Fields. Mit den State Varibales kannst du das nicht benötigte Element ausblenden. Dabei kannst du sogar einfachen IEC Code verwenden.
    Invisible        rAnalogValue <= iRangeMin OR rAnalogValue >= iRangeMax
    

    Ich hoffe diese Ansätze helfen dir weiter.

     
  • ignat - 2022-11-18

    I'd just like to add to previous, that the same thing could be realised not with two fields, but with one field and TextList for it.

    Text field contains two different placeholders:
    0 %.2f
    1 %.1f

    In text field settings
    1) Dynamic texts -> Text list -> YOUR_TEXT_LIST (see above)
    2) Dynamic texts -> Text index -> BOOL_TO_INT(xValueOutOfRange) // your fault message trigger
    3) Text variable -> rAnalogValue

     

Log in to post a comment.