Matlabのプログラマブルロジックコントローラーのコード生成

MathWorksは、新製品-Simulink PLC Coderの発売を発表しました。 この製品を使用すると、IEC 61131に従ってプログラマブルロジックコントローラー(PLC)およびプログラマブルオートメーションコントローラーのコードを自動的に生成できます。 この革新により、PLCによって制御される産業用および電力機器用のモデル指向設計の使用が可能になります。



エンジニアは、Simulink PLC Coderを使用して、閉ループおよびフィードバック制御システムを含む産業用制御システムのコードを自動的に生成できます。 モデル指向設計の不可欠な部分である自動コード生成は、従来の手動コード記述に関連するエラーを排除し、開発および検証時間を短縮するのに役立ちます。



Simulink PLC Coderは、Simulinkモデル、Stateflowダイアグラム、およびEmbedded MATLABコードから構造化テキスト形式のソースコードを生成し、産業オートメーションベンダーの統合開発環境(IDE)を使用してコードをコンパイルし、PLCコントローラーで実行します。

コードを生成するには、バージョン2010a以降のMatlabが必要です。 シーメンスSIMATIC STEP 7 PLC用のプログラムを開発します。



数学モデルを作成するモデルファイルを作成します。 これを行うには、plclibライブラリが必要なので、Matlabコマンドラインから実行します。



離散PIDコントローラーを備えた制御システムの数学モデルを作成します(図1)。 図2は、pid_feedforwardブロックの内部構造を示しています。



画像



図1-制御システムの数学モデル



画像



図2-pid_feedforwardブロックの内部構造



画像



図3-システムの過渡現象



pid_feedforwardブロックを選択し、右クリックして[サブシステムパラメーター]を選択します。 このウィンドウで、「アトミックユニットとして処理」を選択し、[OK]をクリックします。

ファンクションブロックで右クリックし、[PLC Coder /オプション]を選択します。

コードを生成するPLCのタイプ(ターゲットIDE)を選択し、コード生成キーを押します。

SIMATIC STEP 7用に生成されたコード

(*

*

*ファイル:plc.scl

*

* Simulinkモデル「plc.mdl」用に生成されたIEC 61131-3構造化テキスト(ST)コード

*

*モデルバージョン:1.1

* Simulink PLC Coderバージョン:1.1(R2010b)2010年8月3日

*生成されるSTコード:2011年6月3日金曜日18:52:23

*

*ターゲットIDEの選択:Siemens SIMATICステップ7 5.4

*含まれているテストベンチ:いいえ

*

*)

FUNCTION_BLOCK FB1

VAR_INPUT

ssMethodType:INT;

In3:REAL;

In2:REAL;

In3_c:REAL;

END_VAR

VAR_OUTPUT

Out1:REAL;

END_VAR

ヴァール

Integrator_DSTATE:REAL;

Filter_DSTATE:REAL;

rtb_et:REAL;

rtb_Sum:REAL;

c_rtb_FilterCoeffi:REAL;

END_VAR

CASE ssMethodType OF

2:

(* DiscreteIntegratorのInitializeConditions: '/ Integrator' *)

Integrator_DSTATE:= 0;



(* DiscreteIntegratorのInitializeConditions: '/ Filter' *)

Filter_DSTATE:= 0;



3:

(*合計:「/合計」には以下が含まれます:

* Inport: '/ In1'

* Inport: '/ In2'

*)

rtb_et:= In3-In2;



(*ゲイン:「/フィルタ係数」には以下が組み込まれます:

* DiscreteIntegrator: '/フィルター'

*ゲイン: '/ Derivative Gain'

*合計: '/ SumD'

*)

c_rtb_FilterCoeffi:=((-1.26102994076046 * rtb_et)-Filter_DSTATE)* 0.178109803713032;



(*合計:「/合計」には以下が含まれます:

* DiscreteIntegrator: '/インテグレーター'

*ゲイン:「/比例ゲイン」

*)

rtb_Sum:=((1.7018012505578 * rtb_et)+ Integrator_DSTATE)+ c_rtb_FilterCoeffi;



(* Outport: '/ Out1'の組み込み:

* Inport: '/ In1'

*合計: '/ Sum1'

*)

Out1:= In3 + rtb_Sum;



(* DiscreteIntegratorのアップデート: '/ Integrator'の組み込み:

*ゲイン: '/ Integral Gain'

*合計: '/ Sum2'

*合計: '/ SumI1'

*合計: '/ SumI3'

* Inportの更新: '/ In1'

* Inportの更新: '/ In3'

*)

Integrator_DSTATE:=(((In3_c-In3)-rtb_Sum)+(0.208461637073455 * rtb_et))+ Integrator_DSTATE;



(* DiscreteIntegratorの更新: '/ Filter' *)

Filter_DSTATE:= Filter_DSTATE + c_rtb_FilterCoeffi;



END_CASE

END_FUNCTION_BLOCK



次のステップは、Siemens SIMATICステップ7でプロジェクトを作成し、生成されたコードをSCLエディターに挿入することです。

コードをコンパイルした結果、ファンクションブロックが作成されます。



画像



図4-ファンクションブロックFB1



OPCサーバーを使用して、PLCとMatlabの間で交換します。 実際のハードウェアを使用する場合、Simatic Net OPCサーバーを使用します; PLCシミュレーター(PLC-Sim)を使用する場合、WinCC SCADAシステムとWinCC OPCサーバーを使用する必要があります。



画像



図5-PLCとMatlab間の通信



画像



図6-PIDコントローラーの動作の比較



Simulink PLC Coderの詳細については、Matlabのドキュメントまたはwww.mathworks.com/products/sl-plc-coderを参照してください



All Articles