RTAI入門(1) 何が出来るか?その1
「リアルタイム検査システムを作りたい。なるべく安く。しかも、短期間で。」
そんな案件を取ってきたとしましょう。
ここで言うリアルタイムとは、時間にすごく厳しいという意味です。たとえば、本当に生きのいいカブトムシだけを出荷するために、秒速5cm以上で走るカブトムシだけを選り分ける。こういう時に、リアルタイム検査システムでキッチリ秒速5cm以上かどうかを調べる必要があります。秒速4.999cmのカブトムシは残念ながらアウトです。こういう判定は、時間にルーズなシステムでは不可能です。
さて、景気のせいか、最近お客さんからの要求は厳しいものがあります。開発費はかけたくない。リピート費も抑えたい。
しかし厳しいとはいえ、こちらもプロです。何か実現方法を考えないといけません。まずリアルタイムシステムという事なので、リアルタイムOSを選定しましょう。費用的な面から、有償リアルタイムOSは除外ですね。使うならLinuxのリアルタイム派生が良さそうです。有名所では、RTAI、PREEMPT_RT、RT-Linuxなどなど。
まずやるべき事は、これらの比較です。
- 今回の案件で必要な機能が、すべて備わっているか?
- 技術的なサポートが得られそうか?情報源は豊富か?
比較の結果、コレを使おう!という事が決まったら、今度は実現方法の調査が待っています。
- 今回の案件で必要な機能を、具体的にどう実現したらいいのか?
この調査だけでも、かなりの時間がかかります。お客さんは早く早く!と言いますし、なかなか大変ですよね。
そこで今回からしばらく、RTAI入門という記事を書きます。今回のシリーズで分かるのは・・・
- RTAIには、どんな機能があるの?
- それらの機能は、具体的にどう使うの?
の2点です。これで、RTAIに関する調査時間が、ほんのちょっぴり短縮されるでしょう。
ちなみに、わたしがRTAIを選択したのは、RTAI-Labというツールが使えるからです。RTAIは、複数のPC間にまたがってリアルタイムタスクを走らせることが出来ます。そして、その機能によってRTAI-Labが作られています。この機能は、RTAIの特色と言えるでしょう。
さて今回は、「どんな機能があるの?」の部分をザックリと眺めましょう。
RTAI機能概観
なるべく短時間でRTAIの事を知るには、次の読み方がオススメです。
まず、「とってきた案件」に必要そうな機能は、なんとなくイメージされているでしょうか。そのイメージを元に、この章を見て、「これが関係あるのかな?」と目星を付けてください。
次に、来週以降の記事を読んで、関係ありそうな章だけをつまみ読みして下さい。基本的に独立していますから、どこから読んでもOKです。
RTAIの機能は「リアルタイム化」と「IPC」に大別される
リアルタイム化
リアルタイムシステムでは、まず間違いなく「定期的な処理」が入ります。1ms(千分の1秒)毎にカブトムシの位置を測定したり、といった感じです。
「1ms毎に何か処理をする、なんて簡単だよね?リアルタイムOSなんか要らないかも?」
そんな風に考えると痛い目に会います。1ms毎に処理をしなさい!と言われた時、リアルタイムOSと非リアルタイムOSではこう違います。
リアルタイムOS君「1ms毎にと言われたら、絶対に1ms毎にやるよ!なにか別の仕事してても、1ms毎にぜったい中断して、約束の処理をするよ!」
非リアルタイムOS君「1msか。まぁやっとくよ。でも、ボクも色々いそがしくってさ。別の仕事が入ったらそっち優先するかもね。だいじょうぶ、帳尻だけあわせておくから!」
こんな感じです。1ms毎に処理をしろと言われたら、絶対に1ms毎にやる。これがリアルタイムOSのうれしさです。まちがっても、10msサボったあとで、帳尻だけあわせるように10回連続で仕事をする、なんて事はありません。
(くわしくは、以前の記事「HILSの動作原理」の、一番最後の章をどうぞ。)
タスクのリアルタイム化:RTAIの機能で、Linuxのユーザープロセスをリアルタイム化できます。
タイマーによるトリガー:リアルタイム化したプロセスを、定期的にトリガーできます。
ハードウェア割り込み:RTAIの機能で、I/Oボードからのハードウェア割り込みを扱う事もできます。
IPC
リアルタイム化したプロセスは、それぞれ孤独に走り続ける事もできますが、時に協調動作したい事もあります。その時に必要なのがIPC ( Inter Process Communication )です(※1)。
メッセージ:リアルタイムタスク間で、数バイトのデータをやりとり出来ます。
メールボックス:リアルタイムタスク間で、いわゆるFIFOのような形のデータ授受が出来ます。
Net_RPC:UDP通信を使用して、複数のPC間でメッセージやメールボックスのやり取りが出来ます。
共有メモリ:リアルタイムタスク用にメモリを確保します。これをタスク間やプロセス間で共有する事も出来ます。
FIFO:メールボックスとほぼ同じです。メールボックスはあくまでリアルタイムタスク間でのやりとりですが、FIFOはリアルタイムタスクと、非リアルタイムタスクの間であってもやりとりできます。
セマフォ:いわゆるセマフォです。
(※1)正確にはInter Task Communicationとでも呼ぶべきなんでしょうが、細かい事は気にしない!
次回
次回は、「リアルタイム化」に関する機能説明を書きます。