エンジニアは、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を参照してください 。