INtimeでアプリを作り始めるとき、ノードの設定ウィザードとアプリ作成ウィザードを別々に実行した記憶はありませんか?RTX64では、Visual Studioの「RTX64 Application」テンプレートひとつで、RTSS用とWindows用の両ビルド構成が一度にセットアップされます。この記事では、INtime経験者がRTX64の最初のアプリを動かすまでの流れを、INtimeとの違いを交えながら解説します。
INtimeとRTX64:プロジェクト作成の違い
INtimeでは、Node(RTOSカーネルの動作単位)の設定ウィザードと、アプリケーションプロジェクトの作成ウィザードが別々のステップになっていました。対してRTX64では、ノードに相当する概念(RTSSプロセス)はVisual Studioのテンプレートに組み込まれており、ひとつのウィザードで完結します。
| 項目 | INtime | RTX64 |
|---|---|---|
| プロジェクト作成 | ノード設定ウィザード+アプリウィザード(2段階) | RTX64 Applicationテンプレート1つ |
| ビルド構成 | INtime用とWin32用を個別管理 | RTSSDebug / RTSSRelease / Debug / Release の4構成が自動生成 |
| コンソール出力 | printf() | RtPrintf()(RTSSプロセス内) |
| パス指定 | 相対パス可 | 絶対パスのみ |
ステップ1:Visual Studioでプロジェクトを作成する
Visual Studioを起動し、「新しいプロジェクトの作成」を選びます。検索ボックスに「RTX64」と入力すると、RTX64 Applicationテンプレートが表示されます(分類:Visual C++ → RTX64)。

テンプレートを選択して「次へ」を押すと、プロジェクト名・場所・ソリューション名を入力するダイアログが表示されます。入力後「作成」をクリックすると、次の設定ダイアログが開きます。
RTX64 Applicationウィザードの設定項目
| チェックボックス | 説明 | 推奨 |
|---|---|---|
| Supported String Convention | サポートされる文字列の規則 | Unicode、MultiByte、Ansi から選びます。Windows側のHMIアプリケーションと共有メモリ等で文字列データをやり取りする際、文字化けを防ぐためにWindows標準に合わせた Unicode を選択しておくのが現在の主流です。 |
| RT-TCP/IP support | 装置内でリアルタイムEthernet通信(例:独自プロトコルでのノード間通信)を行う場合に必須となります。 | リアルタイムTCP/IPスタックを使用する場合にチェックを入れます。 |
| RT Network Abstraction Layer support | リアルタイムネットワーク抽象化レイヤー(NAL)を使用するための設定 | 特定のNICに依存しない、より低遅延で決定論的なパケット処理を実装する際に利用します。 |
| Microsoft C Runtime support | CRTライブラリを使用可能にする。printf や malloc 等を使う場合は必須 | チェックする。 |
| RTX64 Vision support | GigE Visionカメラ等を用いたリアルタイム画像処理を行う場合に使用します。 | アライメント補正や外観検査などを、RT側でWindowsの遅延を受けずに処理したい場合に非常に強力なオプションです。 |
| Provide an RTSS program framework | ひな形コードを生成する | チェックする。 メインコードのみ作成されます |
「Provide a program framework」をオフにして「OK」を押すと、最小構成のRTX64プロジェクトが作成されます。

