末端设备的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

最低0.47元/天 解锁文章
1949

被折叠的 条评论
为什么被折叠?



