在代码生成过程中,您还可以对源代码进行静态分析(lint)。这将确定你的源代码是否符合你所定义的编码指南--根据 lint 分析工具背后的理念。
-
您可以在“Project Settings” 对话框的“Static Analysis Light” 类别中激活选中的规则。每次生成代码时都会自动执行检查,例如,当您单击“Build Generate Code” 时。如果确定与规则不符,则会在“Build” 消息视图类别中报告为错误消息。报告的错误前缀为
SA<number>
。




注意

使用“Static Analysis Light” 进行静态代码分析时,只检查项目的应用代码。库不在检查之列。
“POUs” 视图中的 GVL 变量不一定会被检查:如果项目中有多个应用程序,则只检查活动应用程序中的对象。如果只有一个应用程序,则也会检查公共 POU 池中的对象。
“Static Analysis Light” 在默认开发系统中只包含一套精简的规则。安装CODESYS Static Analysis 附加组件后,可获得更多规则、附加命名约定和指标。
停用静态分析中使用pragma实现的代码行
通过 pragma{analysis ...}
,您可以标记代码,使指定的规则不被检查。因此,标记的代码行不会进行静态分析。在检查过程中,标记的代码将被忽略。
语法
{analysis <sign><rule number>|,<other combinations of signs and rules, comma-separated>}
-<rule number>
:停用规则 SA<规则编号>。
-<rule number>
:激活规则 SA<规则编号>。
排除执行代码
要求:规则在“项目设置” 对话框中激活。
-
在包含不首先检查的代码的代码行上方添加 pragma
{analysis -<number>}
。例如,对于规则 SA0024该行代码是代码片段的第一行,未根据规则 24 进行检查。
-
在包含不首先检查的代码的代码行下面添加 pragma
{analysis -<number>}
。例如,对于规则 SA0024上面的代码行是代码片段的最后一行,未根据规则 24 进行检查。
示例:忽略未键入的字面
{analysis -24} nTest := 99; iVar := INT#2; {analysis +24}
该规则“SA0024:仅非类型字面” 已停用两行。虽然代码未更正,但不会出错: nTest := DINT#99;
示例:忽略几条规则
{analysis -10, -24, -18} ... {analysis +10, +24, +18}
“SA0010:只有一个组件的数组”
“SA0018:不寻常的位存取”
“SA0024:仅限非类型字面量”
但是,您不能停用规则SA0004
:“使用pragma对输出” 进行多重写入访问。
将带有pragma的编程对象排除在静态分析之外
语法
{attribute 'analysis' := '-<rule number>[,<other negative rule numbers, comma-separated>]'}
在编程对象的声明部分插入属性 pragma 时,整个编程对象都将排除指定的规则。如果排除了多条规则,则每条规则都用破折号和数字以逗号分隔。激活不需要 pragma 语句。
示例
{attribute 'analysis' := '-33, -31'} TYPE LocalData : STRUCT iLocal : INT; uiLocal : UINT; udiLocal : UDINT; END_STRUCT END_TYPE
对于LocalData
结构,SA0033 和 SA0031 规则被忽略。
{attribute 'analysis' := '-100'} big: ARRAY[1..10000] OF DWORD;
对于数组big
,SA0100 规则被忽略。