命名規則を定義する
対話中 設定静的分析 タブの下 命名規則 コードで従う命名規則を定義します。スコープと修飾子に応じて、プログラミングブロック、変数、およびデータ型の識別子のプレフィックスを定義します。
次に、静的分析で命名規則への準拠を確認できます。
これへのガイド: 定義された命名規則への準拠を確認してください
プレフィックスを定義する
対話中 設定静的分析 タブの下 命名規則 列の入力フィールドで命名規則を定義します プレフィックス。
文字リテラル
例:
PRG_
の POUのプレフィックス、 POUタイプのプレフィックス、 プログラム(102)エントリごとに複数のリテラル、コンマで区切る
構文:
<prefix> ( , <next prefix> )*
例:
PRG_, PRG
の POUのプレフィックス、 POUタイプのプレフィックス、 プログラム(102)正規表現 正規表現、プレフィックスのセットを定義します
構文:
@ <expression>
例:
@x[a-dA-D]
で始まるプレフィックスを定義しますx
開始し、その後に範囲の1文字だけが続きますa-dA-D
@[A-Za-z][A-Za-z][A-Za-z][A-Za-z0-9]
4文字で構成されるプレフィックスを定義します。最初の3文字は文字で、4番目の文字は数字にすることもできます
組み合わせ可能なデータ型のプレフィックスを定義する
以下のデータ型は、標準データ型、既存のデータ型、または機能ブロックに基づいています。
ポインタ:
POINTER TO <basic type>
リファレンス:
REFERENCE TO <basic type>
配列:
ARRAY[ <lower index bound> .. <upper index bound> ] OF <basic type>
これらのデータ型は、ネストして相互に組み合わせることができます。オプションの場合 組み合わせ可能なデータ型の再帰プレフィックス がアクティブ化されると、静的分析は、そのような組み合わせ可能なデータ型の変数に対して再帰的に構成されたプレフィックスを期待します。プレフィックスは宣言の後に続き、基本的なデータ型で合意されている命名規則に対応しています。
例
次の命名規則が設定されています。
i
の 変数のプレフィックス、 INT(26)p
の 変数のプレフィックス、 ポインター(26)ref
の 変数のプレフィックス、 参考文献(27)struct
の 変数のプレフィックス、 構造(32)オプション 組み合わせ可能なデータ型の再帰プレフィックス:
次のコードは命名規則に違反しており、読みにくいものです。
PROGRAM plc1 VAR var1 : ARRAY[100..110] OF ARRAY[30..50] OF ARRAY[6..7] OF BOOL; var2 : ARRAY[1..3] OF INT; var3 : REFERENCE TO INT; iVar4 : INT; iVar5 : INT; var6 : ARRAY[1..3] OF INT := [11, 22, 33]; var7 : POINTER TO ARRAY[1..3] OF INT; var8 : REFERENCE TO INT; var9 : S_POLYGONLINE := (aiStart:=[1,1], aiPoint1:=[5,2], aiPoint2:=[7,3], aiPoint3:=[8,5], aiPoint4:=[5,7], aiEnd:=[1,1]); var0 : ARRAY[0..3] OF S_POLYGONLINE; // S_POLYGONLINE is a already defined structure END_VAR iVar4 := iVar4 + 1; var8 REF= iVar4; var1[100][30][6] := TRUE; var9.aiPoint1[1] := 99; var7 := ADR(var6); var6[2] := 44; iVar5 := var7^[2]; var0[0] := var9;
静的分析は、命名規則の次の違反を報告します。
NC0102:無効な名前 'plc1':予期されるプレフィックス 'PRG_'
NC0014:無効な変数名 'var0':予期されるプレフィックス 'astruct'
NC0014:無効な変数名 'var1':予期されるプレフィックス 'aaax'
NC0014:無効な変数名 'var2':予期されるプレフィックス 'ai'
NC0014:無効な変数名 'var3':予期されるプレフィックス 'refi'
NC0014:無効な変数名 'var6':予期されるプレフィックス 'ai'
NC0014:無効な変数名 'var7':予期されるプレフィックス 'pai'
NC0014:無効な変数名 'var8':予期されるプレフィックス 'refi'
NC0014:無効な変数名 'var9':予期されるプレフィックス 'struct'
エイリアスの変数のプレフィックスを定義する
データ型変数にプレフィックスを使用できます エイリアス プレースホルダー付きのリテラルとして {datatype}
定義。次に、静的分析では、プレースホルダーではなく、基本データ型のプレフィックスが必要です。
オプション 名前空間プレフィックスとデータ型プレフィックスを組み合わせる プレフィックスの使用には影響しません {datatype}
。
例
次の命名規則が設定されています。
s
の 変数のプレフィックス、 タイププレフィックス、 STRING()19A_{datatype}
の 変数のプレフィックス、 エイリアス(33)
コード
TYPE A_MESSAGE : STRING[50]; // base data type is STRING END_TYPE VAR A_sMessage_N1 : A_MESSAGE := 'Robot is running.'; A_s_Message_N2 : A_MESSAGE := 'Robot has been finished.'; As_Message_N3 : A_MESSAGE := 'Robot has been stopped.'; AsMessage_N4 : A_MESSAGE := 'Error 3 has been occured.'; END_VAR
静的分析は、命名規則の次の違反を報告します。
NC0033:無効な変数名 'As_Message_N3':予期されるプレフィックス 'A_s'
NC0033:無効な変数名 'AsMessage_N4':予期されるプレフィックス 'A_s' '
プロパティのプレフィックスを定義する
データ型のビルディングブロック(POU)にプレフィックスを使用できます PROPERTY
ワイルドカードを使用したリテラルとして {datatype}
定義。次に、静的分析では、プレースホルダーではなく、プロパティの戻りデータ型のプレフィックスが必要です。
オプション 名前空間プレフィックスとデータ型プレフィックスを組み合わせる プレースホルダーの使用には影響しません {datatype}
。
例
次の命名規則が設定されています。
fb
の 変数のプレフィックス、 タイププレフィックス、 機能ブロックインスタンスFB_
の POUのプレフィックス、 POUタイプのプレフィックス、 機能ブロック(103)prop_{datatype}
の POUのプレフィックス、 POUタイプのプレフィックス、 プロパティ(107)
コード
FUNCTION_BLOCK blocka // Invalid function block name VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR iA : INT; END_VAR iA := iA + 1; PROPERTY PUBLIC vara : INT // Invalid property name, return data type is INT Get vara := iA; Set iA := vara; PROGRAM plc1 VAR var10 : blocka; // Invalid variable name of typ function block iVar11: INT; END_VAR var10(); IF var10.vara > 500 THEN var10.vara := 0; END_IF iVar11 := var10.vara;
静的分析は、命名規則の次の違反を報告します。
NC0102:無効な名前 '' plc1 ':予期されるプレフィックス' PRG_ ''
NC0031:無効な変数名 '' var10 ':予期されるプレフィックス' 'fb' '
NC0103:無効な変数名 '' blocka ':予期されるプレフィックス' FB_ ''
NC0107:無効な変数名 'blocka.vara':予期されるプレフィックス 'prop_i' '
命名規則に従ったコード
FUNCTION_BLOCK FB_A VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR iA : INT; END_VAR iA := iA + 1; PROPERTY PUBLIC prop_iA : INT Get prop_iA := iA; Set iA := prop_iA; PROGRAM PRG_PLC1 VAR fbA : FB_A; iVar11: INT; END_VAR fbA(); IF fbA.prop_iA > 500 THEN fbA.prop_iA := 0; END_IF iVar11 := fbA.prop_iA;
構造のプレフィックスを定義する
プロジェクト内の構造の一般的な接頭辞は、次の場所で設定できます。 DUTのプレフィックス、 構造(151) 定義。特別な接頭辞が付いた構造を提供することもできます。次に、特別なプレフィックスが一般的なプレフィックスをシャドウします。
特別なプレフィックスは、プラグマを使用した構造のデータ型宣言で指定されます {attribute 'nameprefix' := <special prefix> '}
定義されています。次に、この構造のすべての変数をこのプレフィックスで開始します <special prefix>
。
例
次の命名規則が設定されています。
struct
の 変数のプレフィックス、 構造(32)S_
の DUTのプレフィックス、 構造(151)組み合わせ可能なデータ型の再帰プレフィックス:
コード
TYPE S_POLYGONLINE : STRUCT aiStart : ARRAY[1..2] OF INT := [-99, -99]; aiPoint1 : ARRAY[1..2] OF INT; aiPoint2 : ARRAY[1..2] OF INT; aiPoint3 : ARRAY[1..2] OF INT; aiPoint4 : ARRAY[1..2] OF INT; aiEnd : ARRAY[1..2] OF INT := [99, 99]; END_STRUCT END_TYPE {attribute 'nameprefix' := 'penta'} // Pragma to define a special prefix TYPE S_PENTA EXTENDS S_POLYGONLINE : STRUCT aiPoint5 : ARRAY[1..2] OF INT; END_STRUCT END_TYPE PROGRAM PRG_Compute VAR structPolygon : S_POLYGONLINE := (aiStart:=[1,1], aiPoint1:=[5,2], aiPoint2:=[7,3], aiPoint3:=[8,5], aiPoint4:=[5,7], aiEnd:=[1,1]); structPentagon : S_PENTAGON := (aiStart:=[0,0], aiPoint1:=[1,1], aiPoint2:=[2,2], aiPoint3:=[3,3], aiPoint4:=[4,4], aiPoint5:=[5,5]); structLine0 : S_PENTA; pentaLine1 : S_PENTA; iXPoint: INT; aPoint0: ARRAY [1..2] OF INT; aPoint1: ARRAY [1..2] OF INT; END_VAR iXPoint := structPolygon.aiPoint1[1]; aPoint0 := structLine0.aiEnd; aiPoint1 := pentaLine1.aiEnd;
静的分析は、命名規則の次の違反を報告します。
無効な変数名 'structLine0':予期されるプレフィックス 'penta'
さらに遠く CODESYS Static Analysis-プロジェクトに命名規則を提供する
命名規則をCSAファイルに保存します。このファイルは他の場所でも使用できます CODESYS Static Analysis-プロジェクトをロードして使用します。
コマンドを選択します
。ボタンを選択
。ファイル選択ダイアログが開きます。そこで、ファイル拡張子がCSAの任意の名前のファイルに命名規則を保存できます。
コマンドを選択します
。ボタンを選択
。ファイル選択ダイアログが開きます。表示されたCSAファイルから1つを選択します。