2

測定には Agilent DMM を使用しています。Python 2.7 と PySerial モジュールを使用して通信します。アイデア: FOR ループを使用して、DMM から読み取り、データを取得します。毎回異なるポイントで、ある時点まで正常に機能しています。

例: ループを 20k 回測定するように設定すると、1k 回後に突然停止し、次の試行では 5k 回後に停止する可能性があります....停止 - DMM がデータの送信を停止し、Python が一種の待機状態のままであることを意味します。 . スクリプトが動かなくなり、終了する必要があります。エラーはありません。理由はわかりません。測定の間にタイムアウト (スリープ) を追加しようとしましたが、問題は解決しません。私のスクリプトの主なコマンドは次のとおりです。

# configure the serial connections 
ser = serial.Serial(
    port='com3',
    baudrate=19200,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
}


ser.write("CONF:CURRent:DC" + '\r\n')
time.sleep(1)
ser.write("SENS:CURR:DC:RANGe:UPP 0.05" + '\r\n')
time.sleep(1.5)

for m in range (0, 2000):
try:
    ser.write('READ?' + '\r\n')
    out += ser.read(18)
    print "out = ",out
except:
    print "error!"

ループが実行されています。最後まで「生き残る」こともありますが、ほとんどの場合は停止するだけです。アドバイスをお願いします。「例外」の部分には決して入らないことに注意してください。「試してみる」を追加しても役に立たなかった...

ありがとうございました!

~ドルフィン~

4

1 に答える 1

1

オブジェクトの作成時にタイムアウトを設定できserial.Serialます。読み取りタイムアウトと書き込みタイムアウトを指定するための 2 つのパラメーターがあります。次に例を示します。

ser = serial.Serial(
    port='com3',
    baudrate=19200,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=3, # <------ read timeout in seconds (can be floating)
    writeTimeout=3, # <-------------- write timeout in seconds (can be floating
}

これらのパラメーターが取り得る値について、ドキュメントには次のように記載されています。

timeout = None: 永遠に待つ

timeout = 0: ノンブロッキング モード (読み取り時にすぐに戻る)

timeout = x: タイムアウトを x 秒に設定します (float を許可)

于 2012-08-06T06:35:14.370 に答える