完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨,是:DIGitize用于从作用域远程获取数据的唯一命令?
我们有一个实验,我们试图以高达10Hz的触发频率(连接到示波器的硬件触发)采集波形。 当触发频率增加到10Hz时,我们正在丢失一些这些波形,因为:Digitize命令需要很长时间。 :DIGitize之后是:WAVeform:DATA? 在C代码的循环中。 但是,如果我不使用:DIGitize并且只发送:WAVeform:DATA ?,没有数据丢失,但随后采集发生与触发无关。 当然可以在我的代码中远程轮询触发器寄存器以确定何时触发,但这或多或少是依赖于软件的触发器。 是否有其他命令或方法等待范围端的触发器,然后传输数据而不使用:DIGitize,因为这似乎需要太长时间清除缓冲区,停止采集等。我将不胜感激任何帮助或想法 。 非常感谢提前编辑:mulligan252于2014年5月13日凌晨2:06 以上来自于谷歌翻译 以下为原文 Hi, Is :DIGitize the only command to use to acquire data remotely from a scope? We have an experiment where we are trying to acquire waveforms at a trigger frequency up to 10Hz (hardware trigger connected to the scope). We are loosing some of these waveforms as the trigger frequency increases to 10Hz because the :Digitize command takes so long . :DIGitize is followed by :WAVeform:DATA? in a loop in C code. If however I don't use :DIGitize and just send :WAVeform:DATA?, there is no loss of data but then the acquisitions happen independent of the trigger. It is of course possible to poll the trigger register remotely in my code to determine when a trigger occurs but then this is more or less a software dependent trigger. Is there some other command or method to wait for a trigger on the scope side and then transfer the data without using :DIGitize as this seems to take too long clearing the buffers, stopping the acquisition etc. I would appreciate any help or ideas for this. Many thanks in advance Edited by: mulligan252 on May 13, 2014 2:06 AM |
|
相关推荐
4个回答
|
|
1)您没有说明您使用的示波器型号或系列。
2)你没有说你试图捕获和保存多少数据3)你没有说你用什么媒体来传输数据(USB,LAN,RS-232等)4)你不要 不要说你正在使用的编程环境(VBA,Visual C / C ++,MATLAB,Python,LabView等)。 5)你没有说你用于传输的格式(BYTE,WORD,ASCII等)6)你没有说明你正在调用什么类型的驱动程序(签证,套接字等)以上所有都将有 对你的结果有一些影响。 那就是说 - 根据Infiniium系列手册,DIGITIZE是使用示波器的最快方式。 它是一个内部宏,它结合了RUN和等待完成。 对于其他范围家庭,答案可能不同。 - 我怀疑你能够以10Hz的速率触发和卸载数据,除非你使用的是快速介质(Gbit LAN),使用正确的协议(可能是HISLIP),以及非常浅的走线深度。 我在Python和MATLAB中做了一些基准测试,并且在C / C ++中看到过一些基准测试,并且在将捕获的数据从作用域内存中拉出并转换为可转换格式时会产生一定的开销。 ASCII将是最慢的,BYTE将是最快的(转移,但不一定要转换),但最不准确。 WORD是最好的折衷方案,但请注意,您还需要转移Preamble以了解这些位的含义(对于BYTE也是如此)。 - 我的大部分测试都是使用局域网完成的。 一些发现:GBit比100Mbit快,套接字(通常)比Visa快,隔离LAN比共享LAN快,新型号的范围比旧型号快,直接连接LAN比通过一个或多个交换机更快,台式机 (通常)比笔记本电脑快。 有关您正在做的事情的更多信息可能会有用。 免责声明:为了获得更可靠的响应,您应该考虑致电当地的安捷伦技术呼叫中心。 安捷伦论坛在“可用”的基础上进行监控,并不一定是解决技术问题的最快方式。 以上来自于谷歌翻译 以下为原文 1) You don't indicate what model or family of scopes you are using. 2) You don't say how much data you are trying to capture and save 3) You don't say anything about what medium you are using to transfer the data (USB, LAN, RS-232, etc) 4) You don't say what programming environment you are using (VBA, Visual C/C++, MATLAB, Python, LabView, etc). 5) You don't say what format you are using for transfer (BYTE, WORD, ASCII, etc) 6) You don't indicate what type of drivers you are invoking (Visa, Sockets, etc) All of the above will have some effect on your results. That said... - DIGITIZE, according to the manual for the Infiniium family, is the fastest way of using the scope. It is an internal macro that combines a RUN with a wait for completion. For other scope families, the answer may be different. - I doubt that you will be able to trigger and unload data at a 10Hz rate, unless you are using a fast medium (Gbit LAN), with the right protocol (possibly HISLIP), and a very shallow trace depth. I have done some benchmarks in Python and MATLAB, and seen some in C/C++, and there is a certain amount of overhead in getting the captured data pulled out of scope memory and converted into a transferable format. ASCII will be the slowest, BYTE will be the fastest (to transfer, but not necessarily to convert), but least accurate. WORD is the best compromise, but note that you will also need to transfer the Preamble to understand what the bits mean (This is true of BYTE, as well). - Most of my testing was done using LAN. Some findings: GBit is faster than 100Mbit, Sockets are (usually) faster than Visa, Isolated LAN is faster than Shared LAN, Newer models of scope are faster than older models, Direct connect LAN is faster than going through 1 or more switches, Desktops are (usually) faster than laptops. More information about what you are doing might be useful. Al Disclaimer: For more reliable response, you should consider calling your local Agilent Technical Call Center. The Agilent Forums are monitored on an "as available" basis, and aren't necessarily the fastest way to get technical questions answered. |
|
|
|
nvywyerwer 发表于 2019-2-21 20:00 嗨,感谢您的回复1)我正在使用Infiniium 9000系列示波器2)我正在尝试捕获250,000个数据点3)我使用的媒体是共享LAN 4)我使用的编程语言是C和 在Linux环境中。 5)目前使用BYTE格式,但我已经尝试了所有三种格式。 我的程序是实时创建和保存原始BYTE文件并远程保存。 然后,在采集会话之后离线完成这些原始文件的转换和处理。 6)我在低级别进行通信,而不使用任何受支持的库,只使用套接字。 我有一个发生器,它输出一个信号,反复改变每个硬件触发的频率。 这就像时间戳,我可以查看处理后的波形数据,看看我要丢失任何数据的频率模式。 触发频率也从1 Hz变化到10 Hz。 当触发频率为10 Hz时,我将失去触发/捕获。 问题是,如果我不使用DIGitize并通过调用以下方式继续传输波形数据:WAVeform:DATA? 从我在循环中的C代码,我没有丢失任何数据,但后来我收到太多因为它不依赖于触发器。 例如,当触发器为1 Hz时,我将每秒接收22次相同的信号。 我假设DIGitize命令在获取新数据之前等待下一个触发器。 这是真的? 如果我不使用DIGitize并在我的代码中远程轮询触发器寄存器等待触发器然后调用:WAVeform:DATA? 转移数据,我不会失去任何东西。 那么如果需要花费很多时间来完成DIGitize的真正目的呢? DIGitize清除波形缓冲区并开始采集直到完成,然后停止任何采集。 收购为什么要停止? 是否有很多波形缓冲器可以填满每次采集? 再次感谢您的回复,非常感谢任何帮助或想法。 以上来自于谷歌翻译 以下为原文 Hi, and thanks for your reply 1) I am using an Infiniium 9000 series scope 2) I am trying to capture 250,000 points of data 3) The medium I am using is shared LAN 4) The programming language that I am using is C and in the Linux environment. 5) Currently using BYTE format but I have tried all three. My program is creating and saving raw BYTE files in real- time and saving them remotely. The conversion and processing of these raw files then is of course done off-line after the acquisition session. 6) I am communicating at a low- level without using any supported libraries and just using sockets. I have a generator which outputs a signal which changes frequency on every hardware trigger repeatedly. That way it is like time stamping and I can view the processed waveform data after to see the pattern of frequencies to observe if I am loosing any data. The trigger frequency also changes from 1 to 10 Hz. When the trigger frequency is at 10 Hz, I am loosing triggers/captures. The thing is, if I don't use DIGitize and just keep transferring the waveform data by calling :WAVeform:DATA? from my C code in a loop, I am not loosing any data , but then I am receiving too much because it is not trigger dependent . For example when the trigger is at 1 Hz, I would be receiving the same signal 22 times per second. I assume the DIGitize command waits for the next trigger before acquiring the new data. Is this true? If I don't use DIGitize and just poll the trigger register remotely in my code waiting for a trigger and then call :WAVeform:DATA? to transfer the data, I am not loosing anything. So what is really the purpose of DIGitize here if it takes so much time to complete? DIGitize clears the waveform buffers and starts the acquisition until it is complete, then stops any acquisitions. Why should the acquisition stop? Is there not many waveform buffers that can fill up on every acquisition? Thanks again for the reply and any help or ideas are much appreciated. |
|
|
|
1)确保您的示波器具有最新的FW。
如果它正在运行XP,那是4.20.something,但你应该升级到Win7。 如果它运行Win7,最新的是4.60.something。 Win7 / 4.60 SW比WinXP / 4.20 SW快。 2),3)您是否能够获得此吞吐量是值得怀疑的。 250K点是500K数据(WORD,不要使用字节),这是4Mbits乘10 /秒是40Mbits /秒。 在专用的Gbit连接上,它是可能的,但是边缘的。 在共享连接上,如果只有一个交换机(并且它是一个好的交换机),使用CAT5e或CAT6电缆,并且几乎没有竞争流量,它可能会工作。 在100Mbit LAN上,即使在专用连接上,也没有办法。 我已经测试了许多不同网络拓扑的吞吐量,并且看到了25:1的速度差异。 4)示波器捕获8位数据,并将其线性化为16位,以保证准确性。 使用WORD格式将获得最佳结果。 使用BYTE,范围将其截断为8位。 在此过程中,您将得到丢失的代码和加倍的代码(2个电压给出相同的结果)。 确保示波器处于“触发”模式,并在通道上显示信号,告知您频率何时发生变化。 刚做:WAVeform:DATA? 会给你不确定的结果,可能会一遍又一遍地给你相同的数据。 您需要以某种方式与DUT同步。 我和实验室里那个正在优化这些东西的人交谈过,他说:DIG紧随其后:WAV:DATA? 是最快的方式。 只有一个波形缓冲区。 范围捕获,停止,然后处理,并可能传输数据。 如果您处于自由运行模式,只显示(而不是传输)数据,则有2个缓冲区并且它们是乒乓。 他们这样做是为了提高屏幕更新率,内存控制器(也可以为显示器进行数据缩减)可以处理它。 如果您不需要“连续”捕获和传输,则可以使用分段模式。 使用默认的20M深度,示波器将在填满之前捕获80个250K段,所有时间戳都已加上时间戳,您可以卸载它。 人 以上来自于谷歌翻译 以下为原文 1) Make sure your scope has the latest FW. If it's running XP, that's 4.20.something, but you should upgrade to Win7. If it's running Win7, the latest is 4.60.something. The Win7/4.60 SW is faster than the WinXP/4.20 SW. 2), 3) It's doubtful that you will be able to get this throughput. 250K Points is 500K of data ( in WORD, DON'T USE BYTE), which is 4Mbits times 10/second is 40Mbits/second. On a dedicated Gbit connection, it's possible, but marginal. On a shared connection, it might work, if there's only a single switch(and it's a good one), with CAT5e or CAT6 cables, and little competing traffic. On 100Mbit LAN, even on a dedicated connection, there's no way. I have tested throughput on a lot of different network topologies, and seen 25:1 speed differences. 4) The scope captures 8 bit data, and linearizes it to 16 bit, for accuracy. The best results will come from using the WORD format. Using BYTE, the scope truncates it back to 8 bits. In the process, you will end up with missing codes and doubled codes (2 voltages giving the same result). Make sure the scope is in 'Triggered' mode, and on the channel with the signal that tells you when the frequency changes. Just doing :WAVeform:DATA? will give you indeterminate results, and may just give you the same data over and over again. You need to synchronize with the DUT in some way. I have talked to the guy in the lab who is optimizing this stuff, and he says :DIG followed by :WAV:DATA? is the fastest way. There is only one waveform buffer. The scope captures, stops, then processes, and possibly transfers, the data. If you are in free run mode, only displaying (and not transferring) data, then there are 2 buffers and they ping-pong. They do this to improve screen update rate, and the memory controller (which also does data reduction for the display) can handle it. If you don't need 'continuous' capture and transfer, you can use Segmented mode. With the default 20M depth, the scope will capture 80 250K segments, all timestamped, before it fills up, and you can unload it. Al |
|
|
|
nvywyerwer 发表于 2019-2-21 20:24 现在我不使用:DIG,而是在使用查询触发购买后等待波形缓冲区满:ADER? 然后使用以下方式获取数据:WAV:DATA? 。 这样,我成功地能够以10 Hz的频率卸载250 KB的数据(目前使用BYTE模式,因为我们并不太关心准确性),数千个触发器没有任何损失。 那么使用:DIG不是最快的方法吗? 我们现在希望尝试同时捕获多个频道,看看它是如何进行的。 在示波器上捕获多个通道的最佳方法/命令是什么? 每个通道都有单独的缓冲区吗? 在触发器上选择多功能并保存所有波形时,示波器究竟是如何通过GUI保存多个通道的? 我试图在我的代码中实现相同的功能。 谢谢编辑:mulligan252于2014年5月16日4:16 AM编辑:mulligan252于2014年5月16日上午6:36 以上来自于谷歌翻译 以下为原文 Right now I am not using :DIG but instead waiting for the waveform buffer to be full after a trigger buy using query :ADER? and then getting the data by using :WAV:DATA? . This way I am successfully able to unload 250 KB of data (using BYTE mode at present as we are not too concerned about accuracy) at 10 Hz with thousands of triggers without any loss. So is this proof that using :DIG is not the fastest way? We now wish to try and capture more than one channel at the same time and see how it goes. What is the best way/ commands to capture multiple channels on the oscilloscope? Is there a separate buffer for each channel? How exactly does the scope save more than one channel for example via the GUI when selecting multipurpose on trigger and save all waveforms? I am trying to implement the same in my code. Thanks Edited by: mulligan252 on May 16, 2014 4:16 AM Edited by: mulligan252 on May 16, 2014 6:36 AM |
|
|
|
只有小组成员才能发言,加入小组>>
1238 浏览 0 评论
2352 浏览 1 评论
2163 浏览 1 评论
2029 浏览 5 评论
2913 浏览 3 评论
983浏览 1评论
关于Keysight x1149 Boundary Scan Analyzer
713浏览 0评论
N5230C用“CALC:MARK:BWID?”获取Bwid,Cent,Q,Loss失败,请问大佬们怎么解决呀
813浏览 0评论
1240浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 05:42 , Processed in 1.438098 second(s), Total 82, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号