【EPSON OPOS ADK・SetupPOS】レシートプリンターなどのPOS機器をセットアップする

**これは「C#によるPOS開発入門（的な）」と称して連載している記事の1つです。他は[こちら](https://qiita.com/Automatic9045/items/0c8d05e1aa6255f7bd1c)**

# 1. はじめに
ドライバーのインストールや使用機器の登録など、セットアップの方法はどのメーカーでもホームページに掲載されているので、読めば大体わかります。
ただ、EPSON製の機器については、カスタマイズ性の高さからセットアップの方法がそこそこ複雑です。理解するまでにかなりの時間がかかったので、この記事ではEPSON製に限って解説しようと思います。

EPSON製以外の機器を使用したい場合でも、この記事を一読すれば、セットアップの一般的な手順をなんとなく掴めると思います。

# 2. この記事の対象読者
- EPSON製POS機器のセットアップが上手くいっておらず放置している人
- 面白そうだったので感熱プリンターを買ってみたものの、動かし方が分からず途方に暮れている人

# 3. セットアップ
## セットアップの手順
1. POS for .NETをインストール
2. EPSON OPOS ADK（.NET版）をインストール
3. ADK同梱のSetupPOSで使用する機器を登録
4. Memory Switch Setting Utilityで各種設定
5. CheckHealthで動作試験

## Microsoft Point of Service（POS for .NET）をインストールする
[v1.14.1をダウンロード（公式へ）](https://www.microsoft.com/en-us/download/details.aspx?id=55758)<font color="red">**※最新版ではない可能性があります**</font>
ここはインストーラーの案内通りにインストールして大丈夫ですが、オプションとなるSDKもあわせてインストールしておくと便利です。

## EPSON OPOS ADK（.NET版）をインストールする
EPSONではいくつかのドライバーが提供されています。

- EPSON OPOS ADK（OLE版）……C++での開発向け
- EPSON OPOS ADK（.NET版）……C#、VB.NETでの開発向け
- EPSON Advanced Printer Driver……[WPS](https://www.google.com/search?q=windows+printing+system)準拠、Wordやメモ帳等からの印刷向け

など…

今回は「C#による」POS開発入門なので、.NET版のEPSON OPOS ADKをインストールします。
ここで注意。<font color="red">**POS for .NETとバージョンを合わせて下さい**</font>（例えばPOS for .NETがv1.14.xxなら、OPOS ADKはVer.1.14.xxJ）。バージョンが合っていない場合、[**CheckHealthTestが動作しない**]()などの問題が発生する場合があります。
[ダウンロード（公式へ）](https://partner.epson.jp/support/details/contents027/)

### UACの問題
ここに最大の罠が仕掛けられています。
インストール後、EPSON OPOS ADKに同梱されているSetupPOSで使用する機器をADKに登録するのですが、<font color="red">**既定のProgram Filesフォルダ内にインストールすると、この処理がUACに阻まれてしまい、登録することが出来ません。**</font>このときに表示されるエラーも「SetupPOSの処理に失敗しました。変更した内容は保存されません。」というもので、更に公式には[見当違いなFAQ](https://faq2.epson.jp/web/Detail.aspx?id=50196)もあるため、原因の究明で1日潰れること必至です。
Cドライブ直下にフォルダを作り、その中にインストールすることで回避します。

## SetupPOSで使用する機器を登録する
インストールしたEPSON OPOS ADKに同梱されているSetupPOS（OPOS for .NET\SetupPOS\Epson.opos.tm.setpos.exe）を管理者権限で実行し、ウィンドウ上部の「追加」ボタンから機器の情報を入力していきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677302/db5b5657-3419-2770-7d8b-e6bb1476090d.png">

シリアル接続の場合（シリアル-USB変換器を利用する場合を含む）は、通信速度を最大の115200bpsにしておくと良いです。初期設定の19200bpsでは、画像1枚の送信にも10秒以上かかってしまうので非常に使いづらいです。
通信を速くした結果、送信データに欠損が出てしまうようなことがあった場合は、パリティ（受信したデータに欠損があるか検知する機能）を設定しましょう。

と書きはしましたが、私はまだ一度もデータが欠損しているのを見たことがありません。工場などのノイズが多い環境ではよく発生するものなのでしょうか……？
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677302/044ffe5d-e9d2-0dc1-e214-effc924a52a6.png">

## （サーマルプリンターの場合）Memory Switch Setting Utilityで各種設定をする
Memory Switch Setting Utilityとは、プリンターに内蔵されている設定を記憶するためのメモリースイッチを弄るためのユーティリティです。OPOS ADKに依存せずに動作するため、SetupPOSで機器を登録していなくても設定可能です。

通信速度やパリティなどの設定は、SetupPOSで登録したものに合わせておきます。
モデルによっては、通信速度等をディップスイッチで設定するモードを備えていることがあります。Memory Switch Setting Utilityで通信速度等の項目がグレーアウトされている場合は、ディップスイッチを弄って、メモリースイッチで設定するモードに変更します。

## CheckHealthTestで動作試験をする
OPOS ADKには、SetupPOSで正しく機器を登録出来ているか、正しく機器をパソコンに接続出来ているかを試すための動作試験用アプリケーション「CheckHealthTest」が同梱されています（OPOS for .NET\CheckHealthTest.exe）。
ここで使用する機器が正常に動作することを確認して下さい。

<font color="red">**もしCheckHealthTestが起動しない場合、EPSON OPOS ADKのバージョンがPOS for .NETのバージョンに合っていない可能性があります。**</font>
以下の症状が見られる場合は、バージョンが合っていない可能性が高いです。

- うんともすんとも言わない（Windows 10で確認）
- すぐ応答なしになって落ちる（Windows 8.1で確認）

POS for .NET **v1.14.1**と一緒に、EPSON OPOS ADK **Ver.1.12.29J**をインストールしていませんか？
インストールのし直しは[こちら](https://qiita.com/automatic9045/items/820f2a4dccb1b2887065)

# 4. 終わりに
この記事以外にもPOS開発関連の記事を投稿しています。もし良ければ[こちら](https://qiita.com/Automatic9045/items/0c8d05e1aa6255f7bd1c)からどうぞ。