エンベデッドシステムスペシャリスト 2009年 午後1 問02
マイコン制御による温水洗浄機能付き便座(以下、温水便座という)に関する次の記述を読んで、設問1~3に答えよ。
A社では、一人暮らしの高齢者に配慮した温水便座を開発することになった。この温水便座は、これまでの製品に、人の動作から異常状態を検出して緊急通報する機能を追加したものである。温水便座のハードウェア構成要素の機能を表1に示す。

これまでふたの開状態を検出するセンサと、ふたの閉状態を検出するセンサを用いてふたの開閉を検出していたが、コストダウンの要求から一つのふた開閉検出センサで、ふたの開閉を検出することにした。ふたの開閉状態とふた開閉検出センサの関係を図1に示す。ふたは、0度のふた閉状態から最大120度のふた開状態まで動く。
なお、ふた開閉ステッピングモータは正転、逆転方向ともに120個の駆動パルスで1回転し、ふた開閉ステッピングモータが1回転すると、ふたは2度の角度分、ふた開状態又はふた閉状態の方向へ動く。

温水便座の機能を表2に示す。

温水便座の機能を実現する温水便座の状態遷移図を図2に、温水便座のタスク一覧を表3に示す。
設問1:温水便座の仕様について検討する。
設問1(1)
問題文を見る模範解答
a:人検出センサOFF
b:着座センサON
c:着座センサOFF
d:洗浄開始スイッチON
e:洗浄停止スイッチON
f:洗浄停止と水温制御停止
解説
解答の導き方
-
ふた開状態からふた閉状態への遷移表2には、ふたの自動開閉について「人検出センサがOFFのときふたを閉じる」とあります。したがって、この遷移条件は 人検出センサOFF です。
-
ふた開状態から着座状態への遷移着座状態になるのは、便座に人が座ったときです。着座センサは、人が座ると ON になります。また、表2では着座センサが ON のときに洗浄水の温度制御を行うため、遷移条件は 着座センサON、遷移時の処理は図2にあるとおり水温制御開始です。
-
着座状態からふた開状態への遷移着座状態を終えるのは、便座から腰を離したときです。着座センサはそのときOFFになるため、遷移条件は 着座センサOFF です。着座状態で行っていた水温制御も、この遷移時に停止します。
-
着座状態から洗浄状態への遷移表2の洗浄機能では、着座センサが ON の状態で洗浄開始スイッチの ON を検出すると、洗浄水の噴出を開始します。したがって、遷移条件は 洗浄開始スイッチON です。
-
洗浄状態から着座状態への遷移洗浄停止スイッチの ON を検出すると洗浄水の噴出を停止します。着座状態へ戻る遷移なので、着座センサは引き続き ON のままです。遷移条件は 洗浄停止スイッチON となります。
-
洗浄状態からふた開状態への遷移この遷移は、洗浄停止スイッチを押した場合ではなく、着座センサがOFFになった場合に起きます。着座センサがOFFなら洗浄水の噴出を停止する必要があり、着座状態も終了するため水温制御も停止します。よって、遷移時の処理は 洗浄停止と水温制御停止 です。
誤りやすいポイント
- ふた開状態からふた閉状態への条件を、ふた開閉検出センサの状態と取り違えないようにします。表2の自動開閉機能で使われる条件は人検出センサです。
- 着座状態から洗浄状態への遷移条件は、着座センサが ON であることだけではありません。洗浄開始スイッチの ON が必要です。
- 洗浄状態から着座状態へ戻る場合と、ふた開状態へ戻る場合では、遷移条件が異なります。前者は洗浄停止スイッチの ON、後者は着座センサのOFFです。
- 洗浄状態からふた開状態へ移るときは、洗浄停止だけでなく水温制御も停止します。一方、着座状態へ戻るときは着座状態が続くため、水温制御を停止する遷移ではありません。
FAQ
Q: 着座センサがOFFになったとき、なぜ水温制御も停止するのですか?
A: 表2では、水温制御を行う条件が着座センサ ON です。着座センサがOFFになって着座状態を離れるため、水温制御も止めます。
A: 表2では、水温制御を行う条件が着座センサ ON です。着座センサがOFFになって着座状態を離れるため、水温制御も止めます。
Q: 洗浄停止スイッチを押したときも、水温制御を停止しますか?
A: 図2では洗浄停止スイッチ ON によって洗浄状態から着座状態へ戻ります。着座状態は続くため、この遷移では洗浄を停止し、水温制御は継続します。
A: 図2では洗浄停止スイッチ ON によって洗浄状態から着座状態へ戻ります。着座状態は続くため、この遷移では洗浄を停止し、水温制御は継続します。
Q: 人検出センサと着座センサは、遷移条件としてどう使い分けますか?
A: 人検出センサはふたの自動開閉に関係し、着座センサは着座状態への遷移や洗浄・水温制御の開始・停止に関係します。
A: 人検出センサはふたの自動開閉に関係し、着座センサは着座状態への遷移や洗浄・水温制御の開始・停止に関係します。
関連キーワード: 状態遷移図、センサ入力、スイッチ入力、状態依存制御、アクチュエータ制御
設問1(2)
問題文を見るふたの開閉制御仕様について検討する。
(a) ふたを開けるとき、ふた開閉検出センサがOFFからONになってから、ふたを更に120度の位置まで開くには、ふた開閉ステッピングモータに幾つの駆動パルスを与えればよいか。整数で答えよ。
(b) 図2に示す掃除可能状態からふた閉状態への状態遷移時におけるふた閉処理において、ふた開閉検出センサがOFFのとき、ふたの開閉制御はどのようにすべきか。45字以内で述べよ。また、その理由を40字以内で述べよ。
模範解答
(a):6840
(b):制御:ふた開閉検出センサがONになるまでふたの開動作を行った後、ふたの閉動作を行う。
理由:ふたが6度未満のどの位置で停止しているのか検出できないから
解説
解答の導き方
(a)
図1では、ふた開閉検出センサは、ふたが「6~120度」の範囲にあるとONになり、「0~6度未満」ではOFFになります。したがって、ふたを開ける途中でセンサがOFFからONに変わった時点では、ふたは6度の位置にあります。
設問で求められているのは、その位置から120度の位置まで開くための駆動パルス数です。必要な角度は、
です。
本文には、ふた開閉ステッピングモータが「120個の駆動パルスで1回転」し、1回転でふたが「2度」動くとあります。つまり、ふたを2度動かすのに120個の駆動パルスが必要です。114度動かすパルス数は、
となります。
(b)
図2では、掃除可能状態からふた閉状態へ移るときに、ふたを閉じる処理を行います。掃除可能状態ではふたを手動で開閉でき、任意の位置で停止できるため、センサがOFFでも、ふたが閉じた位置にあるとは限りません。
図1では、センサがOFFになる範囲は「0~6度未満」です。この範囲内では、センサの状態だけからふたの位置を特定できません。そこで、まずふたを開く方向に動かし、センサがONになるまで動作させます。ONになれば、センサがONになる範囲に入ったことを確認できます。その後、閉じる方向に動かせば、ふたを閉じる制御を行えます。
したがって、ふた開閉検出センサがOFFのときは、センサがONになるまでふたを開く動作を行ってから、ふたを閉じる動作を行います。理由は、OFFの状態だけでは、ふたが6度未満のどの位置にあるのか分からないためです。
誤りやすいポイント
- センサがOFFになった位置を、ふたが完全に閉じた位置だと考えないでください。OFFの範囲は閉じた位置だけでなく、0度から6度未満までを含みます。
- (a)では、ふた全体を0度から120度まで動かすパルス数ではなく、センサがONになった位置から120度まで動かすパルス数を求めます。
- モータの1回転でふたが動く角度は2度です。駆動パルス数を角度に換算するときは、この関係を使います。
FAQ
Q: (a)で、センサがONになった位置を6度として計算するのはなぜですか?
A: 図1では、センサがOFFの範囲が0~6度未満、ONの範囲が6~120度と示されているためです。OFFからONに変わる境界を6度として、そこから120度までの角度を求めます。
A: 図1では、センサがOFFの範囲が0~6度未満、ONの範囲が6~120度と示されているためです。OFFからONに変わる境界を6度として、そこから120度までの角度を求めます。
Q: (b)で、センサがOFFのときに閉じる方向へ動かすのではいけないのですか?
A: OFFだけでは、ふたが閉じた位置にあるのか、6度未満の途中にあるのかを判別できません。まず開く方向へ動かしてセンサがONになる位置を確認し、その後に閉じる動作へ移ります。
A: OFFだけでは、ふたが閉じた位置にあるのか、6度未満の途中にあるのかを判別できません。まず開く方向へ動かしてセンサがONになる位置を確認し、その後に閉じる動作へ移ります。
Q: ふたがセンサONの範囲に入った後は、どのように制御できますか?
A: センサの状態によって、ふたが6~120度の範囲にあると分かります。その範囲から閉じる方向へ動かすことで、ふたを閉じる制御を行えます。
A: センサの状態によって、ふたが6~120度の範囲にあると分かります。その範囲から閉じる方向へ動かすことで、ふたを閉じる制御を行えます。
関連キーワード: ステッピングモータ、駆動パルス、角度換算、位置検出、基準位置
設問2:温水便座のソフトウェア設計について検討する。
設問2(1)
問題文を見るリアルタイムOSを採用した理由に関する次の記述中のg、hに入れる適切な字句を答えよ。
図2に示す温水便座の状態遷移をソフトウェアで実現するとき、g状態において、状態遷移条件の検出処理と洗浄水噴出力の制御処理やhの制御処理、及びタイマ処理を同時に実行する必要がある。よってリアルタイムOSを採用することにした。
模範解答
g:洗浄
h:洗浄水温度
解説
解答の導き方
-
洗浄状態では、洗浄状態から別の状態へ移る条件も検出する必要があります。表3では、状態遷移条件検出タスクが10ミリ秒周期でセンサとスイッチの状態を読み取り、変化を検出するとメインタスクへ通知するとあります。そのため、洗浄水を噴出している間も状態遷移条件の検出処理が続きます。
-
さらに、表3では洗浄水噴出力制御タスクが100ミリ秒周期で噴出力設定スイッチを読み取り、水噴出ポンプを制御します。また、洗浄水温度制御タスクは、メインタスクから水温制御停止依頼を受けるまで、200ミリ秒周期で水温設定スイッチと水温センサを読み取り、ヒータを制御します。図2では、洗浄状態へ移る前の着座状態への遷移時に水温制御が開始され、洗浄状態から着座状態へ戻るときに洗浄停止が行われます。したがって、洗浄状態では水温制御も継続しています。
-
これらの処理に加えて、洗浄水噴出力制御タスクと洗浄水温度制御タスクは、表3にあるタイマタスクの時間計測機能を利用します。つまり洗浄状態では、状態遷移条件の検出、洗浄水噴出力の制御、洗浄水温度の制御、タイマ処理を同時に進める必要があります。このため、gに入るのは「洗浄」です。また、hに入るのは「洗浄水温度」です。
誤りやすいポイント
- 洗浄状態では噴出力制御だけを行うと考えないようにします。水温制御は着座状態で開始され、停止依頼があるまで続きます。
- 状態遷移条件の検出処理は、状態が変わる瞬間だけ実行する処理ではありません。表3では10ミリ秒周期で起動されます。
- hには「ヒータ」ではなく、制御対象を表す「洗浄水温度」が入ります。ヒータは洗浄水温度を調節するための構成要素です。
FAQ
Q: 洗浄水温度制御は、洗浄開始と同時に始まるのですか?
A: 図2では、着座状態に入るときに水温制御開始が行われます。洗浄開始より前から水温制御が動作しており、洗浄状態でも停止依頼までは継続します。
A: 図2では、着座状態に入るときに水温制御開始が行われます。洗浄開始より前から水温制御が動作しており、洗浄状態でも停止依頼までは継続します。
Q: タイマタスクは、なぜ同時に実行する処理に含まれるのですか?
A: 洗浄水噴出力制御タスクと洗浄水温度制御タスクが、それぞれ周期的な処理のためにタイマタスクの時間計測機能を利用するからです。
A: 洗浄水噴出力制御タスクと洗浄水温度制御タスクが、それぞれ周期的な処理のためにタイマタスクの時間計測機能を利用するからです。
Q: リアルタイムOSが必要とされる理由は何ですか?
A: 周期の異なる複数の処理や状態遷移の検出を、互いの処理を妨げず、必要なタイミングで進める必要があるためです。
A: 周期の異なる複数の処理や状態遷移の検出を、互いの処理を妨げず、必要なタイミングで進める必要があるためです。
関連キーワード: リアルタイムOS、周期処理、状態遷移、並行処理、タイマ管理
設問2(2)
問題文を見るタイマタスクに時間の計測依頼を行うタスクは三つある。その三つのタスクを表3中に示すタスク名で答えよ。
模範解答
①:メイン
②:洗浄水温度制御
③:洗浄水噴出力制御
解説
解答の導き方
まず、表3の「タイマ」タスクの役割を確認します。このタスクは「ほかのタスクから依頼された時間を計測」し、依頼された時間が経過すると依頼元へ通知します。したがって、タイマタスクに時間計測を依頼するのは、一定時間の経過を知る必要があるタスクです。
-
図2では、ふた開状態、着座状態、洗浄状態が「一定時間経過」したときに緊急通報状態へ遷移します。メインタスクは図2の状態遷移を制御するため、各状態にとどまった時間を把握する必要があります。この時間の計測を依頼するタスクは「メイン」です。
-
表3の「洗浄水温度制御」タスクは、タイマタスクの時間計測機能を使って「200ミリ秒周期」で水温設定スイッチと水温センサを読み取ります。よって、このタスクも時間計測を依頼します。
-
表3の「洗浄水噴出力制御」タスクは、タイマタスクの時間計測機能を使って「100ミリ秒周期」で噴出力設定スイッチを読み取ります。したがって、このタスクも時間計測を依頼します。
なお、「状態遷移条件検出」タスクも「10ミリ秒周期」で起動されますが、表3ではリアルタイムOSのタイマ機能を利用すると説明されています。タイマタスクに時間計測を依頼するタスクとは区別します。
誤りやすいポイント
- 「状態遷移条件検出」タスクを、周期起動されるという理由だけで答えに含めないようにします。このタスクはリアルタイムOSのタイマ機能を利用します。
- 「メイン」は表3の説明にタイマタスクへの依頼が直接書かれていません。しかし、図2の状態遷移条件には状態が一定時間経過したことが含まれ、メインタスクが状態遷移を制御することから、時間計測が必要だと判断できます。
- タイマタスクを使う周期の長さだけで判断せず、時間計測を必要とする各タスクの処理内容を確認します。
FAQ
Q: 「メイン」が時間を計測する必要があるのはなぜですか?
A: 図2には、ふた開状態、着座状態、洗浄状態が一定時間続いた場合の状態遷移があります。メインタスクが状態遷移を制御するため、状態の継続時間を把握する必要があります。
A: 図2には、ふた開状態、着座状態、洗浄状態が一定時間続いた場合の状態遷移があります。メインタスクが状態遷移を制御するため、状態の継続時間を把握する必要があります。
Q: 「状態遷移条件検出」タスクは、なぜ該当しないのですか?
A: このタスクは10ミリ秒周期で起動されますが、表3ではリアルタイムOSのタイマ機能を利用するとされています。ほかのタスクから依頼された時間を計測するタイマタスクとは別の仕組みです。
A: このタスクは10ミリ秒周期で起動されますが、表3ではリアルタイムOSのタイマ機能を利用するとされています。ほかのタスクから依頼された時間を計測するタイマタスクとは別の仕組みです。
Q: 200ミリ秒周期と100ミリ秒周期は、何をするための時間ですか?
A: 洗浄水温度制御では水温設定スイッチと水温センサを読み取り、洗浄水噴出力制御では噴出力設定スイッチを読み取るための周期です。
A: 洗浄水温度制御では水温設定スイッチと水温センサを読み取り、洗浄水噴出力制御では噴出力設定スイッチを読み取るための周期です。
関連キーワード: タイマタスク、周期処理、リアルタイムOS、タスク間通信、状態遷移
設問2(3)
問題文を見る洗浄状態から緊急通報状態へ遷移するとき、メインタスクが三つのタスクへ処理依頼をする。その三つのタスクを表3中に示すタスク名で答えよ。
模範解答
①:洗浄停止処理
②:洗浄水温度制御
③:緊急通報
解説
解答の導き方
-
まず、図2で洗浄状態から緊急通報状態へ遷移するときの処理を確認します。遷移時には「洗浄停止と水温制御停止及び緊急通報」を行います。したがって、メインタスクが依頼する処理は、この三つに対応するものです。
-
表3で「洗浄停止」を担当するタスクを確認すると、メインタスクから洗浄停止依頼を受けて、洗浄水の噴出を停止し、洗浄ノズルを引き込む「洗浄停止処理」です。
-
「水温制御停止」は、洗浄水温度制御タスクの処理内容に対応します。このタスクは、メインタスクから水温制御停止依頼を受けるまで制御を継続するため、緊急通報状態へ遷移する際に停止依頼を受けます。
-
「緊急通報」は、電話回線を介して緊急通報を送信する「緊急通報」タスクが担当します。
以上から、メインタスクが依頼する三つのタスクは、洗浄停止処理、洗浄水温度制御、緊急通報です。なお、洗浄停止処理タスクは、噴出力制御停止を洗浄水噴出力制御タスクへ依頼します。しかし、これは洗浄停止処理タスクからの依頼であり、設問で問われているメインタスクからの三つの依頼とは区別します。
誤りやすいポイント
- 「水温制御停止」を、洗浄水温度制御タスクとは別の専用停止タスクがあると考えないようにします。表3では、洗浄水温度制御タスクが開始依頼と停止依頼の両方を受けます。
- 洗浄停止処理タスクから依頼される洗浄水噴出力制御タスクを、メインタスクが直接依頼する三つのタスクに含めないようにします。
- 図2の遷移時の処理にある三つの動作を、表3のタスクの役割と一つずつ対応させます。
FAQ
Q: 洗浄停止処理タスクが洗浄水噴出力制御タスクにも依頼するのに、なぜ後者は答えに含まれないのですか?
A: 設問が尋ねているのは、状態遷移時にメインタスクが依頼するタスクです。洗浄水噴出力制御タスクへの依頼は、洗浄停止処理タスクから行われます。
A: 設問が尋ねているのは、状態遷移時にメインタスクが依頼するタスクです。洗浄水噴出力制御タスクへの依頼は、洗浄停止処理タスクから行われます。
Q: 水温制御を止める処理は、洗浄停止処理タスクが行うのですか?
A: いいえ。表3では、洗浄停止処理タスクは洗浄水の噴出停止などを担当します。水温制御の停止は、洗浄水温度制御タスクがメインタスクから停止依頼を受けて行います。
A: いいえ。表3では、洗浄停止処理タスクは洗浄水の噴出停止などを担当します。水温制御の停止は、洗浄水温度制御タスクがメインタスクから停止依頼を受けて行います。
関連キーワード: 状態遷移、タスク分割、タスク間通信、制御タスク、リアルタイムOS
設問3:温水便座の仕様追加要求について検討する。
温水便座に付いている操作スイッチのほかに、リモコンによる操作を可能にする仕様追加要求が発生した。リモコンには、緊急通報有効スイッチと掃除スイッチを除き、温水便座に付いている操作スイッチと同様な操作スイッチを設ける。リモコンは操作スイッチの変化を検出すると、その操作をしたスイッチを含めてすべてのスイッチの情報を、スイッチ情報として赤外線通信で温水便座へ送信する。温水便座は、着座センサがONのときだけリモコンのスイッチ情報を有効とする。このとき温水便座は、リモコンからのスイッチ情報を一度受信すると、温水便座の緊急通報有効スイッチ以外のすべてのスイッチ操作を無効とする。この無効状態は着座センサのOFFで解除される。そこで、温水便座のタスク構成とタスク間通信の変更内容について検討した。その結果、リモコンとの通信処理を行う赤外線通信タスクと、この赤外線通信タスクから受けたリモコンのスイッチ情報を、着座センサがONのときだけ該当するタスクへ通知する情報振分けタスクを追加することにした。また、メインタスクは変更しない方針とした。
設問3(1)
問題文を見る赤外線通信タスクから通知を受けた情報振分けタスクは、表3中に示す三つのタスクへ情報を振り分けて通知し、更にこの三つのタスクの処理内容を一部変更することにした。一つは洗浄水温度制御タスクである。ほかの二つのタスクは何か。表3中に示すタスク名で答えよ。
模範解答
①:状態遷移条件検出
②:洗浄水噴出力制御
解説
解答の導き方
この設問では、情報振分けタスクがリモコンのスイッチ情報を通知する三つのタスクのうち、洗浄水温度制御タスク以外の二つを特定します。考えるポイントは、リモコンのどのスイッチ情報を、どの処理で使うかです。
まず、リモコンには緊急通報有効スイッチと掃除スイッチを除く操作スイッチがあり、リモコンで操作されたスイッチを含む情報が温水便座へ送られます。洗浄水温度の設定情報は、設問文にあるとおり洗浄水温度制御タスクで使います。
次に、洗浄開始スイッチと洗浄停止スイッチの操作は、洗浄を開始・停止する状態遷移の条件です。表3では、状態遷移条件検出タスクが「状態遷移条件となるセンサとスイッチの内容を読み取り」、変化を検出するとメインタスクへ通知します。したがって、リモコンからの洗浄開始・停止操作を状態遷移に反映するため、情報振分けタスクは状態遷移条件検出タスクにも情報を通知する必要があります。
また、リモコンには噴出力設定スイッチもあります。表3では、洗浄水噴出力制御タスクが噴出力設定スイッチの内容を読み取り、水噴出ポンプを制御します。そのため、リモコンからの噴出力設定を反映するには、洗浄水噴出力制御タスクにも通知が必要です。
以上から、洗浄水温度制御タスク以外の二つは、状態遷移条件検出タスクと洗浄水噴出力制御タスクです。
誤りやすいポイント
- 洗浄開始・停止スイッチの操作を、洗浄開始処理タスクや洗浄停止処理タスクが直接検出すると考えないようにします。表3では、スイッチの変化を検出してメインタスクへ通知するのは状態遷移条件検出タスクです。
- 噴出力設定は洗浄開始・停止の状態遷移条件ではありません。設定値を読み取り、水噴出ポンプを制御するタスクを選びます。
- 洗浄水温度制御タスクだけに注目しないようにします。リモコンのスイッチ情報には、状態遷移に使う情報と、噴出力制御に使う情報も含まれます。
FAQ
Q: 洗浄開始スイッチや洗浄停止スイッチの情報を、洗浄開始処理タスクや洗浄停止処理タスクではなく、状態遷移条件検出タスクに通知するのはなぜですか?
A: これらのスイッチ操作は状態遷移の条件として検出され、メインタスクに通知されるためです。洗浄開始処理や洗浄停止処理は、メインタスクから依頼を受けた後の処理を担当します。
A: これらのスイッチ操作は状態遷移の条件として検出され、メインタスクに通知されるためです。洗浄開始処理や洗浄停止処理は、メインタスクから依頼を受けた後の処理を担当します。
Q: 噴出力設定スイッチの情報は、なぜ洗浄水噴出力制御タスクに通知するのですか?
A: このタスクが噴出力設定スイッチの内容を読み取り、その設定に応じて水噴出ポンプを制御するためです。
A: このタスクが噴出力設定スイッチの内容を読み取り、その設定に応じて水噴出ポンプを制御するためです。
Q: 三つのタスクすべてがスイッチの変化を検出するのですか?
A: それぞれの役割に応じて必要な情報を受け取ります。状態遷移条件検出タスクは状態遷移に関わるスイッチ情報を扱い、各制御タスクは水温や噴出力の設定情報を制御に使います。
A: それぞれの役割に応じて必要な情報を受け取ります。状態遷移条件検出タスクは状態遷移に関わるスイッチ情報を扱い、各制御タスクは水温や噴出力の設定情報を制御に使います。
関連キーワード: タスク間通信、状態遷移、入力イベント、周期処理、組込み制御
設問3(2)
問題文を見る(1)における洗浄水温度制御タスクの変更内容を示す次の記述中のi~kに入れる適切な字句を答えよ。
リモコンから受信した設定水温を格納する変数(以下、変数tmpという)とリモコンからの制御状態であることを示す変数(以下、変数stsという)を追加する。洗浄水温度制御タスクは、情報振分けタスクから通知されると、変数tmpにリモコンからの設定水温を格納して、変数stsに1を格納する。洗浄水温度制御タスクは、iタスクから通知を受けるごとに、変数stsが1であれば、変数tmpの内容で洗浄水の温度を制御する。変数stsが1以外であれば、jの内容を読み取り、その温度に洗浄水の温度を制御する。変数stsは、温水便座の電源が投入されて最初に実行される初期化処理を含め、ほかの処理で初期化されていないことから、洗浄水温度制御タスクはメインタスクからのk依頼で、変数stsに1以外を格納する。
模範解答
i:タイマ
j:水温設定スイッチ
k:水温制御開始
解説
解答の導き方
この設問では、リモコンから受け取った設定水温と、温水便座本体の水温設定スイッチのどちらを使うかを、洗浄水温度制御タスクがどう切り替えるかを考えます。
-
表3によると、洗浄水温度制御タスクは、タイマタスクの時間計測機能を使って200ミリ秒周期で処理します。したがって、タスクが周期的に処理を行うきっかけとなる通知元は「タイマ」タスクです。これが[i]に入ります。
-
リモコンの設定水温は、情報振分けタスクから通知を受けたときに変数tmpへ格納されます。以後、周期ごとの処理では、変数stsが1なら、この保存済みの設定水温を使います。
-
変数stsが1以外の場合は、本体側の水温設定を使う必要があります。表3では、周期的な温度制御の際に「水温設定スイッチと水温センサの内容を読み取り」とあります。このうち、制御目標となる温度の設定値を読み取るのは「水温設定スイッチ」です。これが[j]に入ります。
-
変数stsは初期化処理を含め、ほかの処理で初期化されていません。そのため、リモコン設定を使う状態を示す値が残ったり、初期値が未定義だったりする可能性があります。洗浄水温度制御タスクを開始するときに、リモコン設定を使う状態ではないことを示す必要があります。表3にある開始依頼は「水温制御開始依頼」なので、これが[k]に入ります。この依頼を受けたとき、変数stsに1以外を格納します。
誤りやすいポイント
- [i]を「状態遷移条件検出」としないようにします。状態遷移条件検出タスクはセンサやスイッチの変化を検出してメインタスクへ通知するタスクです。水温制御の周期処理は、表3でタイマタスクの時間計測機能を使うとされています。
- [j]は水温センサではありません。水温センサは現在の洗浄水の温度を測るもので、設定目標を読み取るのは水温設定スイッチです。
- [k]は「水温制御停止」ではありません。リモコン設定を使わない状態に戻すタイミングは、洗浄水温度制御タスクが動き始めるときです。
- 変数stsに格納する値は「1以外」と指定されています。具体的な値を0と決めつけないようにします。
FAQ
Q: リモコンから設定水温を受け取るたびに、洗浄水温度制御タスクが直ちに温度制御するのですか?
A: 受信時には設定水温を変数tmpに格納し、変数stsを1にします。実際の周期的な温度制御は、タイマから通知を受けるごとに行います。
A: 受信時には設定水温を変数tmpに格納し、変数stsを1にします。実際の周期的な温度制御は、タイマから通知を受けるごとに行います。
Q: なぜ水温制御開始時に変数stsを1以外にするのですか?
A: 変数stsはほかの処理で初期化されていないためです。開始時にリモコン設定を使わない状態にしておけば、変数tmpに古い設定が残っていても、本体の水温設定スイッチの設定が使われます。
A: 変数stsはほかの処理で初期化されていないためです。開始時にリモコン設定を使わない状態にしておけば、変数tmpに古い設定が残っていても、本体の水温設定スイッチの設定が使われます。
Q: 変数stsに格納する値は、必ず0ですか?
A: いいえ。設問では、リモコン設定を使う状態を示す1以外の値とされています。
A: いいえ。設問では、リモコン設定を使う状態を示す1以外の値とされています。
関連キーワード: 周期処理、タイマ、状態変数、タスク間通信、フィードバック制御





