この記事ではTE1400を使ったBeckhoffのTwinCAT3と連動させシミュレーション働くのイメージするつもりです。インストール・セットアップなどはかなりややこしのせいでメモして置きたいと考えています。
TE1400 のManaulです。絶対読みながらセットアップしてください。そうしないとうまく動くことがありません。これからもManualを展示しながら説明したいと思います。いきなりこうして、ああしてでも面白くないでしょう?ちゃんとManualがこう書いてるからとか~自分もMathworks初めて触るので、結構苦労でした。(これから遊ぶともっと苦労になりますが、できた!ときの快感がたりません。)
https://download.beckhoff.com/download/document/automation/twincat3/TE1400_TC3_Target_Matlab_EN.pdf
今回のプロジェクト:
https://github.com/soup01Threes/TwinCAT3/blob/main/TwinCAT_Project_Link_With_Simulink.tnzip
ちなみに、このインストールはVM中でやったほうがよい…と私が思っています。
TE1400 TwinCAT Target for MATLAB®/Simulink®とは?
まずThe MATLAB®のSimulink Coder®環境ではコード生成器が持っており、この生成器はSimulink®で作られたモデルをC/C++コードを自動変換することが可能です。BeckhoffのTE1400はSimulink Coderベースの上に動作できます。
Simulink Coderでコードを生成するときにTwinCATを設定すれば、INPUT/OUPUTが構成されているTcCOM(TwinCAT Object Model)が生成されております。そのTcCOMはTC3 のエンジニアリングツールXAEにImportすることができます。
そしてもし必要であれば、Runtimeが起動すればそのTcCOMモジュールが自動的にリアルタイムで実行され機械制御システムの一部になります。
MATLAB®/Simulink®とは?
多分GoogleでSimulinkで検索すれば出てくると思いますが、
https://jp.mathworks.com/products/simulink.html
Simulink では、ハードウェアに実装する前にシステムをデザインし、シミュレーションできます。シミュレーションがなければ考えつかないデザインを試し、実装することが可能です。そこでC、C++、HDL などでコードを記述する必要はありません。
MATLAB® と Simulink® を連携させることで、テキスト プログラミングとグラフィカル プログラミングを組み合わせたシミュレーション環境でシステムを設計できます。
MATLAB で事前に定義された何千ものアルゴリズムを直接使用し、MATLAB コードを Simulink ブロックや Stateflow® チャートに追加するだけの簡単な操作です。
MATLAB を使用して入力データセットを作成し、シミュレーションを実行することができます。何千ものシミュレーションを並行して実行し、MATLAB で解析と可視化が可能です。
って感じですかね。いまのテキストはMathworksそのまま転載しただけなので、興味がある方は上のLinkをクリック詳しくみてください。
使用すアプリケーション例
Rapid Control Prototyping
SimulinkモデルではClose-Loopなどの制御LoopをシミュレーションしTwinCAT上で簡単な操作でリアルタイムControllerと同じような動作ができます。Simulinkモデルで構成されたINPUT/OUTPUTはそのままTwinCAT上で流用することが可能です。
そしてLoop シミュレーションはModel in th loop simulationといいます。
自分はもちろんそんな立派なLoop作れないけど、例えばこんな感じです:
このようなLoopはTwinCAT上でテストすることが可能になります。
https://stackoverflow.com/questions/34570215/how-to-model-for-loop-memory-things-in-matlab-simulink
もちろん、制御システム自体はSimulink モデルとして実装され、Model Referencingの一部になります。TcCOMモジュールがそのモデルから生成されTwinCAT上でリアルタイムシミュレーション実行しできます。
Real-time simulation of a machine / virtual commissioning
TcCOMモジュールはSimulinkモデルから生成されています。そのモデルがPLCをリアルタイム上でテストすることができます。事前に様々なプログラムBug、設計ミスなどは実機テストする前の段階で見つかることができ、立ち上げ時間など短縮化になります。
構成によってはSiLとHiLに分かれています。
SiL(Software-in-the-loop)
こちらの構成だとすべてのシミュレーションはシステムシミュレーションモデルになります。簡単にいいますと、PLC、Remote-IO、Driveも仮想になりますね。
これはVirtual commissioningの最初段階になりますね。
HiL(Hardware-in-the-loop)
次に進むと(つまり制御システムはある程度テストされた状態)、ControllerがネットワークやField-Busとつながり、Controllerと一部のRemote-IOも実機になります。
インストール
簡単な説明はここまでで、次はインストールを説明します。
TWINCAT3 C/C++
Engineering PC
Visual Studio
簡単というか自分が苦しんでた経験からいいますと、Visual Studioは2019インストールするのはやめてください。あとのSimulinkでモデルコンパイルするときはなぜはエラーが消えないです。コンパイラーが適用しません、と。(だから、Manualを読め!と。)
Trips:インストールするときは常に管理者として実行と、Visual Studio2017の場合は”Desktop development withC++”のCheckboxをいれてください。
Microsoft “Windows Driver Kit” version 7.1.0
TwinCAT3バージョンが4024.0以下が必要になります。
まずGoogleで検索。
一つ目のDownload xxxで多分OKです。
こちらはリンクです:
https://www.microsoft.com/en-us/download/details.aspx?id=11800
Downloadします。(そういうDrive kitはいつダウンロードできなくなるにもよくあることですので、Backupしておいてください。)
解凍し、管理者として実行。
Build EnvironmentsをCheckBox入れ、OKします。
Install Pathを設定します。Defaultのまましてください。
あとInstall Path一応NotepadかどっかでCopyしておいてください。
ライセンスの同意、I Agreeを入れて、OK。
私のVMならたしかに5分くらいで終わるかな。
完成です!
次はWindowsの環境変数を変更します。
Control Panel>System and Security>System>Advanced system settingsします。
Advanced>Environment Variables。
System variables>New。
Variable Name:WindDDK7
Variable value:先NodepadでCopyしたPath
パソコン再起動、です。
TwinCAT 3 XAE
もちろん、TwinCAT3 XAE入れないと話になりません。
Runtime PC
IPC or Embedded CX PC with Microsoft operating system based on “Windows NT kernel” (Win XP,Win 7 and corresponding embedded versions, Win 10)
TwinCAT3 XAR
バージョンによってSupportできるOSが変わります。
- TwinCAT 3.0:32BitOSだけ
- TwinCAT 3.1:32Bit/64BitOSにもOKです。64BitのOSはDriver signという作業が必要になります。
Driver sign
ここには詳しい説明があります↓
https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_c/110691083.html&id=
自分はVisual Studio2017なので、Visual Studio2017>Developer Command Promptを管理者として実行します。
証明を作成します。
makecert -r -pe -ss PrivateCertStore -n CN=MyTestSigningCert MyTestSigningCert.cer |
次は作成ちゃんとしたかどうかをCheckします。
Command prompt>mmc起動します。
File>Add/Remove snap-inします。
Certificates>Addします。
My user account選び、Finishします。
これでOK。
保存します。
PCの環境変数>User variables>赤線の変数を追加します。
Variable:TWINCATTESTCERTIFICATE
Value:先作った証明書のCN名
C++>Project>Properties
Configuration Properties>Tc Signの設定はあってるかどうかをCheckしてください。
テストモード切り替える
Command promptを管理者として実行し以下のコマンドを実行します。
bcdedit /set testsigning yes |
パソコン再起動します。
画面の右下はこのような文字あれば、Test Modeになっています。
MATLAB®/Simulink®
ソフトのインストールはここで詳しく書きません。
必要なバージョン:
- MATLAB®/Simulink®
- R2010aからR2019aまで
- R2010b以後はおすすめです
- Simulink Coder®
TE1400 Target
以下のLinkでダウンロードできます。
https://www.beckhoff.com/ja-jp/products/automation/twincat/te1xxx-twincat-3-engineering/te1400.html
インストール終わったら、以下のPathでこのようなFolderがあります。
最後はMatlabを管理者として起動します。
Folder開きます。
TE1400-TagertForMatlabSimulinkをえらび、Select Folder。
このSetupTwinCatTarget.pというFileがありますね。
右クリック、Run。
セットアップOKなら、となりのCommand Windowにこのようなメッセージが出てきます。
ライセンス
TE1400では7日無料フール機能のTrialがありません。
代わりに、Demoライセンスがあります。
少し制限が出てきますが。
初めのモデル作り
New>Model。
Model作成画面が出てきます。
Settingをクリックします。
Solver Tabをクリックします。
Type:Fixed-step
Fixed-step size:0.01にします。
Code Generation>Browse
TwinCAT.tlcを選び、OK。
TC Build>Publish moduleをCheckします。
そしてTwinCAT RT(x86)と(x64)をCheck入れます。
Apply>OK。
簡単なモデルを作りますー。
コンパイルしますー
これでエラーないなのでOK!
tmc Fileもできましたね。
PLCにIMPORT
次はPLCにIMPORTします。
まずはTwinCAT XAEを起動します。
新しいProjectを作成します。
C++でAdd Existing Item。
SimulinkでコンパイルされたC++ Projectを選びます。
Projectをクリックし、Rebuildします。
Build OK!
次はコンパイルされたモデルをImportします。
TcCOM Object>まずReload System TMC Files。
TcCOM Objects>Add New Itemします。
TE1400 Module Vendor>Generated Modules>先コンパイルされたモデルを選び>OK。
TcCOM Objectsを選んで、Context>Taskを割り付けます。
Build>Build SolutionしてConfigurationとプログラムをRuntimeにダウンロードします。
Onlineしてみると、In1をクリックしたら下のGraphが”0”が見えます。
つまりいまIn1の信号はFalseです。
となりにWriteボタンがあります、Writeを押すと下のGraphが”1”が見えます。
つまり信号はTrueです。
Block Diagramをクリックすると、いまの信号をMonitoringできます。
実装
先は信号のMonitorでき、いまは実際PLCプログラムの信号と紐つけたいと考えます。
まずPOUs>MAINをクリックします。
中に以下のように変数定義します。
binput1 AT %Q*:BOOL; <<これれはどんな意味があるでしょう。
下のInformation Systemには説明があります:
変数の宣言はこうになりますと、Local I/O(Process image)を定義するとなります。
なんでこの変数をProcess imageに定義する必要がありますか?
Manualには書いています。
If the code generator is configured appropriately with TwinCAT Target, a TwinCAT Object Model (TcCOM) is created with the input and output behavior of the Simulink model.
ToCOMはInput/OutputのパラメータありのTwinCATのObjectモデル、です。
PLCのOut(Q)はModelの(I)でPLCのIn(I)はModelの(Q)になります。
そして、もう一度Build>Build Solutionします。
TcCOM ObejctsのIn1,In2とOut1とUntitled1 InstanceのIn1,In2とOut1が紐つけるように考えます。
次はInputとOutputを変数に紐つけます。
ではまずIn1を紐つけたいと考えます。In1をクリックします。
In1のbinput1を選び、OK。
他のIn2とOut1も同じのように紐つければOKです。
全部割り付ければ、もう一度BuildしてDownloadします。
テスト
AND GATEだけなので、すぐテストできます。
binput1をTrueにします。
次はbinput2をTrueにします。
BOutput1みたら、ちゃんと1になることがわかります。
ハマったこと
TwinCAT3 AdsWarning 4115: system clock setup fail
まさか立ち上げてから出ると思いませんでした。
そこでまず参考になりそうのLINK:
https://control.com/forums/threads/twincat-3-error-when-switched-to-run-mode.43467/
https://stackoverflow.com/questions/54264180/twincat3-adswarning-4115-system-clock-setup-fail
まとめの解決方法
- OSを再起動:だめでした。
- Disable Hyper-V:もうすでに無効になっています。
- “C:\TwinCAT\3.1\System” by writing “cd C:\TwinCAT\3.1\System”で管理者権限
win8settick.batを実行:治りました!
コンパイラーは合ってない
自分はVS2019をインストールしたので、Manualに書いてる通りVS2019のコンパイラーはSupportしません。
x64 Publish procedure failed
Simulinkだけだとコンパイルできませんみたいなエラーしかなくて、なにか問題出たのかわからない。Send this report to beckhoff automationだけで…ふさけるな。
そこでYou can try to build manually using the project file..が見えました。
ほう…ではそうしてみましょう。確かにプロジェクトがありますね。
そこで先のC++プロジェクト追加し、もう一度コンパイルします。
お、Certification ID がないみたいなエラーだと言われました。
となりのOutput Logsを見ますと、Signtoolがないってわかりました!
それじゃ、Signtoolをダウンロードしインストールしましょう。ちなみに、先も書いていますが、64BitのOSだけSign認証が必要になります。
下記では参考LINKです:
https://stackoverflow.com/questions/43636484/how-to-install-signtool-exe-for-vs-2017
Control PanelでVisual Studioを右クリック>Change。
とりあえず、全部Checkしてインストールします。
終わったらOSを再起動します。
おおお。できました。
参考LINK
Beckhoff Information System
https://infosys.beckhoff.com/index_en.htm
Simulink
https://jp.mathworks.com/products/simulink.html
TWINCAT3 – Installation Manual
https://download.beckhoff.com/download/Document/automation/twincat3/TC3_Installation_EN.pdf
TC3 Target for Matlab®/Simulink® Manual
https://download.beckhoff.com/download/document/automation/twincat3/TE1400_TC3_Target_Matlab_EN.pdf
TwinCAT C/C++ Manual
Publish Procedure Failed – Simulink code generation with TwinCAT.tlc Target file
How to install SignTool.exe for Windows 10
https://stackoverflow.com/questions/31869552/how-to-install-signtool-exe-for-windows-10
How to install SignTool.exe for VS 2017?
https://stackoverflow.com/questions/43636484/how-to-install-signtool-exe-for-vs-2017
TwinCAT3 AdsWarning 4115: system clock setup fail
https://stackoverflow.com/questions/54264180/twincat3-adswarning-4115-system-clock-setup-fail
TwinCAT 3 Error When Switched to Run Mode.
https://control.com/forums/threads/twincat-3-error-when-switched-to-run-mode.43467/
The implementation and debugging of TwinCAT 3 C++ modules requires
Windows Driver Kit Version 7.1.0
https://www.microsoft.com/en-us/download/details.aspx?id=11800
Driver signing
https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_c/110691083.html&id=
How to sign X64 Driver Beckhoff TwinCat3
TE1400 Download
https://www.beckhoff.com/ja-jp/products/automation/twincat/te1xxx-twincat-3-engineering/te1400.html
Global Variables
最後まで見てくれて、ありがとうございます。
はーい、お疲れ様です。