応用情報技術者 2013年 春期 午後 問07
ワイヤレス充電ステーションに関する次の記述を読んで、設問1~4に答えよ。
G社は、携帯機器用のワイヤレス充電ステーション(以下、ステーションという)で稼働する組込みソフトウェアを開発している。
ワイヤレス充電とは、コネクタなどを介さずに充電する機能である。G社が開発しているのは、ステーションに内蔵された送電コイルに電流を流すことによって、携帯機器に内蔵された受電コイルに電流が発生し、携帯機器が充電されるというものである。
〔ステーションの概要〕
ステーションの主要部分は、送電コイルに流す電流を制御する送電回路部と、携帯機器との通信を行う近距離無線通信部である。近距離無線通信部は、充電テーブル上に携帯機器が置かれているかどうかを調べ、携帯機器が置かれている場合は、その充電状況を確認する。一定に充電できる携帯機器は1台である。
ステーションの外観を図1に、ステーションの動作状態と、各状態に応じて表示部に表示される内容を表1に示す。


〔携帯機器との通信〕
待機状態では、充電テーブル上に携帯機器が置かれているかどうかを調べるために、近距離無線通信部で携帯機器との通信を約1秒周期で試みる。通信に成功すると、携帯機器の情報を取得して、ステーション内のRAMに携帯機器情報として記録する。
携帯機器情報の構成項目を表2に示す。
〔残り充電時間の表示〕
充電動作状態では、携帯機器情報の電池残量割合の推移から、満充電になるまでの概算残り充電時間を表示部に表示する。残り充電時間は、携帯機器の電池残量の増分が充電時間に比例すると仮定して算出する。推移情報が不十分で残り充電時間を算出できない場合は “--:--” を表示する。
〔ステーションの組込みソフトウェア〕
開発する組込みソフトウェアのタスク一覧を、表3に示す。
タスクの優先度は1~4の4段階で、値が小さいほど優先度が高い。また、それぞれのタスクは異なる優先度をもつ。主電源スイッチを入れると、メインタスクと安全監視タスクが起動される。
組込みソフトウェアで使用する送電制御関数を、表4に示す。

メインタスク処理の流れ図を図2に示す。

