我正在向直流电压发生器发出SCPI
命令来设置和测量电压,如下所示:
power_manager.write("VOLTage 3,(@1)") #Set 3 Volts to channel 1
power_manager.write("OUTPut:STATe ON,(@1)") #Switch ON channel 1
power_manager.ask("MEAS:VOLT? (@1)") # Measure the voltage on channel 1
乐器中有四个通道,因此' @1
'意味着第一个渠道。
在第一条指令中,我将3伏设置为通道1。 而不是硬编码我想将设置电压传递给函数,因此我通过串联生成字符串,如下所示:
set_voltage = 3 #Passed as function argument
chan_1_command_string = [ '"', 'VOLTage ', str(set_voltage), ',' , '(@1)','"']
chan_1_command = ''.join('{0}'.format(w) for w in chan_1_command_string)
print chan_1_command
我可以看到chan_1_command
的打印方式与" VOLTage 3,(@1)
"相同。但是当我运行此代码而不是硬编码时,仪器会发送不同的响应并拒绝编程设置的电压。
我认为这不是一个工具问题,但Python
的一些问题因此被认为可以在此论坛中发布。欢迎任何投入或替代方案。
答案 0 :(得分:2)
您的方法与原始字符串之间存在细微差别。
在您的方法中,字符串实际上是用单引号封装的,最终结果是您向硬件发送了2个"
。
而不是以V
开头的命令,您的命令字符串以"V
开头:
>>> i = [ '"', 'VOLTage ', str(3), ',' , '(@1)','"']
>>> ''.join(i)
'"VOLTage 3,(@1)"'
^----------------^
要解决这个问题,您可以稍微简化一下代码并使用相同的字符串模板,并为变量占位符,如下所示:
>>> i = "VOLTage {0},(@1)"
>>> i.format(3)
'VOLTage 3,(@1)'
注意如何只有一组引号封装整个字符串。