¿Cómo personalizar la 'escritura' en el instrumento?

2

Me estoy comunicando con Power Supply RIGOL DP832A a través de Ethernet.

from vxi11 import Instrument
dev = Instrument('192.168.1.186', 'inst0')

answer = dev.ask('*IDN?').strip()
print(answer)

channel = 3
channel = str(channel)

volts= 22
volts = str(volts)

current = 2.3
current = str(current)

selchannel = 'CH'+ channel
mypass = 'APPL ' + selchannel + ','

mypass = mypass + volts + ','

mypass = mypass + current

print (mypass)
dev.write(mypass)

En mi expdp832a.py todas las cosas con canal, voltios y corriente que estoy haciendo porque más adelante tomaré la entrada del canal, la entrada de voltios y la entrada de corriente del usuario y la estableceré en los valores que el usuario me diga a través de una función como set_powersupply(channel, volts, current) .

Cuando estoy imprimiendo el valor de mypass , es string con el valor APPL CH3, 22, 2.3 pero todavía mi PowerSupply muestra invalid command .

En cambio, si lo paso directamente como dev.write('APPL CH3, 22, 2.3') , Todo funciona correctamente y el Canal 3 de la fuente de alimentación se configura con volots y valores actuales.

¿Qué está mal en el método anterior? Si quiero que el usuario pueda seleccionarlo, tengo que pasar los valores de canal, voltios y corriente como entrada del usuario y no como valores codificados.

    
pregunta pyL

2 respuestas

0

Para obtener un mejor control del formato de cadena en Python (versión 2.6 o posterior), use la función incorporada str.format . Por ejemplo:

channel = 3
volts= 22
current = 2.3
#
# example with spaces
mypass="APPL CH{0}, {1}, {2}".format(channel, volts, current)
# mypass contains 'APPL CH3, 22, 2.3'
#
# example without spaces
mypass="APPL CH{0},{1},{2}".format(channel, volts, current)
# mypass contains 'APPL CH3,22,2.3'

Dentro de la cadena de formato, el {0} se reemplaza con el primer valor (canal), el {1} se reemplaza con el segundo valor (voltios), etc.

Como la mayoría de las cadenas en python, se usa la sustitución de barra invertida, así que \r es el carácter 0x13 (CR) y \n es el carácter 0x10 (LF). Cuando se usa para el control del instrumento, el instrumento remoto puede requerir uno o ambos de estos caracteres de extremo de línea. No sé si dev.write () maneja el final de la línea por usted o no.

Una buena práctica de programación es incluir esto en una función o en una clase, si aún no existe una clase ya preparada para este dispositivo.

def RigolDp832aMypass(channel, volts, current):
    """Return a string formatted with voltage and current command for RIGOL DP832A power supply"""
    return "APPL CH{0}, {1}, {2}".format(channel, volts, current)

# Test
print(RigolDp832aMypass(channel=3, volts=22, current=2.3))
# Expect 'APPL CH3, 22, 2.3'
#
# You could then invoke dev.write(RigolDp832aMypass(channel=3, volts=22, current=2.3))

Probado con Python 2.7.3 y Python 3.2.3 en win32.

    
respondido por el MarkU
1

He ejecutado el código:

channel = 3
channel = str(channel)

volts= 22
volts = str(volts)

current = 2.3
current = str(current)

selchannel = 'CH'+ channel
mypass = 'APPL ' + selchannel + ','

mypass = mypass + volts + ','

mypass = mypass + current

print (mypass)

A través de:

  

Python 2.6.1 (r261: 67515, 24 de junio de 2010, 21:47:49)
  [GCC 4.2.1 (Apple Inc. compilación 5646)] en darwin

Se imprimió

APPL CH3,22,2.3

Lo que hubiera esperado (y The Photon se planteó como un problema en un comentario), y no es exactamente lo mismo que Python, que imprime APPL CH3, 22, 2.3

¿Qué versión de Python estás usando? Parece que podría ser Python 3.

¿Podrías hacer el experimento de ejecutar dev.write('APPL CH3,22,2.3') e informar de nuevo?

Mi sospecha es que Python está interpretando cadenas de caracteres en algún lugar. Sin embargo, no puedo imaginar por qué eso debería importarle a la fuente de alimentación.

    
respondido por el gbulmer

Lea otras preguntas en las etiquetas