以下、適宜図面を参照して本発明の実施形態について説明する。なお、以下に説明される実施形態は本発明の一例にすぎず、本発明の要旨を変更しない範囲で、本発明の実施形態を適宜変更できることは言うまでもない。例えば、後述する各処理の実行順序は、本発明の要旨を変更しない範囲で、適宜変更することができる。
本実施形態では、図1に示されるシステム10を説明する。システム10は、プリンタ11と、PC12とを備える。プリンタ11とPC12とは、通信ネットワーク13にそれぞれ接続されており、相互に通信可能である。プリンタ11は、外部装置及び画像形成装置の一例である。PC12は、情報処理装置の一例である。情報処理装置は、パーソナルコンピュータや、スマートフォンなどの携帯端末や、タブレットなどであってよい。以下では、PC12がパーソナルコンピュータである例を説明する。
通信ネットワーク13は、例えば、有線LAN、無線LAN、WAN、或いはこれらの組み合わせであってもよい。または、プリンタ11とPC12とは、USBケーブル等によって接続されていてもよい。通信ネットワーク13には、複数のプリンタ11が接続されていてもよい。
プリンタ11は、いわゆるラベルプリンタである。プリンタ11は、印刷媒体に印刷を行い、また、印刷した印刷媒体を切断する。ラミネートフィルムなどからなるテープ、ラベル、ロール紙などは、印刷媒体の一例であってよい。印刷は、画像形成の一例である。
プリンタ11は、印刷エンジン21と、ディスプレイ22と、ネットワークインタフェース(以下、I/Fと記載する)23と、コントローラ31とを備える。印刷エンジン21、ディスプレイ22、及びネットワークI/F23は、コントローラ31の通信バス38と接続されており、コントローラ31と相互に通信可能である。
印刷エンジン21は、テープを搬送する搬送装置と、搬送装置によって搬送されたテープに印字を行う印刷装置と、テープを切断する切断装置とを備える。搬送装置、印刷装置、及び切断装置は、コントローラ31から入力される制御信号に基づいて動作する。
ディスプレイ22は、液晶ディスプレイ、有機ELディスプレイ等であり、各種情報を表示する表示画面を備える。
ネットワークI/F23は、通信ネットワーク13と接続されている。コントローラ31は、ネットワークI/F23を通じて、情報を送受信する。ネットワークI/F23の具体的な通信手順は特に限定されないが、例えば、USBケーブルを着脱可能なUSB-I/FをネットワークI/F23として採用することができる。また、Wi-Fi(登録商標)-I/FをネットワークI/F23として採用してもよい。以下では、プリンタ11とPC12とが無線LANまたは有線LANで接続されており、TCP/IPの通信プロトコルを用いて通信する例を説明する。
コントローラ31は、CPU32と、メモリ33と、通信バス38とを備える。CPU32及びメモリ33は、通信バス38と接続されている。通信バス38は、印刷エンジン21と、ネットワークI/F23と、ディスプレイ22と接続されている。CPU32は、通信バス38を通じて印刷エンジン21、ネットワークI/F23、及びディスプレイ22と接続されている。
メモリ33は、プログラム記憶領域34及びデータ記憶領域35を有している。プログラム記憶領域34は、OS36や装置プログラム37等のプログラムを記憶している。データ記憶領域35は、プログラムの実行に必要なデータを記憶する。
また、データ記憶領域35は、フォントリスト及びフォントデータを記憶している。フォントリストはデータ記憶領域35が記憶するフォントデータのリストである。フォントリストは、フォントの名称であるフォント名と、フォントデータを識別する識別情報であるインデックス番号と、フォントデータのサイズを示すフォントサイズとを項目として有する。フォントリストの一のレコードは、一のインデックス番号と、一のフォント名と、一のフォントサイズとを有する。一のレコードは、一のフォントデータを示す。すなわち、一のレコードは、一のフォントデータと、一のインデックス番号と、一のフォント名と、一のフォントサイズとを対応付けるデータであるとも言える。
OS36は、プリンタ11の基本プログラムである。装置プログラム37は、OS36と協働して、印刷エンジン21に制御信号を出力して印刷エンジン21の動作を制御し、ディスプレイ22に画像信号を出力してディスプレイ22に画像を表示させ、ネットワークI/F23を通じたPC12などの外部装置との通信を制御するプログラムである。装置プログラム37は、単一のプログラムであってもよいし、複数のプログラムの集合体であってもよい。
プログラム記憶領域34は、例えばROMである。データ記憶領域35は、ROMやRAMやEEPROMや、HDDや、プリンタ11に着脱されるUSBメモリ等の可搬記憶媒体や、CPU32が備えるバッファ等である。
メモリ33は、コンピュータが読み取り可能なストレージ媒体であってもよい。コンピュータが読み取り可能なストレージ媒体とは、non-transitoryな媒体である。non-transitoryな媒体には、上記の例の他に、CD-ROM、DVD-ROM等の記録媒体も含まれる。また、non-transitoryな媒体は、tangibleな媒体でもある。一方、インターネット上のサーバなどからダウンロードされるプログラムを搬送する電気信号は、コンピュータが読み取り可能な媒体の一種であるコンピュータが読み取り可能な信号媒体であるが、non-transitoryなコンピュータが読み取り可能なストレージ媒体には含まれない。後述するPC12のメモリ43についても同様である。
PC12は、コントローラ41と、ディスプレイ51と、ユーザI/F52と、ネットワークI/F53と、通信バス48とを備える。
ディスプレイ51、ユーザI/F52、及びネットワークI/F53は、コントローラ41の通信バス48に接続されている。ディスプレイ51、ネットワークインタフェース53、及び通信バス48の構成は、プリンタ11のディスプレイ22、ネットワークI/F23、及び通信バス38の構成と同様である。
ユーザI/F52は、キーボードやマウスである。ユーザI/F52は、ユーザの指示に応じた操作信号の入力を受け付ける。操作信号は、通信バス48を通じてコントローラ41に入力される。
コントローラ41は、CPU42と、メモリ43と、通信バス48とを備える。CPU42は、コンピュータの一例である。
メモリ43は、プログラム記憶領域44及びデータ記憶領域45を有している。プログラム記憶領域44は、OS46やプログラム47等のプログラムを記憶している。データ記憶領域45は、プログラムの実行に必要なデータを記憶する。
OS46は、PC12の基本プログラムである。OS46は、例えば、MacOS(登録商標)、Windows(登録商標)、Linux(登録商標)、Android(登録商標)OS等のオペレーティングシステムである。OS46は、PC12にインストールされた複数のプログラムを並行してCPU42に実行させることができる。複数のプログラムは、例えば、時分割多重方式によって仮想的に並行して実行される。
プログラム47は、CPU42がプログラムとして実行可能な実行ファイルである。プログラム47は、例えば、機械語で記述されたバイナリ形式のバイナリファイルである。
プログラム47は、図2に示されるUIモジュール61と通信モジュール62とを備える。UIモジュール61は、ユーザの入力を受け付ける設定画面(図9)をディスプレイ51に表示させ、また、通信モジュール62の起動等をOS46に指示するプログラムである。通信モジュール62は、プリンタ11との通信を行うプログラムである。UIモジュール61と通信モジュール62とは、時分割多重方式等によって仮想的に並行して実行される。UIモジュール61は、第1プログラムの一例である。通信モジュール62は、第2プログラムの一例である。
UIモジュール61は、種々の言語データを有する。UIモジュール61は、OS46が指定する言語と対応する言語データを決定し、決定した言語データの言語でディスプレイ51に設定画面(図9)を表示させる。すなわち、UIモジュール61は、いわゆるローカライズされたプログラムである。
設定画面は、ユーザの指示を受け付け、また、ユーザに情報を示す画面である。設定画面は、ユーザの指示を受け付けるテキストボックスやプルダウンメニューやスピンボックスやチェックボックスなどの入力手段を有する。また、設定画面は、ユーザに情報(フォントリスト)を示す情報表示領域を有する。
詳しい説明は省略するが、UIモジュール61は、設定画面の上述の入力手段により、フォントリスト取得指示(図2のS21)、フォントデータ転送指示(図4のS51)、及び終了指示(図5のS81)などのユーザの指示を受け付ける。フォントリスト取得指示は、プリンタ11からフォントリストを取得することを示す指示である。フォントデータ転送指示は、フォントデータをプリンタ11に転送(送信)してプリンタ11にフォントデータを記憶させることを示す指示である。終了指示は、プログラム47を終了させることを示す指示である。ユーザの指示を受け付けるステップS21、S51、S81の処理は、受付処理の一例である。
以下、プログラム47(UIモジュール61及び通信モジュール62)が実行する処理について、図2から図9を参照して説明する。
なお、本明細書では、基本的に、プログラムに記述された命令に従ったCPUの処理を説明する。すなわち、以下の説明における「判断」、「抽出」、「選択」、「算出」、「決定」、「特定」、「取得」、「受付」、「制御」、「設定」等の処理は、CPUの処理を表している。CPUによる処理は、OSなどのコントローラを介したハードウェア制御も含む。なお、「取得」は要求を必須とはしない概念で用いる。すなわち、CPUが要求することなくデータを受信するという処理も、「CPUがデータを取得する」という概念に含まれる。また、本明細書中の「データ」とは、コンピュータに読取可能なビット列で表される。そして、実質的な意味内容が同じでフォーマットが異なるデータは、同一のデータとして扱われるものとする。本明細書中の「情報」についても同様である。「命令」「応答」「要求」等の処理は、「命令」「応答」「要求」等を示す情報を通信することにより行われる。また、「命令」「応答」「要求」等の文言を、「命令」「応答」「要求」等を示す情報そのものという意味で記載してもよい。
また、プログラムに記述された命令に従ったCPUの処理を、省略した文言で記載することがある。例えば、「CPU42が行う」「プログラム47が行う」「コントローラ41が行う」「PC12が行う」のように記載することがある。CPU32についても同様である。
また、CPUによる、情報Aは事柄Bであることを示しているか否かを判断する処理を、「情報Aから、事柄Bであるか否かを判断する」のように概念的に記載することがある。CPUによる、情報Aが事柄Bであることを示しているか、事柄Cであるかを示しているかを判断する処理を、「情報Aから、事柄Bであるか事柄Cであるかを判断する」のように概念的に記載することがある。
また、本明細書中の「データ」と「情報」とは、コンピュータによって取り扱い可能なビット或いはビット列である点において共通する。「データ」とは、各ビットが示す意味内容をコンピュータが考慮することなく取り扱えるものを指す。これに対して、「情報」とは、各ビットが示す意味内容によってコンピュータの動作が分岐するものを指す。さらに、「指示」は、送信先の装置に対して次の動作を促すための制御信号であって、情報を含んでいることもあるし、それ自体が情報としての性質を有していることもある。
また、「データ」及び「情報」は、形式(例えば、テキスト形式、バイナリ形式、フラグ形式等)がコンピュータ毎に変更されたとしても、同一の意味内容と認識される限り、同一のデータ及び情報として取り扱われる。例えば、「2つ」であることを示す情報が、あるコンピュータではASCIIコードで”0x32”というテキスト形式の情報として保持され、別のコンピュータでは二進数表記で”10”というバイナリ形式の情報として保持されてもよい。
但し、上記の「データ」及び「情報」の区別は厳密なものではなく、例外的な取り扱いも許容される。例えば、データが一時的に情報として扱われてもよいし、情報が一時的にデータとして扱われてもよい。また、ある装置ではデータとして扱われるものが、他の装置では情報として扱われてもよい。さらには、データの中から情報が取り出されてもよいし、情報の中からデータが取り出されてもよい。
また、本明細書中の「に応じて」は、当該文字列の前に記載された条件が満たされた場合に、当該文字列の後に記載された処理が実行されることを示す。なお、処理が実行されるタイミングは、条件が満たされた後であればよく、当該条件が満たされた直後である必要は必ずしもない
プログラム47は、OS46からの起動指示(S11)によって起動される。OS46は、例えば、ユーザI/F52を用いたユーザからの指示により、起動指示を行う。起動指示には、言語指定が含まれる。
プログラム47が起動すると、まず、UIモジュール61が起動する(S12)。UIモジュール61は、起動すると、OS46からの起動指示に含まれる言語指定を取得する(S13)。以下では、言語指定で指定された言語を指定言語として説明する。
プログラム47は、取得した言語指定に対応する言語データを、記憶する種々の言語データから選択し、ディスプレイ51に表示する設定画面の言語として決定する(S14)。プログラム47は、決定した言語データを用いて、図9に示される設定画面をディスプレイ51に表示する(S15)。言語指定を取得するステップS13の処理は、第4取得手段の一例である。指定言語の言語データを決定するステップS14の処理は、決定手段の一例である。設定画面をディスプレイ51に表示させるステップS15の処理は、表示手段の一例である。
次に、UIモジュール61は、記憶指示コマンドをOS46に入力する(S16)。記憶指示コマンドは、プログラム47の実行ファイルに含まれる通信モジュール62をテンポラリフォルダに記憶することをOS46に指示するコマンドである。テンポラリフォルダは、データやプログラムを一時的に記憶するフォルダである。テンポラリフォルダは、一時記憶領域の一例である。一時記憶領域は、テンポラリフォルダの他、HDDの既存のフォルダであってもよい。また、UIモジュール61が、HDDやRAMにフォルダを作成し、作成したフォルダに通信モジュール62を記憶させることをOS46に指示してもよい。
記憶指示コマンドを受け付けたOS46は、プログラム47の実行ファイルに含まれる通信モジュール62をテンポラリフォルダに記憶させる(S17)。通信モジュール62をテンポラリフォルダに記憶させるステップS17の処理は、記憶手段の一例である。
次に、UIモジュール61は、ロック指示コマンドをOS46に入力する(S18)。ロック指示コマンドは、他のプログラムが通信モジュール62をテンポラリフォルダから消去することを制限するコマンドである。ロック指示コマンドをOS46に入力するステップS18の処理は、ロック手段の一例である。
ロック指示コマンドを入力されたOS46は、通信モジュール62を消去しないことを示す設定をメモリ43に記憶し、通信モジュール62をロックする(S19)。また、OS46は、通信モジュール62をロックしたことをUIモジュール61に通知する(S20)。
その後、UIモジュール61は、ユーザからの指示を受け付けるまで待機する。UIモジュール61は、ユーザからフォントリスト取得指示を受け付けると(S21)、第1指示データを生成する(S22)。第1指示データは、対応確認コマンド、フォントリスト取得コマンド、総記憶容量取得コマンド、及び空き記憶容量取得コマンドを含む。
対応確認コマンドは、プリンタ11に入力されるコマンドである。対応確認コマンドを入力されたプリンタ11は、フォントデータを記憶可能なプリンタであるか否かを示す応答情報を返信する。すなわち、対応確認コマンドは、プリンタ11がフォントデータを記憶可能なプリンタであるか否かを確認するコマンドである。
フォントリスト取得コマンドは、プリンタ11に入力されるコマンドである。フォントリスト取得コマンドを入力されたプリンタ11は、メモリ33に記憶するフォントリストを返信する。すなわち、フォントリスト取得コマンドは、フォントリストを取得するためのコマンドである。フォントリスト取得コマンドは、第1返信命令の一例である。
総記憶容量取得コマンドは、プリンタ11に入力されるコマンドである。総記憶容量取得コマンドを入力されたプリンタ11は、総記憶容量を返信する。総記憶容量とは、フォントデータを記憶可能なメモリ33の領域の容量を意味する。すなわち、総記憶容量取得コマンドは、プリンタ11におけるフォントデータを記憶可能な領域の総記憶容量を取得するためのコマンドである。総記憶容量取得コマンドは、第2返信命令の一例である。
空き記憶容量取得コマンドは、プリンタ11に入力されるコマンドである。空き記憶容量取得コマンドを入力されたプリンタ11は、空き記憶容量を返信する。空き記憶容量とは、総記憶容量から、現在フォントデータの記憶に使用している使用容量を減算した容量を意味する。すなわち、空き記憶容量取得コマンドは、プリンタ11におけるフォントデータを記憶可能な残りの領域の容量である空き記憶容量を取得するためのコマンドである。空き記憶容量取得コマンドは、第3返信命令の一例である。
UIモジュール61は、対応確認コマンド、フォントリスト取得コマンド、総記憶容量取得コマンド、及び空き記憶容量取得コマンドを含む第1指示データを生成する。なお、UIモジュール61は、プリンタ11のIPアドレスを第1指示データに含め、或いは、プリンタ11のMACアドレスなど、プリンタ11を特定するデータを第1指示データに含める。
次に、UIモジュール61は、生成した第1指示データを含む通信オプション付きの起動指示コマンドをOS46に入力する(S23)。通信オプション付きの起動指示コマンドは、通信モジュール62を起動させ、かつ通信モジュール62にプリンタ11と通信を行わせることをOS46に対して指示するコマンドである。通信オプション付きの起動指示コマンドは、第1起動通信指示の一例である。第1指示データを含む通信オプション付きの起動指示コマンドをOS46に入力するステップS23の処理は、第1指示手段の一例である。
通信オプション付きの起動指示コマンドを受け付けたOS46は、通信モジュール62を起動させ(S25)、また、プリンタ11との通信を通信モジュール62に指示する(S24)。通信モジュール62を起動させてプリンタ11との通信を指示するステップS23の処理は、第1指示手段の一例である。
OS46が通信モジュール62に対して行う通信指示には、UIモジュール61がステップS22で生成した第1指示データが含まれる。第1指示データには、上述の複数のコマンドが含まれる。通信モジュール62は、コマンドを1つずつプリンタ11に送信し、コマンドに対するプリンタ11からの応答を受信する。なお、プリンタ11が複数のコマンドを1度に受け付け可能なプリンタである場合は、複数のコマンドが通信モジュール62からプリンタ11へ1度に送信されてもよい。
通信モジュール62とプリンタ11との通信について具体的に説明する。通信モジュール62は、まず、プリンタ11とハンドシェイクを行ってプリンタ11との間の通信を確立する(不図示)。次に、通信モジュール62は、応答確認コマンドをプリンタ11に送信する(S31)。なお、通信モジュール62は、OS46のAPIを用いてプリンタ11と通信を行ってもよいし、OS46を介さずにプリンタ11と通信を行ってもよい。以下、通信モジュール62がOS46を介してプリンタ11と通信することも含めて、「通信モジュール62がプリンタ11と通信を行う」や、「通信モジュール62がプリンタ11に送信する」や、「通信モジュール62がプリンタ11から受信する」などと記載することがある。
一方、応答確認コマンドを受信したプリンタ11は、応答確認コマンドにしたがって、自身がフォントデータを記憶可能なプリンタ11であるか否か、すなわち、自身がプログラム47が管理可能なプリンタ11であるか否かを示す応答を返信する(S32)。プリンタ11が返信した応答は、通信モジュール62によって受信される(S32)。
図には示されていないが、プログラム47は、プリンタ11がプログラム47によって管理可能なプリンタ11でないことを示す応答を受け取ると、例えば、その旨を示す表示を設定画面に表示し、プリンタを選択し直すなどの再度のユーザの入力を受け付けるまで待機する。
通信モジュール62は、プリンタ11がプログラム47によって管理可能なプリンタ11であることを示す応答を受け取ると、フォントリストを返信することを示すフォントリスト取得コマンドをプリンタ11に送信する(S33)。フォントリスト取得コマンドを受信したプリンタ11は、メモリ33に記憶されたフォントリストを含む応答を返信する(S34)。フォントリストを含む応答を受信した通信モジュール62は、受信した応答に含まれるフォントリストをメモリ43に記憶する(S35)。フォントリストは、第1データの一例である。
次に、通信モジュール62は、総記憶容量を返信することを要求する総記憶容量取得コマンドをプリンタ11に送信する(S36)。総記憶容量取得コマンドを受信したプリンタ11は、総記憶容量を含む応答を返信する(S37)。総記憶容量を含む応答を受信した通信モジュール62は、受信した応答に含まれる総記憶容量をメモリ43に記憶する(S38)。
次に、通信モジュール62は、空き記憶容量を返信することを要求する空き記憶容量取得コマンドをプリンタ11に送信する(S39)。空き記憶容量取得コマンドを受信したプリンタ11は、空き記憶容量を含む応答を返信する(S40)。空き記憶容量を含む応答を受信した通信モジュール62は、受信した応答に含まれる空き記憶容量をメモリ43に記憶する(S41)。その後、通信モジュール62は、プリンタ11との間に確立した通信を解放してプリンタ11との通信を終了する。すなわち、複数のコマンドを送信して応答を受信するまで、通信モジュール62は、プリンタ11との間に確立した通信を維持する。通信モジュール62がプリンタ11にコマンドを送信し、コマンドに対する応答を受信するステップS31~S40の処理は、通信手段の一例である。
通信モジュール62は、プリンタ11との通信の結果得た情報であるフォントリスト、総記憶容量、及び空き記憶容量をOS46に受け渡し(S42)、動作を終了する(S43)。通信モジュール62がフォントリスト、総記憶容量、及び空き記憶容量をOS46に受け渡すステップS42の処理は、受渡手段の一例である。通信モジュール62が動作を終了するステップS43の処理は、第2終了手段の一例である。
OS46は、通信モジュール62から受け渡されたフォントリスト、総記憶容量、及び空き記憶容量をUIモジュール61に受け渡す(S44)。UIモジュール61は、OS46から、フォントリスト、総記憶容量、及び空き記憶容量を取得する(S44)。UIモジュール61がフォントリストを取得するステップS44の処理は、第1取得手段の一例である。
UIモジュール61は、OS46から取得したフォントリストを指定言語に変換する(S45)。その後、UIモジュール61は、OS46から受け取った総記憶容量及び空き記憶容量と、変換したフォントリストとをディスプレイ51に表示させ、設定画面を更新する(S46)。フォントリストを指定言語に変換するステップS45の処理は、変換手段の一例である。設定画面を更新するステップS46は、表示手段の一例である。
図4に示されるように、UIモジュール61は、ユーザからフォントリストの転送指示を受け付けると(S51)、転送指示に含まれるパスを取得する(S52)。パスは、ユーザが送信を指定するフォントデータを示す。UIモジュール61がパスを取得するステップS52の処理は、第2取得手段の一例である。
次に、UIモジュール61は、第2指示データを生成する(S53)。第2指示データは、ステップS52で取得したパスと、当該パスで示されるフォントデータをメモリ33に記憶させることをプリンタ11に指示する記憶コマンドと、さらに、上述の複数のコマンドとを含む。複数のコマンドは、プリンタ11にフォントリスト、総記憶容量、及び空き記憶容量を送信することを要求するコマンドである。すなわち、複数のコマンドは、新たなフォントデータをメモリ33に記憶させた後に更新されたフォントリストや総記憶容量や空き記憶容量をプリンタ11に送信させるコマンドである。なお、UIモジュール61は、パスに代えて、パスが示すフォントデータ自体を第2指示データに含めてもよい。フォントデータは、第2データの一例である。記憶コマンドは、記憶命令の一例である。
UIモジュール61は、生成した第2指示データを含む通信オプション付きの起動指示コマンドをOS46に入力する(S54)。ステップS54でOS46に入力される通信オプション付きの起動指示コマンドは、第2起動通信指示の一例である。通信オプション付きの起動指示コマンドをOS46に入力するステップS54の処理は、第2指示手段の一例である。
通信オプション付きの起動指示コマンドを受け付けたOS46は、通信モジュール62を起動させ(S56)、また、通信モジュール62にプリンタ11との通信を指示する(S55)。OS46が通信モジュール62に対して行う通信の指示には、UIモジュール61がステップS53で生成した第2指示データが含まれる。
起動された通信モジュール62は、OS46から入力された通信指示に含まれる第2指示データにしたがって、プリンタ11と通信を行う。具体的に説明すると、まず、通信モジュール62は、第2指示データに含まれるパスを用いて、プリンタ11に送信するフォントデータを取得する(S57)。次に、通信モジュール62は、取得したフォントデータと、当該フォントデータをメモリ33に記憶することをプリンタ11に指示する記憶コマンドとを含む送信データであるBinファイルを生成し(S58)、プリンタ11に送信する(S59)。通信モジュール62がパスを用いてフォントデータを取得するステップS57の処理は、第3取得手段の一例である。
プリンタ11は、通信モジュール62が送信したBinファイルを受信すると、Binファイルに含まれる記憶コマンドにしたがって、Binファイルに含まれるフォントデータをメモリ33に記憶させる(S60)。また、プリンタ11は、新たなフォントデータをメモリ33に記憶したことに応じて、フォントリストに新たなレコードを追加する。すなわち、プリンタ11は、フォントリストを更新する。
一方、通信モジュール62は、Binファイルの送信後、ステップS33、S36、S39の処理と同様に、フォントリスト取得コマンド、総記憶容量取得コマンド、及び空き記憶容量取得コマンドをプリンタ11に順次送信し、ステップS32、S37、S40の処理と同様に、応答を順次受信する。通信モジュール62がプリンタ11と通信を行うステップS59、S60、S33~S40の処理は、通信手段の一例である。
通信モジュール62は、図5に示されるように、プリンタ11から応答を受信するごとに、当該応答に含まれるデータ(フォントリスト、総記憶容量、及び空き記憶容量)をメモリ43に順次記憶する(S71)。通信モジュール62は、プリンタ11との通信が終了すると、プリンタ11からの応答に含まれるフォントリスト、総記憶容量、及び空き記憶容量をOS46に受け渡す(S72)。その後、通信モジュール62は、動作を終了する(S73)。
一方、OS46は、通信モジュール62から受け渡されたフォントリスト、総記憶容量、及び空き記憶容量をUIモジュール61に受け渡す(S74)。UIモジュール61は、受け渡されたフォントリストを指定言語に変換し(S75)、変換したフォントリスト、総記憶容量、及び空き記憶容量をディスプレイ51に表示させて、設定画面を更新する(S76)。フォントリストを指定言語に変換するステップS75の処理は、変換手段の一例である。設定画面を更新するステップS76は、表示手段の一例である。
また、UIモジュール61は、ユーザから終了指示を受け付けると(S81)、ステップS18でOS36に指示したロックを解除することをOS46に指示するコマンドをOS46に入力する(S82)。コマンドを入力されたOS46は、通信モジュール62に設定したロックを解除する(S83)。具体的には、OS46は、ロックの設定をメモリ43から消去する。通信モジュール62に設定したロックを解除するステップS83の処理は、ロック解除手段の一例である。
一方、UIモジュール61は、ロックの解除をOS46に指示した後、通信モジュール62をテンポラリホルダから消去することを要求するコマンドをOS46に入力する(S84)。当該コマンドを入力されたOS46は、通信モジュール62をテンポラリフォルダから消去し(S85)、通信モジュール62をテンポラリフォルダから消去したことをUIモジュール61に対して通知する(S86)。当該通知を受けたUIモジュール61は、動作を終了する(S87)。なお、RAMやHDDにフォルダを作成し、作成したフォルダに通信モジュール62が記憶されている場合、UIモジュール61は、通信モジュール62とともに、作成したフォルダの消去もOS46に指示する。すなわち、UIモジュール61は、一時記憶されたフォルダ及び通信モジュール62の全ての消去をOS46に指示する。UIモジュール61が通信モジュール62の消去をOS46に指示するステップS84の処理は、消去手段の一例である。UIモジュール61の動作を終了するステップS87の処理は、第1終了手段の一例である。
上述のように、UIモジュール61は、起動すると、通信モジュール62をテンポラリフォルダに記憶させて通信モジュール62をロックする。UIモジュール61が通信モジュール62をロックすることは、複数のUIモジュール61が起動される場合に特に有効である。以下、詳しく説明する。
2つのUIモジュール61が起動され、先に起動した方のUIモジュール61が、後で起動した方のUIモジュール61よりも後で動作を終了する場合の処理を図6を参照して説明する。なお、図6では、OS46の図示を省略しているが、UIモジュール61と通信モジュール62とは、図2~図5と同様に、OS46を通じて動作する。また、以下では、先に起動した方のUIモジュール61を第1のUIモジュール61とし、後で起動した方のUIモジュール61を第2のUIモジュール61として説明する。また、第1のUIモジュール61が実行する処理のうち、図2~図5で説明した処理と同一の処理には、同一の符号に添え字「a」を付し、第2のUIモジュール61が実行する処理のうち、図2~図5で説明した処理と同意の処理には、同一の符号に添え字「b」を付して説明することがある。例えば、第1のUIモジュール61が実行する処理のうち、図2~図5で説明した処理S12と同一の処理には、符号S12aを付し、第2のUIモジュール61が実行する処理のうち、図2~図5で説明した処理S12と同一の処理には、符号S12bを付して説明する。
OS46からの起動指示(S11a)によりプログラム47が起動されると、第1のUIモジュール61が起動する(S12a)。
起動した第1のUIモジュール61は、ステップS13からS15の処理(図2)を実行した後、通信モジュール62をテンポラリフォルダに記憶させる(S16a)。また、第1のUIモジュール61は、通信モジュール62に対してロックを行うことを指示するコマンドをOS46に入力し(S18a)、通信モジュール62をロックする。
第1のUIモジュール61が起動した後、プログラム47がOS46からの起動指示(S11b)により起動されると、第2のUIモジュール61が起動される(S12b)。
第2のUIモジュール61は、OS46に対して、実行ファイルの通信モジュール62をテンポラリフォルダに記憶することを要求するコマンドをOS46に入力する。当該コマンドを入力されたOS46は、通信モジュール62がテンポラリフォルダに既に記憶されていることにより、通信モジュール62をテンポラリフォルダに新たに記憶することなく、「失敗」を示す通知を第2のUIモジュール61に対して行う(S91)。
また、第2のUIモジュール61は、通信モジュール62に対してロックを行うことをOSに指示し(S18b)、通信モジュール62をロックする。すなわち、通信モジュール62は、第1のUIモジュール61及び第2のUIモジュール61の双方にロックされる。
その後、第1のUIモジュール61よりも先に第2のUIモジュール61に終了指示が入力される(S81b)。第2のUIモジュール61は、終了指示が入力されると、OS46にロックを解除する指示を入力し、通信モジュール62に設定されたロックを解除する(S82b)。
また、第2のUIモジュール61は、テンポラリフォルダから通信モジュール62を消去することを指示するコマンドをOS46に入力する(S84b)。当該コマンドを入力されたOS46は、通信モジュール62がロックされているか否かをメモリ43に記憶された設定によって確認する。OS46は、通信モジュール62が第1のUIモジュール61によってロックされていることにより、通信モジュール62をテンポラリフォルダから消去することなく、「失敗」を示す通知を第2のUIモジュール61に対して行う(S92)。第2のUIモジュール61は、その後、動作を終了する(S87b)。
第2のUIモジュール61の動作終了後、第1のUIモジュール61に終了指示が入力されると(S81a)、第1のUIモジュール61は、通信モジュール62のロックを解除することを指示するコマンドをOS46に入力し、通信モジュール62に設定されたロックを解除する(S82a)。
また、第1のUIモジュール61は、テンポラリフォルダから通信モジュール62を消去することを指示するコマンドをOS46に入力する(S84a)。当該コマンドを入力されたOS46は、通信モジュール62がロックされているか否かをメモリ43に記憶された設定によって確認する。OS46は、通信モジュール62が第2のUIモジュール61によってロックされていないことにより、通信モジュール62をテンポラリフォルダから消去する。第1のUIモジュール61は、その後、動作を終了する(S87a)。
上述のように、複数のUIモジュール61が起動しても、通信モジュール62は、1つしかテンポラリフォルダに記憶されず、また、起動された全てのUIモジュール61の動作が終了するまでは、通信モジュール62がテンポラリフォルダから削除されることがない。
図6では、先に起動した方のUIモジュール61が、後で起動した方のUIモジュール61よりも後で動作を終了する場合について説明した。図7では、先に起動した方のUIモジュール61が、後で起動した方のUIモジュール61よりも先に動作を終了する場合を説明する。なお、図7では、図6と同様に、OS46の図示を省略している。また、以下では、先に起動した方のUIモジュール61を第1のUIモジュール61とし、後で起動した方のUIモジュール61を第2のUIモジュール61として説明する。また、第1のUIモジュール61が実行する処理のうち、図2~図5で説明した処理と同一の処理には、同一の符号に添え字「a」を付し、第2のUIモジュール61が実行する処理のうち、図2~図5で説明した処理と同意の処理には、同一の符号に添え字「b」を付して説明することがある。
まず、図6の場合と同様に、第1のUIモジュール61が先に起動され(S12a)、第2のUIモジュール61が後で起動される(S12b)。また、通信モジュール62は、第1のUIモジュール61及び第2のUIモジュール61の双方によってロックされる(S18a、S18b)。
その後、後で起動した第2のUIモジュール61よりも先に、第1のUIモジュール61に終了指示が入力されると(S81a)、第1のUIモジュール61は、通信モジュール62のロックの解除を指示するコマンドをOS46に入力し、通信モジュール62に設定されたロックを解除する(S82a)。
また、第1のUIモジュール61は、テンポラリフォルダから通信モジュール62を消去することを指示するコマンドをOS46に入力する(S84a)。当該コマンドを入力されたOS46は、通信モジュール62がロックされているか否かをメモリ43に記憶された設定によって確認する。OS46は、通信モジュール62が第2のUIモジュール61によってロックされていることにより、通信モジュール62をテンポラリフォルダから消去することなく、「失敗」を示す通知を第1のUIモジュール61に対して行う(S92)。第2のUIモジュール61は、その後、動作を終了する(S87a)。
第1のUIモジュール61の動作終了後、第2のUIモジュール61に終了指示が入力されると(S81b)、第2のUIモジュール61は、通信モジュール62のロックの解除を指示するコマンドをOS46に入力し、通信モジュール62に設定されたロックを解除する(S82b)。
また、第2のUIモジュール61は、テンポラリフォルダから通信モジュール62を消去することを指示するコマンドをOS46に入力する(S84b)。当該コマンドを入力されたOS46は、通信モジュール62がロックされているか否かをメモリ43に記憶された設定によって確認する。OS46は、通信モジュール62が第1のUIモジュール61によってロックされていないことにより、通信モジュール62をテンポラリフォルダから消去する。第2のUIモジュール61は、その後、動作を終了する(S87b)。
次に、通信モジュール62とプリンタ11との通信において、通信異常を生じた場合について、図8を参照して説明する。なお、図4で説明した処理と同一の処理については、図4で説明した処理と同一の符号を付して説明を省略することがある。
UIモジュール61及び通信モジュール62は、転送指示を受け付けると(S51)、ステップS52~54及びステップS56~59の処理を実行する。通信モジュール62とプリンタ11と通信において、いわゆる通信クラッシュなどの異常が生じたとする。図示例では、通信モジュール62がBinファイルを送信する際に、通信クラッシュが生じて、通信モジュール62に異常が生じた場合が示されている。
異常が生じたことに応じて、ユーザが終了を指示し、終了指示がUIモジュール61に入力されると(S81)、UIモジュール61は、ロックを解除することをOS46に指示し、その後、通信モジュール62をテンポラリフォルダから消去することをOS46に指示する(S84)。
一方、ロックを解除することを指示されたOS46は、通信モジュール62をロックしたことを示す設定をメモリ43から削除してロックを解除する(S83)また、通信モジュール62を消去することを指示されたOS46は、テンポラリフォルダから通信モジュール62を消去し(S85)、通信モジュール62を消去したことをUIモジュール61に通知する(S86)。当該通知を受けたUIモジュール61は、動作を終了する(S87)。すなわち、UIモジュール61が動作を終了する際に、異常を生じた通信モジュール62は、テンポラリフォルダから消去される。
[実施形態の作用効果]
本実施形態では、UIモジュール61は、プログラム47が起動すると起動される。一方、通信モジュール62は、OS46によって起動される。したがって、UIモジュール61と通信モジュール62とは、起動のプロセスが相違する。また、UIモジュール61と通信モジュール62とは、OS46を介して相互にデータを受け渡す。したがって、プリンタ11との通信等において通信モジュール62に異常が生じたとしても、異常が生じた通信モジュール62がUIモジュール61の動作を阻害することがない。すなわち、通信モジュールに異常が生じたとしても、UIモジュール61は、ユーザからの指示を受け付けて処理することができる。
また、異常が生じた通信モジュール62は、UIモジュール61の動作が終了する際にテンポラリフォルダから消去される。したがって、異常が生じた通信モジュール62がテンポラリフォルダに残存して、OS46の動作を阻害することがない。
また、通信モジュール62は、異常が生じなくても、UIモジュール61の動作が終了する際にテンポラリフォルダから消去される。したがって、テンポラリフォルダに不要なプログラムが残存することを抑制することができる。
また、本実施形態では、後に起動したUIモジュール61(第2のUIモジュール61)が通信モジュール62をテンポラリフォルダに記憶することをOS46に指示したとしても、先に起動したUIモジュール61によってテンポラリフォルダに通信モジュール62が既に記憶されている場合、通信モジュール62がテンポラリフォルダに更に記憶されない。すなわち、複数のUIモジュール61が起動されても、通信モジュール62は、1つしかテンポラリフォルダに記憶されない。したがって、複数の通信モジュール62がテンポラリフォルダに記憶される場合に比べ、プログラム47が使用するテンポラリフォルダの容量(使用率)を少なくすることができる。
また、本実施形態では、複数のUIモジュール61が起動すると、起動した各UIモジュール61(第1のUIモジュール61及び第2のUIモジュール61)は、それぞれ通信モジュール62をロックする。起動した各UIモジュール61は、動作を終了する際に、それぞれ通信モジュール62のロックを解除する。したがって、起動した全てのUIモジュール61の動作が終了するまで、通信モジュール62がテンポラリフォルダから消去されることがない。その結果、起動した全てのUIモジュール61において、通信モジュール62を用いてプリンタ11と通信を行うことができる。
また、本実施形態では、UIモジュール61は、OS46を通じて通信モジュール62を起動させ、OS46を通じて通信モジュール62に第1指示データを受け渡す。一方、通信モジュール62は、フォントリストや総記憶容量や空き記憶容量をOS46に受け渡すと、動作を終了する。したがって、複数のUIモジュール61が起動しても、通信モジュール62は、1つしか起動されない。すなわち、OS46を通じて通信モジュール62を起動させることにより、1つの通信モジュール62のみを起動させることができる。その結果、複数の通信モジュール62を起動させる場合に比べ、CPU42の処理負担を軽減することができる。
また、本実施形態では、OS46のロック機能を利用して、UIモジュール61が通信モジュール62に対してロックを行う。したがって、通信モジュール62に対してロックを行う機能をUIモジュール61が有する場合に比べ、UIモジュール61の構成を簡単にすることができる。
また、本実施形態では、UIモジュール61は、第2指示データを含む通信オプション付きの起動指示コマンドをOS46に入力することにより、フォントデータをプリンタ11に記憶させることができる。
また、本実施形態では、UIモジュール61は、フォントデータを示すパスをOS46を介して通信モジュール62に受け渡し、第2指示データを含む通信オプション付きの起動指示コマンドをOS46に入力することにより、フォントデータをプリンタ11に記憶させることができる。
また、本実施形態では、通信モジュール62から受け渡されたフォントリストをUIモジュール61が指定言語に変換してディスプレイ51に表示させる。したがって、通信モジュール62には、データを指定言語に変換する処理が不要である。すなわち、通信モジュール62には、いわゆるローカライズが不要である。その結果、通信モジュール62の構成が簡単になる。
また、本実施形態では、複数のコマンドをプリンタ11に送信する際(S31~S40)、一度の通信確立で複数のコマンドをプリンタ11に順次送信し、コマンドに対する応答をプリンタ11から順次受信する。したがって、通信モジュール62が一のコマンドを送信するたびにプリンタ11との間に通信を確立する場合に比べ、PC12とプリンタ11との間の通信量(通信確立の手順に必要な通信量)が低減する。その結果、通信ネットワーク13におけるコリジョンの発生等が低減し、通信トラフィックが安定する。また、PC12とプリンタ11との間の通信時間が低減する。
[変形例]
本変形例では、複数のプログラム47がPC12にインストールされた例を説明する。一のプログラム47(以下、プログラム47Aと記載する)は、例えば、後述の家庭用ラベルプリンタのフォントを管理するプログラムであり、他の一のプログラム47(以下、プログラム47Bと記載する)は、例えば、金属加工/木材加工プリンタのフォントを管理するプログラムである。
プログラム47Aは、UIモジュール61(以下、UIモジュール61Aと記載する)と、通信モジュール62とを有する。プログラム47Bは、UIモジュール61(以下、UIモジュール61Bと記載する)と、通信モジュール62とを有する。
UIモジュール61AとUIモジュール61Bとは、実施形態で説明した処理を行う機能以外の機能の前部または一部が相違する。例えば、UIモジュール61AとUIモジュール61Bとは、ディスプレイ51に表示させる設定画面や、ユーザが印刷を指示する画像に対する編集機能などが相違する。すなわち、UIモジュール61AとUIモジュール61Bとは、実施形態で説明した処理をそれぞれ行うことができる別種のUIモジュール61である。
プログラム47Aが有する通信モジュール62と、プログラム47Bが有する通信モジュール62とは、同構成である。
プログラム47Aが起動すると、UIモジュール61Aが起動する。起動したUIモジュール61Aは、通信モジュール62をテンポラリフォルダに記憶させることをOS46に指示する。指示されたOS46により、通信モジュール62がテンポラリフォルダに記憶される。
プログラム47Aの起動後、プログラム47Bが起動すると、プログラム47Bは、上述の実施形態と同様に、通信モジュール62をテンポラリフォルダに記憶させることをOS46に指示する。指示されたOS46は、通信モジュール62がテンポラリフォルダに既に記憶されていることにより、通信モジュール62をテンポラリフォルダに新たに記憶しない。すなわち、プログラム47A及びプログラム47Bが起動しても、1つの通信モジュール62しかテンポラリフォルダに記憶されない。したがって、プログラム47A及びプログラム47Bがそれぞれ通信モジュール62をテンポラリフォルダに記憶させる場合に比べ、使用するテンポラリフォルダの容量が少なくなる。
また、プログラム47A及びプログラム47Bは、起動すると、上述の実施形態と同様にOS46のロック機能を利用して、通信モジュール62をそれぞれロックし、動作を終了する際に、通信モジュール62のロックをそれぞれ解除する。したがって、プログラム47A及びプログラム47Bの両方のプログラムが動作を終了するまでは、通信モジュール62は、テンポラリフォルダから消去されない。その結果、プログラム47A及びプログラム47Bは、どちらか一方のプログラム47が先に動作を終了したとしても、通信モジュール62を通じてプリンタ11と通信を行うことができる。
[その他の変形例]
上述の変形例では、UIモジュール61の機能が互いに相違するプログラム47Aとプログラム47BとがPC12にインストールされた例を説明した。しかしながら、同一の2つのプログラム47がPC12にインストールされ、同一の2つのプログラム47が起動したとしても、上述の変形例と同様に、1つの通信モジュール62しかテンポラリフォルダに記憶されない。また、2つのUIモジュール61がともに動作を終了しない限り、通信モジュール62はテンポラリフォルダから消去されない。
また、上述の実施形態では、ラベルプリンタであるプリンタ11を説明したが、プリンタ11は、家庭用ラベルプリンタであってもよいし、マスキングテープのような装飾用シートの作成に使われる飾り付けラベル用プリンタであってもよい。食品のパッケージや、電気ケーブルに貼り付けるラベルや、大量のラベルを一度に生成することが必要な用途に使われるプロ向けラベルプリンタであってもよい。プリンタ11は、ラベルプリンタ以外のプリンタであってもよい。例えば、プリンタ11は、ページプリンタや、金属や木材やガラスなどを印刷媒体とし、レーザ光などで印刷媒体の表面を加工する加工プリンタであってもよい。
また、上述の実施形態では、フォントデータを第2データの一例として説明した。しかしながら、第2データは、例えば、葉書の通信面に印刷する背景画像を示す背景画像データなどの画像データであってもよいし、ウォーターマークなどであってもよい。
また、上述の実施形態では、プログラム47が、UIモジュール61と通信モジュール62とを含む実行ファイルである例を説明した。しかしながら、UIモジュール61のみが実行ファイルであってもよい。起動したUIモジュール61は、URLを指定してOS46にコマンドを入力する。当該コマンドを入力されたOS46は、URLが示す通信モジュール62をインターネットを通じてダウンロードして取得し、テンポラリフォルダに記憶させる。