MicroPython ESP32 UART Modbus 监听与解析

末端设备的RS485接在A+B-总线上,监听PLC主站与从站们的字节流,通过帧头(自定义为modbus站号+功能码)相等判断通信正常。

UART监听Modbus并打印HEX字符串,主站从站的问答帧头相等则认为通信正常,否则报通信故障给平台;后继还想:如果总线寂静1秒钟,判断总线故障了,接替PLC做主站轮询从站们。

问deepseek然后实验初步成功了。

uart.py

'''
串口透传 VSP-TCPC <--> TCPS-UART-RS485
UART1/2=RS485 P23 P22 9600 8N1
'''
import machine, time, binascii
from machine import UART
from time import sleep_ms
'''
UART1默认timeout=0,只要有接收bytes,内核poll就产生POLLIN事件,这导致接收的信息不完整且内核poll多次产生事件。
timeout=50ms或其他合理延时(视波特率和bytes信息长短由公式确定),目的是等待缓冲区信息接收完整后,内核poll再产生事件。
设置超时简单,检测结束符号?
UART(1,baudrate=9600,bits=8,parity=None,stop=1,tx=22,rx=23,txbuf=256,rxbuf=256,timeout=50,timeout_char=0,irq=0)
'''
# uart1 = UART(1, tx=22, rx=23, baudrate=9600, timeout=20)
uart = UART(2, tx=17, rx=16, baudrate=9600, timeout=10)
# 缓冲区存储接收到的数据
rx_buffer = bytearray()

def print_hex_data(data):
    """将字节数据转换为HEX字符串并打印"""
    hex_s
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值