Semantic Check of Scripts
The semantic check of Control scripts in WinCC OA goes through the following issues (check without guarantee of completeness) :
- 
                Are variables known. 
- 
                Are variables accessible (private). 
- 
                Are dollar parameters known. 
- 
                Are functions known. 
- 
                Are functions accessible (private). 
- 
                Number of arguments. 
- 
                Is a variable declaration of a already known variable is not accessible (for example a local variable has the same name as a global variable). 
- 
                Can a function not be accessed through an external in function call written in C++ . 
- 
                Does an empty assignment after "while" or "for" assignments (for example "while (foo) ; bar();" exist. 
- 
                An assignment as condition in "if", "do", "while" or "for" is accepted. For example, "if (i = 2) foo();" "if ( (i = 2) ) foo();". 
- 
                A value in an assignment, for example, dpConnect() = 3; 
You can use the semantic check as follows:
WCCOActrl -syntax -proj [projName] [scriptName]
If you, for example, want to check a script called SynCheck.ctl in the project Proj_3.10call the Control manager as follows:
WCCOActrl -syntax -proj Proj_3.10 SynCheck.ctl
All errors (PRIO_SEVERE) and all warnings (PRIO_WARNING) will be shown in the Log Viewer. The output of the semantic check could look, for example, as follows:
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, WARNING, 12/ctrl, External declaration of function "dpConnect" shadows definition at a.ctl:10.
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 73, Variable not defined, a.ctl Line: 25, undefined_var
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 76, Invalid argument in function, a.ctl Line: 28, private_var defined in b.ctl is private in this context.
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 17/ctrl, Cannot find dollar parameter $I. Location: a.ctl Line: 32
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 72, Function not defined, a.ctl Line: 35, undefined_func
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 76, Invalid argument in function, a.ctl Line: 38, private_func, private_func defined in b.ctl is private in this context.
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 75, Argument missing in function, a.ctl Line: 41, number_of_arg, a2
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, WARNING, 11/ctrl, Declaration of "g" shadows old declaration at "a.ctl Line: 3". Location: a.ctl Line: 44
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, WARNING, 13/ctrl, Empty statement found. Location: a.ctl Line: 51
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, WARNING, 14/ctrl, Assignment used in a condition. Location: a.ctl Line: 55
WCCOActrl (0), 2010.11.03 10:50:23.454, CTRL, SEVERE, 78, Assignment to this expression impossible, a.ctl Line: 58
Limitations:
- 
                A Control manager cannot check scripts running in a User interface. 
- 
                The keyword #uses has to be used to declare all necessary libraries. 
- 
                The functions addGlobal and removeGlobal are not evaluated. If you do not declare global variables as "global" but add a variable at run time using the function addGlobal, an error will be shown. 
- 
                Shapes will not be evaluated. 
- 
                An error will be shown if a Control library tries to access variables that were declared in a panel. 
