おはようございました。タイトルがなろう系並みに長い漢です。
ここ最近、現場で古い測定器類が不調になり始めることが多くなってまいりました。
我が家の測定器もその心配を寝ねばならない頃合いに差し掛かり、予備がいるよね…。
そんな訳で、一番優先度の高い『GPIB⇔PC』の自動計測周りのインターフェイスもそろそろ考えねばなりません。
現在まで現役だったGP232はずいぶん昔に購入させていただいたもので、このメインのPIC16F876も終息品となり、何かしらの予備が必要です。
しかも近年のEXCELでは標準モジュールはそのまま動かないので、少し改変する必要があります。
まぁ、ソフトは一回書き換えたら使い回しできるので何も問題ないのですが、ハード側の故障はPIC自体が手に入りにくいので致命傷になります。
作者の方は何やら大変な苦労をされていたようで、ありがとうございました以外の感謝の念が絶えません。
ここ数年のコンテンツ消費型のクレクレ君の異様なキチガイっぷりは涙をそそるものがありますよね…。(シミジミ)
さて、そのままPICの変更した奴でUSBってのも(皆がやってるので)あんまり芸がないし、やるなら高速化したい…と、ググってみるとKeysightの82357Bというアダプタの勝手が良いよ?メーカー純正の癖にあの会社にしては意味不明な位安いし…というような感じでしたので、今後会社絡みの仕事を家ですることが増える現実を踏まえてこちらへ移行準備することにしました。
Keysightの82357Bで使用する『Keysight IOライブラリ・スイート』にはVBA周りの環境が整っており、色んなことができるよ?とKeysight自身が色々宣伝されておられ、かなり資料がふんだんにあります。
(ただし、webの資料が結構早めに消えるのは外資故の制限なのかもしれません…)
良い子の皆は『これは使えるッ!』と思った資料は、しっかりローカル保存しときましょうね?
とりあえずメインで使うHP3562A・HP3563Aでのでの取り出し方はこんな感じに落ち着きました。
Sub btnStart_Click()
Dim Rdata As String ' 受信データ文字列
Dim SplitData ' 受信されたデータを分割して格納
Dim PrintData ' 配列から個別に取り出したデータ
Dim Counter As Long ' データカウンタ
Counter = 0
' 2重起動の防止
If RunFlag Then Exit Sub
RunFlag = True ' 動作中フラグをセット
' GPIB 初期設定
Dim RM As New VisaComLib.ResourceManager ' リソースマネージャーの定義
Dim HP356xA As New VisaComLib.FormattedIO488 ' 測定器の定義
Set HP356xA.IO = RM.Open("GPIB0::1::INSTR") ' GPIBアドレス 1 の装置設定
' コマンド送信
HP356xA.WriteString "DDAS" 'アスキー形式で読み出し
'データ数はヘッダー66+数値801(Re)+数値801(Im)
'ストリングでごっついので、分割する
Rdata = HP356xA.ReadString
SplitData = Split(Rdata, vbCrLf)
' データの書き込み分割したデータを分けて表示
For Each PrintData In SplitData
Range("B5").Offset(Counter, 0) = PrintData
Counter = Counter + 1
Next
' ローカル制御コマンド送信
HP356xA.WriteString "LCL"
' 終了処理
HP356xA.IO.Close
Set HP356xA = Nothing
Set RM = Nothing
RunFlag = False ' フラグのリセット
MsgBox "終了しました"
End Sub
ちなみに今まで使用していたGP232であれば、こんな感じです。
Sub btnStart_Click()
Dim Counter As Long ' データカウンタ
Dim Rdata As String ' 受信データ文字列
' 2重起動の防止
If RunFlag Then Exit Sub
RunFlag = True ' 動作中フラグをセット
' GPIB 初期設定
eg.CardOpen ' カードオープン処理
eg.Delimiter = eg.DELIMs.CrLf ' デリミタの設定
eg.TimeOut = 3 ' タイムアウトは3秒
' 測定器の初期設定
eg.ActiveAddress = Range("C2").Value ' 測定器のアドレス読み取り
If eg.ErrorHold <> 0 Then
' エラーが発生している
eg.CardCLose ' カードを閉じます
Exit Sub ' 中止します
End If
' コマンド送信
eg.AsciiLine = "DDAS" 'アスキー形式で読み出し
For Counter = 1 To 1669 'データ数はヘッダー66+数値801(Re)+数値801(Im)
Rdata = eg.AsciiLine
Range("A4").Offset(Counter, 0) = Counter ' データカウンタの書き込み
Range("A4").Offset(Counter, 1) = Rdata ' データの書き込み
Next Counter
eg.AsciiLine = "LCL" '
eg.CardCLose
RunFlag = False ' フラグのリセット
MsgBox "終了しました"
End Sub
どうです?ずいぶんすっきりしたでしょ?GPIBのアドレスはほぼ弄らないし、固定でもいいや…と思ったので面倒臭いから固定にしました。
考えてみればメインの玩具であるHP3562A,HP3563Aのデータ採取は主にこれを使っていた訳で、801点×2軸のデータが数分で取れる素晴らしい道具となっており、この手のツールがないと本当に危険です。しかも今回の変更で数分が数十秒に変わってしまった…。
皆様におかれましても、自動計測や周期的なデータ取りで困った際は取り敢えずCSV掃き出し、又はExcel+VBAで逃げるか?程度で試し、先ずはその自動計測が有効か?というのを試されてはいかがでしょうか?
本気でやりたきゃあ後でソフト組めば全然OKです。
動くものが仕様として出てきていれば、ソフト屋さんだって全体像が見れるってもんです。おおよそ外部に依頼するときに上司や余所者や銭ゲバが顔を出してきて余計なものがどっさりついてくるので、保守や費用対効果を考えたら、ひたすらシンプルにして『こんな感じのをバグが出ないようにうまい具合にヨロシク作って?それでUIは現場と一緒に煮詰めよう!』と、お願いするのが一番です。
(いつもの顧客が本当に必要だったものと同じです)
さて、昨今の会社ではさっき言ったことがまさにバンバン行われていて、余計な輩が絡んで元値の10倍に膨らむというのが普通にあったりします。
さらに残念なことに、うっかりスーパーマンに見える私に渡される予算と時間はその開発に必要な額面の100分の1に満たないことが良くあります。
金も時間もないのに成果だけは要求されるというのは、バブル期謳歌のキチガイが上にいる組織ではよくあるパターンです。
皆様におかれましても、何事もシンプルに、バブル期キチガイ上司の言うことは受け流すつもりで仕事にあたり、個人の生活をしっかり充足されていただけることを切に願います。
そんな訳で、個人ごときがやる程度の測定においては、まだまだ安直にLabViewには流れたくないッ!なんて思う今日この頃なのでしたとさ…。(何故か会社の仕事を家の測定器でやってますが…)
誤解の無い様に仕事で使うなら、LabVIEWに流れた方がマジでコスパ良いですよ?とだけは言っておく…。