我正在尝试从excel / vba控制台式万用表(GW Instek GDM-8251A)。 我找不到协议的描述,所以我需要对其进行逆向工程。
通信方法是usb上串行的。
所以我在VBA中加载了以下页面中的模块,其中提供了使用windows API与COM端口通信的功能。
http://www.thescarms.com/vbasic/commio.aspx
推荐的内容因此计划是打开提供的DMMVIEWER应用程序并监听进出设备的流量。
然而问题是,当我运行CommOpen函数时,它本身调用CreateFile win32 API,如果DMMVIEWER已经在运行,我会收到以下错误。
确切的参数如下
CreateFile(strPort, GENERIC_READ Or _
GENERIC_WRITE, 0, ByVal 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
或者恰好这个
CreateFile( "COM4", -1073741824 , 0 , 0 3 ,128 ,0)
这会返回以下错误。
COM Error: Error (5): CommOpen (CreateFile) - Access is denied.
我可以选择在usb捕获模式下使用wireshark,但是所有USB开销都使得了解底层协议变得更加困难。
另外,从excel / vba执行此操作可以更轻松地尝试发送数据并查看会发生什么。
所以我的问题是这个。如何以非独占读取模式打开COM端口,以便我可以嗅探串行流量?
谢谢!
我计划将关于协议和VBA代码的发现发布到sigrok.org项目BTW。
(顺便说一下,我试过freeserialanalyzer.com,但是它的试用期限非常有限,仅限于5次捕获,这甚至不足以正确配置捕获,此软件也非常昂贵,我甚至找不到价格,可能就像800美元。我也尝试过realterm,它可以将串行流保存到文本中,但是嗅探现有连接需要一个我找不到的特殊驱动程序,显然需要捐赠。我尝试过portmon但捕获选项仍然存在变灰了)