SCPI Kommandos: Agilent U1253B und ein Python Beispiel

SCPI Kommandos: Agilent U1253B und ein Python Beispiel

Meine Liste aller SCPI Kommandos, die ich bisher für das Agilent U1253B herausgefunden und getestet habe und ein kurzes Beispielprogramm in Python.

Die SCPI Kommandos

Standard Commands for Programmable Instruments SCPI ist eine Sammlung von Klartext (ASCII) Kommandos zur Steuerung von Messgeräten, wie eben diesem Multimeter. Der Vorteil ist, dass die Kommandos gut lesbar und dem entsprechend auch gut „konstruierbar” sind. Das Agilent U1253B unterstützt ein paar SCPI Kommandos, mit denen sich schon einiges anfangen lässt, du solltest allerdings nicht in das Programming Guide für eines der Tischmultimeter schauen, da kann das U1253B nicht mithalten, umgekehrt gibt es für das U1253B ein paar Kommandos, die es bei den großen Multimetern so nicht gibt …

 

MessbereichKommandoBemerkung
Alle*IDN?Liefert die Geräte-Identifikation z.B. Agilent Technologies,U1253B,MY51530075,V2.22
*RSTReset, liefert die Position des Drehschalters, beginnend bei *0 für ganz links bis *8 für ganz rechts.
Ändern der Stellung des Drehschalters sendet automatisch die neue Position: *0 für ganz links bis *8 für ganz rechts.
READ?Aktuellen Messwert auslesen FETC? funktioniert auch
CONF?Liefert die aktuelle Konfiguration, z.B.: "CURR +5.00000000E-02,+1.00000000E-06"
*0 (~V)CONF:VOLT:AC [Auto, 5, 50, 500, 1000] Beispiel: CONF:VOLT:AC 5 In diesem Messbereich kann nur AC ausgewählt werden. DC führt zu einem Fehler "*E"
CONF:FREQFrequenzmessung
*1 (~=V)CONF:VOLT:[AC,DC,ACDC] [Auto, 5, 50, 500, 1000]Beispiel: CONF:VOLT:DC 5 Mit CONF:VOLT:ACDC kann neben AC und DC Messung der Modus für beide Spannungen ausgewählt werden.
CONF:FREQFrequenzmessung
*2 (~=mV)CONF:VOLT:[AC,DC,ACDC] [Auto, 0.05, 0.5, 1, 1000]Beispiel: CONF:VOLT:AC 5
CONF:FREQFrequenzmessung
*3 (?)CONF:[RES,CONT] [500, 5k, 50k, 5M, 50M, 500M]Beispiel: CONF:RES 5M RES: Widerstand messen CONT: Widerstand mit Durchgangsprüfer-Piepser
CONF:CONDLeitfähigkeit immer im Range 500 nS
*4 (Diode)CONF:DIOD
CONF:FREQ
*5 (C, T)CONF:CAP [Auto, 10n, 100n, 1000n, 10u, 100u, 1000u, 10m, 100m]Beispiel: CONF:CAP 10m
CONF:TEMP [J,K],CELBeispiel: CONF:TEMP J,CEL CEL misst die Temperaturen in Celsius J = J-Type Fühler, K = K-Type Fühler
SYST:TCOM [0,1]Beispiel: SYST:TCOM 0 0 = Temperaturkompensation aus 1 = Temperaturkompensation ein Temperaturkompensation führt zu einer Messung relativ zur internen Temperatur des Gerätes.
*6 (µA)CONF:CURR:[AC, DC, ACDC] [Auto, 500u 5000u]Beispiel: CONF:CURR:AC 500u Statt 5000u kann man auch 5m oder 0.005 schreiben, dass gilt auch für alle andern Kommandos
*7 (mA, A)CONF:CURR:[AC, DC, ACDC] [Auto, 50m, 500m]Beispiel: CONF:CURR:AC 50m die Messbereiche über 500m können nur ausgewählt werden, wenn ein Kabel in der entsprechenden Buchse steckt.
CONF:CURR:[AC, DC, ACDC] [Auto, 5, 10]Beispiel: CONF:CURR:AC 10
SYST:CPER [4-20, 0-20] CONF:CURR:PERCBeispiel: SYST:CPER 4-20 CONF:CURR:PERC Strommessung in % im Bereich von 4 - 20 mA oder 0 - 20 mA. Bei 4 - 20 mA entsprechen 25% 8 mA und im 0.20 mA Bereich logischer Weise 5 mA

Beispielprogramm in Python

Dieses kleine Beispielprogramm stellt eine serielle Bluetooth Verbindung zu einem 1253B mit entpsrechendem Adapter her und gibt auf stdout jeweils die Zeit in Sekunden und die Temperatur in °C aus. So kann das aussehen:

0.2858979702 23.3201
0.421705961227 23.3201
0.458187818527 23.3244

Um die Ausgabe in eine Datei zu schreiben, kannst du einfach stdout umleiten. Den Abstand zwischen den Messungen könntest du noch mit time.sleep() etwas verlängern, in dieser Form liefert das Programm etwa 27 Messwerte pro Sekunde, das dürfte für die meisten Temperaturmessungen etwas zu schnell sein.
Den Port musst Du eventuell noch anpassen. Auf meinem Mac ist es immer dieser Port, ob das bei dir auch so ist? Keine Ahnung! Geh einfach nach /dev/ und schau nach.

Ach so: Klar, das Programm kann so nur auf unixoiden Systemen, wie Linux oder unter MacOS X funktionieren. Wie du den entsprechenden Port unter Windows-Python auf machst, lässt sich aber bestimmt schnell ergooglen.


#!/usr/bin/env python
# coding: utf8

import time
import serial
import sys

ser = serial.Serial(
port='/dev/tty.AgilentU1177A-271650-SPP',
baudrate=9600
)

time.sleep(0.5)
ser.write("CONF:TEMP K,CEL\n")
ser.write("SYST:TCOM:0\n")

t0 = time.time()

try:
    while 1:
        t=time.time()-t0
        ser.write("READ?\n")
        a=ser.readline()
        f = 0.0
        try:
            f=float(a)
        except ValueError:
            f=0
        print t,f
        sys.stdout.flush()

except KeyboardInterrupt:
    pass

ser.write("*RST\r\n")
time.sleep(0.2)

ser.close()


Tags assigned to this article:
AgilentPythonSCPI

No comments

Write a comment
No Comments Yet! You can be first to comment this post!

Write a Comment

Your e-mail address will not be published.
Required fields are marked*