2022.9.17
前へ
次へ
ホームページトップへ戻る


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第56回]



●PICUSBIO−03(5)同じパソコンに2台のPICUSBIO−03を接続する

前回はPICUSBIO−03を2台用意してその一方をWindows7パソコンにUSB接続し、もう一方をWindows98SEパソコンに接続して両者を16pinフラットケーブルコネクタで接続して動作テストを行ないました。
ND80Z3.5を使ってテストを行なったときはコネクタのピン数も信号端子配列も異なるため接続するフラットケーブルコネクタもそれにあわせた特殊なケーブルコネクタを作り、またプログラムもビット並びにあわせたデータ変換を行なうなどの手間がかかりました([第54回])。
それに比べると前回のPICUSBIO−03を2台使った動作テストはハードもソフトもうんと簡単になりました。
それはよいのですけれど。

私の場合には仕事ですからWindows7もWindows10もWindows98SE(!)も複数台所有しています。
PICUSBIO−03を2台用意してそれぞれ別のWindowsパソコンにUSB接続することになんの問題もありません。
昔と違いますから皆様方もノートパソコンとデスクトップパソコンとか、Windows7とWindows10とかというように2〜3台のパソコンをお持ちの方も少なからずみえるかと思います。
しかし「古いものは処分してしまったので今は1台しかもっていない」という方もそれなりにおいでかも。
「せっかくの記事なので同じことをやってみたいがパソコンは1台しかないのだ。」
「なんとかならんのか?」

そういうことになりますと。
ひょっとしてUSBポートが2つ余っていましたら、あるいはUSBハブなどで2つ確保できますならば、同じ1台のパソコンにPICUSBIO−03を2台とも接続してみたくなりますよねえ。
ところがこれができそうに見えてフツーはできないのです。

USB機器には固有のIDが割り当てられています。
もちろんPICUSBIOボードにもそれぞれ固有のIDが割り当てられています。
USB機器をWindowsパソコンに接続するとIDやそのほかの情報が読み出されて、それによってUSB通信が確立します。
このとき1台のWindowsパソコンに同じIDのUSB機器を複数台接続するとエラーになったり、そのうちの1台しか認識されなかったりします。
残念ながら2台ともアクセスするようにはできません。
逆にいえば、もしも同じIDではなくてそれぞれ別のIDを割り当てれば両方ともアクセスできる、はずということになります。
しかしUSBのIDナンバーは1つ取得するにも相当のお金が必要です。
とても2つ3つを所有するなんてできません。
それではPICUSBIOボードの場合にはどうしているのか?という当然の疑問が生じます。

IDナンバーはVender ID(事業者ID)とProduct ID(製品ID)が組になっています。
実はそのほかにもうひとつ製品を識別できるキーがあります。
一組のVender IDとProduct IDの下に4桁のRelease Numberがつけられます。
このナンバーを変えることで別の製品として認識させることが可能です。
PICUSBIOボードは製品ごとに別々のRelease Numberを割り当てていてBASICプログラムの起動時にそのナンバーでボードを識別しています。
下の画面の上から10行目で
picio−03 connected
という表示がそれです。


そういうことならば。
もしも2台のPICUSBIO−03に別々のRelease Numberを割り当てたら、1台のWindowsパソコンに2台のPICUSBIO−03を接続することができるのでは?
確かにその通りなのですが、それでもまだ問題があります。
PICUSBIO用のBASICは複数のPICUSBIOボードを制御できるようには作られていません。
これはほとんどのアプリケーションがそうなっていると思います。
どういうことかといいますと。
PICUSBIO用のBASICが起動すると接続されているPICUSBIOボードをサーチします。
PICUSBIOボードの接続を確認するとそのボードとの間でUSB通信を確立します。
もしもPICUSBIOボードが2台接続されていたとすると、それぞれ別のRelease Numberがついていたとしても最初に検出したボードに接続してしまいます。
WindowsOS自体は2台目のPICUSBIOボードも認識はしますが、アプリケーションは先の1台としかUSB通信を行ないません。
そのあたりのことについては次回に説明する予定です。

それでは結局PICUSBIO−03を2台接続することはできないのか?
PICUSBIO用のBASICが全てのナンバーのPICUSBIOボードを検出して接続する仕組みになっている以上そういうことになります。
しかし方法が全く無いわけではありません。
たとえばPICUSBIO−03#1のみに接続できる専用のBASICインタプリタを起動しておいて、それとは別にPICUSBIO−03#2のみに接続できる専用のBASICインタプリタを起動するならば、それは可能です。
ハードウェアと組になったアプリケーションソフトウェアを配布するようにすればできます。

でもねえ。
それじゃあソフトウェアの維持管理が厄介です。
そんな面倒なことは御免こうむりたいです。
ほかにもうちっと簡便な方法はないものか。

プログラムにちょいと詳しい方でしたらお気付きかもしれません。
今回のような条件の場合にはちょっと面倒なプログラムを書くことになりますが。
方法はあります。

コマンドライン引数を使うという方法です。
下はそのように書き換えたBASICインタプリタを起動した画面です。

左上にあらかじめ作成したPICUSBIO用BASICインタプリタを起動するためのコマンドプロンプトのショートカットが2つ並んでいます。
それぞれをクリックしてコマンドプロンプト窓を2つ表示しました。
マウスをそれぞれの窓内に移動してクリックすることでその窓内でキーボード入力ができるようになります。
2つの窓内では同じPICUSBIO用のBASICインタプリタを起動していますが、よく見ると少しだけ異なっているところがあります。
最終的にどうするかは未定なのですがPICUSBIO用のBASICインタプリタはとりあえず今のところ「PICIO」という名前にしています。
まだ開発中なので現在は「PICIO10O」というファイル名です。
PICIO10O[Enter]と入力することで起動します。

前回まではそういう仕組みだったのですが今回はそこに「コマンドライン引数」の機能を追加しました。
BASICインタプリタを起動するときにPICIO10Oの後ろにどちらのPICUSBIO−03に接続するかを指示するためのナンバーをつけて入力します。
上側のコマンドプロンプトでは
picio10o 0
と入力しています。
下側のコマンドプロンプトでは
picio10o 1
と入力しています。
その結果上側のコマンドプロンプトでは
picio−03−0 connected
と表示され、下側のコマンドプロンプトでは
picio−03−1 connected
と表示されています。
その表示の違いから上側のBASICインタプリタと下側のBASICインタプリタがそれぞれ別のPICUSBIO−03と接続していることがわかります。

プログラムを実行しました。

上の表示画面から同じ1台のWindows7パソコンにUSB接続した2台のPICUSB03の間で前回と全く同じようにデータのやりとりが行なわれていることが確認できます。

PIC−USBIO using BASIC[第56回]
2022.9.17upload

前へ
次へ
ホームページトップへ戻る