ステップ2:自動生成されるビルド構成を理解する
プロジェクトが作成されると、ソリューション構成に以下の4つが自動で追加されます。INtimeでは手動でビルド設定を分けていたものが、RTX64では最初から整理された状態で提供されます。
| 構成名 | 用途 | 出力バイナリ |
|---|---|---|
| RTSSDebug | RTSSプロセス(デバッグ) | .rtss(デバッグ情報付き) |
| RTSSRelease | RTSSプロセス(リリース) | .rtss |
| Debug | Windowsプロセス(デバッグ) | .exe(デバッグ情報付き) |
| Release | Windowsプロセス(リリース) | .exe |
RTSSプロセスとしてリアルタイム動作させるには RTSSDebug または RTSSRelease を選択してビルドします。Debug / Release はWindowsアプリとしてビルドするためのもので、RTSS機能(RtPrintf等)はここでは動作しません。
ステップ3:Hello World コードを書く
生成されたソースファイルに、最小限のHello Worldコードを書いてみましょう。INtimeの main() に相当するのが、RTX64の _RtapiProcessEntryCRT です。
int _tmain(int argc, _TCHAR * argv[])
{
// RtPrintf はRTSSプロセス内のコンソール出力関数
// INtime の printf に相当する
RtPrintf("Hello from RTSS!\n");
return 0;
}コードのポイント
- RtPrintf:RTSSプロセス内で使うコンソール出力関数。RTX64 Intervalウィンドウに出力されます。INtimeのprintfと同じ感覚で使えますが、RTSS環境専用です。
- UNDER_RTSS:RTSSDebug/RTSSReleaseビルド時に自動で定義されるマクロ。このマクロを使ってRTSS専用コードとWindows共通コードを切り替えられます。
ステップ4:ビルドして実行する
ビルド
ソリューション構成を RTSSRelease(または RTSSDebug)に切り替えて「ビルド」を実行します。成功すると、プロジェクトフォルダの RTSSRelease\ ディレクトリに プロジェクト名.rtss が生成されます。
RTSSプロセスの実行
RTSSプロセスは通常の .exe のようにダブルクリックでは実行できません。RTX64 Interval(RTX64の管理コンソール)から起動するか、コマンドラインから以下のように実行します。
RtssRun.exe "C:\Projects\HelloRtss\RTSSRelease\HelloRtss.rtss"
パスは必ず絶対パスで指定してください。RTSSプロセスは相対パスをサポートしていません(INtimeとの重要な違いです)。
実行すると、RTX64 IntervalウィンドウのログエリアにRtPrintfの出力が表示されます。
UNDER_RTSS で Windows/RTSS 共用コードを書く
INtimeでは「RTOSコードはRTOS側だけ」という割り切りが多かったと思いますが、RTX64ではWindowsとRTSSの両方でビルドできるコードを書くことができます。UNDER_RTSSマクロを活用すると、ひとつのソースファイルでRTSS専用処理とWindows共通処理を切り替えられます。
int _tmain(int argc, _TCHAR * argv[])
{
// UNDER_RTSS はRTSSビルド時に自動定義されるプリプロセッサマクロ
// RTSSビルドとWindowsビルドでコードを切り替えるのに使う
#ifdef UNDER_RTSS
RtPrintf("This code is running under RTSS.\n");
#else
printf("This code is running under Windows.\n");
#endif
return 0;
}この関数はRTSSDebug/RTSSReleaseビルドでは RtPrintf を、Debug/Releaseビルドでは printf を使います。共通ロジックをひとつのソースで管理できるため、保守性が高まります。
注意事項
- 絶対パスのみ:RTSSプロセス内でファイルや外部リソースを参照する場合、パスは必ず絶対パスで指定してください。相対パスはRTSSでは動作しません。
- CRTサポートの選択:ウィザードで「Microsoft C Runtime support」をオフにした場合、malloc/printf 等のCRT関数は使用できません。後から変更する場合はプロジェクトプロパティを直接編集します。
- $(Rtx64Platform)マクロ:プロジェクトのライブラリディレクトリには $(Rtx64Platform) というVSマクロが使われています。RTX64のインストールパスが変わった場合はここを更新します。
- Kill禁止:タスクマネージャーなどからRTSSプロセスを強制終了(Kill)するのは危険です。RTX64 Intervalから「Stop」でグレースフルシャットダウンしてください。
まとめ
- プロジェクト作成:VS → 「RTX64 Application」テンプレートを選択。INtimeの2段階ウィザードと異なり、1回のウィザードで完結する。
- 4つのビルド構成:RTSSDebug / RTSSRelease(RTSS用)、Debug / Release(Windows用)が自動生成される。
- エントリポイント:_RtapiProcessEntryCRT(CRTあり)または _RtapiProcessEntry(CRTなし)。INtimeの main() に相当。
- コンソール出力:RTSSプロセス内では printf の代わりに RtPrintf を使う。
- UNDER_RTSS:RTSSビルド時に自動定義されるマクロ。RTSSとWindowsでコードを切り替えるのに活用する。
- 絶対パス必須:RTSSプロセス内でのパス指定は絶対パスのみ有効。
RTXこんな感じです。デバック時、Windows用コードで動かして、関数の動きを確認できるのはいいですね!

コメント