市販PCのIPC化について

1. はじめに

EtherCAT Masterとしてリアルタイム動作するIPC (Industrial PC)といえばBeckhoff Automation社製のものが有名ですが、昨今の情勢で納期がかなり延びています。

そこで製品搭載までの繋ぎの研究開発用だったり、非商用の個人レベルの開発でも気軽にIPCを使えるように、市販のPCをIPC化するための手順を記しておきたいと思います。

今回使用したPCはコスパが高くて評判のミニPC ThinkCentre M75q Tiny Gen2です。

Specification

  • OS: Windows 11 Pro 64bit
  • GPU: AMD Ryzen™ 5 PRO 5650GE
  • Memory: 8 GB DDR4-3200MHz
  • Storage: 256 GB SSD, M.2 PCIe-NVMe

購入後、メモリは空スロットに16 GB追加、ストレージは1 TBに交換していますが、そのままでも大丈夫です。

また、大きなPCでも置き場所に困らない方には、PCI-Expressスロットが付いているタワーPCの方がより簡単です。

2. ソフトウェアインストール

2.1. Visual Studioのインストール

Beckhoff Automationが提供しているTwinCAT3はVisual Studio開発環境にアドオンする形で使用するため、まずはVisual Studio 2019をインストールします。個人利用の場合はVisual Studio Community 2019、商用の場合はVisual Studio Professional 2019になります。詳細手順はLinkを参照ください。

Visual Studio Installerにて下記の項目のチェックボックスを有効にし、インストールします。なお、TwinCAT C++で開発するための最小構成を示しています。言語パックは必須ではありませんが、Englishを追加し設定しておくことを推奨します。

Workload

  • NET desktop development
  • Desktop development with C++

Language packs

  • English

2.2. TwinCAT3のインストール

TwinCAT3には、大きく開発環境PC用のソフトウェアXAE (eXtended Automation Engineering) と実行環境PC用のソフトウェアXAR (eXtended Automation Runtime) の2つの役割に分かれており、開発も実行(リアルタイム処理)も同じPCで行うことも、それぞれの目的に応じてPCを分けて行うこともできます。インストーラはコチラからダウンロードできます。インストールの詳細手順はLinkを参照ください。今回のミニPCはどちらも十分にこなせる性能がありますので、どちらもインストールしておいて良いでしょう。

3. TwinCAT3対応NIC (Network Interface Card)

3.1 NICの準備

[C:\TwinCAT\3.1\Driver\System]のTcI8254x.infおよびTcI8255x.infをテキストエディタで開くと、TwinCAT3に対応するNICの一覧を確認できます。
Link

この中に記載のあるIntel製のネットワークチップ搭載のNICを購入し、PCに取り付けます。

こちらが今回購入したNICです。Intel製82573Lチップが搭載されています。Amazon等で3,000円弱で購入できます。

NICのインターフェースは基本的にPCI-Expressなので、今回使用するPCには対応スロットがなく、このままでは取り付けられません。
そこで、M.2 Key A/EからPCI-Express X1へ変換するアダプタを購入し、取り付けられるようにします。

PCI-Express側には別途12V電源が必要になるので、USB Portの5Vを12Vに昇圧してくれる昇圧器も併せて購入しました。
ねじ端子付き5.5mmx2.1mm DCジャックコネクタ(メス)も併せて購入しておくと便利です。
Amazonでアダプタは約3,000円、昇圧器は約500円、DCジャックコネクタは約60円/個でした。

3.2. NICの取付

物が揃ったらいよいよ取付です。先述のように今回のミニPCにはPCI-Eスロットが無いため、いったん中を開けてM.2 Key A/Eスロットに刺さっているWireless LAN・Bluetooth Card 9260NGWを外し、変換アダプタを取り付けます。

NICが大きすぎて中に納まらないので、図のようにフレキシブルケーブルを介してPCの天板上に置く感じになります。
USBスロットから昇圧した12VをPCI-E側の該当端子に接続したら完了です。

Wireless LANやBluetooth機能が引き続き必要な場合は、それぞれUSB対応アダプターを購入してください。
Bluetoothは必要だったので購入しました。

3.3. TwinCAT Realtime Ethernet Driverのインストール

