完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我试图将任意波形作为二进制块加载到带有pyvisa的33521a上。
我正在创建一个字符串并使用以下代码发送它:scpi_cmd =':SOURCE:DATA:ARB arbWave,#41668'val = 0而val scpi_cmd + = points [val] val = val + 1self.visa_instr.write(scpi_cmd) 其中points是一个字符串数组,包含我想要使用的浮点值的32位二进制表示。 但是当我运行这个时,我从波形发生器得到一个spci错误,说“-103:无效的分离器”。 根据样本数量,我有时也会得到“-124 std_decimalTooLong”。 我尝试使用samplesize * 4作为二进制块大小值,在此示例大小(417个样本)之间的任何地方发送最多83334个样本。任何建议都将受到赞赏。 以上来自于谷歌翻译 以下为原文 I am trying to load an arbitrary waveform as a binary block onto a 33521a with pyvisa. I am creating a string and sending it with the following code: scpi_cmd = ':SOURCE:DATA:ARB arbWave, #41668' val = 0 while val < len(points): scpi_cmd += points[val] val = val + 1 self.visa_instr.write(scpi_cmd) where points is an array of strings containing the 32 bit binary representation of the float values I want to use. However when I run this I get an spci error from the waveform generator saying "-103: invalid seperator". depending on the number of samples I will also sometimes get "-124 std_decimalTooLong". I have tried sending anywhere between something like the size of this example (417 samples) up to 83334 samples using the samplesize * 4 for the binary block size value. Any suggestions would be appreciated. |
|
相关推荐
4个回答
|
|
这是我要转换为数组点的文件。
以上来自于谷歌翻译 以下为原文 Here is the file I am converting to the array points. 附件
|
|
|
|
嗨,我尝试了上面实现的解决方案,我还添加了CSV文件。
我的arb是995点,但是我无法将arb加载到波形发生器。 -------------------------------------------------- -------------------------------------------------- ------------------------------------------- import visa import array import csv import os import time fgen = visa.instrument('TCPIP0 :: 10.216.92.48 :: inst0 :: INSTR')os.chdir(r'D:')array_row = ['0'] array_val = ['0']试试: file_csv = open('a1_25ms.csv','rb')try:line = file_csv.readline()finally:reader = csv.reader(file_csv)for reader中的行:array_row.append(row)file_csv.close()除外 IOError:打印(“无法读取文件”)for array_index,val in enumerate(array_row):array_val.append(array_row [array_index] [0])array_val = [index_defit()中的索引索引(如果index.isdigit()] array_val_float = map(float,array_val)del array_val_int [0] del array_val_int [0] for array_index,val in enumerate(array_val_int):array_val_float [array_index] = array_val_float [array_index] / max(array_val_float)#reset instrument fgen.write('* RST; * CLS; * OPC?')fgen.read()#create数据数组arrayData = array.array('f',array_val _int)#set to little-endian fgen.write('FORM:BORD SWAP')#clear volatile waveform fgen.write('SOUR1:DATA:VOL:CLE')#1)禁用终止字符和结束指示符,以便我们可以 #duse write()多次而不将数据发送到仪器fgen.term_chars =''fgen.send_end = False#2)写入binblock fgen.write的标题(':SOUR1:DATA:ARB arbWave,#22000' )#3)重新启用termchar,使其与数据一起发送fgen.term_chars =' n'fgen.send_end = True orale = arrayData.tostring()fgen.write(arrayData.tostring())time.sleep(5) )fgen.write('SYST:ERR?')instrument_err = fgen.read()print instrument_err #select任意波形fgen.write(':SOUR1:FUNC:ARB arbWave')#set为arb设置一些参数并输出 fgen.write('SOUR1:VOLT 5')fgen.write('SOUR1:VOLT:OFFS 2.5')fgen.write('OUTP1:LOAD 50')fgen.write('SOUR1:FUNC:ARB:SRAT 20000') fgen.write('SOUR1:FUNC ARB')fgen.write('OUTP1 ON')#check for errors fgen.write('SYST:ERR?')instrument_err = fgen.read()fgen .close()print instrument_err -------------------------------------------- -------------------------------------------------- ---------------我有以下错误:+882,“Arb:Segment too small”据我所知:SOUR1:DATA:ARB arbWave,#22000'第一个 数字表示字节数,以下数字表示arb文件中的字节数。 你知道我缺少的内存管理还有什么吗? 谢谢。 以上来自于谷歌翻译 以下为原文 Hi, I tried the solution implemented above , I also added the CSV file. My arb is 995 points, but I'm not able to load the arb to the waveform generator. ----------------------------------------------------------------------------------------------------------------------------------------------- import visa import array import csv import os import time fgen = visa.instrument('TCPIP0::10.216.92.48::inst0::INSTR') os.chdir(r'D:') array_row=['0'] array_val=['0'] try: file_csv= open('a1_25ms.csv', 'rb') try: line = file_csv.readline() finally: reader = csv.reader(file_csv) for row in reader: array_row.append(row) file_csv.close() except IOError: print("Can't read file ") for array_index ,val in enumerate(array_row): array_val.append(array_row[array_index][0]) array_val=[index for index in array_val if index.isdigit()] array_val_float=map(float,array_val) del array_val_int[0] del array_val_int[0] for array_index, val in enumerate(array_val_int): array_val_float[array_index]=array_val_float[array_index]/max(array_val_float) #reset instrument fgen.write('*RST;*CLS;*OPC?') fgen.read() #create array of data arrayData = array.array('f',array_val_int) #set to little-endian fgen.write('FORM:BORD SWAP') #clear volatile waveforms fgen.write('SOUR1:DATA:VOL:CLE') #1) disable termination characters and end indicators so that we can # use write() multiple times without sending the data to the instrument fgen.term_chars = '' fgen.send_end = False #2) write the header for the binblock fgen.write(':SOUR1:DATA:ARB arbWave,#22000') #3) re-enable the termchar so its sent with the data fgen.term_chars = 'n' fgen.send_end = True orale=arrayData.tostring() fgen.write(arrayData.tostring()) time.sleep(5) fgen.write('SYST:ERR?') instrument_err = fgen.read() print instrument_err #select the arbitrary waveform fgen.write(':SOUR1:FUNC:ARB arbWave') #set some parameters for the arb and output it fgen.write('SOUR1:VOLT 5') fgen.write('SOUR1:VOLT:OFFS 2.5') fgen.write('OUTP1:LOAD 50') fgen.write('SOUR1:FUNC:ARB:SRAT 20000') fgen.write('SOUR1:FUNC ARB') fgen.write('OUTP1 ON') #check for errors fgen.write('SYST:ERR?') instrument_err = fgen.read() fgen.close() print instrument_err ------------------------------------------------------------------------------------------------------------- I have the following error: +882,"Arb: Segment too small" As far as I know in : SOUR1:DATA:ARB arbWave,#22000' The first digit it is to indicate the number of bytes , and the following number the number of bytes in the arb file. Do you know what else in memory management I am missing. Thanks. |
|
|
|
根据您拥有的型号33500/33600,arb的最小点数为8或16.因此,如果您的点数少于8个(336个中的16个),则可能是您的问题。
以上来自于谷歌翻译 以下为原文 Depending what model you have 33500/33600 the minimum number of points for an arb is 8 or 16. So if you have less than 8 points(16 in 33600), that is likely your issue. |
|
|
|
4864165sas 发表于 2019-7-30 08:28 非常感谢您的帖子! 确实这就是问题所在。 谢谢! 以上来自于谷歌翻译 以下为原文 Many thanks for your post! Indeed this was the problem. Thank you! |
|
|
|
只有小组成员才能发言,加入小组>>
1033 浏览 0 评论
2278 浏览 1 评论
2065 浏览 1 评论
1937 浏览 5 评论
2808 浏览 3 评论
804浏览 1评论
关于Keysight x1149 Boundary Scan Analyzer
589浏览 0评论
N5230C用“CALC:MARK:BWID?”获取Bwid,Cent,Q,Loss失败,请问大佬们怎么解决呀
685浏览 0评论
2472浏览 0评论
1525浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-21 17:33 , Processed in 1.162760 second(s), Total 48, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号