Obsidean_VM/04-SIDEL/00 - MASTER/Source/source/WritePeripheral.md

1.3 KiB

// Block Type: FC
// Block Number: 1970
// Original Network Languages: STL, LAD

FUNCTION "WritePeripheral" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1

VAR_INPUT
  Analog_Value : Real;
  MAX_Analog_Value : Real;
  MIN_Analog_Value : Real;
  MAX_Out : Int;
  MIN_Out : Int;
END_VAR

VAR_OUTPUT
  PAW : Word;
END_VAR

VAR_TEMP
  Range : Real;
  Scale : Real;
  Scale_Range : Real;
  Analog_Value_Used : Real;
  Buffer : Bool;
END_VAR

BEGIN

  // Network 1:  (Original Language: LAD)
  //   Check if Analog_Value is correct

  "Analog_Value_Used" := "Analog_Value";

  IF "Analog_Value" > "MAX_Analog_Value" THEN
    "Analog_Value_Used" := "MAX_Analog_Value";
  END_IF;

  IF "Analog_Value" < "MIN_Analog_Value" THEN
    "Analog_Value_Used" := "MIN_Analog_Value";
  END_IF;

  "Buffer" := TRUE;

  // Network 2:  (Original Language: STL)

  // --- BEGIN STL Network 2 ---
   
     	L	"Analog_Value_Used"
     	L	"MIN_Analog_Value"
     	SUB_R
     	T	"Scale"
     
     	L	"MAX_Analog_Value"
     	L	"MIN_Analog_Value"
     	SUB_R
     	T	"Range"
     
     	L	"Scale"
     	L	"Range"
     	DIV_R
     	T	"Scale_Range"
     
     	L	"MAX_Out"
     	L	"MIN_Out"
     	SUB_I
     	ITD
     	DTR
     	L	"Scale_Range"
     	MUL_R
     	RND
     	L	"MIN_Out"
     	ADD_I
     	T	"PAW"
   
  // --- END STL Network 2 ---

END_FUNCTION