前回はSimulink とDriveSimBasicの連携について書きました。今回はPLCSIM Advanceにも仲間に入れようと思います。構成は下図のようになります。
うん?ぴんとこない方も多いかもしれませんが、つまり、PCの中にPLCSIM Advnaceを立ち上げて、Simulinkの中にSiemens社から提供してるS-Functionを入れてモデルをRunすると、モデルの入出力などはPLCのIQ(三菱だとXY)にFeedback、受けるのようなイメージです。実際そのPLCSIM Advanceはかなり深くて、API Interfaceも提供してるみたいです。C#などが上手い方ならこのAPIを通して色々な操作やってるみたいですよ~
私ではないですが。
S-Functionダンロード
下記のLINKをアクセスします。
ここで説明の資料・プロジェクトなどをダウンロードできます。
PLCSIM ADV S-Functionとは?
S-function “PLCSIM Advanced” はC++から作られ、中にPLCSIM AdvanceのInstanceにアクセスしDataを交換したりします。MEX fileはMatlabでも実行できるようにしています。もちろん、Simulink 内にIntegrateすることも可能です。
注意するのは、PLCSIM AdvanceのS-Functionが入ってるSimulink モデルをCompileする前にはまずPLCSIM Advance先に起動しProjectをダンロードしてからのほういいと思います。そうしないとCompileするときPLCSIM Advanceが勝手にInstance作ってしまうので。
実装
ダウンロードしたSourceCodeを開いて、そのままSimulinkへひっばりましょう。
無事にLoadされたら、PLSIM ADVのICONが出てきます。
まずTIAから3つのINPUTと3つのOutputを定義し、PLCSIM ADVにダウンロードします。
次はPLCSIM ADVをタブルクリックします。
Instance nameをいまPLCSIM ADVで作られたInstanceに名前合わせて入れてください。
そうすると、PLCSIM ADVのS-Functionは3つのInput PortとOutput Portが出てきます。
Ctrl+Dでコンパイラすると、先TIAが作られたINPUT/OUTPUTのTagはちゃんと見えます。
そして適当にINPUT/OUTPUTを割り付けましょいう。
Singleに変換するには、Sine WaveのBlock出てた値のDoube(64bit)でPLCで設定されたTagは32Bitの実数です。
モデルをRunするとInputはSimulinkから数値がもらってるってわかります。
次は、PLCからOUTPUTを入れてみて、Simulink側を見てみましょう。
よし、ちゃんと出てきますね。
でも、このS-Functionはかなりパソコンに負担かかりますー。
はーい、お疲れ様です。