Welcome to telecotele.com » Projects

JVMA方式の調査

公開情報と食券券売機からJVMA方式を調査し、コインメックやビルバリを自前で制御します。

tags: store jvma

JVMA方式の調査のカバー画像

この記事は下記で寄稿した記事を2024年に再構成したものです。

はじめに

レシートプリンタとカスタマディスプレイの操作電子棚札の解析 ;-)から数年経ち、また店舗機器を操作したい気持ちが出てきました。 候補はいろいろ思いつきますが、ここでは現金を扱う機器を操作してみます。

具体的には、飲料自販機や食券券売機などに利用される「コインメック」や「ビルバリ」と呼ばれる機器を操作します。 本稿ではこれらの機器について概要と、操作に必要なプロトコルの調査方法1について述べ、最終的に機器を自前で操作します。

機器の概要

ここで操作する機器の概要について述べます。

コインメック

コインメックはコインメカニズム(Coin Mechanism)の略です。 硬貨を扱うことができ、特に本稿では「コインメック」といえば、飲料自販機や食券券売機などで利用されるタイプとします。 ガチャガチャで硬貨を入れる部分も「コインメック」と呼ばれたりしますがそれは除き、 また「コインアクセプタ」などと呼ばれるアーケードゲーム筐体で使われるような機器は対象外です。

コインメックを製造しているメーカーとしては、国内ではコンラックスや富士電機が有名2という印象で、 自販機などもこれらのメーカーが製造したコインメックがよく使われています。 海外製の自販機などを国内で利用する際は、海外メーカー製の日本円仕様コインメックが使われることもあるようです3

このタイプのコインメックでは、硬貨(10円・50円・100円・500円)4を投入すると真贋判定が行われ、真貨なら内部のチューブに収金されます。 また、お釣りとしてチューブ内の硬貨を払い出すことも可能です。

エスクロという機能もあり、これは100円・500円を投入したが返却する場合に投入硬貨そのものを返す(チューブ内からは払い出さない)機能です。 偽貨が投入され、もしその偽貨を真貨と誤判定した場合でもこの機能があることでチューブ内の硬貨(おそらく真貨)と交換されることを防いでいます。 ただ、この機能を使うと一度の取引で投入できる硬貨が数枚程度に制限されます。 もしこれが支障になるようなら、機種を選ぶ際にエスクロ機能の有無や設定で無効にできるか確認する必要があります。

これらのコインメックは外部からコマンドを与えることで制御可能です。 通信方式として、国内ではJVMA方式5というプロトコルが採用されています。 海外ではMDB/ICP、ccTalk、DEXなどが使われているようですがよく調べていないため割愛します。 MDBについては仕様が公開されているようで、もし日本円仕様のコインメックが手に入れば6制御しやすいかも知れません。

ビルバリ

続いてビルバリです。 これはビルバリデータ(Bill Validator)7の略で、紙幣を扱います。 紙幣を投入すると真贋判定が行われ、真券なら金庫に収金されます。

本稿ではビルバリといえば「JVMA方式のビルバリ」を指します。 この他「パラレル制御方式のビルバリ」も存在し、それぞれの概要は次のとおりです。

  • JVMA方式のビルバリ
    • 主に飲料自販機(と一部フジタカ製食券券売機)で用いられる。基本的には低額紙幣(1000円札、2000円札)のみ扱えるが、高性能なものは高額紙幣も扱えるようになる。
  • パラレル制御方式のビルバリ
    • (本稿では使わないためあまり調べていないですが)食券券売機や両替機などで用いられる。だいたい高額紙幣も扱える。真券を投入すると特定ピンがONするらしい。

正直「パラレル制御方式のビルバリ」のほうが使い勝手が良さそうな…。 でも手元にあった(先走って入手した)のはJVMA方式のビルバリなので、これでなんとかするしかありません。 コインメックを扱う以上、どのみちJVMA方式を使うことになるのでまぁ良いでしょう。

JVMA方式の調査

本稿で利用するコインメックとビルバリの制御はJVMA方式で行われることがわかりました。 ここではJVMA方式8について調べていきます。

