Skip to main content

CNC の例 17: 文字列からの G コードの読み取り

を参照してください CNC17_ReadGCodeFromStrings.project 以下のCODESYSのインストールディレクトリにあるサンプルプロジェクト ..\CODESYS SoftMotion\Examples

サンプルプロジェクトは使用方法を示しています SMC_StringStream2 文字列から G コードを読み取ります。

この例は出発点と見なすことができ、ネットワーク通信(ソケット)などを介して他のソースからGコードを読み取るために使用できます。この場合、以下を実装するファンクションブロックを実装する必要があります。 SMC_ITextStream インターフェースを作成し、テキスト (ソケットなどから) を読み取ります。これは方法と似ています SMC_StringStream2 このインターフェイスを実装して、文字列から G コードを読み取ります。

アプリケーションの構造

この構造はCNCアプリケーションでは一般的です。G コードはバックグラウンドタスクで読み込まれますPathTask)、そしてパスの前処理もここで行われます。補間はバスタスクで実行されます

の中に Path プログラム、 SMC_ReadNCFromStream ファンクションブロックは G コードの読み取りに使用されます。技術的な理由から、タイプのストリームだけではありません SMC_StringStream2 この関数ブロックに渡されるだけでなく、パラメータによってサイズが決まる配列も渡されます。 SMC_CNC_LibParams.MAX_SUBPROGRAM_NESTING_DEPTH。配列の最初のストリームはメインプログラムに使用され、他のストリームはサブプログラムの呼び出しに使用されます

最初に、メインプログラムは配列の最初のストリームにロードされます。

// Load G-Code into first stream
aStringStream[0].Init(sProgramName) ;
aStringStream[0].AppendData(sGCode) ;
aStringStream[0].SetEndOfData() ;

これで、通常のGコードプログラムを読むための準備がすべて整います。また、この例ではサブプログラム呼び出しをどのようにサポートできるかも示しています

そのためには、以下を実装する関数ブロックを作成する必要があります。 SMC_INCLookup インターフェイス。このファンクションブロックは、サブプログラムが読み取られたときにサブプログラムの G コードを返す役割を果たします SMC_ReadNCFromStream。ザ・ Lookup メソッドはサブプログラムの名前を受け取り、受信ストリームを G コードで初期化します。

METHOD LookUp : SMC_ERROR
VAR_IN_OUT CONSTANT
    programName : STRING;
END_VAR
VAR_INPUT
    stream : SMC_ITextStream;
END_VAR
VAR
    i : UDINT ;
    pStringStream : POINTER TO SMC_StringStream2 ;
END_VAR

この例では、サブプログラムの配列を検索します。この配列は次のように定義されています。 Path プログラムとして VAR_INPUT:

   // The table of subprograms.
   aSubs : ARRAY[0..0] OF SubProgram := [
            (stName := 'SUB1',
             stContent := '
SUBPROGRAM SUB1{#p1 : LREAL, #p2 : LREAL, #p3 : LREAL}
N10 G1 X#p1
N20 G1 X#p2
N30 G1 X#p3
END_SUBPROGRAM')
        ] ;

Lookup、一致する名前のサブプログラムが見つかるまで、配列が繰り返し処理されます。

i := 0 ;
WHILE i < nNumSPs DO
    IF psp[i].stName = programName THEN
        IF NOT __QUERYPOINTER(stream, pStringStream) OR_ELSE
           pStringStream = 0
        THEN
            // A stream of the wrong type has been passed by SMC_ReadNCFromStream.
            LookUp := SMC_CNC_INTERNAL_ERROR ;
        ELSE
            pStringStream^.Init(sName := psp[i].stName) ;
            LookUp := pStringStream^.AppendData(psp[i].stContent) ;
            pStringStream^.SetEndOfData() ;
        END_IF
        RETURN ;
    END_IF

    i := i + 1 ;
END_WHILE
 
// No subprogram with name programName has been found in the array psp.
LookUp := SMC_RNCF_SUBPROGRAM_FILE_NOT_FOUND ;

コミッショニング

  1. アプリケーションをビルドし、コントローラーにダウンロードします。

  2. ビジュアライゼーションを開きます。

  3. プレス 開始 G コード処理を開始します。