応用情報技術者 2018年 秋期 午後 問07
カードを使用した電子扉システムの設計に関する次の記述を読んで、設問1~3に答えよ。
E社は、電子錠を開発している会社である。E社では、RFIDタグを内蔵したカード(以下、入退室カードという)を使用して、扉の電子錠を制御するシステム(以下、電子扉システムという)を開発することになった。
電子扉システムは企業向けであり、従業員ごとに個別の入退室カードを配布して、従業員の入退室管理に用いる。
〔電子システムの構成〕
電子扉システムは、扉、カードリーダ、制御部などから成る電子扉ユニットと、各電子扉ユニットとLANで接続されたサーバから構成される。電子扉システムの構成を図1に示す。
・ドアクローザは、扉の上部に有り、内蔵するばねの力で扉を自動的に閉める。
・レバーは扉の室内側と室外側に有り、電子錠で開錠/施錠される。開錠状態では、レバーを下に回して扉を開けることができ、手を放すとレバーは元に戻り扉は閉まる。施錠状態では、扉は開けられない。また、扉を開けたまま施錠することができ、このときには扉が閉まると扉を開けることができなくなる。
・カードリーダは、室内側と室外側に取り付けられている。
・電子扉ユニットには、扉識別コードが設定されている。

〔電子扉ユニットのハードウェア構成〕
電子扉ユニットのハードウェア構成を図2に示す。

・扉識別コードは、電子扉ユニットごとに割り当てられ、制御部が保持する。
・入退室カードには、カードごとに割り当てられたカード識別コード、有効期限などの情報を格納する。
・制御部は、MPUを内蔵しており、各ハードウェアを制御する。
・カードリーダは、室内側及び室外側に1台ずつ設置し、室内側を示すコードと、室外側を示すコード(以下、リーダ設置区分コードという)をそれぞれ割り当てる。カードリーダは、入退室カードの情報を読み込む。
・開閉センサは、扉が開いたこと及び扉が閉まったことを検出する。
・電子ブザーは、単発音の許可音・エラー音を発生したり、連続音の警告音を鳴動したりする。
・電子錠は扉のレバーを開錠/施錠する。
・LANインタフェースは、LANに接続してサーバと通信する。
〔電子扉システムの動作〕
(1) 入退室カードをカードリーダにかざすと、入退室カードの情報を読み込み、電子扉ユニットの情報とあわせてサーバに送信する。
(2) サーバからの応答が開錠許可なら、許可音を発生して開錠する。開錠してからt1秒以内に扉が開かないときは施錠する。
(3) サーバからの応答が開錠許可でないとき、エラー音を発生する。
(4) 扉が開いてから、t2秒以内に扉が閉まらないとき、扉が閉まるまで警告音を鳴動し続ける。
及びは、必要に応じて変更が可能で、>>1秒とする。
〔制御部とサーバ間の通信〕
サーバは、入退室可能な入退室カードの保有者の情報を扉ごとに管理する。
(1) 制御部は、カードリーダで入退室カードの情報を読み込んだとき、a、b及びリーダ設置区分コードをサーバに送信する。
(2) サーバは、aで入退室カードの保有者を特定し、bで入退室する扉を特定し、リーダ設置区分コードで入室又は退室を識別する。これらの情報から、入退室カードの保有者が入退室を許可されているか判定して、判定結果を制御部に送信する。
〔制御部のプログラムの処理〕
制御部のプログラムの処理フローを図3に示す。この処理は、室内側又は室外側のカードリーダに入退室カードをかざすと開始される。また、この処理の間に新たに入退室カードがかざされても、終了するまで処理を続行する。
・タイマは、OSのタイマ機能を使用する。タイマに時間を設定すると計時が始まり、設定した時間が経過するとタイマ満了イベントが通知される。タイマが満了する前にタイマ取消しを行うと、タイマ満了イベントは通知されない。
・開閉センサは扉が開いたときに開扉イベントを通知し、扉が閉まったときに閉扉イベントを通知する。
・処理“カード情報を読み込む”では、入退室カードの情報を読み込む。
・処理“イベント待ち”では、開扉イベント、閉扉イベント、及びタイマ満了イベントを待ち受ける。
・処理“開錠する”及び処理“施錠する”では、制御部が電子錠に開錠又は施錠を通知する。その通知から実際に電子錠が開錠/施錠するのに1秒掛かり、その間、次の処理は行わない。

