如何在 Python 中访问串行 (RS232) 端口?

2025年1月5日 | 阅读 5 分钟

RS232 端口是一种串行端口,用于一种标准通信协议,该协议也用于定义串行通信系统的电气和物理特性。RS232,也称为 Recommended Standard 232,最初由电子工业协会 (EIA) 于 1960 年开发,已成为计算机通信中一种流行且广泛使用的协议。此帖子用于在两个设备之间传输数据,通常用于短距离通信。RS232 使用单端信号,这意味着数据通过单根线发送。

RS232 端口的工作原理

RS232 通过一根线从一个设备向另一个设备发送信号。信号以一系列电压水平的形式发送,这些电压水平表示正在传输数据。这些电压信号可以是正的或负的,以零伏为参考点。RS232 中包含一个时钟信号,该信号同步两个设备之间的数据传输。

RS232 端口的用途是什么?

RS232 用于与计算机通信,例如将计算机连接到调制解调器或打印机。RS232 也用于工业自动化,其中传感器连接到 RS232,其他设备连接到控制系统。

RS232 端口的优点

  1. RS232 端口的主要优点之一是这些端口简单易用且易于实现,使其成为许多应用中的流行协议。
  2. 该端口的另一个优点是它是一个成熟的标准,使其能够与不同设备连接并支持该协议。
  3. RS232 端口支持全双工通信,可实现即时数据传输和接收。

RS232 端口的缺点

  1. 此端口的主要缺点是其范围有限。这些端口设计用于短距离通信,范围限制不超过 50 英尺。
  2. 这些端口使用单端信号,容易受到噪声和干扰的影响。
  3. 与其他现代数据传输协议相比,这些端口是慢速通信协议。
  4. 通信需要每台设备一根电缆,这给大规模安装带来了困难。

不同类型的 RS232 电缆

如今有不同类型的 RS232 电缆,包括直通电缆、零调制解调器电缆和交叉电缆。最常见的 RS232 电缆是直通电缆,用于将 DTE 设备连接到 DCE 设备。通过零调制解调器电缆连接两个 DTE 设备,而通过交叉电缆连接两个 DCE 设备。

如何选择正确的 RS232 电缆

选择正确的 RS232 电缆非常重要,需要牢记一些关键点,以确保选择的电缆符合需求。以下是一些关键点。

  1. 在选择适合工作目的的电缆时。应考虑电缆的长度。当电缆长度很长时,RS232 信号可以很快发送,信号可能会衰减或丢失。因此,选择适合每种需求的正确长度的电缆非常重要。
  2. 选择正确的 RS232 电缆的第二个原因是取决于其连接器类型,包括 DB9、DB25 和 RJ45 连接器。选择 RS232 电缆时,请确保连接器易于设备使用。
  3. 屏蔽是选择正确 RS232 电缆的主要因素,它容易受到 EMI 和射频干扰的影响,这些干扰会造成信号衰减或丢失的问题。选择的电缆经过适当屏蔽,可以减少信号损耗并降低干扰风险。
  4. 选择正确的 RS232 电缆时,应正确接线,因为它们的接线方式不同,包括直通接线和零调制解调器接线。
  5. 电线的质量应来自信誉良好的制造商。如果选择劣质电线,则可能容易发生故障或信号丢失,从而导致令人沮丧。

在 Python 中访问串行 RS232 端口

pyserial 模块用于在 Python 中访问串行端口;win32、OSX、Linux、BSD、Jython 和 IronPython 有许多可用的串行端口扩展。

以下是一些特性

  1. 通过 Python 属性,可以访问端口。
  2. 端口支持不同的字节大小、停止位、奇偶校验和流控制。
  3. 这可以与接收超时一起或不带接收超时工作。
  4. pyserial 模块中的文件 100% 完全用 Python 编写。
  5. 安装该端口以传输二进制数据。

让我们看看如何使用 pip 安装 pyserial。打开命令提示符并输入以下命令

让我们看看代码

代码

输出

 
Failed to open serial port COM1: could not open port 'COM1': FileNotFoundError(2, 'The system cannot find the file specified.', None, 2)

说明

在上面的代码中,导入了所需的模块,即 pyserial 模块。定义了端口名称、波特率和读取操作的超时等配置。在 try-except 块中,使用 serial 函数读取端口,如果端口读取成功,则打印成功消息,否则打印未找到端口并终止程序的失败消息。如果找到端口,则通过端口发送数据。write 方法用于发送数据,read 方法用于接收数据。发送和接收数据后,关闭串行端口。

结论

RS232 端口用于串行传输数据,并且是全双工连接。pyserial 模块用于在 Python 中访问该端口。