2008年5月5日月曜日

言い訳とお願い

ちょっと言い訳がましいことを

GPIB と これからの ctypes 使った IO.dll の内容はちょっとミスがあるかもしれません。タイプミスがあるかもしれません。というのも、自宅には GPIBな環境もないし、自宅PCはノートなのでプリンタポートが無いからです。

私は、企業に勤める身なので、会社で開発したソースを外に持ち出せません。それをすると、会社で給料をもらっている作業時間を外部に持ち出す、詐取行為になるからです。

そのため、ここで公開しているコードは、基本的に全て自宅で記憶を元に一からコーディングしているのですが、確認(ベリフィケイション)できているかというと、物理的に出来ないからです。自宅PC にはプリンタポートもGPIB環境も無いからです。

そこでお願いなのですが、もし確認できる環境にある人がいれば、タイプミスや不具合を報告して欲しいのです。会社から自分の(この)ブログにアクセスして確認することも出来るのですが、僕はまだ現職を失いたくないのでそれはしていません。勝手なお願いですが協力していただけると非常にありがたいです。

HandyMan

2008年5月4日日曜日

Python 効果的勉強方法

たまたま自分の都合で、Python を目的にしていますが、勉強するにあたり、資料が少なく、つまることも多いと思います。もちろんPython のマニュアルを読むこと、は、はじめにすることです、が。それでもつまった時、息抜きに他のオブジェクト指向言語やスクリプト言語の解説やチュートリアルを読むと、開けることがあります。

Ruby
チュートリアル とか Matlab の GettingStarted あたりを、ふと流すと、あ?これと同じことか!と目が開くこともままあります。同じ事を違う表現で書いてあるだけで容易に理解できるようになる、ことがあるからです。

私も、本当なら目的に最短の手段(言語)を使いたいのですが、環境(職場やライセンスフィー)がそれを許さないこともあり Python を選び勉強中ですが、「使えるモノは親でも使え!」※1 です。

