Skip to main content

サブプログラム

関数:サブプログラムの呼び出し

ポケットフライス盤、穴あけ、工具交換などの頻繁に繰り返されるタスクは、Gコードサブプログラムにスワップアウトして、そこから呼び出すことができます。呼び出し中に、パラメータをサブプログラムに渡すことができます。データ型 BOOLLREAL、 と STRING この目的のために許可されています。

ヒント

サブプログラムを使用する場合は、汎用ブロックを使用する必要があります SMC_ReadNCFile2SMC_NCInterpreter それ以外の SMC_ReadNCFileSMC_NCDecoder

ヒント

サブプログラムはオンラインデコーダーでのみ機能します(CNCエディターでは機能しません)。

各サブプログラムは個別のファイルに保存されます。これらのファイルは、コントローラー上の1つ以上のサブディレクトリーに保存されます。彼らはファイル拡張子を持っている必要があります .cnc。ファイル名は、サブプログラムの名前に対応し、小文字である必要があります。例:サブプログラム名「ドリル」->ファイル名 drill.cnc

重要

サブプログラムのファイル名は小文字で記述する必要があることに注意してください。

POU SMC_ReadNCFile2 入力があります aSubProgramDirs : ARRAY[0..4] OF STRING(174)。これを超えて、最大5つのサブディレクトリを指定できます。それらは指定された順序でスキャンされます。複数のディレクトリに同じ名前のサブプログラムがある場合、配列内でインデックスが最も低いディレクトリを持つサブプログラムが見つかります。サブプログラム名は小文字に変換されます。

47.
aSubProgramDirs = ['subprograms/user', 'subprograms/system', '']

サブプログラム DrillA1 ファイル内で最初にスキャンされます subprograms/user/drilla1.cnc。このファイルが存在しない場合、検索は次の場所で続行されます。 subprograms/system/drilla1.cnc



変数を使用して(より正確には、型の式を使用して)サブプログラムを間接的に呼び出すことができます。 STRING)。式(したがって、変数のルックアップも)は、インタープリターが行に到達したときの前処理時に評価されます(通常、Gコードで変数を使用する場合)。この場合、引数の型チェックは、静的呼び出しの場合のように、インタープリターが行に到達したときにのみ実行され、解析中には実行されません。

ヒント

CNCエディタでサブプログラムをオフラインで作成することはできません。

サブプログラム呼び出しの最大ネスティング深度

  • バージョン 4.18.0.0 以前:サブプログラム呼び出しの最大ネスト深度は 14 に制限されています。

  • バージョン 4.18.0.0 以降:ネスティングの深さはメモリによってのみ制限されるようになりました。最大値は library パラメーターを使用して変更できます。 SMC_CNC_LibParams.MAX_SUBPROGRAM_NESTING_DEPTH

呼び出しの構文

サブプログラム呼び出しは、ブロック番号と呼び出しのみで構成されるGコードの特別なブロックです。追加の単語は許可されていません。

N<SentenceNo> <Name> <BracketOpen> <ActualParamList> <BracketClosed>
N<SentenceNo> DYNCALL <BracketOpen> <SubNameExp> [, <ActualParamListNotEmpty]  <BracketClosed>

<SubNameExp> : An expression with exactly one value of type STRING
<ActualParamList> ::= Empty | <ActualParamListNotEmpty>
<ActualParamListNotEmpty> ::= <ActualParamValue> | <ActualParamValue>, <ActualParamListNotEmpty>

<Name>

最小 3 文字から最大 80 文字の有効な IEC 識別子。サブプログラムが定義されているファイル名 (拡張子なし) に対応している必要があります。サブプログラム名は大文字でも小文字でもかまいません。 [a-zA-Z0-9_] 許可されています。

次のキーワードは名前には無効です。 RETURN,\\ IF,\\ ELSE,\\ END_IF,\\ CASE,\\ END_CASE,\\ FOR,\\ END_FOR,\\ WHILE,\\ END_WHILE, REPEAT,\\ UNTIL,\\ END_REPEAT

<ActualParamList>

サブプログラムが定義するのとまったく同じ数のパラメーター値を指定する必要があります(「宣言の構文」を参照)。各パラメーター値のタイプは、宣言と一致する必要があります。

<BracketOpen>/<BracketClosed>

互換性の理由から、デフォルト設定では括弧の代わりに中括弧が使用されます。 SMC_ReadNCFile2 サブプログラムの呼び出しと宣言。括弧はコメントのGコードで有効です。

機能ブロック SMC_ReadNCFile2 モードがあります(bParenthesesAsComments 入力)括弧はコメントではありません。代わりに、複数行コメントはで開かれます (* で閉じます *)。この新しいモードでは、中括弧と括弧の両方をサブプログラムの呼び出しと宣言に使用できます。

