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

2024-04-20 04:46:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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读取数据有什么建议吗?


Tags: 数据代码importclientlocalhosthostdatasize
1条回答
网友
1楼 · 发布于 2024-04-20 04:46:50

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

对您的评论进行评论:这与TCP/IP侦听器对数据的错误解释无关,而是与N端口的UART配置错误有关。例如,当N-port被设置为接收stopbits,但是串行设备没有发送它时,它将变得混乱,并通过TCP/IP链路设置垃圾数据。这同样适用于计算机上的本机串行端口。

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

相关问题 更多 >