なお、JVMA自体は他にも「JVMAモバイルベンディング仕様」9、 「自販機赤外線通信規格」10、 「自動販売機据付基準マニュアル」11などを定めています。 これらもJVMA方式といえばそういえるのかも知れませんが、ここではJVMA方式といえばコインメックとビルバリの通信を指すものとします。

ただ、JVMA方式の情報はあまり公開されていません。 それでも特許公報を調べたり、食券券売機の実機を解析したり、もちろんググりまくった結果ある程度は仕様を把握できました。 ここではそうして調べた記録をまとめます。

特許公報の調査

特許公報と、気になった部分を引用します。

三洋電機株式会社.自動販売機の制御装置.特開2000-172908

「従来の自動販売機では、主制御部と各端末制御部との間で行う通信は、図3に示すように、SYNラインをロー(L)にしてから通信を始め、最初の1バイトの途中でハイ(H)に戻す。」
「また、通信文は、コマンド(COM)とその反転信号で始まる。」
「コマンドは、先頭1ビットをスタートビットとしてローとし、その後に通信相手を示す5ビットと通信の種類を示す3ビット、パリティビット及びストップビットを持っている。そして、通信速度は、4800bpsと比較的低速の通信速度で統一されている。」
富士電機株式会社.貨幣鑑別装置の通信監視装置.特開2001-34821

「共通バスライン30は本例では3本の通信線からなる通信ライン31と、24V,8V,共通アースライン(GND)の3本の電源線からなる電源ライン32とによって構成されている。」
「なお、通信ライン31は、主制御部10が各従制御部20(21~26)にコマンドやデータを送信するシリアル信号線としてのOUT信号線311、主制御部10が各従制御部20(21~26)からデータを受信するシリアル信号線としてのIN信号線312、主制御部10がOUT信号線311にコマンドやデータを出力する直前に数100μsのパルス幅で出力する同期信号を送信するための信号線としてのSYN信号線313によって構成されている。」
「この分散制御システムの制御は、いわゆるポーリング/セレクティング方式によって行われている。即ち主制御部10は各従制御部20(21~26)を規則的に1局ずつアドレス指定してコマンドを送り、そのつど当該の従制御部20から主制御部10へのデータの送信を求める(ポーリング)。また別に、主制御部10は必要な従制御部20をアドレス指定してコマンドを送り、当該の従制御部20が主制御部10からのデータを受信することを求める(セレクティング)。」
ザコカコーラカンパニー.販売機デュアル母線構成.特表2002-510103

「一般VCCS電気仕様は、直列、8データビット、7線(2個のデータ、同期、共通信号、電力接地24V、8V)、4800ビット/秒、0-24ボルト信号である。」
「MDB及びVCCSの両標準は、0から31までの装置アドレスを使用する。」
「VCCSプロトコールは分離方向性(separate directional)(制御装置から周辺装置へ)の同期信号線を使用する。」
富士電機リテイルシステムズ株式会社.自動販売機.特開2009-223677

「自販機制御に使用されているシリアル通信仕様では、命令の種類を表す「コマンド」と、コマンドに付随して内容を表す「データ」が存在する。」
「データとしては8ビットの16進数で表現できる、00H~FFHまでの256通りを扱う。」
「自販機内の上記主制御部52、各端末53間の通信では、「同期信号」を送受信する為の専用の制御線を別途設けて、この同期信号に同期させてコマンドを送信し、同期信号を送信しないデータ送信と区別するようにしている。」
「また、同期信号として十分に長い信号を入力することで、端末53をハードリセットできる機能も備えている。」
「主制御部52は、まず「同期信号線」54上に同期信号を規定時間(短時間;図示の例では0.2μs~2ms)出力(ON)し、続いて「送信線」55上にコマンドを出力する。」
「コマンドは、各端末53毎に異なったコードとなっており、各端末53は受信したコマンドが自端末に対応するコマンドコードであった場合には、該コマンドに応じた処理を実行することになっている」
「上記自端末向けのコマンドを受信した端末53は、「受信線」56上にACK信号を出力する。このACK信号を受信した主制御部52は、「送信線」55上にデータを出力し、このデータを受信した端末53は「受信線」56上にACK信号を出力する。」
「一方、電源投入時に主制御部52が端末53を制御可能になるまでの間や、端末53が暴走する等して制御不能になった場合等には、主制御部52は図7(b)に示すように「同期信号線」54上に同期信号を一定時間以上(長時間;図示の例では数百ms程度)出力する。」
「これら回路構成は何れも基本的に、2つのインバータN1、N2が直列に接続された構成となっている。図示のインバータN1、N2は、何れも、オープン・コレクタのNOT回路である。」
「実際には出力側はNPNトランジスタのオープンコレクタ、入力側はトランジスタのベース入力となっている例が多い。」
「このオープン出力の特性を生かして、V1、制御電源(5Vや3.3V)と異なる信号伝達用のV2電源(24V等)を、インタフェース電源とすることで、ノイズ等のマージンを向上させている。」

