在 Windows/C++ 上控制 USB TMC 设备的最简单方法

Easiest way to control USB TMC device on Windows/C++

我正在开发通过 USB 与 Tektronix TDS2002 示波器交互的 C++/Qt 应用程序。示波器显示为 "USB Test and Measurement device (IVI)"。

目前我使用示波器供应商提供的 TekVISA 库。它可以工作,但它很大、很旧、有故障并且维护不善。因此我想绕过库并直接连接设备。

到目前为止我已经找到了这个简单的库:https://github.com/xyphro/WinUsbTmc这正是我要找的,但它使用 libusb,需要安装一些设备过滤器,此外建议使用更多的开发工具比客户解决方案。你有这方面的经验吗?

在 Windows/C++/Qt 中与 USB 测试和测量设备交互的最简单方法是什么?

感谢您的建议:)

  1. 您需要一个 USB driver。我的示波器使用此 VISA 包中包含的 driver(driver 可以很容易地提取):http://www.keysight.com/main/software.jspx?cc=CZ&lc=eng&nid=-11143.0.00&id=2504667&pageMode=CV 我假设所有 USB TMC 设备都可以使用相同的 driver,但我无法检查这个。

  2. USB driver 可以通过标准 Windows 函数访问。这个论坛上的人真的很亲密: https://forum.tek.com/viewtopic.php?f=568&t=137573 and also this document was very useful: http://www.ivifoundation.org/downloads/Class%20Specifications/Ivi-6%202_USBTMC_2010-03-23.doc

  3. 您不能直接向 OSC 写入命令 - 您发送和接收的数据有一定的 header 必须采用正确的格式,否则示波器会忽略该消息。在这个简单的库中查看读写实现:https://github.com/xyphro/WinUsbTmc 我没有使用这个库,因为它使用了使用某种设备过滤器的 libusb 库,我个人不喜欢这个概念(此外我有真正的工作driver).

  4. 你读到的资料也很简单header。为确保在输入数据上很好地适应 header 结构,您应该首先刷新输入缓冲区。然后您发出读取请求(使用写入命令 - 请参阅上面的 WinUsbTmc 库),最后您收到数据并在其开头放置 header。

我希望这对某些人有所帮助:)

问候

klasyc