Veri türü kayıt defteri boyutundan küçük olan deyimlerde geçici sonuçların kullanımını algılar. Bu durumda örtük döküm istenmeyen sonuçlara yol açabilir.
Gerekçe: Performans nedenleriyle, CODESYS işlemleri işlemcinin kayıt genişliği üzerinde gerçekleştirir. Ara sonuçlar kesilmez.
Bu, aşağıdaki durumda olduğu gibi yanlış yorumlamalara yol açabilir: usintTest := 0; xError := usintTest - 1 <> 255;. CODESYS, xError bu durumda TRUE 'dir çünkü usintTest - 1 işlemi genellikle 32 bitlik bir işlem olarak yürütülür ve sonuç bayt boyutuna dökülmez.
Ardından 16#ffffffff (255'e eşit değil) değeri kayıt defterinde bulunur. Bundan kaçınmak için, ara sonucu
açıkça dökümlemeniz gerekir: xError := TO_USINT(usintTest - 1) <> 255;




NOT

Bu mesaj etkinleştirilirse, koddaki daha az sorunlu birçok konum rapor edilecektir. Bir sorun yalnızca işlem veri türünde bir taşma veya alt taşma ürettiğinde ortaya çıkabilse de, statik analiz tek tek konumlar arasında ayrım yapamaz.
Bildirilen tüm konumlara açık bir typecast eklerseniz, kod çok daha yavaş ve daha az okunabilir olacaktır.
Önemliymiş: Düşük
Örnek
PROGRAM PLC_PRG VAR byTest:BYTE; liTest:LINT; xError:BOOL; END_VAR //type size smaller than register size; byTest := 0; IF (byTest - 1) <> 255 THEN //use of temporary result + implicit casting -> SA0066 xError := TRUE; ELSE xError := FALSE; END_IF //type size equal to or bigger than register size; liTest := 0; IF (liTest - 1) <> -1 THEN // use of temporary result and no implicit casting -> OK xError := TRUE; ELSE xError := FALSE; END_IF --> SA0066: Use of temporary result: (byTest - USINT #1)
Ayrıca bakınız