見出し画像

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の運営にも貢献できるのでよろしくお願います。