TWSNMP FCの計測器対応でVXI-11は難しそうだけどLXIはできそう
今朝は、4時半から開発開始です。
日曜日にいただいたフィードバックで知ったVXI-11が気になって早く起きました。
VXI-11についていろいろ調べてみると先人の苦労に出会います。
やPyhton版の
がありました。でも、GO言語のパッケージは見つかりません。
さらに、Googleさんに聞いてみると、
を見つけました。VXI-11はGPIBをLAN経由にする規格ですが、LXIは
LAN経由で測定器と通信する規格のようです。こちらのほうがモダンなようです。
このGO言語のパッケージを読んでみると簡単に組み込めそうです。
VXI-11は難しいそうだったので、モチベーションが下がりましたが、
LXIは簡単そうなので、モチベーションが回復しました。
さて、試すためには対象の測定器が必要です。LXI対応の測定器で検索する300万円とか30万円とか、安くても6万円です。
LXIを試すだけに買うには高すぎます。
何かないかと探していると
を見つけました。LXIのサンプルサーバーです。
このまま動かすと、アクセスした時に
TypeError: acquire() takes no keyword arguments
のエラーで止まります。
if not self.server.lock.acquire(blocking=False):
の行を
if not self.server.lock.acquire(False):
にすれば解決しました。
クライアの側は、先程のGO言語のパッケージと使って
package main
import (
"fmt"
"log"
"github.com/gotmc/lxi"
)
func main() {
d, err := lxi.NewDevice("TCPIP0::192.168.1.7::5025::SOCKET")
if err != nil {
log.Fatalf("NewDevice error: %s", err)
}
a, err := d.Query("*IDN?")
if err != nil {
log.Fatalf("NewDevice error: %s", err)
}
fmt.Println(a)
a, err = d.Query("READ?")
if err != nil {
log.Fatalf("NewDevice error: %s", err)
}
fmt.Println(a)
err = d.Close()
if err != nil {
log.Printf("error closing fg: %s", err)
}
}
のように書きました。
実行すると
% go run main.go
:::5025
+3.360612E-01
うまくいきました。TWSNMP FCに組み込めそうです。
明日に続く
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。