与 Bronkhorst 质量流量传感器通信 - 设备没有序列号?

Communicating with a Bronkhorst Mass Flow Sensor - Device has no serial number?

我正在尝试与我们实验室中的一些科学测量设备进行通信,但遇到了一个奇怪的问题。我们使用 Bronkhorst Mass Flow Readers 来测量通过我们的管线的氦气量 运行。

注意 --- 我 运行 我的代码通过 git bash在 Windows 10 台机器上。硬件通过 RS232 电缆连接。我没有在 Linux 上对此进行测试,但如果有必要,我可以进行故障排除。由于硬件不同,我们被迫使用 Windows 10。如果 Linux 最终可行,我无论如何都需要找到一个 Windows 10 的解决方案。

在尝试编写 class 来自动确定 COM 端口时,我发现这些设备不输出序列号。下面的代码显示了我在做什么,我会暂时提供更多细节。

import serial
from serial.tools import list_ports
import pandas as pd


def identify_devices():

    a = list_ports.comports()
    df = pd.DataFrame()
    df['com_port'] = [port.name for port in a]
    df['vendor_id'] = [port.vid for port in a]
    df['product_id'] = [port.pid for port in a]
    df['serial_number'] = [port.serial_number for port in a]
    df['description'] = [port.description for port in a]
    df['location'] = [port.location for port in a]
    df['manufacturer'] = [port.manufacturer for port in a]
    df['product'] = [port.product for port in a]
    df['interface'] = [port.interface for port in a]
    df['hwid'] = [port.hwid for port in a]

    return df

代码还有很多,但基本上可以归结为这一点。输出结果如下。

In [18]: identify_devices()
Out[18]:
  com_port  vendor_id  product_id serial_number                              description location           manufacturer product interface                                     hwid
0     COM4     1027.0     24577.0      FTSTT5NA                   USB Serial Port (COM4)     None                   FTDI    None      None       USB VID:PID=0403:6001 SER=FTSTT5NA
1     COM1        NaN         NaN          None               Communications Port (COM1)     None  (Standard port types)    None      None                           ACPI\PNP0501
2     COM6     1027.0     24577.0     FTXEF0AHA                   USB Serial Port (COM6)     None                   FTDI    None      None      USB VID:PID=0403:6001 SER=FTXEF0AHA
3     COM5     1659.0      8963.0                Prolific USB-to-Serial Comm Port (COM5)      1-8               Prolific    None      None  USB VID:PID=067B:2303 SER= LOCATION=1-8

上面的

COM5 是我感兴趣的设备。我期待一个类似于 COM4COM6 中的序列号来填充该字段,但它是空的。我试过查看 RS232 电缆是否以某种方式阻止了序列号,但我空手而归。

我用多个 Bronkhorst 设备和 3 条不同的 RS232 电缆对此进行了测试,它们都会产生相同的问题。我无法想象这些设备没有序列号。

我正在寻找解决方案或从这里开始的方向。如果有任何问题或需要澄清,请告诉我,谢谢。



编辑:

我查看了 Windows 中的设备管理器,发现 parent 属性 中隐藏了 COM4 设备的正确序列信息。导航到 Bronkhorst 设备管理器中的相同位置,我发现布局有点不同。见下图。

这里有什么区别? pyserial 可以在 ROOT_HUB30 路径中查找项目吗?

I can't imagine the devices do not have serial numbers.

抱歉,您确实用多产筹码中了大奖。显然,他们发货时没有写序列号。较旧的设备甚至没有可以写入唯一序列号的位置(参见 here)。

如果幸运的话,你的筹码将是newer sort and you should be able to write a serial number yourself using Prolific's tool

如果这不是您的解决方案(我想也许这些是客户的产品,您必须征求他们的许可)也许您可以调整 pyserial 以吞下并清理这些数字(无论它们是什么)您正在获取。

如果看code应该不是很难...

我曾经有过一些这样的 Prolific 桥,但不幸的是,我找不到任何一个,所以以上所有只是道听途说。无论如何,希望对您有所帮助。

编辑: 我得到了一个 Prolific 桥,但不幸的是,这个是旧的 2303HXA 类型。没有 OTP 内存,甚至没有 EEPROM,所以写入序列号是不可能的(没有地方可以写入)。

但我可以确认您在 Windows 上遇到的相同行为(我什至收到一条警告,通知我该设备自 2012 年以来已被淘汰且不再受支持)。在 Linux 上也没有序列号。

我还注意到,如果你想写入较新的芯片,你需要为端口提供 6.5V,而不是从 USB 获得的正常 5V(Prolific 提供了一个适配器,但我想它应该DIY起来不难。