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