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

Posted

技术标签:

【中文标题】在 Windows/C++ 上控制 USB TMC 设备的最简单方法【英文标题】:Easiest way to control USB TMC device on Windows/C++ 【发布时间】:2016-04-27 15:10:38 【问题描述】:

我正在开发通过 USB 与泰克 TDS2002 示波器交互的 C++/Qt 应用程序。示波器显示为“USB 测试和测量设备 (IVI)”。

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

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

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

感谢您的建议:)

【问题讨论】:

【参考方案1】:

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

    可以通过标准 Windows 函数访问 USB 驱动程序。这个论坛上的人真的很亲密: https://forum.tek.com/viewtopic.php?f=568&t=137573 这个文档也很有用:http://www.ivifoundation.org/downloads/Class%20Specifications/Ivi-6%202_USBTMC_2010-03-23.doc

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

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

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

关于

klasyc

【讨论】:

以上是关于在 Windows/C++ 上控制 USB TMC 设备的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章

信域安全云网产品架构

使用 maven 和 talend P2 构建多个作业以将其部署到 TMC

TMC2160步进电机驱动芯片

如何高效地玩转多级缓存

一个牛逼的多级缓存实现方案

一款牛逼的多级缓存架构设计方案