📎

Hyper-V で仮想マシン上にTwinCAT の環境構築をする

に公開

はじめに

ベッコフオートメーション社のTwinCAT3を仮想マシン上で動作させたくなったので環境構築方法を記載します。
FA業界に住んでいて仮想化?よく分からんけどやりたい…でも色々調べてやる時間は無い…みたいな人に刺さると良いなと思ってます。

使用環境

使用している環境は以下の通りです。

  • TwinCAT: 3.1 Build 4024
    • 会社ではBuild 4024 を使用しているので、今回は4024を前提として記載します。仮想化の部分は4026でも変わりません。
  • Windows 11
  • Hyper-V
    • 仮想化ツールとしてHyper-V を選択しています。理由は標準搭載なので楽だったから…
    • UserMode Runtime で実行しようと思うので、今回はこれで。RealTime が欲しい方は違うツールをお選びください。

最初にやったこと

Windows11 へのアップデート

1つ目の落とし穴。

めんどくさがってWindows10 からアップデートしていませんでした。Microsoft の言うことを聞いて無事アップデート完了。

Hyper-V のインストール

2つ目の落とし穴。

標準搭載なので楽…などと書きましたが、Windows11 Home エディションには標準でインストールされていないらしいです。

以下の記事を参考にインストールしました。ありがとうございます。
https://zenn.dev/arbr/articles/d9072558cb488e

Windows11 インストールメディアの作成

Microsoft社の公式サイトからインストールメディアをダウンロードしてきます。
ISO 形式でダウンロードしました。
https://www.microsoft.com/ja-jp/software-download/windows11

これで最初の準備は完了です。

仮想マシンの起動

参考記事

以下の記事を参考に仮想マシンの設定をしています。ありがとうございます。
https://zenn.dev/12morosy/articles/1f07034b0e7a2b

自分が困ったところだけ記載しておきます。

仮想マシンのWindows11 セットアップ プロダクトキー

仮想マシン用にWindows のプロダクトキーを用意することは稀かと思い、今回はプロダクトキー無しでセットアップしています。

手順通りに進めていくと以下のような画面が表示されるので、左下の”プロダクト キーがありません” を選択します。

イメージの選択画面が表示されるので、お好きなオペレーティングシステムを選択してください。
(今回はWindows 11 Home にしました)

仮想マシンのWindows11 セットアップ Microsoftアカウント

仮想マシン用のMicrosoftアカウントを用意しても良いですが、めんどかったのでMicrosoftアカウントの設定をスキップします。

”Microsoft エクスペリエンスのロックを解除する”画面まで進めたら、「Shift+F10」を押してコマンドプロンプトを起動します。

起動したコマンドプロンプトへ、以下のコマンドを打ち込みます。

start ms-cxh:localonly

色々出て完了。”デバイスのプライバシー設定の選択”画面へ進みます。

これで仮想マシン上にWindows11の環境構築が完了しました!

仮想マシンの設定

解像度の変更

大画面表示にしても悲しい感じになっているので、解像度を変更します。

デスクトップを右クリック → 拡大縮小とレイアウト から "ディスプレイの解像度"をモニタに合った値へ変更してください。普段と同じやり方で仮想マシン上の解像度も変更されます。

キーボード配列の変更

仮想マシン上でアンダースコアが打てない人はこの設定を実施してください。

  • "Windows + R" でファイル名を指定して実行 を開き、"regedit.exe" を入力。レジストリエディタを開く
  • "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411" を探して、開く
  • Layout File を右クリック → 修正
  • 値を"KBD106.DLL" に変更
  • 仮想マシンの再起動

これでキーボード配列が変更できます。

TwinCAT のインストール

次に、以下の記事を参考にTwinCAT をインストールしてください。ありがとうございます。
https://sites.google.com/site/twincathowto/insutoruto-ji-ben-she-ding/tc3-install

TwinCAT の起動

コア分離の確認

  • Search バーで"core isolation" と検索し、コア分離を開きます。
  • メモリ整合性がオフになっていることを確認してください。オンであればオフにしてください。

Windows の機能の有効化または無効化の確認

  • Search バーで"windows features" と検索し、Windows の機能の有効化または無効化の確認を開きます。
  • "Hyper-V"、"Windows Hypervisor Platform"、"Virtual Machine Platform"、"Windows Sandbox" 全てがオフになっていることを確認してください。オンであればオフにしてください。
    • 仮想マシンによっては存在しない項目もあります。

TwinCAT プロジェクトの作成

いつもの手順でProject を作成してください。

ツールの言語変更

初期設定だと日本語になっているので、私は毎回英語に変更しています。
(日本語だと正常動作しないバグあったりします。私は2度遭遇しました…)

  • タスクバーの ツール → オプション → 環境 → 国際対応の設定 → 言語 を"English" にします

TwinCAT の再起動で有効化されます。

UserMode Runtime の有効化

Hyper-V 環境では通常のリアルタイム実行ができなさそうです。(調べた感じは)
何もせずにRun Mode にしようとすると、仮想マシンがフリーズしました。
今回は4024 でUserMode Runtime で実行をします。(4024 はBeta版、4026では正規になっています)

  • エクスプローラで"C:\TwinCAT\3.1\Runtimes\UmRT_Default" を開きます。
  • フォルダ内にある"UmRT_Default" を開きます。
  • Start.bat を起動すると、ターミナルが開き、Config モードでTwinCAT が起動します。
    • ベッコフさん天才!ありがとうございます。
  • TwinCAT プロジェクト上でターゲットシステムを "Local" → "UmRT_Default"へ変更します。
  • SYSTEM -> Real-Time -> Read from Taget でUserMode Runtime のコア割付を読み込んでください。
  • Activate -> Run Mode へ移行することを確認します。

これでTwinCAT がRun Mode で動きました!お疲れさまでした!

【補足】UserMode Runtime でどこまでエミュレートが可能か?

以下に色々書いてありますが、気になるところだけ確認してみました。(今回は4024の場合です)
https://infosys.beckhoff.com/english.php?content=../content/1033/tc170x_tc3_usermode_runtime/11319889035.html&id=6099265847340807990

Motion NC-Task

仮想軸を動かせるか確認してみましたが、以下のエラーでRunモードにできません。

Init4\IO: Download Task Attrib: NC: new startup >>  AdsError: 6 (0X6, sorry, no error text [port 500]) << failed

4026のUserMode Runtime では実行できるようですが、今回は諦めました。
仮想軸を動かせはしないですが、PLC 領域でAXIS_REF を定義してRunモードにすることは可能ですので、システム設計上は何とかなる気がしています。
軸を動かしたい時は4026にしましょう。

XTS

仮想軸がダメならXTS もダメでした。そりゃそうですね。
4026でならエミュレート可能か?は4026インストール時に確認を行ってみます。

【補足】Hyper-V以外の仮想化ツールでUserMode Runtime を使用しない方へ

何も考えずにTwinCAT プロジェクトのActivate を行うと、

Setting TwinCat in Run Mode on shared core(s) inside ***(仮想ツールの名前) is not possible  

というエラーが出ます。

TwinCAT Project → SYSTEM → Real-Time から、Core の割付の変更を行うことで解消されます。

Settings タブから、Available Cores の"Set on Target" を押下して、Isolated Coreを用意してください。

また、Task 割付をIsolated Core だけを使用するように変更してください。
下の例では、Shared 2コア、Isolated1コア としたので、Isolated Core であるCore2 にだけTask を割り付けています。

ここまで設定したら、再度Activate。Run Mode へ移行したら完了です!お疲れさまでした。

Discussion