从已打开的COM(串口)端口读取?

时间:2017-01-17 03:28:09

标签: excel-vba serial-port reverse-engineering vba excel

我正在尝试从excel / vba控制台式万用表(GW Instek GDM-8251A)。 我找不到协议的描述,所以我需要对其进行逆向工程。

通信方法是usb上串行的。

所以我在VBA中加载了以下页面中的模块,其中提供了使用windows API与COM端口通信的功能。

http://www.thescarms.com/vbasic/commio.aspx

以前SO thread

推荐的内容

因此计划是打开提供的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但捕获选项仍然存在变灰了)

0 个答案:

没有答案