Detecta conversiones implícitas de tipos de datos menores a tipos de datos mayores.
Justificación: El compilador permite cualquier asignación de tipos diferentes cuando
el rango de valores del tipo fuente está completamente contenido dentro del rango
de valores del tipo destino. Sin embargo, el compilador incorporará una conversión
en el código lo más tarde posible. Para una asignación de tipo lint := dint * dint, el compilador realiza la conversión implícita sólo después de la multiplicación:
lint := TO_LINT(dint * dint). Por lo tanto, un desbordamiento se trunca. Para evitarlo, ya puede convertir los
elementos: lint := TO_LINT(dint) * TO_LINT(dint). Por lo tanto, puede ser útil informar de las ubicaciones en las que el compilador
implementa conversiones implícitas para comprobar si son exactamente lo que se pretende.
Además, las conversiones explícitas pueden utilizarse para mejorar la portabilidad
a otros sistemas cuando éstos tienen comprobaciones de tipos más restrictivas.
Importancia: Bajo
Ejemplo
PROGRAM PLC_PRG VAR byTemp : BYTE; usiTemp : USINT; uiTemp: UINT; iTemp : INT; udiTemp: UDINT; diTemp : DINT; uliTemp : ULINT; liTemp : LINT; lwTemp : LWORD; lrTemp : LREAL; END_VAR liTemp := iTemp; // SA0130 uliTemp := usiTemp; // SA0130 lwTemp := udiTemp; // SA0130 lrTemp := byTemp; // SA0130 diTemp := uiTemp; // SA0130 byTemp.5 := FALSE; // OK (BIT_BOOL conversion) --> SA0130: Implicit widening conversion from type 'INT' to type 'LINT' --> SA0130: Implicit widening conversion from type 'USINT' to type 'ULINT' --> SA0130: Implicit widening conversion from type 'UDINT' to type 'LWORD' --> SA0130: Implicit widening conversion from type 'BYTE' to type 'LREAL' --> SA0130: Implicit widening conversion from type 'UINT' to type 'DINT'