Python 通过 TCP/IP 读取串行 (RS-232) 数据

标签 python sockets serial-port pyserial

我正在使用 Moxa NPort 5110 串行至以太网适配器通过 TCP/IP 连接将串行数据传输到我的计算机的端口 4001。

我能够在localhost:4001上创建套接字连接来接收数据。问题是我无法使用这些数据,因为它不干净,它包含 RS-232 位

这是我用来创建套接字连接并读取不干净数据的代码:

import socket 
host = '' 
port = 4001 
backlog = 5 
size = 1024 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host,port)) 
s.listen(backlog) 
while 1: 
    client, address = s.accept() 
    data = client.recv(size) 
    if data: 
        print(data)
    client.close()

然后我尝试使用pyserial建立套接字连接并让pyserial解释数据。代码:

import serial
ser = serial.serial_for_url("socket://localhost:4001/logging=debug")
data = ser.read(8)
if data:
    print(data)
    ser.flushOutput()
ser.close()

当我使用此代码时,我收到一个ConnectionRefusedError

关于如何建立套接字连接并使用 pyserial 读取数据有什么建议吗?

最佳答案

我经常使用 Moxa N-Ports,每当垃圾数据到达 TCP 套接字时,都是因为 N-port 的串行端口与您连接的串行设备之间的串行设置不匹配( *)。确保两个 RS-232 连接设备的设置完全相同。

对您的评论进行评论:这与 TCP/IP 监听器错误解释数据无关,而是与 N 端口的 UART 配置错误有关。例如,当 N 端口设置为接收停止位,但串行设备没有发送它时,它会感到困惑并通过 TCP/IP 链路设置垃圾数据。这同样适用于计算机上的 native 串行端口。

(*) 其他可能的罪魁祸首当然是电气问题,如干扰或不正确的接地。

关于Python 通过 TCP/IP 读取串行 (RS-232) 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26803825/

相关文章:

sockets - 带有 Golang 的蓝牙 RFCOMM 套接字

java - 通过 GSM 调制解调器播放 WAV 文件

python - 算法过程缓慢

python - 将 UNC 存储在 JSON 中并加载到字典中

sockets - 获取关闭事件处理程序内套接字的 IP 地址

php - Laravel 5.2 与 socket.io 和 redis 私有(private)消息实时聊天

Python bool 逻辑链

python - 在列上使用 `split` 太慢 - 如何获得更好的性能?

c# - 从 USB 串行端口读取时,SerialPort.BaseStream.ReadAsync 丢弃或扰乱字节

java - 找不到串口