Verwendung von DUTs
Themenpunkte:
Enumerationsvariablen nur zugehörige Enumeratoren zuweisen
Der Instanz einer Enumeration sollten nur die Enumeratoren der dazugehörigen Enumeration zugewiesen werden. Um diese Regel zu erzwingen, wird empfohlen, bei Typdefinition der Enumeration das Attribut {attribute 'strict'} zu setzen. Siehe auch: Attribute 'qualified_only' und 'strict' bei Enumeration verwenden
Static Analysis:
Überprüfen mit Hilfe der folgenden Static Analysis Regeln:
- SA0034: Enumerationsvariablen mit falscher Zuweisung
- SA0171: Enumerationen sollten das Attribut 'strict' haben
Negatives Beispiel:
{attribute 'qualified_only'}
TYPE E_ColorTrafficLight :
(
Red := 0,
Yellow := 1,
Green := 2
);
END_TYPE
PROGRAM Sample_neg
VAR
eColorTrafficLight : E_ColorTrafficLight; // Used to handle the state of the traffic light
END_VAR
CASE eColorTrafficLight OF
E_ColorTrafficLight.Green:
eColorTrafficLight := E_ColorTrafficLight.Yellow;
E_ColorTrafficLight.Yellow:
eColorTrafficLight := E_ColorTrafficLight.Red;
E_ColorTrafficLight.Red:
eColorTrafficLight := 2; // NON COMPLIANT: Only values defines in E_StandardColor should be assigned to enum instance eColorTrafficLight
ELSE
eColorTrafficLight := E_ColorTrafficLight.Red;
END_CASE
Positives Beispiel:
{attribute 'strict'}
{attribute 'qualified_only'}
TYPE E_ColorTrafficLight :
(
Red := 0,
Yellow := 1,
Green := 2
);
END_TYPE
PROGRAM Sample_pos
VAR
eColorTrafficLight : E_ColorTrafficLight; // Used to handle the state of the traffic light
END_VAR
CASE eColorTrafficLight OF
E_ColorTrafficLight.Green:
eColorTrafficLight := E_ColorTrafficLight.Yellow;
E_ColorTrafficLight.Yellow:
eColorTrafficLight := E_ColorTrafficLight.Red;
E_ColorTrafficLight.Red:
eColorTrafficLight := E_ColorTrafficLight.Green; // COMPLIANT
ELSE
eColorTrafficLight := E_ColorTrafficLight.Red;
END_CASE
Siehe auch: