Keresés

Hirdetés

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

  • KB.Pifu

    tag

    válasz Shirchy #4422 üzenetére

    szia!

    Én a nyomtatásnál a "küldés a OneNote programba" (office-cucc) választom, telepítsd fel.
    Azután már mentheted onnan pdf-be is.

  • Szirty

    őstag

    válasz Shirchy #4422 üzenetére

    Üdv!

    Jó. Akkor itt az FC105 forráskódja:

    FUNCTION FC 105 : WORD
    TITLE =SCALING VALUES
    //
    AUTHOR : SEA
    FAMILY : CONVERT
    NAME : SCALE
    VERSION : 2.1


    VAR_INPUT
    IN : INT ; // input value to be scaled
    HI_LIM : REAL ; // upper limit in engineering units
    LO_LIM : REAL ; // lower limit in engineering units
    BIPOLAR : BOOL ; // 1=bipolar; 0=unipolar
    END_VAR
    VAR_OUTPUT
    OUT : REAL ; // result of the scale conversion
    END_VAR
    VAR_TEMP
    IN_REAL : REAL ; // input value as a REAL number
    K1 : REAL ; // low limit for input value
    K2 : REAL ; // high limit for input value
    SPAN : REAL ; // HI_LIM - LO_LIM
    TEMP1 : REAL ; // temporary result
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    //
    // set K1 and K2 constants based upon BIPOLAR
    //
    SET ; // if(BIPOLAR=0)
    A #BIPOLAR; // .
    JC EL01; // {
    L 0.000000e+000; // K1=0
    T #K1; // .
    JU EI01; // } else {
    EL01: L -2.764800e+004; // K1=-27648.0
    T #K1; // .
    EI01: NOP 0; // }
    L 2.764800e+004; // K2=+27648.0
    T #K2; // .
    //
    // convert input (IN) to real
    //
    L #IN; // ACC1=IN
    ITD ; // convert to double integer
    DTR ; // convert to real
    T #IN_REAL; // IN_REAL-IN as a real
    //
    // determine SPAN = HI_LIM - LO_LIM
    //
    L #HI_LIM; // SPAN=HI_LIM-LO_LIM
    L #LO_LIM; // .
    -R ; // .
    T #SPAN; // .
    //
    // If the input value is outside the K1 and K2 range, the output
    // is clamped to the nearer of either the LO_LIM or the HI_LIM
    // and an error is logged. If the input value is exactly at a limit the
    // output will be set to the computed limit with no error returned.
    // changed 2/14/00 by ERI per RQ210693
    L #IN_REAL; // if(IN_REAL<K1)
    L #K1; // .
    >=R ; // .
    JC EL02; // {
    L 8; // error
    T #RET_VAL; // .
    L #LO_LIM; // ACC1=LO_LIM
    T #OUT; // OUT=ACC1
    JU FAIL; // error
    EL02: POP ; // } else {
    L #K2; // if(IN_REAL>K2)
    <=R ; // .
    JC EI04; // {
    L 8; // error
    T #RET_VAL; // .
    L #HI_LIM; // ACC1=HI_LIM
    T #OUT; // OUT=ACC1
    JU FAIL; // error
    EI04: NOP 0; // }
    NOP 0; // }
    //
    // scale the input
    //
    L #K2; // TEMP1=K2-K1
    L #K1; // .
    -R ; // .
    T #TEMP1; // .
    L #IN_REAL; // IN_REAL-K1
    L #K1; // .
    -R ; // .
    L #TEMP1; // divide by TEMP1
    /R ; // .
    L #SPAN; // multiply by SPAN
    *R ; // .
    L #LO_LIM; // add LO_LIM
    +R ; // .
    T #OUT; // OUT=scale(IN_REAL)
    //
    // set BR bit : no error-set BR bit to 1; with error-set BR bit to 0.
    //
    L 0; // return error code 0
    T #RET_VAL; //
    SET ; // RLO = 1 (NO ERROR)
    JU SVBR; //
    FAIL: CLR ; // RLO = 0 (ERROR)
    SVBR: SAVE ; // BR = RLO
    END_FUNCTION

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