Function Block initialization

This test case it part of the test suite proposed for new devices.

Test case ID: R0300
Language: ST

Code:
tests2/t0300.st
(* to check FB/Fucntions initializtion *)
PROGRAM R0300
    VAR
       Y1 : INT := 20;
       I : INT ; 
       FB1X : FB1_R0300;
    END_VAR
        
    FOR I := 1 TO 3 DO
        FB1X(X :=3 , Y:=4);
        Y1 := F1_R0300(3, 5);    
    END_FOR; 
    Y1 := F1_R0300(5, 3);    
    FB1X(X :=3 , Y:=4);

 _GEB_ASSERT_(FB1X.C = 504);
 _GEB_ASSERT_(FB1X.X=3);
 _GEB_ASSERT_(FB1X.Y=4);
 _GEB_ASSERT_(FB1X.Z=7);
 _GEB_ASSERT_(Y1 = 8);
 
END_PROGRAM


FUNCTION F1_R0300 : INT (* just a very simple function that sums two integers *)
    VAR_INPUT
        X: INT;
        Y: INT;
    END_VAR
    
    VAR        
    C: CTU; 
    Z :INT :=2;    
    END_VAR 
    
    F1_R0300 := X  + Y + Z - 2;
    Z := 3000; // to check that it is correctly initilized
    
END_FUNCTION
 
 
 (* Z =  X + Y ;  C: counts invocations, starting from 500 *)
FUNCTION_BLOCK FB1_R0300 
    VAR_INPUT
        X: INT;
        Y: INT;
    END_VAR
    VAR_TEMP  
          Z10 : INT := 10;  // just to check TEMP initialization
    END_VAR      
    VAR  
          CONT500 : INT := 500; // increments in each call
    END_VAR      
    VAR_OUTPUT  
          Z : INT;  // sum of inputs
          C : INT;  // same as CONT500  
    END_VAR      
    
    Z := X + Y + Z10 - 10;
    CONT500 := CONT500 + 1;
    C := CONT500;
    Z10 := 1000; // This should have no effect
    
END_FUNCTION_BLOCK