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

variables TRUNC ?

mwatermann
2007-03-09
2007-03-09
  • mwatermann - 2007-03-09

    servus,

    suche eine funktion, die eine real zahl auf eine nachkommastelle rundet, allerdings in 0.5er schritten... also:

    11,4 => 11,5

    11,7 => 12,0

    etc.

    hab sowas (selbst in der oscat ) noch nicht gefunden.

    gibt es sowas schon? also so eine art TRUNC funktion, die aber konfigurierbar ist.

    oder wie kann man sowas am elegantesten lösen?

     
  • proton - 2007-03-09

    Bau dir eine Funktion. sollte einfach gehen:

    mit TRUNC erhältst du quasi den ganzzahligen Anteil. den ziehst du von der effektiven Zahl ab. Wenn der Betrag der Differenz > 1, dann zählst du zum Trunc Wert 1 dazu sonst 1 ab.

    Das gilt allerdings nur für positive Zahlen. Bei Negativen Zahlen also auch noch entsprechend berücksichtigen.

    Riecht nach CASE OF mit 4 Cases...

    Gruess

    Adrian

     
  • J Schohaus - 2007-03-09

    Die einfachste lösung ist das der Wert mit Zwei Multipliziert wird.

    Dann diesen Wert runden und zum schluss wieder dividiert durch zwei.

    Var_out := TRUNC ( ( Var_in * 2.0 + 0.5 ) ) / 2.0 ;

    Dieses noch in einer neuen Funktion verpacken und fertig.

     
  • mwatermann - 2007-03-09

    danke,

    habe nur positive real werte, von daher wirds einfach...

    trotzdem wäre eine konfigurierbare "round" funktion doch mal was für die oscat, oder hugo?

     
  • hugo - 2007-03-09

    schau dir mal round(in,N) in der oscat lib an

    die rundet eine real zahl in auf n stellen nach dem komma.

    dabei wird aus round(3.1415, 3) = 3.142

    und aus ound(3.1414,3) = 3.141

     
  • mwatermann - 2007-03-09

    danke hugo,

    die hatte ich gefunden. mir fehlte allerdings da ein parameter, der angibt, in welchen schritten er die letzte nachkommastelle rundet.

    aber ist ja auch kein problem selbst dazu zu basteln.

    danke für eure hilfe!

    PS: habs jetz ganz simpel drangebastelt (wie gesagt, nur für positive zahlen):

    rSpeed_AVG_decimal := rSpeed_AVG - TRUNC(rSpeed_AVG);
    IF rSpeed_AVG_decimal < 0.5 THEN
       rSpeed_AVG_decimal := 0;
    ELSE
       rSpeed_AVG_decimal := 0.5;
    END_IF;
    rSpeed_AVG := TRUNC(rSpeed_AVG) + rSpeed_AVG_decimal;
    
     
  • hugo - 2007-03-09

    ah jetzt verstehe ich was du möchtest

    natürlich gibts sowas oin der oscat lib un es nennt sich stair

    eine funktion die nur bestimmte ausgangsschritte zulässt

     
  • mwatermann - 2007-03-09

    hmpf... dachte ich mir... wieder zu blöd zum suchen gewesen...

    danke dir!

     

Log in to post a comment.