〔安全設計〕
充電テーブル上に携帯機器の他に金属異物があると、金属異物に電流が流れて熱を帯び、発火などの危険性がある。異常発熱の検出は安全監視タスクが行うが、充電テーブル上に金属異物があっても、充電テーブルと接していない場合は発熱を検出できない。そこで、図2中の下欄②異常検出において、送電効率が規定値より低い状態が規定時間以上続いた場合も、異常として検出することとする。送電効率は、次の式で算出する。
送電効率(%) = 受電電力 ÷ 送電電力 × 100
設問1:電池残量割合が43.0%の携帯機器をステーションを使って充電したところ、10分経過した時点で電池残量割合が49.0%に変化した。このときの表示内容を答えよ。
電池残量割合が43.0%の携帯機器をステーションを使って充電したところ、10分経過した時点で電池残量割合が49.0%に変化した。このときの表示内容を答えよ。
模範解答
01:25
解説
解答の論理構成
- 充電中は「電池残量の増分が充電時間に比例」と仮定して残り時間を算出する
─ 【問題文】「残り充電時間は、携帯機器の電池残量の増分が充電時間に比例すると仮定して算出する。」 - 10 分で「43.0% → 49.0%」へ 6.0 % 増加した
─ 増分 6.0 % を得るのに 10 分かかった。 - 1 % 充電に要する時間
─
(1 分 40 秒) - 残りの充電量
─ 現在「49.0%」、満充電は 100%
─ 100 − 49.0 = 51.0 % が未充電。 - 残り時間
─ - 表示形式は “hh:mm”
─ 【問題文:表1】「表示形式は “hh:mm” とする。」 - 85 分 = 1 時間 25 分 → “01:25” と表示される。
誤りやすいポイント
- 6.0 % を 0.06 倍と勘違いし、単位換算を誤る。
- 10 分を時間単位(0.1667 h)に直して計算途中で桁を落とす。
- 表示形式を “1:25” や “01:25” としてコロンやゼロ埋めを誤記。
- 充電済み 49.0 % ではなく、充電残 51.0 % を使うことに気付かない。
FAQ
Q: 小数点以下の表示は必要ですか?
A: 表示形式が “hh:mm” と規定されているので分単位で切り捨てず、整数分に換算して “01:25” とします。
A: 表示形式が “hh:mm” と規定されているので分単位で切り捨てず、整数分に換算して “01:25” とします。
Q: 途中で充電速度が変わったらどうなりますか?
A: 問題では「増分が充電時間に比例」と仮定しているので、現時点までの平均速度をそのまま将来にも適用して概算を出します。
A: 問題では「増分が充電時間に比例」と仮定しているので、現時点までの平均速度をそのまま将来にも適用して概算を出します。
Q: “--:--” が表示されるのはどんな場合ですか?
A: 【問題文】「推移情報が不十分で残り充電時間を算出できない場合は “--:--” を表示する。」初回通信直後など、増分データが得られていないときです。
A: 【問題文】「推移情報が不十分で残り充電時間を算出できない場合は “--:--” を表示する。」初回通信直後など、増分データが得られていないときです。
関連キーワード: 線形予測, 残量推定, 充電速度, 時間換算, パーセント計算
設問2:表3について、(1)〜(3)に答えよ。
(1)a、bに入れる適切な数値を答えよ。
模範解答
a:4
b:2
解説
解答の論理構成
-
優先度の基本ルール
【問題文】では
“タスクの優先度は 1~4 の4段階で、値が小さいほど優先度が高い。また、それぞれのタスクは異なる優先度をもつ。”
と明示されています。したがって、4つのタスクに 1・2・3・4 が重複なく割り当てられる必要があります。 -
既に決まっている優先度
表3より
・“通信”タスクは 3
・“異常検出状態”タスクは 1
が固定です。残る数字は 2 と 4 です。 -
“安全監視”タスクの要求
“安全監視”は【問題文】で
“500 ミリ秒ごとに起動し、充電テーブル … 異常発熱を検知した場合は、異常検出状態タスクを起動する。”
とされており、安全確保のためになるべく早く CPU を得る必要があります。
“通信”タスク(優先度3)より高く、“異常検出状態”タスク(優先度1)よりは低い順位が最適です。よって 2 が割り当てられます。 -
“メイン”タスクの性質
“メイン”はステーション全体の制御を行いますが、開始直後に
“通信タスクを起動”
して結果を待たずに自らは待機や表示処理を行う流れです。もし“メイン”が“通信”より高優先度(2以下)だと、“通信”が動くタイミングが遅れ、1秒周期通信の要求を満たせません。したがって“メイン”は残る 4 が妥当です。 -
まとめ
・a(メインの優先度)= 4
・b(安全監視の優先度)= 2
誤りやすいポイント
- “安全監視”は500 ms周期だから低負荷と判断し、4を割り当ててしまう。周期が短い=リアルタイム性が高いのでむしろ優先度を上げるべきです。
- “メイン”を中心タスクだから最優先と考えて1を付けてしまう。リアルタイム OS では制御タスクより安全・異常処理が上位になります。
- “通信”より“安全監視”を低くしてしまい、検温より通信が先に走る状況を許してしまう。温度監視の遅延は安全上致命的です。
FAQ
Q: なぜ“メイン”を4にしても制御が成立するのですか?
A: “メイン”は表示やタスク起動などの非緊急処理が主体で、常にCPUを占有する設計ではありません。優先度4でも他タスクがアイドル時に確実に実行されます。
A: “メイン”は表示やタスク起動などの非緊急処理が主体で、常にCPUを占有する設計ではありません。優先度4でも他タスクがアイドル時に確実に実行されます。
Q: “安全監視”と“異常検出状態”が同時に走った場合はどうなりますか?
A: “異常検出状態”は 優先度1 なので“安全監視”(優先度2)より上位です。異常が発生すると“安全監視”が“異常検出状態”を起動し、自身はプリエンプトされ、即座に異常処理が走ります。
A: “異常検出状態”は 優先度1 なので“安全監視”(優先度2)より上位です。異常が発生すると“安全監視”が“異常検出状態”を起動し、自身はプリエンプトされ、即座に異常処理が走ります。
Q: “通信”タスクの優先度を2にし、“安全監視”を3にする案はダメですか?
A: その場合、500 ms周期の温度監視より通信が常に優先される可能性があり、安全要求を満たしません。温度検知が遅れるリスクがあるため不適切です。
A: その場合、500 ms周期の温度監視より通信が常に優先される可能性があり、安全要求を満たしません。温度検知が遅れるリスクがあるため不適切です。
関連キーワード: 優先度制御, プリエンプティブスケジューリング, リアルタイムOS, 安全監視
設問2:表3について、(1)〜(3)に答えよ。
(2)cに入れる適切な文字を解答群の中から選び、記号で答えよ。
解答群
ア:温度
イ:湿度
ウ:人感
模範解答
c:ア
解説
解答の論理構成
- 【問題文】表3の説明より
“安全監視タスク”は「500 ミリ秒ごとに起動し、充電テーブルに取り付けた c センサの値を読み込む。その結果、充電テーブルの異常発熱を検知した場合は、異常検出状態タスクを起動する。」と記載されています。 - 同じく【問題文】“安全設計”では「充電テーブル上に携帯機器の他に金属異物があると、金属異物に電流が流れて熱を帯び、発火などの危険性がある。」と説明し、異常の主体は“発熱”であると明示しています。
- 発熱を検知するセンサは温度センサが一般的かつ適切です。湿度センサや人感センサでは温度上昇を直接計測できません。
- 以上から、c に入る語は「温度」と判断でき、解答群「ア:温度」が正解となります。
誤りやすいポイント
- “充電テーブル”という語から環境条件を連想し、誤って「イ:湿度」を選択するケースがありますが、湿度では発熱を直接検出できません。
- “人が触れる危険性”をイメージして「ウ:人感」を選択する受験者もいますが、問題は無人でも発生する金属異物の発熱リスクに焦点を当てています。
- センサの役割が「安全監視」であることを見落とし、タスク名だけで判断してしまうとミスにつながります。必ず検知対象(発熱)を確認しましょう。
FAQ
Q: 温度センサ以外で発熱を検知する方法はありますか?
A: 赤外線センサやサーミスタアレイなども利用できますが、組込み機器ではコストと実装容易性から単純な温度センサが一般的です。
A: 赤外線センサやサーミスタアレイなども利用できますが、組込み機器ではコストと実装容易性から単純な温度センサが一般的です。
Q: “送電効率”による異常検出は安全監視タスクで行わないのですか?
A: 送電効率の監視は【問題文】図2中②異常検出でメインタスクが実施します。安全監視タスクは発熱だけを高速周期で監視します。
A: 送電効率の監視は【問題文】図2中②異常検出でメインタスクが実施します。安全監視タスクは発熱だけを高速周期で監視します。
Q: 500 ms ごとに温度センサを読む理由は何ですか?
A: 発熱は比較的ゆっくり進行するため、500 ms(0.5 秒)周期なら異常を十分早期に検出でき、処理負荷も抑えられるバランスの良い周期だからです。
A: 発熱は比較的ゆっくり進行するため、500 ms(0.5 秒)周期なら異常を十分早期に検出でき、処理負荷も抑えられるバランスの良い周期だからです。
関連キーワード: 温度センサ, 発熱検知, 安全監視, ポーリング周期, 異常検出
設問2:表3について、(1)〜(3)に答えよ。
(3)dに入れる適切な関数名を、表4から選んで答えよ。
模範解答
d:Stop_Power
解説
解答の論理構成
- まず、[動作状態の説明]に「“異常検出状態” は『異常発熱、充電効率の低下などの異常を検出し、充電動作を停止している状態』」と明記されています。
- 表3「異常検出状態」タスクの処理概要は、d 関数呼び出し ➔ “ERROR” 表示 ➔ 無限ループ、という流れです。したがって d には“充電動作を停止”させる関数が入らなければなりません。
- 表4の送電制御関数を確認すると
・“Start_Power”:「送電回路に電流を流し、送電を開始する。」
・“Stop_Power”:「送電回路の電流を遮断し、送電を停止する。」
・“Get_Watt”:「送電…電力値を…戻り値として返す。」
と定義されています。 - 異常時に必要なのは「送電回路の電流を遮断」して充電を停止する処理なので、表4の「“Stop_Power”」が条件を満たします。
- よって d に入る正しい関数名は「Stop_Power」です。
誤りやすいポイント
- “Start_Power” と “Stop_Power” を逆に選択する
「異常検出状態=何か新たな動作を開始」と誤解し、開始系の Start_Power を選びがちです。 - “Get_Watt” を選択してしまう
「異常時は電力値を測定するのでは?」と考えがちですが、異常は既に検出済み。ここで必要なのは測定ではなく送電停止です。 - 表1の説明を読み飛ばす
「充電動作を停止している状態」というキーワードを見落とすと、適切な関数を導けません。
FAQ
Q: 異常検出状態タスクではなぜ無限ループに入るのですか?
A: 異常が発生したまま送電を再開すると危険なので、利用者が電源を切るかリセットするまで動作を固定化し、安全を確保するためです。
A: 異常が発生したまま送電を再開すると危険なので、利用者が電源を切るかリセットするまで動作を固定化し、安全を確保するためです。
Q: “Get_Watt” はどこで使われますか?
A: 送電効率の計算時など、送電電力を取得する必要がある場面で使用します。異常検出状態タスクの目的とは異なります。
A: 送電効率の計算時など、送電電力を取得する必要がある場面で使用します。異常検出状態タスクの目的とは異なります。
Q: 「Stop_Power」を呼ぶタイミングは異常検出だけですか?
A: いいえ、正常終了時にもメインタスクが「Stop_Power」で送電を終了します。異常時も正常時も、送電停止処理は同じ関数で共通化されています。
A: いいえ、正常終了時にもメインタスクが「Stop_Power」で送電を終了します。異常時も正常時も、送電停止処理は同じ関数で共通化されています。
関連キーワード: 送電停止, 異常検出, 安全設計, 組込みソフトウェア
設問3:
図2中の下線①条件は、携帯機器情報のある構成項目を用いて判定する。判定条件を、適切な構成項目を使って10字以内で答えよ。
模範解答
機器IDがゼロ
解説
解答の論理構成
- 【問題文】の通り、メインタスクでは①条件で“STANDBY”を表示するかどうかを決めています。待機中とは「充電テーブル上に携帯機器が置かれるまで待機している状態」(表1「待機状態」の説明)です。
- 携帯機器が存在しないか認識できないかを判断する材料は、携帯機器情報に含まれる「機器 ID」です。表2には
「機器 ID … 充電テーブル上の携帯機器が認識できない場合は、ゼロが設定される。」
と明記されています。 - したがって、機器 ID がゼロならば“携帯機器なし”と判断し、待機状態(STANDBY)に遷移するのが自然です。
- 以上より、①条件で用いる判定は「機器IDがゼロ」となります。
誤りやすいポイント
- ステータスや電池残量割合を条件に選んでしまう
→ 満充電か否かは充電中かどうかを区別する情報であり、“機器が有るか無いか”の判断材料にはなりません。 - 「通信に成功したかどうか」を直接フラグで管理していると早合点する
→ 実際には通信タスクが携帯機器情報を設定し、その中の「機器 ID」がゼロか否かで判断します。 - 「受電電力が 0 mW なら携帯機器なし」と誤解する
→ 機器が置かれていても送電開始前は 0 mW になる可能性があるため誤判定になります。
FAQ
Q: ステータスが未定義(例:通信失敗)でも判定できますか?
A: できます。通信に失敗した場合は「機器 ID」がゼロに設定される設計なので、この判定だけで十分です。
A: できます。通信に失敗した場合は「機器 ID」がゼロに設定される設計なので、この判定だけで十分です。
Q: 複数台対応になった場合も同じ判定で良いですか?
A: 複数台対応では“認識できない機器”がどれかを識別する必要が生じるため、この単純判定だけでは不十分になります。個々の機器ごとに ID を持たせる設計拡張が必要です。
A: 複数台対応では“認識できない機器”がどれかを識別する必要が生じるため、この単純判定だけでは不十分になります。個々の機器ごとに ID を持たせる設計拡張が必要です。
Q: なぜ電池残量割合を使わないのですか?
A: 電池残量割合はあくまで“充電進度”の情報であり、機器が存在するかどうかの判断には直接結び付きません。「機器 ID」がゼロか否かが最も確実です。
A: 電池残量割合はあくまで“充電進度”の情報であり、機器が存在するかどうかの判断には直接結び付きません。「機器 ID」がゼロか否かが最も確実です。
関連キーワード: 組込みソフトウェア, 近距離無線通信, タスク優先度, 状態遷移, 異常検知
設問4:
図2中の下線②異常検出において、送電効率の算出に必要な受電電力は携帯機器情報の受電電力を用い、送電電力についてはあるソフトウェア処理によって得る。その処理内容を、20字以内で述べよ。
模範解答
Get_Watt関数を呼び出す
解説
解答の論理構成
- 異常検出では送電効率を算出します。問題文に「送電効率は、次の式で算出する。 送電効率(%) = 受電電力 ÷ 送電電力 × 100」とあります。
- 受電電力は「携帯機器情報の受電電力」をそのまま利用するよう指定されています。
- 残る送電電力を取得する方法を探すと、【表4 送電制御関数】に「“Get_Watt” 送電回路で送電している電力値をミリW単位で算出し、戻り値として返す」と記載されています。
- したがって送電電力を得る最適手段は Get_Watt を呼び出す処理です。
- 以上より、20字以内で表現する処理内容は「Get_Watt関数を呼び出す」となります。
誤りやすいポイント
- 送電電力を「Start_Power」や「Stop_Power」で取得できると勘違いする
→ 両者は開始・停止制御のみで電力値は返しません。 - 受電電力も Get_Watt で取得すると思い込む
→ 受電電力は携帯機器情報に既に保持されています。 - 送電効率計算において単位(%、mW)をそろえず計算誤差を招く
FAQ
Q: Get_Watt は常に正確な値を返すのですか?
A: 仕様上は送電回路から算出した実測値を返しますが、センサ精度や計測周期によって誤差が出る可能性があります。安全側に設計して閾値を設定してください。
A: 仕様上は送電回路から算出した実測値を返しますが、センサ精度や計測周期によって誤差が出る可能性があります。安全側に設計して閾値を設定してください。
Q: Get_Watt の呼出し頻度に制限はありますか?
A: 問題文に制限は示されていませんが、異常検出のたびに呼び出す想定です。過剰呼出しは CPU 負荷を増やすため、必要最小限が望ましいです。
A: 問題文に制限は示されていませんが、異常検出のたびに呼び出す想定です。過剰呼出しは CPU 負荷を増やすため、必要最小限が望ましいです。
Q: 送電効率低下の閾値はどこで決めるのですか?
A: 本問では「規定値より低い状態が規定時間以上続いた場合」とだけ示されています。実装時にはハードウェア特性と安全規格を考慮して閾値・時間を設定します。
A: 本問では「規定値より低い状態が規定時間以上続いた場合」とだけ示されています。実装時にはハードウェア特性と安全規格を考慮して閾値・時間を設定します。
関連キーワード: 送電効率, Get_Watt, ミリワット測定, 異常検出ロジック, 組込み関数 호출


