SA0038:出力変数への読み取りアクセス
出力変数を検出します (VAR_OUTPUT
) POU 内の読み取り権限でアクセスされます。
理由:61131-3によると、ブロック内の出力を読み取ることは禁止されています。これは、出力が出力としてだけでなく、中間結果の一時変数としても使用されることを示します。このような二重使用は避けてください。
重要度:低
例 48. 例
VAR_GLOBAL g_xGlob AT %QX0.0 : BOOL ; g_iGlob AT %QW1 : INT ; END_VAR
PROGRAM PLC_PRG VAR_OUTPUT xVarOut1:BOOL; xVarOut2:INT; xVarOut3:INT; END_VAR VAR iCondition : INT; END_VAR
iCondition := iCondition + INT#1; CASE iCondition OF INT#1: xVarOut1 := g_xGlob; xVarOut2 := g_iGlob; INT#2: xVarOut3 := xVarOut2; // SA0038 ELSE xVarOut1 := FALSE; g_xGlob := xVarOut1; // SA0038 xVarOut2 := INT#0; xVarOut3 := INT#-1; END_CASE
での出力 メッセージ ビュー:
SA0038: 出力変数 'xVarOUT2' への読み取りアクセス
SA0026: SA0038: 出力変数 'xVarOUT1' への読み取りアクセス