如何在测量过程中将数据存储在 Keithley2400 缓冲区中并通过 rs232 检索?
Posted
技术标签:
【中文标题】如何在测量过程中将数据存储在 Keithley2400 缓冲区中并通过 rs232 检索?【英文标题】:How to store data in Keithley2400 buffer during measurements and retrieve through rs232? 【发布时间】:2020-03-15 21:34:29 【问题描述】:我正在尝试将 IV 测量(源电流、检测电压)存储到 Keithley2400 缓冲区中,并将测量数据(电压和电流)检索到我的 python 程序变量“数据”中。
rm = pyvisa.ResourceManager()
connected_list=rm.list_resources()
print(connected_list) # list[0] is RS-232 reference
Ki2400 = rm.open_resource(connected_list[0])
Ki2400.read_termination = '\r'
Ki2400.timeout=5000
print(Ki2400.query('*IDN?'))
Ki2400.write('*RST')
Ki2400.write(':sens:func:conc off')
Ki2400.write(':sour:func current')
Ki2400.write(":sens:func 'volt:dc'")
Ki2400.write(':SENS:VOLT:NPLC 0.01')
Ki2400.write(':sens:volt:prot 30')
Ki2400.write(':source:current:start 1e-12')
Ki2400.write(':source:current:stop 100e-3')
#Ki2400.write(':source:current:step 4e-4')
Ki2400.write(':source:sweep:points 500')
Ki2400.write(':source:current:mode sweep')
Ki2400.write(':sour:swe:rang auto')
Ki2400.write(':sour:swe:spac log')
Ki2400.write(':trig:coun 500')
Ki2400.write(':sour:del 0.1')
Ki2400.write('output on')
Ki2400.write('read?')
data=Ki2400.read()
Ki2400.write(':outp off')
但是这会产生以下错误:
VisaIOError: VI_ERROR_ASRL_OVERRUN (-1073807252): An overrun error occurred during transfer. A character was not read from the hardware before the next character arrived.
我不确定我是否正在对缓冲区中的存储进行编码并正确读取它。任何帮助将不胜感激
【问题讨论】:
【参考方案1】:我尝试查找错误,并且能够在National Instruments' website 上找到一些线程,并且您的缓冲区似乎太小或者您的阅读速度不够快。 This thread from GitHub 详细介绍了一些您可以用来增加缓冲区大小的方法,因此您需要以下内容:
from visa import constants
rm.visalib.set_buffer(Ki2400.session, constants.VI_IO_IN_BUF, 20)
rm.visalib.set_buffer(Ki2400.session, constants.VI_IO_OUT_BUF, 20)
在代码的顶部。或者,也许你可以改变
Ki2400.write('read?')
data=Ki2400.read()
进入
data = Ki2400.query('read?')
因为这可能会读得稍微快一些。
【讨论】:
以上是关于如何在测量过程中将数据存储在 Keithley2400 缓冲区中并通过 rs232 检索?的主要内容,如果未能解决你的问题,请参考以下文章
在不创建存储过程的情况下,如何在 Oracle 中将多行连接成一行? [复制]
如何在 laravel 5.5 迁移中将 DB::unprepared() 用于 mysql 函数和存储过程