〔不具合の発生〕
電子扉システムの動作をテストしていたところ、扉を開けたまま秒経過しても警告音が鳴動しない不具合が、図3の①施錠するを処理した後に発生した。
なお、不具合が発生したときに、入退室カードの情報は正しく読み込まれており、LAN及びサーバに問題はなく、ハードウェア及びソフトウェアは通常の処理をしていた。
設問1:
[制御部とサーバ間の通信]について、本文中のa、bに入れる適切な字句を、本文中の字句を用いて答えよ。
模範解答
a:カード識別コード
b:扉識別コード
解説
解答の論理構成
- 【問題文】には次の記載があります。
- 「制御部は、カードリーダで入退室カードの情報を読み込んだとき、a、b及びリーダ設置区分コードをサーバに送信する。」
- 「サーバは、aで入退室カードの保有者を特定し、bで入退室する扉を特定し、リーダ設置区分コードで入室又は退室を識別する。」
- “入退室カードの保有者”を一意に識別できる情報は、【問題文】「入退室カードには、カードごとに割り当てられたカード識別コード、有効期限などの情報を格納する。」とある “カード識別コード” です。
したがって a=カード識別コード。 - “入退室する扉”を特定する情報は、【問題文】「電子扉ユニットには、扉識別コードが設定されている。」とある “扉識別コード” です。
したがって b=扉識別コード。 - 以上より解答は
a:カード識別コード
b:扉識別コード となります。
誤りやすいポイント
- 「リーダ設置区分コード」を b に当てはめてしまうミス
→ 記載順序に惑わされず機能で判断する必要があります。 - “扉がある場所(室内/室外)”を識別する情報と混同するミス
→ 室内・室外は “リーダ設置区分コード” であって扉を区別するものではありません。 - “カードの有効期限”を保有者識別と誤解するミス
→ 有効期限は認証条件の一部であり、個体識別は “カード識別コード” です。
FAQ
Q: “カード識別コード” と “カード番号” は同じ意味ですか?
A: 設問では “カード識別コード” という表現を使っているため、そのまま書くことが求められます。概念的には同じでも、解答欄には記載通りの語句を使用してください。
A: 設問では “カード識別コード” という表現を使っているため、そのまま書くことが求められます。概念的には同じでも、解答欄には記載通りの語句を使用してください。
Q: “扉識別コード” は電子扉ユニットごとに固定ですか?
A: 【問題文】「扉識別コードは、電子扉ユニットごとに割り当てられ、制御部が保持する。」とあるとおり、ユニットごとに固定で設定されています。
A: 【問題文】「扉識別コードは、電子扉ユニットごとに割り当てられ、制御部が保持する。」とあるとおり、ユニットごとに固定で設定されています。
Q: リーダ設置区分コードが欠けていても扉を特定できますか?
A: 扉自体は “扉識別コード” で一意に分かりますが、室内側・室外側の区別ができなくなるため、入退室方向の判定ができなくなります。
A: 扉自体は “扉識別コード” で一意に分かりますが、室内側・室外側の区別ができなくなるため、入退室方向の判定ができなくなります。
関連キーワード: RFID, 認証、一意識別子、クライアントサーバ通信、セキュリティポリシー
設問2:〔制御部のプログラムの処理〕について、(1)〜(3)に答えよ。
(1)図3中のcに入れる適切な処理を、本文中の字句を用いて答えよ。
模範解答
c:エラー音を発生する
解説
解答の論理構成
- 図3のフローでは、ひし形「開錠許可」で“否”になった場合にcの処理が実行されます。
- 【問題文】には電子扉システム全体の振る舞いとして
「(3) サーバからの応答が開錠許可でないとき、エラー音を発生する。」
と明記されています。 - したがって、サーバ応答が開錠許可でない=図3の「No」分岐に相当する場面では“エラー音”を鳴らすはずです。
- よってcに入る処理は「エラー音を発生する」と結論づけられます。
誤りやすいポイント
- 「許可音」と「エラー音」を取り違える
「許可音」は開錠許可時(Yes 分岐)であり、No 分岐では使いません。 - 「警告音」と混同する
警告音は扉が開いたまま秒を超えた場合に鳴らすもので、サーバ応答の判定とは無関係です。 - フロー図の位置を読み違える
cは“開錠許可”の判定直後に置かれており、後続の扉開閉イベントやタイマとは連動していません。
FAQ
Q: “開錠許可が否”のとき、施錠処理は不要ですか?
A: 元々施錠状態でカードをかざすケースを想定しているため、追加の施錠は不要です。図3にも施錠処理は描かれていません。
A: 元々施錠状態でカードをかざすケースを想定しているため、追加の施錠は不要です。図3にも施錠処理は描かれていません。
Q: 許可音とエラー音の違いは何ですか?
A: 【問題文】にあるように「許可音」は“単発音”で開錠許可を知らせ、「エラー音」も“単発音”ですが開錠拒否を知らせます。音色や周波数で区別する想定です。
A: 【問題文】にあるように「許可音」は“単発音”で開錠許可を知らせ、「エラー音」も“単発音”ですが開錠拒否を知らせます。音色や周波数で区別する想定です。
Q: “警告音”が鳴らない不具合はcと関係しますか?
A: いいえ。警告音は扉が開いたまま秒を超えた場合の機能で、cはサーバ応答に対する動作です。別のロジックで発生した不具合です。
A: いいえ。警告音は扉が開いたまま秒を超えた場合の機能で、cはサーバ応答に対する動作です。別のロジックで発生した不具合です。
関連キーワード: RFID, タイマイベント、状態遷移、フロー制御、ハードウェア制御
設問2:〔制御部のプログラムの処理〕について、(1)〜(3)に答えよ。
(2)図3中のd、eに入れる適切な処理を、解答群の中から選び、記号で答えよ。
解答群
ア:イベント待ち
イ:開錠する
ウ:施錠する
エ:タイマ取消し
オ:タイマに秒を設定する
カ:タイマに秒を設定する
模範解答
d:オ
e:力
解説
解答の論理構成
-
タイマ の目的
【問題文】には「開錠してから秒以内に扉が開かないときは施錠する。」とある。
したがって“開錠”命令を出した直後から t_{1}$秒を設定する」(解答群「オ」)を配置するのが論理的です。 -
タイマ の目的
同じく【問題文】には「扉が開いてから、秒以内に扉が閉まらないとき、扉が閉まるまで警告音を鳴動し続ける。」とある。
図3では“開扉イベント”を受信したら“タイマ取消し”( t_{2} をセットしなければ警告判定ができません。したがって [ e ] は「タイマに秒を設定する」(解答群「カ」)となります。 -
選択肢照合
・[ d ]=「オ:タイマに秒を設定する」
・[ e ]=「カ:タイマに秒を設定する」
以上より、模範解答「d:オ」「e:カ」が妥当と結論づけられます。
誤りやすいポイント
- [ d ] と [ e ] を逆にする
$t_{2} は扉が“開いた後”に効くタイマであり、開錠前にセットしても要件を満たせません。 - “開扉イベント後すぐ施錠”の意図を誤解
図3の「②施錠する」は $t_{2} 満了後でなく“扉が閉まった後”に行われる施錠です。流れを読み違えるとタイマ配置を間違えます。 - タイマ取消しを見落とす
$t_{1} が不要になった瞬間(開扉イベント)で必ずキャンセルしないと、二つのタイマが同時進行しバグの原因になります。
FAQ
Q: t_{1} をセットしてもこの 1 秒を含めた計時となり、要件を満たせます。
Q: 扉を開けずに再度カードをかざした場合、タイマはどうなる?
A: 図3冒頭に「この処理の間に新たに入退室カードがかざされても、終了するまで処理を続行する。」とあるため、途中で割込みは入りません。タイマロジックは単一処理フロー内で一貫して動作します。
A: 図3冒頭に「この処理の間に新たに入退室カードがかざされても、終了するまで処理を続行する。」とあるため、途中で割込みは入りません。タイマロジックは単一処理フロー内で一貫して動作します。
Q: 警告音が鳴らない不具合はタイマ設定漏れが原因?
A: 不具合発生日が「図3の①施錠するを処理した後」とあるため、 が正しくセットされず“タイマ満了イベント”が来ないケースが疑われます。今回の解答はその防止にもつながります。
A: 不具合発生日が「図3の①施錠するを処理した後」とあるため、 が正しくセットされず“タイマ満了イベント”が来ないケースが疑われます。今回の解答はその防止にもつながります。
関連キーワード: タイマ制御、状態遷移、イベント駆動、フローチャート
設問2:〔制御部のプログラムの処理〕について、(1)〜(3)に答えよ。
(3)図3中のf、gに入れる適切なイベントを、本文中の字句を用いて答えよ。
模範解答
f:閉扉
g:タイマ満了
解説
解答の論理構成
-
図3では、扉を開錠した後「イベント待ち」に入り、ここで待受けるのは「開扉イベント」「閉扉イベント」「タイマ満了イベント」と問題文に明記されています。
引用:- 「開閉センサは扉が開いたときに開扉イベントを通知し、扉が閉まったときに閉扉イベントを通知する。」
- 「タイマ…設定した時間が経過するとタイマ満了イベントが通知される。」
-
2回目の「イベント待ち」では、既に扉は開いた状態なので次に期待するのは
(ア) 扉が閉じることを示す「閉扉イベント」
(イ) 経過を示す「タイマ満了イベント」
のいずれかです。 -
フロー図の遷移を確認すると
• f のラベルは「タイマ取り消し」に直行しており、タイマを止めるのは扉が閉じたときです。したがって f=「閉扉イベント」。
• g のラベルは「警告音を鳴動する」に直行しており、これは扉を開けたまま 秒経過した場合の動作です。したがって g=「タイマ満了イベント」。 -
よって解答は
f:閉扉
g:タイマ満了
誤りやすいポイント
- 「開扉イベント」と「閉扉イベント」を取り違える。扉が開いた直後に開扉イベントは既に発生済みであり、次に来るのは閉扉イベントである点を見落としがちです。
- 「警告音=開扉イベント」と短絡的に考えてしまう。実際には「開いてから 秒以内に閉まらない」ことが条件なので、警告音はタイマ満了イベントに連動します。
- f と g を単なる“閉扉” “開扉”と書くミス。問題文は「○○イベント」という正式表記を用いているため、答案でも同じ字句を用いる必要があります。
FAQ
Q: タイマ取り消しは必ず閉扉イベントにだけ行われるのですか?
A: はい。扉が閉まれば警告音発生条件が消滅するのでタイマは不要になります。タイマ満了イベントが来た場合は既にタイマが満了しているため取り消しは行いません。
A: はい。扉が閉まれば警告音発生条件が消滅するのでタイマは不要になります。タイマ満了イベントが来た場合は既にタイマが満了しているため取り消しは行いません。
Q: 開錠後にすぐ閉扉イベントが来た場合、警告音は鳴るのですか?
A: 鳴りません。閉扉イベントでタイマを取消すため、計時が停止し警告音発生条件を満たさなくなります。
A: 鳴りません。閉扉イベントでタイマを取消すため、計時が停止し警告音発生条件を満たさなくなります。
Q: タイマ満了イベント後に扉を閉めたら警告音は止まりますか?
A: はい。図3では「警告音を鳴動する」ブロックの後に再度「イベント待ち」があり、閉扉イベントが来ると「警告音を止める」処理が実行されます。
A: はい。図3では「警告音を鳴動する」ブロックの後に再度「イベント待ち」があり、閉扉イベントが来ると「警告音を止める」処理が実行されます。
関連キーワード: イベント駆動、タイマ満了イベント、開閉センサ、状態遷移
設問3:
〔不具合の発生〕について、不具合が発生する条件を35字以内で述べよ。
模範解答
“①施錠する”処理中に扉を開き、そのまま秒経過したとき。
解説
解答の論理構成
-
図3のフローで タイマが満了すると、分岐「タイマ満了イベント」から “①施錠する” へ進みます。
引用:【問題文】「タイマ満了イベント → 四角形『①施錠する』」
ここで は扉を開けずに経過したときに発生する条件です。 -
“①施錠する” では、 引用:【問題文】「その通知から実際に電子錠が開錠/施錠するのに1秒掛かり、その間、次の処理は行わない。」
とあるように、1秒間 MPU はイベント処理を停止します。 -
この1秒の間に人がレバーを回せば扉はまだ開けられます(電子錠が完全に施錠されていないため)。すると開扉イベントはキューに入り得ますが、処理は復帰後すぐに終了へ進むため無視されます。
引用:【問題文】「不具合…図3の①施錠するを処理した後に発生した。」 -
終了してしまうと 用のタイマが設定されておらず、以後の分岐
引用:【問題文】「ひし形『通知』 ─── ラベル『g』→ 四角形『警告音を鳴動する』」
に入る機会がありません。 -
以上より、 “①施錠する” の最中に扉を開き、そのまま が経過すると警告音を鳴らせず不具合となる、という結論に至ります。
誤りやすいポイント
- と の役割を取り違え、 が先に設定されると誤解する。
- “①施錠する” 後もフローがループすると想定し、終了する仕様を見落とす。
- 1秒間「次の処理は行わない」という記述を読み飛ばし、開扉イベントがすぐ処理されると思い込む。
FAQ
Q: “②施錠する” では同じ不具合は起きませんか?
A: “②施錠する” へ入る前に e で タイマが設定されるため、扉が開いたままなら警告音ルートへ進めます。
A: “②施錠する” へ入る前に e で タイマが設定されるため、扉が開いたままなら警告音ルートへ進めます。
Q: 開扉イベントがキューに残っていても警告音が鳴らないのはなぜ?
A: “①施錠する” 後にフローが終了するので、開扉イベントを受け取る待機処理に戻らないためです。
A: “①施錠する” 後にフローが終了するので、開扉イベントを受け取る待機処理に戻らないためです。
Q: タイマをキャンセルせずに再利用する実装なら解決しますか?
A: 用タイマを 用に流用しても、タイマ値が異なり要件を満たせないため、別途 を設定する必要があります。
A: 用タイマを 用に流用しても、タイマ値が異なり要件を満たせないため、別途 を設定する必要があります。
関連キーワード: タイマ割り込み、状態遷移、イベント駆動、フローチャート