Visual Studioを起動し、TwinCAT ->  Show Realtime EtherNet Compatible Devicesをクリックするか、「C:\TwinCAT\3.1\System\TcRteInstall.exe」を直接開きます。
[Compatible devices]から取り付けたIntel製NICを選択し、「Install」ボタンをクリックすると、TwinCAT Driverがインストールされます。

[Installed and ready to use devices(realtime capable)]にTwinCAT-Intel PCI Ethernet Adapter (Gigabit)としてIntel製のNICにドライバがインストールされていることを確認します。

元々PCに搭載されているRealtek製のNICに対してTwinCAT Driverをインストールしようとすると、[Installed and ready to use devices(for demo use only)]に移動します。こちらでもXARをRunすることはできますが、動作が不安定になってしまい使い物になりません。

したがって、市販のPCを安定的にEtherCAT Masterとして動かすためには対応するIntel製NICが必須になります。

追記

その後、AliExpressにてM.2 Key A/Eから直接TwinCAT3対応のIntelチップ(I210)搭載のNICを見つけました。これを使うと余計な変換も12V電源も不要になり、見た目がとてもシンプルになりました。TwinCAT Realtime Ethernet Driverのインストールも問題なくできました。

4. Windows テストモード

TwinCAT3 C/C++でリアルタイム制御をゴリゴリ開発する際に、TwinCAT3 C++モジュールを実行するためにWindows テストモードにする必要があります。

C/C++を使わない方は飛ばしていただいて構いません。

4.1. セキュアブートの無効化

BIOSメニューでSecure Bootの設定をDisableにします。

Link

4.2. ドライバー署名の強制の無効化

管理者コマンドプロンプトで

bcdedit /set NOINTEGRITYCHECKS ON

を実行し、再起動します。

再び有効化するには、管理者コマンドプロンプトで

bcdedit /set NOINTEGRITYCHECKS OFF

を実行し、再起動すればOKです。

4.3. テストモードに移行

管理者コマンドプロンプトで

bcdedit /set TESTSIGNING ON

を実行し、再起動します。

テストモードを終了するには、管理者コマンドプロンプトで

bcdedit /set TESTSIGNING OFF

を実行し、再起動すればOKです。

デスクトップ画面右下に次のような表示が出ていればテストモードへの移行が完了です。

5. リアルタイム処理の安定化

5.1. CPU CoreのIsolation

Solution ExplorerからSYSTEM -> Real-Timeをダブルクリックし、下図を開きます。

Set on Targetボタンをクリックし、Shared CoreとIsolated Coreを割り振ります。
Shared CoreはWindows OSと機能をシェアするCoreで、Isolated CoreはTwinCAT専用Coreとして機能するため、動作が安定します。

5.2. CPU Coreの確認

[Win key + R]で「ファイル名を指定して実行」を開きます。

resmon

と入力してリソース モニターを開きます。

Core10, 11 Isolated 前Core10, 11 Isolated 後

CPU10およびCPU11がWindows OSの認識から外れていることが分かります。
これでWindows機能の割り込みがなくなり、TwinCAT3のRealtime処理が安定します。

5.3. その他の設定

以下は、TwinCAT3 XARでRunモードに移行するために必要な設定になります。

5.3.1. Virtualization Technology (VT-x)の有効化

BIOSメニューでVirtualization Technology (VT-x)を有効化します。

5.3.2. Hyper-Vの無効化

コントロールパネル→ Windowsの機能の有効化または無効化にてHyper-Vのチェックボックスを外します。

管理者コマンドプロンプトで

bcdedit /set hypervisorlaunchtype off

を実行し、再起動します。

5.3.3. win8settick.batの実行

C:\TwinCAT\3.1\System\win8settick.batを管理者権限で実行します。

Link

6. リアルタイム制御実行中のパフォーマンス

下のリンクはTwinCAT3 C/C++ ProjectでリアルタイムFB制御を構成し、Cycle Time 125us (8kHz)でサーボモータ2個をバイラテラル制御で同時に駆動している時の様子です。

Task処理の様子です。とても安定していることが分かります。TwinCAT3用に使用しているCoreはWindows OS処理の影響を受けないため、YouTube動画を視聴しながらでも安定して動きます。

以上です。おつかれさまでした。