特に関係しそうな箇所をまとめると、次のようになります。

  • 電源線がある
    • 24V および 8V
  • 同期線がある
    • 「SYNラインをロー(L)にしてから通信を始め、最初の1バイトの途中でハイ(H)に戻す。」(特開2000-172908)
    • 「コマンドやデータを出力する直前に数100μsのパルス幅で出力」(特開2001-34821)
    • 「同期信号に同期させてコマンドを送信し、同期信号を送信しないデータ送信と区別」(特開2009-223677)
    • 「同期信号を規定時間(短時間;図示の例では0.2μs~2ms)出力(ON)し、続いて「送信線」55上にコマンドを出力する。」(特開2009-223677)
    • 少なくともコマンドを送る前には同期線にパルスを出力する
    • 出力時間や、データ送信の場合も送るのかは検証の余地あり
  • シリアル信号線がある
    • 送信 および 受信
    • 4800bps
    • 8bit
    • パリティあり(奇数か偶数かは不明だが、2パターン試せば良い)
  • 出力はオープンコレクタ
  • コマンドについて
    • 上位5bitは通信相手のアドレス、下位3bitは通信の種類を示す
    • コマンドの後には、コマンドの反転信号が続く
    • コマンド送信後にはACKが返る
    • データが存在する場合はこのACKを受信してから送る

多少曖昧な箇所はありますが、やる気が出てきました。 もうこの時点でコインメックやビルバリ側との通信を試す?ファジング的にコマンドも投げてみる?という気になってきます。

実機の調査

先ほどの特許情報や、その他インターネットの情報も用いて時間をかければJVMA方式による操作が出来そうな気がしてきました。 いや…本当かな…正常に動いている機器を解析したほうが楽じゃない?ということで、ヤフオクから次図の食券券売機を入手しました。

らぁ麺 てれこテレコ亭 開店 らぁ麺 てれこテレコ亭 開店

本当は自販機が欲しかったのですが、土地も倉庫も無く、まして自宅室内にも置けるわけもなく12、コインメックが付いていて室内に置けるくらいには小型な機器ということで卓上券売機にしました。

もちろん中古、サポート無し、動作不安定という筐体です。 実際、(あまり検証には影響しませんが)食券への印字はかなり薄い状態でした。 さらに、この食券券売機には「パラレル制御方式のビルバリ」が備わっていましたが、それもまともに使えない状態です。 そのためパラレル制御方式のビルバリの解析は出来ませんでした。 結局「JVMA方式のビルバリ」が正常に動いている機器は入手できておらず、この操作については特許公報とインターネットの情報のみを頼りにしています。 なのでやっぱり本当に券売機まで買う必要があったかな…というと、もしかしたら無くてもいけたかも知れません。

なお、後で知ったことですがオフィス複合機の課金装置として使われる「コインベンダー」にもコインメックや、状態によってはビルバリも備わっているようです。 中古コインベンダーは中古券売機よりも安く取引されており、こちらを購入すべきだったかも知れません。 (コインベンダーの動作として、複合機などの上位機器が無くても動くのかは不明です。結局上位機器を用意するはめになったり、JVMA方式の解析の前に「コインベンダーの解析」を行うことになる可能性はあります)

