Skip to main content

例: AC モジュールのティーチング

製品: CODESYS Application Composer

この例では、単純な照明コントロールを使用して学習可能なモジュールを作成および使用する方法を示します。

説明

CODESYS Application Composer アプリケーションのモジュール構成の機能を提供します。構造がモジュール ツリー内で 1 回定義されると、そこから静的な IEC アプリケーションが生成されます。これが発生すると、モジュールはそのサブモジュールに直接接続され、実行時に変更できなくなります。

この例では、実行時に個別のモジュールのプールから動的構成を作成する方法を示します。

さらに、この構成は永続的に保存されるため、アプリケーションが再起動されるたびに最後に設定された構成をダウンロードできます。

付属のライブラリは変更せずに使用できます。このプロジェクトは、このライブラリの可能な使用例を示しているだけです。必要な変更はすべて、キーワードを使用したコメントによってコード内でマークされています。 AC_ModuleTeaching

追加情報

建築

学習可能なモジュールの考え方は、生徒、被験者、教師の原則に基づいています。

生徒は教師から教えられた科目を学ぶことができます。生徒が特定の科目を学習できるかどうかの決定は生徒次第です。したがって、機能するモジュール構成は、常に教師、少なくとも 1 人の生徒、および少なくとも 1 つの科目で構成されている必要があります。

のアーキテクチャを考慮すると、 AC_ModuleTeaching ライブラリを使用すると、次のような設計結果が得られます。

_example_img_ac_module_teaching1.png

TeacherModuleSubjectModule、 と PupilModule (また TeacherRegistration) 機能ブロックは、 AC.Module ファンクションブロック。これにより、これら 3 つのモジュール タイプをモジュール ツリーで構成できるようになります。

学習可能なモジュールの実装に関連する機能ブロックは 2 つだけです。

  • SubjectModulePupilModule

  • TeacherModule 変更や追加構成を行わずに、モジュールとしてモジュール ツリーに挿入できます。

順序

初期化フェーズは次のように進行します。

_example_img_ac_module_teaching2.png

Init() 最初の PLC サイクルでベース Application Composer コンテキストから呼び出されます。

  • TeacherModule: このモジュールはすべてのモジュール インスタンスをスキャンし、各インスタンスについてレポートを返します。 SubjectModulePupilModule (Register(THIS^))。これにより、モジュールの相互通信のための基本的なフレームワークが確立されます。

  • SubjectModule: これらの各モジュールは、それ自体に一意のモジュールを割り当てます。 SubjectID (UDINT)。

  • PupilModule: 各モジュールは独自に登録する必要があります SubjectIDsを介して学習できるはずです。 AddSubjectID(UDINT)

学習は次のように進められます。

_example_img_ac_module_teaching3.png

あらゆるイベント (たとえば、ビジュアライゼーションで [学習] ボタンをクリックした場合) に対して、 SubjectModule インスタンスがレポートする TeacherModule の電話について ReportTeacher()。の ReportTeacher()Report(THIS^)TeacherModule 暗黙的に呼び出されます。の TeacherModule を提供します SubjectModule すべての人へのインターフェース PupilModule 経由のインスタンス Learn(ISubject) を学ぶ可能性がある SubjectModule。を学ぶ SubjectModule ということは、 PupilModule おそらくキャストしてマークする必要があります SubjectModule それ自体 (たとえば、メンバー変数に格納することによって)。

応用

特定のアプリケーションについては、誰が「被験者」の役割を担うのか、誰が「生徒」の役割を担うのかを考える必要があります。たとえば、被写体はセンサーで表現され、瞳孔は俳優で表現されます。この例では、被写体に光センサーが使用され、瞳孔にライトが使用されます。ライトはさまざまなセンサーを聞くことを学習したり、後で再びセンサーを忘れたりすることができます。

実装に関しては、次の点に注意する必要があります。

  • ライトはACMT.Pupを拡張します

    Init(): 学習可能なものを追加します SubjectID

    Learn(): このメソッドは上書きする必要があります。最初に、基本実装を呼び出す必要があります。

    IF SUPER^.Learn(itfSubjectToLearn := itfSubjectToLearn) = ACMT.ERROR.NO_ERROR THEN

    それが成功すれば、その主題を学ぶことができます。それ以外の場合、その主題は学習可能ではないため、無視できます。

    END_IF

    ForgetAll(): このメソッドも上書きし、ローカルに保存されているサブジェクトを再度削除する必要があります。

  • SwitchPush EXTENDS ACMT.SubjectModule // 継承チェーンを介して間接的に SwitchOnOff -> SwitchBase

    Init(): を定義します。 SubjectID

    CallPrioMediumStart(): の呼び出し ReportTeacherセンサーが 3 秒以上押された場合。

  • 永続化マネージャー

    Persistence Managerを追加することで、学習した科目を保存することができます。その結果、アプリケーションを再起動すると、最後の状態が復元されます。

システム要件と制限事項

プログラミングシステム

CODESYS Development System (バージョン 3.5.5.0 以降)

ランタイムシステム

CODESYS Control Win (バージョン 3.5.5.0)

アドオンコンポーネント

CODESYS Application Composer

注記

_example_icon.png ダウンロード 計画

パッケージをインストールすると、 C:\Users\<user>\CODESYS Examples\AC Module Teaching Example ディレクトリにサンプル・プロジェクトがあります。