Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Szirty

    őstag

    válasz tibi-d #5757 üzenetére

    Milyen adattípusra kell azt nem írtad.

    Itt egy, aminek INT a bemenete és REAL a kimenete.
    Ha más típusra kell nem nehéz átírni.
    Ezt valósítja meg: Out=((In-InMin)*((OutMax-OutMin)/(InMax-InMin)))+OutMin
    Az egyik (bemenő) tengely két pontját InMin, InMax, a másik (kimenő) tengely két pontját OutMin és OutMax határozza meg. A bemeneti (skálázandó) értéket az In-ben várja a kimeneti (skálázott) értéket az Out-ba teszi.

    FUNCTION FC 109 : VOID
    TITLE =
    //Skálázás
    //Az #InMin-#InMax tartományt #OutMin-#OutMax tartományra skálázza
    //
    //Out=((In-InMin)*((OutMax-OutMin)/(InMax-InMin)))+OutMin
    //InRng=InMax-InMin
    //OutRng=OutMax-OutMin
    //R=OutRng/InRng
    //Out=((In-InMin)*R)+OutMin
    AUTHOR : Szirty
    VERSION : 0.2

    VAR_INPUT
    In : INT ; //Skálázandó érték
    InMin : INT ; //Bemenő tartomány minimuma
    InMax : INT ; //Bemenő tartomány maximuma
    OutMin : REAL ; //Kimenő tartomány minimuma
    OutMax : REAL ; //Kimenő tartomány mximuma
    END_VAR
    VAR_OUTPUT
    Out : REAL ; //Skálázott érték
    END_VAR
    VAR_TEMP
    InRng : REAL ; //Bementi tartomány
    R : REAL ; //Szorzó részeredmény
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    //
    //
    //
    //InRng=InMax-InMin
    L #InMin;
    ITD ;
    DTR ;
    L #InMax;
    ITD ;
    DTR ;
    -R ;
    T #InRng;
    //OutRng=OutMax-OutMin
    L #OutMin;
    L #OutMax;
    -R ;
    //R=OutRng/InRng
    L #InRng;
    /R ;
    T #R;
    L #In;
    L #InMin;
    -I ;
    ITD ;
    DTR ;
    L #R;
    *R ;
    L #OutMin;
    +R ;
    T #Out;
    SET
    SAVE
    END_FUNCTION

    Vagy itt van létrában is:

Új hozzászólás Aktív témák