このページの本文へ

驚愕の結果! アルカリ乾電池性能比較実験! 第9回

電池実験装置の全貌公開! リレーユニットの製作【ソフト編】

2009年09月29日 20時00分更新

文● 藤山哲人

  • この記事をはてなブックマークに追加
  • 本文印刷

プログラムの前に16進数の軽い勉強

 先ほどのプログラムでは、2進数でリレーの状態を指定したが、プログラムではたいてい16進数(または10進数)で指定する。ここでは、軽く2進数から16進数への変換方法を説明しておこう。

 2進数は8桁の0と1で、16進数は2桁の数値とアルファベットで表記されていたことが、先のプログラムで確認できたと思う。2進数8桁の値は、左から4桁が16進数の左の1桁に、右からの4桁が16進数の右1桁に対応している。

 つまり2進数で「0001 0001」というのは、16進数では「11」と表現されるのだ。次の表は、2進数の4桁の値が対応する16進数の1桁との対応表だ。

2進数 16進数 2進数 16進数
0000010008
0001110019
001021010A
001131011B
010041100C
010151101D
011061110E
011171111F

 もし2進数で「1010 1010」と指定した場合は、左の4桁が「1010」対応する16進数の「A」、右の4桁も「1010」なので16進数は「A」となり、結果として「AA」という16進数になる。

 またチェックボックスなどを利用する場合は、2進数の各桁に次の定数をかけ、その総和が指定する値(10進数)になる。

128×8桁目のビット状態(0もしくは1)

64×7桁目のビット状態

32×6桁目のビット状態

16×5桁目のビット状態

8×4桁目のビット状態

4×3桁目のビット状態

2×2桁目のビット状態

1×1桁目のビット状態

指定する10進数

 先にも出た「1010 1010」を上の式に当てはめれば、

128*1 + 64*0 + 32*1 + 16*0 + 8*1 + 4*0 + 2*1 + 1*0 =

 となり、

128 + 32 + 8 + 2 = 170

 ということになる。数学に詳しい人は、この定数が2の乗数になっているのに気づくだろう。2の(桁数-1)乗したものが定数というわけだ。

Excelでパラレルポートの制御

 先ほどソフトをダウンロードしたサイトから、今度は「EXIOSCM」をダウンロードしてみよう。こちらは表計算のExcelから、パラレルポートを制御するExcelファイルとDLLなどが同梱されている。

 同梱のExcelシートをダブルクリックすると、次のような画面が表示され、リレーユニットのコントロールが可能だ。

C9のセルが出力するデータを指定するセル。ここでは&HF0を指定しているので、2進数で11110000を出力したことになる

 IOポートアドレスを確認し[Start I/O Access]ボタンをクリック。後は(Read/Write値/例:2)と書かれている左のセルに書き込む値を指定する。

 セルで指定できる値は、10進数か16進数だ。たとえば先に計算した170を指定し[Write Port]ボタンをクリックすると、リレーはONとOFFが交互になった状態になる。

 16進数で指定する場合は、数値の前に「&h」をつけて2桁の16進数を入力する。たとえば&hF0と指定すると、リレーユニットの4つがONになり、つづくリレーはすべてOFFとなる。

 このVBAで肝になっているのは、Excelの「ツール」-「マクロ」-「Visual Basic Editor」で表示できるプログラムだ。

Visual Basicのエディタ画面と、「標準モジュール」の「Module1」の内容

 中でも重要なのが「標準モジュール」の「Module1」に書かれている、DLLの呼び出しに関する宣言。

 この部分は、自分のプログラムにそのままコピー&ペーストすればいいので、テキストファイルなどとして保存しておくといい。

 実際に制御を行なっている部分は「Microsoft Excel Objects」の「Sheet1(IO_Access)」に書かれているVBAだ。

実際に制御を行なっている「Microsoft Excel Objects」の「Sheet1(IO_Access)」に書かれている内容

 「Private Sub cmdStartIO_Click()」で始まる、プロシージャ(プログラムの塊)は、制御を開始するための初期設定を行なう。

パラレルポート(iocsm)の初期化を行なうプロシージャ

 データの書き込みを行なうのは、 cmdWrite_Click()プロシージャだ。いろいろ処理を行なっているものの、肝となるのは「Call OutB(txtPort.Text, c)」という部分。コイツが指定したパラレルポートのIOポートアドレスに、指定したデータを出力する。

このプロシージャがパラレルポートへのデータを出力している

 プログラムの終了時には、cmdEndIO_Click()プロシージャでプリンタポートを開放する。

 さてExcelは表計算ソフトではあるが、一般にマクロと呼ばれている「Visual Basic for Applecation(VBA)」を利用すると、かなり複雑なプログラムも作れる。

 次はExcel VBAを使ってプログラムからリレーユニットを制御してみよう。

(次ページへ続く)

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

ASCII.jpメール アキバマガジン

クルマ情報byASCII

ピックアップ