与 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
是我感兴趣的设备。我期待一个类似于 COM4
和 COM6
中的序列号来填充该字段,但它是空的。我试过查看 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起来不难。
我正在尝试与我们实验室中的一些科学测量设备进行通信,但遇到了一个奇怪的问题。我们使用 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
是我感兴趣的设备。我期待一个类似于 COM4
和 COM6
中的序列号来填充该字段,但它是空的。我试过查看 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起来不难。