PROGRAM PLC_PRG VAR strVar1 : STRING[10]; strVar2 : STRING[6]; str
: str[2] 信息: SA [...] 字节字符串的地址访问 例子: ADR(str) 信息 [...] 非 ASCII 字符的字节文字 例子: str
SA0065:添加到基本大小的指针不正确 检测要添加的值与指针的基本大小不匹配的指针添加。只能添加基本数据大小及其倍数的文字而不会出现错误。 理由:在 CODESYS (与 C 和 C++ 相反),当添加具有整数值的指针时,仅将该整数值添加为字节数,而不是整数值乘以基本大小。 例 75 . ST 中的示例 pINT := ADR(array_of_int[0]); pINT := pINT + 2
SingleDataRecord : STRUCT str [...] *) str
SA0024:无类型文字/常量 标识属于操作一部分的无类型文字 理由:无类型文字会根据其用法自动类型化。在某些情况下,例如 dw := ROL(DWORD#1, i); ,这可能会导致意外的情况,最好使用类型化文字来提供独特的说明。 重要性:低 例 35 . 例子 PROGRAM PLC_PRG VAR iTemp1 : INT := 10; //no part of operation diTe
定义命名约定 在里面 静态分析设置 对话框,在 命名约定 选项卡,定义您将在代码中遵循的命名约定。您可以根据其范围和限定符为 POU、变量和数据类型的标识符定义前缀。 然后,您可以让静态分析检查命名约定的合规性。 有关说明,请参阅: 检查是否符合定义的命名约定 定义前缀 在里面 静态分析设置 对话框,在 命名约定 选项卡,在输入字段中定义命名约定 字首 柱子。 字符字面量 例子: PRG_ 在 P
SA0064:添加指针 检测指针的添加 理由:在 CODESYS ,指针运算一般是允许的,也可以适当使用。然而,它也代表了错误的来源。因此,存在通常禁止指针运算的编程规则。这个测试可以检查这样的需求。 重要性:中等 例 74 . 例子 PROGRAM PLC_PRG VAR iTest : INT; ariTest : ARRAY[0..10] OF INT; {attribute 'analys
SA0061:指针上的异常操作 检测操作一种类型的变量 POINTER TO 哪些不是 = (平等), <> (不等式), + (加法),或 ADR . 在 CODESYS , 指针算术一般是允许的,也可以适当使用。因此,将指针与整数值相加被认为是对指针的常见操作。这使得可以使用指针来处理可变长度的数组。使用 SA0061 报告所有其他(不寻常的)指针操作。 重要性:高 PLCopen 规则:E2
SA0102:从外部访问程序/fb变量 检测对程序或功能块的局部变量的外部访问。 理由: CODESYS 允许对程序或功能块的局部变量进行外部读取访问。这违背了数据封装(隐藏数据)的原则,不符合IEC 61131-3标准。 重要性:中等 例 90 . 例子 PROGRAM PLC_PRG VAR iCounter : INT; afb_Instance : AFB; bfb_Instance :
SA0107:缺少形式参数 检测是否缺少形式参数 理由:在调用中指定形式参数时,代码变得更具可读性。 重要性:低 例 94 . 例子 FUNCTION FUNA : BOOL VAR_INPUT bDo : BOOL; bInit : BOOL; bManual : BOOL; END_VAR VAR iInit : INT; iLocal : INT; iManual : INT; END_VA