FUNCTION "RtoI_Dec" : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
RealIn : REAL ;
Dec : INT ;
END_VAR
VAR_OUTPUT
IntOut : INT ;
END_VAR
VAR_TEMP
i : INT ;
MulVal : REAL ;
TempReal : REAL ;
END_VAR
BEGIN
NETWORK
TITLE =
SET ;
SAVE ;
L #RealIn; //Read Input
T #TempReal; // Save In Storage Area
L #Dec; // # Decimal Places To Move
ITD ; // Make Into A Double For Comparison
L 0; // Add Zero
+D ; // To Setup Compare For Jumps
JP Rt; // Set Multiplier For Move Right
JM Lft; // Set Multiplier For Move Left
JZ Cvt; // Skip Move, Jump To Convert
Lft: L -1; // Multiply Places By -1
*D ; // To Make Positive Value
T #i; // Store Places To Move
L 1.000000e-001; // Multiply By 0.1 (Move Left)
T #MulVal; // Save Multiplier
L #i; // Return Places Needed To Move (Counter)
JU L1; // Start Move
Rt: L 1.000000e+001; // Default Multiply By 10 (Move Right)
T #MulVal; // Save Multiplier
L #Dec;
L1: T #i; // Save As Loop Count
L #TempReal; // Real Value To Make INT
L #MulVal; // Multiply To Move Decimal 1 Place
*R ;
T #TempReal; // Save New Value
L #i; // Load Loop Count
LOOP L1; // Loop
Cvt: L #TempReal; // Load Final Answer
RND ; // Convert to INT
T #IntOut; // Thank you bye
SAVE ;
BEC ;
END_FUNCTION
FUNCTION "ScaleToINT" : VOID
TITLE =
VERSION : 0.0
VAR_INPUT
MaxIN : REAL ;
MinIn : REAL ;
MaxOut : REAL ;
MinOut : REAL ;
InputValue : INT ;
Dec : INT ;
END_VAR
VAR_OUTPUT
ScaledINT : INT ;
END_VAR
VAR_TEMP
input_range : REAL ;
output_range : REAL ;
input_value : REAL ;
ScaledREal : REAL ;
END_VAR
BEGIN
NETWORK
TITLE =STL network
//compiled by SCL compiler version: SCL V5.1 (R5.1.6.6)
SET ;
SAVE ;
= L 16.1;
L #MaxIN;
L #MinIn;
-R ;
T #input_range;
L #MaxOut;
L #MinOut;
-R ;
T #output_range;
L #InputValue;
ITD ;
DTR ;
T #input_value;
L #input_value;
L #MinIn;
-R ;
L #output_range;
*R ;
L #input_range;
/R ;
L #MinOut;
+R ;
T #ScaledREal;
NETWORK
TITLE =
CALL "RtoI_Dec" (
RealIn := #ScaledREal,
Dec := #Dec,
IntOut := #ScaledINT);
NOP 0;
NETWORK
TITLE =
SAVE ;
BE ;
END_FUNCTION