機器の操作

以上でコインメックとビルバリの操作方法を完全に理解したことにして、実際に操作してみます。 シリアル通信ということは分かったので、PCやRaspberry Piなどから操作しても良いといえば良いですが、 同期線の扱いでタイミングが重視されそうなことを踏まえるとOSの載ったボードからは制御したくありません。 そこで間に中間ボードを挟み、この中間ボードがコインメックとビルバリを制御、中間ボードは上位機器から操作される構成にします。

挟むものは何でも良いです。 自分が大好きなLPC1114を使おうと思ったのですが当時の情勢により入手できず、ここではRaspberry Pi Picoを使うことにしました。 実際使ってみると、上位機器ともUSBシリアルで利用できますし、UARTのDMA転送が簡単だったり、マルチコアが使えるのも便利でした。 これが600円程度なら他のボード使う人なんて居なくなりますわ(お嬢様)。

また、前述した特許公報よりコインメックとビルバリの電源として24Vと8Vが必要です。 24Vについては秋月で売っているACアダプタを利用しています。 8Vについてはなかなか選択肢がありません。 8VのACアダプタは入手に難あり、 リニアレギュレータでの降圧は簡単ですが24Vからの降圧は損失が大きすぎて非現実的、 一度9VをACアダプタか電源モジュールで作成してからLDOで降圧はまわりくどい…など考えた結果、 最終的にはスイッチングレギュレータ(NJW1933)で24Vから降圧することにしました。 本当は自分で降圧回路を組むとトラブルが起きそうなのでちょっと…極力簡単にしたかったのですが仕方ありません。

こうして出来上がった中間ボードは、次の図のとおりです。

中間ボード 中間ボード

これを利用してなんかやんやし、次の動画のような精算機?コインベンダー?を製作できました。

おわりに

JVMA方式でコインメックとビルバリを制御しました。

冒頭で述べたとおり、この記事は下記を再構成したものです。

実は、この続きとして下記の記事もありました。

ただ、この記事は 「これまで1000円札のみの対応だけど2000円札にも対応したよ」 「券売機の輸送方法」 などJVMA方式とはあまり関係ない話でした。 どちらかと言えば製作記のようなもので、この辺は 同人サークル向け会計システムの製作 に書くことにします。

Footnotes

  1. 操作方法そのもの(プロトコルのコマンド)については述べません。

  2. 2018年ごろまではPanasonicも、また時期不明ですが過去にはサンデンも作っていたようです。

  3. ec-PROというコーヒーマシンでは “NRI Currenza C2” というコインメックのJPY仕様品が使われていました。NRI (National Rejectors, Inc. GmbH)は元々ドイツの会社のようですが、現在はCrane Payment Innovations (CPI)の一部になっていました。ちなみに、コンラックスもCPIグループのようです。

  4. 機種によっては5円やメダルにも対応しています。

  5. 仕様を策定した “Japan Vending System Manufactures Association” (日本自動販売システム機械工業会)の略称からこう呼ばれています。

  6. (たぶん)不可能だという点に目をつぶればよぉ~

  7. 日本語では「紙幣識別機」、金融機関などで厳密さが求められる際に使うのは「紙幣鑑別機」らしいです。文字を小さくしたら識別鑑別の識別と鑑別に失敗しそうですね。

  8. “VCCS” とも呼ばれるようです。シリアル通信のため「シリアル伝送方式」とも、また後述の特許公報を読むと「ベンダーコントロールシステム」「VCSバス」「Vender Control Coca-Cola System」と書かれていることもありました。あと海外メーカーの資料だと「JPSTD」とも。

  9. 電子マネー関連と思われるが内容は不明。

  10. 自販機と赤外線通信を行う際の仕様と思われるが内容は不明。

  11. JIS規格「自動販売機の据付基準」もあるが別もの?やっぱり内容は不明。でも大阪府立中央図書館と大阪府立中之島図書館に蔵書されているようなのでいつか確認しに行きたい。

  12. なぜか置いている事例はありますが… 事例1 事例2