Skip to main content

SA0043: 1 つの POU のみでのグローバル変数の使用

単一のビルディングブロックでのグローバル変数の使用を検出します。

理由: 1 つの場所でのみ使用されるグローバル変数も、その場所でのみ宣言する必要があります。

重要性:中

PLCopenルール:CP26

52.
VAR_GLOBAL
    g_xVar AT %QX0.0 : BOOL ;
    g_iTest AT %QW1 : INT ;
    g_wTest AT %QW2 : WORD;
END_VAR
PROGRAM prog1
VAR
    iCondition : INT;
    bTemp : BOOL;
END_VAR
iCondition := iCondition + INT#1;
IF iCondition < INT#0 THEN
    bTemp := g_xVar;    // SA0043 - g_xVar only read in this POU
    ELSIF iCondition = INT#0 THEN
        bTemp := g_xVar;    // SA0043 - g_xVar only read in this POU
ELSE
    bTemp := g_xVar;    // SA0043 - g_xVar only read in this POU
    g_wTest := WORD#4;    // g_WTest used also in prog2 -> OK
END_IF
PROGRAM prog2
VAR
    iCondition : INT;
END_VAR
iCondition := iCondition + INT#1;
CASE iCondition OF
    INT#1:
        g_iTest := WORD_TO_INT(g_wTest);    // SA0043 - g_iTest only written in this POU
    INT#2:
        g_iTest := INT#2;    // SA0043 - g_iTest only written in this POU
    ELSE
        g_iTest := INT#3;    // SA0043 - g_iTest only written in this POU
END_CASE

での出力 メッセージ ビュー:

  • sa_icon_message.png SA0043: グローバル変数 'g_xVar' は 'prog1' でのみ使用されます

  • sa_icon_message.png SA0043: グローバル変数 'g_iTest' は 'prog2' でのみ使用されます