如何区分相同的USB串行转换器?

时间:2019-04-08 09:45:50

标签: python serial-port

我有2条相同的USB到串行适配器电缆(非常类似于this one),用于在Ubuntu和某些RS232设备下连接台式机。

我开发了python软件来试用这些设备。

我需要找到一种方法来识别我连接的2个适配器中的哪个。

我了解python的serial.tools.list_ports.comports()函数,但是两个适配器的所有设置都完全相同(请参见下面的捕获)。 device除外,但它可能会根据插入顺序而改变。

enter image description here

如何更改某些设置的字段以使两个适配器在Python上都可以区分?例如,可以写我自己的serial_number吗?

2 个答案:

答案 0 :(得分:1)

要解决此问题,Linux中有一些通往串行设备的替代路径。 有一个 /dev/serial/by-id//dev/serial/by-path 变体来访问您的设备。

答案 1 :(得分:1)

如果这总是用于特定的串行设备,则通常的方法是使用udev程序在/ dev中为您创建符号链接。进行此操作的方式有很多,可以根据所插入的物理端口来选择,也可以基于设备的属性(例如序列号)来完成。

所有基于FTDI的设备都具有与之关联的序列号,但是由于您的设备是多产的,因此它们没有序列号,因此这会变得有些困难。但是,由于我们可以使用udev根据插入位置创建符号链接,因此应执行以下操作(将其放入udev看到的文件中,例如/etc/udev/rules.d/80-my-converter .rules):

SUBSYSTEM=="usb", KERNELS=="2-1.8.3", SYMLINK+="device_1"
SUBSYSTEM=="usb", KERNELS=="2-1.8.1.3", SYMLINK+="device_2"

KERNELS参数将必须根据您将串行设备插入的确切位置进行更改,并且该参数将特定于您的系统。您可以通过运行以下命令在设备上获取udev参数的列表:

udevadm info -a -n /dev/ttyUSB2

This page了解有关编写udev规则的更多信息。