<ActualParamValue>

変数、リテラル、または任意の式

N10 SUB1()
N20 DRILL(10.0)
N30 SUB2(5, "Text", 2.5)
N40 G36 O#SUBNAME  D'DRILL'    % Indirect call via local variable
N40 DYNCALL(#SUBNAME, 2)       % equivalent to N40 DRILL(2)
N50 DYNCALL($SUBNAME$, 2, 4)   % Indirect call via IEC variable

宣言の構文

サブプログラムは別のファイルに保存する必要があります。最初の行(空でもコメント行でもない)には、サブプログラムの宣言が含まれている必要があります。次の構文が適用されます。

SUBPROGRAM <Name> <BracketOpen> <FormalParamList> <BracketClosed> <RESTORE_OPT>
<Inhalt Unterprogramm>
END_SUBPROGRAM

<FormalParamList> ::= Empty | <FormalParamListNotEmpty>
<FormalParamListNoEmpty> ::= <FormalParam> | <FormalParam> , <FormalParamListNotEmpty>
<FormalParam> ::= <ParamName> : <ParamType>
<ParamName>   ::= #[a-zA-Z0-9_]+

<ParamType> ::= LREAL | BOOL | STRING ; String with a maximum length of 255 bytes
<RESTORE_OPT> ::= RESTORE_MODES

<ParamName>

名前の長さは最大80文字です(プレフィックスは含まれません) #)。

RESTORE_MODES

このキーワードが指定されている場合、呼び出し側プログラムに戻るときに、次のモーダル状態が復元されます(呼び出し時に持っていた値に設定されます)。

  • アクティブなGコード

  • 相対/絶対モード(G90 / G91、G98 / G99)

  • 円形平面と2D / 3Dモード

  • デコーダー座標系(スケーリングを含む)

  • 送り速度(経路と追加の軸)、早送り速度、最大加速と減速(経路と追加の軸)

  • 機能フラグと一般パラメータ(G38)

  • 工具径(Dワード)

  • ツールオフセット(G43)

  • Sプロファイル(Sワード)

次のモーダル状態は復元されません。

  • デコーダー/インタープリターの現在の位置と現在の基本的なスプライン状態。位置には構造全体が含まれます SMC_POSINFO (つまり、X、Y、Z、方向、およびすべての追加軸)。

  • パス前処理POU(G40-G43、G50-G52、G60-G61、G70-G71)の状態(オン/オフ)

  • 追加軸のモジュロ設定(PA、PB、…)

注:このキーワードに関係なく、暗黙のカウンター変数(G36、G37)は、サブプログラムから呼び出し側プログラムに戻るときに復元されます。

SUBPROGRAM SUB1()                 ; no formal parameters
SUBPROGRAM DRILL(#depth : LREAL)
SUBPROGRAM SUB2(#a : LREAL, #b : STRING, #c : LREAL)
SUBPROGRAM SRM1() RESTORE_MODES

戻り値の構文

戻りは、サブプログラムテキストの最後( END_SUBPROGRAM)または次の構文で明示的に: N<block number> RETURN

サブプログラムで仮パラメータを使用する

仮パラメータの値には、サブプログラムで次の方法でアクセスできます。 #<ParamName>

正式なパラメータの数は21に制限されています。

48.
SUBPROGRAM SUB(#Param1 : LREAL)
N10 G01 X#Param1


コールスタックの表示

通訳(SMC_NCInterpreter)には、上位10個のアクティブなプログラム/サブプログラムを含む出力があります。 aActivePrograms : ARRAY[0..9] OF STRING。最初のエントリ(aActivePrograms[0])は現在解釈されているプログラム/サブプログラムです。 2番目のエントリ(aActivePrograms[1])は呼び出し側プログラム/サブプログラムなどです。呼び出し側プログラムがない場合、対応する文字列は空です。

コールスタックは、補間時に表示することもできます。 NS SMC_DisplayNCCallstack POUは、アクティブなプログラム/サブプログラムをインタプリタと同じ形式で、後で(つまり、移動が実行されたときに)表示します。そうすることで、インタープリターの出力 CallstackInfo (SMC_NCCallstackInfo) 補間器は次のように渡されます VAR_IN_OUT 変数。 SMC_NCCallstackInfo 対応するものを含む、すべてのコールスタックの変更を保存します SMC_GeoInfo リングバッファ内のオブジェクト番号。現時点では、これにより、解釈時間と補間時間の間の保存可能なコールスタックの変更数が128に制限されます。リングバッファがマルチタスク基準を満たしていないため、 SMC_DisplayNCCallstack インタプリタタスクから呼び出す必要があります。

サンプルプログラムCNC 例 07: 式とサブプログラムの使用補間時のコール スタックの表示例を示します。