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

问题描述

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

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

在尝试编写一个类来自动确定 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\1
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 路径中查找项目吗?

enter image description here

解决方法

我无法想象这些设备没有序列号。

抱歉,您确实用这些 Prolific 筹码中了头奖。显然,它们发货时没有写序列号。较旧的设备甚至没有写入唯一序列号的位置(请参阅 here)。

如果幸运的话,您的芯片将属于 newer 类型,您应该能够使用 Prolific 的 tool 自己编写序列号。

如果这不是您的解决方案(我想也许这些是客户的产品,您必须征得他们的许可)也许您可以调整 pyserial 以吞下和清理您得到的那些数字(无论它们是什么) .

如果你看code那应该不是很困难...

我曾经有过一些这样的多产桥,但不幸的是,我找不到其中任何一个,所以以上所有只是道听途说。不管怎样,我希望你觉得它有帮助。

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...