Skip to main content

セクション: トップレベル

モジュール ツリーの最初のレベルにあるモジュールは、トップレベル モジュールと呼ばれます。他のモジュールとは対照的に、1 つまたは複数のタスクから直接呼び出すことができるメソッドがあります。トップレベルのモジュールには次のセクションが含まれます Toplevel

SEC Toplevel                                        //optional: yes, modifier: [UPDATE]
    GVL_Name := <GVL name>;                         //optional: yes, type: literal
    Default_Application := <default application>;   //optional: yes, type: QID
    Default_POUPool := <TRUE/FALSE>;                //optional: yes, type: BoolFlag
    Pragmas := [<pragma1>, <pragma2>,...];          //optional: yes, type: Pragmalist
    SEC Standard_Task : <task name>                 //optional: yes, modifier: [HIDE,UPDATE]
            Name := <task name>;                        //optional: no, type: ID
            Desc := <task description>;                 //(optional: no, type: Text)
            Flags:= <flag>;                             //(optional: no, type: StdTaskFlags)
    END_SEC
    SEC Custom_Task : <task name>                    //optional: yes, modifier: [UPDATE]
            Priority := <priority>;                     //optional: no, type: Subrange(0 .. 31)
            Interval :=  <interval>;                    //optional: no, type: TimeLiteral)
            Flags:= <flag>;                             //optional: no, type: CustomTaskFlags)
    END_SEC
END_SEC

定義タイプの構文に関する詳細は、セクションで説明されています。 モジュール宣言

. 仕様:
  • GVL_Name モジュールのインスタンスとそのすべてのサブインスタンスが宣言される GVL の名前を定義します。プレースホルダー %Instancename% (大文字または小文字のスペルは関係ありません)、モジュール インスタンスのインスタンス名に置き換えられます。

  • パラメータ Default_Application このモジュールのすべてのインスタンスの特定のアプリケーションへのアプリケーション割り当てを定義します。デフォルトのアプリケーションが定義されている場合は、 Default_POUPool 不可能である。

  • パラメータ Default_POUPool このモジュールのすべてのインスタンスの POU プールへのアプリケーション割り当てを定義します。デフォルトの POU プールが定義されている場合は、 Default_Application 不可能である。

  • パラメータ Pragmas コンパイラ プラグマのリストが含まれており、モジュールの FB インスタンスの宣言の前に挿入されます。

セクション Standard_Task 呼び出しが実行されるタスクを定義します。このために、次の 3 つの標準タスクを使用できます。 LOWMEDIUM、 そして HIGH。の定義 Standard_Task は:

  • Name: モジュールインスタンス作成後にタスク割り当てとして定義されるデフォルトのタスク名。

  • Desc: タスク呼び出しの識別子。これは短くて意味のあるものにする必要があります (例: I/O task)。

  • Flags: 以下の値を組み合わせることができます。 | キャラクター:

    • CREATE_IF_MISSING: タスクが存在しない場合は作成されます。

    • READONLY: タスクの割り当ては読み取り専用であり、ユーザーは変更できません。

    • UPDATE_IOS: タスクは I/O を更新するために使用されます。各 I/O は、 UpdateInTask のパラメータ IO セクション。

    • NONE: フラグは設定されていません。

17.
SEC Standard_Task : MEDIUM
        Name  := MainTask ;
        Desc  := TL.TaskMedium_Desc ;
        Flags := READONLY | CREATE_IF_MISSING ;
END_SEC


セクションを利用することで Custom_Task モジュールは 1 つ以上のカスタム タスクを定義できます。セクションのターゲットは、モジュール関数ブロックのメソッドの名前である必要があります。メソッドには引数があってはなりません(引数も INPUTOUTPUT、 または INOUT)。

  • Priority: タスクの優先度を定義します。

  • Interval: タスク間隔(データ型「TIME」または「LTIME」の定数)を定義します。

  • Flags: 以下の値を組み合わせることができます。 | キャラクター:

    • SHARED注: 互換性上の理由から、このフラグはまだ存在しますが、常に暗黙的に設定されているものとみなされます。これは基本的に、タスクが指定されたプロパティを持つ場合、 Custom_Task セクションがすでに存在する場合、このタスクが使用されます。ただし、一致するプロパティを持つ既存のタスクがない場合は新しいタスクが作成されるため、このフラグは廃止されます。作成したタスクの名前は、 TASK_<ModuleInstanceName>_<MethodName>

    • UPDATE_IOS: タスクは、ST 式またはモジュール I/O に直接接続されている I/O を更新するために使用されます。

    • NONE: フラグは設定されていません。

指定されたメソッドのモジュール クラスにはデフォルトの実装がありません。

18.
SEC Custom_Task : Method1
        Priority := 7 ;
        CycleTime := t#14ms ;
        Flags := NONE ;
END_SEC


ヒント

まさに 1 つの標準タスクまたは特定のタスクに、 UPDATE_IOS フラグセット。

. ここでは、いくつかの基本的なルール、タスクの生成方法について説明します。
  • 標準タスクが存在する場合、 CREATE_IF_MISSING フラグが設定されている場合、指定された名前とジェネレーター設定のプロパティを持つタスクが存在する必要があります。プロパティが指定されたものと一致しない場合は、警告メッセージが表示されます。

  • 標準タスクが存在する場合、 CREATE_IF_MISSING フラグが設定されると、まず指定されたプロパティを持つタスクが生成されます。これで、このタスクのジェネレーター設定が変更されるたびに、警告メッセージが表示されずにタスクが適応されるようになります。

  • 同じタスク名を参照する、異なるタイプの標準タスクは許可されません。この場合、エラーは発行されません。

構成された標準に応じて、各トップレベル インスタンスの定義されたタスクの最初と最後に次のメソッドが呼び出されます。

METHOD CallPrioHighStart: BOOL
METHOD CallPrioHighEnd: BOOL
METHOD CallPrioMediumStart: BOOL
METHOD CallPrioMediumEnd: BOOL
METHOD CallPrioLowStart: BOOL
METHOD CallPrioLowEnd: BOOL

各モジュールはそのサブモジュール インスタンスを呼び出す必要があります。サブモジュール参照を呼び出すことはできません。 FB のデフォルト実装 Module すべてのサブモジュール インスタンスのそれぞれのメソッドを、モジュール ツリー内の位置の順序で呼び出します。

ヒント

SUPER ポインターは、基本関数ブロックのインスタンスへのアクセスを提供します。したがって、たとえば呼び出し SUPER^.CallPrioHighStart() メソッドを呼び出すために使用できます Module.CallPrioHighStart() ファンクションブロックが拡張した場合 Module。このようにして、 Module すべてのサブモジュールが呼び出されることを確認します。