首页 > 解决方案 > Win32api用于excel VBA中的串行通信

问题描述

我有数据采集设备,我想从中提取信息。我在 Python 3.5 中开始了一个小项目,使用 pyserial 与设备通信。我可以发送命令和接收数据。

import serial
ser = serial.Serial()
ser.port = 'COM1'
ser.baudrate = 9600
ser.parity = PARITY_NONE
ser.timeout=.5
ser.open()
ser.write(b'#02\r')
print(ser.readline())
ser.close()

这会发送一个命令来检索缓冲区中的数据,当我使用 readline 命令时,我会拉入数据。

b'>-999999-999999-999999-999999                     -999999\r'

我创建了一个 Excel 表来托管数据表和测试标准,我在这些标准上判断我们机器的性能。这最初是用于手动用户输入,但我决定尝试看看是否可以直接在 excel 中自动执行此操作。我浏览了几个网页,找到了几家要求支付代码费用的公司等等。我终于确定了The Scarms所做的工作,它使用 WIN32API 处理串行 I/O 与原始 mscomm32.ocx司机。

我已经能够将他的文件带入我的项目,并使用示例代码开始。我可以发送一条消息,并通过我正在通信的设备进行视觉验证,但我没有从我的终端数据采集设备得到任何回复。

strData = "#02\r"
lngSize = Len(strData)
lngStatus = CommWrite(intPortID, strData)

变量 strData 是一个字符串。使用 pyserial 发送消息时,它的前缀是“b”(据我所知),它表示在通过串行端口发送之前将其编码为位。

我一直在尝试查看从上面链接提供的代码中添加到 VBA 的 modCOMM 代码,但我似乎根本无法获得输入。我是否使用 WIN32API 错误地发送了信息?

如何通过总线正确发送此命令以获得来自终端设备的响应?

有问题的终端设备是 Advantech ADAM 4017+。

标签: python-3.xvbaexcelserial-portpyserial

解决方案


推荐阅读