Sei sulla pagina 1di 2

FUNCTION GEN_AI_SCALE : VOID

TITLE = 'General Analog Input Scaling'


AUTHOR : BSimulj
FAMILY : GEN
VERSION : '0.0'
CONST
END_CONST
VAR_INPUT
enabled
ut values are 0)
iwRawSig

: BOOL := true; //Block Logic Enabled (if disabled all outp


: WORD :=0; // Raw Signal from Analog Input Card

ixSimOn
iwSimValue

: BOOL := false;// Simulation On


: REAL := 0.0; // If simulation on simulated value

iwRawScaleHigh
iwRawScaleLow
iwEngScaleHigh
iwEngScaleLow

:
:
:
:

REAL
REAL
REAL
REAL

:=
:=
:=
:=

27648;//
0;
//
100; //
0;
//

Raw MAX Value PLC Vendor specific value


Raw MIN Value PLC Vendor specific value
Instrument MAX Scale Value
Instrument MIN Scale Value

END_VAR
VAR_OUTPUT
qwEngValue
qwPercValue

: REAL;
: REAL;

qwEngScaleHigh : REAL; // Instrument MAX Scale Value


qwEngScaleLow : REAL; // Instrument MIN Scale Value
qxSimActive
qxEnabled
END_VAR

: BOOL;
: BOOL;

BEGIN
IF enabled = true THEN
qxEnabled := true;
qwEngScaleHigh := iwEngScaleHigh;
qwEngScaleLow := iwEngScaleLow;
(*CALCULATE VALUES*)
(*
From formula Output = Input * Ratio(dOutput/dInput) + C(zero output valu
e)
Output = Input * (dOutput(MAX-MIN)/dInput(MAX - MIN)) + C(zero output va
lue)
EngValue = Output(%)/100% * dScale(MAX - MIN) + Scale(MIN)
*)
(*SIMULATION*)
IF ixSimOn = true THEN
qwEngValue := iwSimValue;
qwPercValue := 100 * iwSimValue /(iwEngScaleHigh - iwEngScaleLow);
qxSimActive := true;
ELSE
qwPercValue := INT_TO_REAL(WORD_TO_INT(iwRawSig)) * 100 / (iwRawScal
eHigh - iwRawScaleLow);

qwEngValue := qwPercValue / 100.0 * (iwEngScaleHigh - iwEngScaleLow


) + iwEngScaleLow;
//qwEngValue := iwEngScaleLow + (INT_TO_REAL(WORD_TO_INT(iwRawSig))
* (iwEngScaleHigh - iwEngScaleLow))/(iwRawScaleHigh - iwRawScaleLow);
qxSimActive := false;
END_IF;
ELSE
qxEnabled := false;
qwPercValue := 0.0;
qwEngValue := 0.0;
qwEngScaleHigh := 0.0;
qwEngScaleLow := 0.0; // Instrument MIN Scale Value
qxSimActive

:= true;

qxEnabled

:= true;

END_IF;
END_FUNCTION

Potrebbero piacerti anche