それ以前にですが、日本で Ruby でなく Python 使う理由、他人を納得させられる理由、「同僚が使うのを嫌がるかもしれない」を越える理由、を考えてから Python を勉強し始めるべきですね。
「流行ってるから」「流行りそうだから」(笑 

でも、「楽しそうだから」は、、アリかも。

※1
あなたがコタツに入って紅白歌合戦を見ているとき、ミカンが食べたくなりました。
ミカンは食器棚の上、手が届きません。でもコタツから出たくありません。
そこに、父親がトイレから帰ってきました。
「お父さん、ミカンとってー」

2008年5月2日金曜日

CSVファイルの作成

Python file IO でCSV ファイルを出力する。
測定器からのデータなどを .CSV ファイルに書いてみます。
  1. 初期設定、現在時刻等を元にファイル名とかを決めます。
  2. Data というリストを、読み込みのバッファにします。
  3. ファイルを開きます。
  4. Data に測定器からのデータを入れます。
  5. Data をカンマを区切りにした文字列にしてファイルに書き込みます
  6. ファイルを閉じます
追記:標準 CSVモジュールを使った記事はこちら


##

from time import time, strftime, localtime

TimeStart = time()
NameTime = strftime('%Y%m%d_%H%M%S_', localtime(TimeStart))
NamePlant = r'test'
Ext1 = r'.csv'
Dlm = r','
CR = '\n'
Data = [0.0 for i in range(4)]


NameFile1 = NameTime + NamePlant + Ext1
print '\nFile name : ', NameFile1

FileOut1 = open(NameFile1,'w')
##FileOut1.write( CR )

## 1st sample
Data[0] = time()
Data[1] = 1.0 ## inst1.read
Data[2] = 1.5 ## inst2.read

FileOut1.write(str(Data[0])+ Dlm +
str(Data[1])+ Dlm +
str(Data[2])+ Dlm +
str(Data[3])+ Dlm +
CR)

## 2nd sample
Data[0] = time()
Data[1] = 2.0 ## inst1.read
Data[2] = 1.6 ## inst2.read

StrData = (str(Data[0])+ Dlm +
str(Data[1])+ Dlm +
str(Data[2])+ Dlm +
str(Data[3])+ Dlm +
CR)

FileOut1.write(StrData)


##FileOut1.write( CR )
FileOut1.close()

##raw_input()

2008年5月1日木曜日

PyVISA でGPIB測定器の制御 その1

機能確認編

前にも書きましたけど PyVISA を試すには VISA32.dll か相当のDLLが必要なので、NI か Agilent から入手してください。測定器を何か買うとそれ風の CD がついてきます。もちろん PyVISA もダウンロードしてインストールしてください。

Agilent の場合、 Agilent connection expert 14.0 という CDがあって、それを CDインストールすると、各種ファイルやツールがインストールされます。

ソフトを試す前に、PC と計測器が GPIBケーブルや、USB、シリアルケーブルで正しく接続され認識されているか確かめます。

Agilent の場合 Agilent IO control というツールが使えます。NI は なんたらSPY とかいうソフトだったと思います。それをつかって VISA リソースネームを調べます。ついでに VISA32.dll の場所やパスも分かると楽です。

では、
  1. PyVISA をインポートします。
  2. 周波数カウンターとマルチメータのVISAリソースを設定します。
  3. 周波数カウンターとマルチメータを初期化します。
  4. 測定値を読みます。
この .write .read だけで殆どの、取扱説明書にある C や QuickBasic のソースから Python に書き換えられると思います。遅いのは測定器の初期化の設定を変えたりコマンドを変えたりとかで高速化出来ます。私は、数年前の HP のデスクトップと USB-GPIB変換と 53132A 54401A でPython 使って 10Hz。分解能を犠牲にすれば 20-50Hz でサンプリングできてます。ここからは、測定器設定屋さんの腕の見せ所(笑)、Python とは違う話なのでやめておきます。

「スクリプト言語だから遅い」というのは昔の話で、YouTube の動画見れるくらいの PC なら Windows でも大丈夫です。

シリアルケーブルで、測定器を制御するには、測定器側の追加の設定も結構必要です。 Agilent IO control とか SPY ソフト?できちんと認識されるレベルまでセットアップしてから、自分のソフトを試しましょう。Agilent のマルチメータは、REMOTE コマンド送ってから1秒くらい sleep() 入れたらうまく動きました。



## $Id$
##
## Win32 (Win XP)
## Python2.5 (for win32)
## PyVISA1.1 (for win32 Python2.5)
##

from pyvisa.vpp43 import visa_library
visa_librery.load_library(r'c:\WINDOWS\system32\agvisa32.dll')
from visa import *
from time import time

## initialize
M1 = instrument('GPIB::22') # multimeter Agilent 34401A
C1 = instrument('GPIB::4') # counter Agilent 53132A

M1.write('*RST')
M1.write('*CLS')
M1.write('VOLT:DC:NPLC 1')
M1.write('VOLT:DC:RANG 10')

C1.write('*RST')
C1.write('*CLS')
C1.write(':FUNC "FREQ 1"')
C1.write(':FREQ:ARM:STAR:SOUR IMM')
C1.write(':FREQ:ARM:STOP:SOUR TIM')
C1.write(':FREQ:ARM:STOP:TIM 0.1')


## measure
M1.write('READ?')
print M1.read()
print time()

C1.write('READ?')
print C1.read()
print time()

raw_input()

2008年4月29日火曜日

Visa.dll

そもそも Visa とななにか? Google 願います。クレジットカードではありませんが、そっちの方がバンバンヒットするかもしれません、Powered by Python みたいなもんで、探すのが嫌になります、が。

pyVISA は visa の dll を使うための便利なインターフェースを提供するだけで基本は dll を使います。多分。また、ラッパーとか ライブラリ とか com サーバーとか、、、いろいろな的確な言葉があるらしいですが、 windows プログラマではないので、私は言葉がまったく理解できていません。

GP-IB とは、測定器を制御するインターフェースの規格で、まぁ Ether net みたいな、各レイヤーの仕様を規定したものです、と思います。。。計測が専門で無い人には、訳の分からない言葉がいっぱい出てきます SICL とか SCPI とか。我慢してください。わたしがソフトのドキュメントを見ても同じようなことを感じます、し、がまんしてこうしてがんばってますので。Visa は、まぁもうちょっと仮想化というか抽象化するための通信規格と思います。多分。

Visa は、一応規格なのですが、各社の解釈や、後方互換性のために独自の機能も含まれます。2大サプライヤーは、Agilent(HP) と National Instruments(NI)です。これが微妙に違うのが問題です。先のケーブルの問題とかもここで吸収しようとするので厄介です。

Visa を Windows PC で扱うときに、なにか、環境変数とか、ファイル名とかをシェア、いや取り合う、互いに上書きしあう?ので面倒なことが起こりがちです。不安なときには、自分の会社がどちらよりのシステムなのか、システム管理者に問い合わせてください(笑)知る分けないですよね。

とりあえず、先輩(得意?)が Agilent派 か NI派 か分かれば、あわせましょう。変に刃向かって違うのをインストールすると、後で仕事が増えるだけです。

GP-IB 機器を制御するには、HP Quick Basic(Agilent) とか Visual Basic 、 C を使うのがメジャーなようです。サンプルコードがいっぱい見つかります。低水準言語です。

「もっと簡単なのないの?」ここから商売が始まります「ありますとも、Agilent(HP) Vee Pro」 「いえいえ、これからは labVIEWですよ!」学生さんとお試し版はもちろんフリーです!とMatlab か Ms-office みたいなことを言い出します。「Pythonですか?(商売にならなくなるので)サポートしてません」とも。。

横道にそれましたが、わたしも会社の都合で Agilent 派、ということでAgilent IO Libraries Suite 14.0 を言われるがまま CDインストール。これでagvisa.dll が適当にインストールされます。注意書きにもあるように、先ずソフトをインストールしてから測定器をつなぎましょう。

近い将来 NI-DAQmx を使うおもちゃ(NI)が手に入りそうなので、ひょっとするとそちらもフォローできるかもしれません。

2008年4月28日月曜日

GPIB シリアルケーブル Agilent

これから、visa.dll と pyVisa を使った計測器制御に行く前に
「agilent comunicating serial」
「agilent comunicating rs232」
で google 願います。

結論から言うと、Agilent (HP)のクロスケーブルは、変態ケーブル です。
クロスオーバーとか ヌルモデムケーブルを自称してますが、クロスオーバー なのにCD と RI が1:1でつながってますので気をつけましょう。これをつながないと機能しないので、市販のケーブルでは、agirent(HP) の機器を制御できません。HP200LXに添付されるケーブルも このHP変態ケーブルです。

pyVisa を試すにあたって、わざわざ PCI カードや USB アダプタを用意できる幸せな人はともかく、、、ちゃちゃっと機能だけシリアルケーブルで試すか、な、などと思いついた人が、きっちりはまってしまう落とし穴です、ここ。

----------
ついでに、RS-232C tips

ネジがマイナスならインチネジ、プラスなら(あまり無いけど産業用機器にたまにある)はミリネジです。

ピンが出てるのは、PC側、DTE機器。
メスは DCE機器。でも、そんなの無視してる評価ボードとか多数あります。とーてもはづかしいでつ。

ケーブルも両端が同じならクロス。これ、外人が居る時はちゃんとクロスオーバーと最後まで言いましょうね、宗教的にクロスだけでは「十字架」になるので嫌な感じになるそうです。基本は、両端が違うコネクタならストレートです、が、半田付けできる人がいる会社や、変態ケーブルを売ってる会社もあるので気をつけましょう。

D(DB)コネクタは、多極なので、オスメスで、ピン番号が入れ替わります、本当に、本気で「見て」 pin番号を確認しましょー

2008年4月23日水曜日

+5V電源 from PC

電子工作2本目!PCから 5V、まぁ普通のアイデアですね。


Posted by Picasa

古いノートPCやデスクトップから 5V!これ、結構気に入ってます(笑 探せば転がってますよね、コレ

Posted by Picasa