例: AC モジュールのティーチング
製品: CODESYS Application Composer
この例では、単純な照明コントロールを使用して学習可能なモジュールを作成および使用する方法を示します。
説明
の CODESYS Application Composer アプリケーションのモジュール構成の機能を提供します。構造がモジュール ツリー内で 1 回定義されると、そこから静的な IEC アプリケーションが生成されます。これが発生すると、モジュールはそのサブモジュールに直接接続され、実行時に変更できなくなります。
この例では、実行時に個別のモジュールのプールから動的構成を作成する方法を示します。
さらに、この構成は永続的に保存されるため、アプリケーションが再起動されるたびに最後に設定された構成をダウンロードできます。
付属のライブラリは変更せずに使用できます。このプロジェクトは、このライブラリの可能な使用例を示しているだけです。必要な変更はすべて、キーワードを使用したコメントによってコード内でマークされています。 AC_ModuleTeaching
。
追加情報
建築
学習可能なモジュールの考え方は、生徒、被験者、教師の原則に基づいています。
生徒は教師から教えられた科目を学ぶことができます。生徒が特定の科目を学習できるかどうかの決定は生徒次第です。したがって、機能するモジュール構成は、常に教師、少なくとも 1 人の生徒、および少なくとも 1 つの科目で構成されている必要があります。
のアーキテクチャを考慮すると、 AC_ModuleTeaching
ライブラリを使用すると、次のような設計結果が得られます。
![]() |
の TeacherModule
、 SubjectModule
、 と PupilModule
(また TeacherRegistration
) 機能ブロックは、 AC.Module
ファンクションブロック。これにより、これら 3 つのモジュール タイプをモジュール ツリーで構成できるようになります。
学習可能なモジュールの実装に関連する機能ブロックは 2 つだけです。
SubjectModule
とPupilModule
。TeacherModule
変更や追加構成を行わずに、モジュールとしてモジュール ツリーに挿入できます。
順序
初期化フェーズは次のように進行します。
![]() |
Init()
最初の PLC サイクルでベース Application Composer コンテキストから呼び出されます。
TeacherModule
: このモジュールはすべてのモジュール インスタンスをスキャンし、各インスタンスについてレポートを返します。SubjectModule
とPupilModule
(Register(THIS^)
)。これにより、モジュールの相互通信のための基本的なフレームワークが確立されます。SubjectModule
: これらの各モジュールは、それ自体に一意のモジュールを割り当てます。SubjectID
(UDINT
)。PupilModule
: 各モジュールは独自に登録する必要がありますSubjectIDs
を介して学習できるはずです。AddSubjectID(UDINT)
。
学習は次のように進められます。
![]() |
あらゆるイベント (たとえば、ビジュアライゼーションで [学習] ボタンをクリックした場合) に対して、 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 |
注記
ダウンロード 計画
パッケージをインストールすると、 C:\Users\<user>\CODESYS Examples\AC Module Teaching Example
ディレクトリにサンプル・プロジェクトがあります。